diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 81a21d86a1..e941d59f1c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,4 +1,4 @@ # review automation, hopefully, so we don't have to toggle boxes on every one. # assign these always as reviewers -* @eqlabs/starknet +* @equilibriumco/starknet diff --git a/.github/actions/free-disk-space/action.yml b/.github/actions/free-disk-space/action.yml new file mode 100644 index 0000000000..3206be460c --- /dev/null +++ b/.github/actions/free-disk-space/action.yml @@ -0,0 +1,16 @@ +name: Free disk space +description: Remove unused pre-installed software to free up disk space + +runs: + using: composite + steps: + - name: Free disk space + shell: bash + run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf /usr/local/.ghcup + sudo rm -rf /usr/local/lib/android + sudo rm -rf /usr/share/swift + sudo rm -rf "$AGENT_TOOLSDIRECTORY" + sudo docker image prune --all --force diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 08bad38118..9fe0d84ad8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,7 +7,7 @@ on: pull_request: # Daily cron job used to clear and rebuild cache (https://github.com/Swatinem/rust-cache/issues/181). schedule: - - cron: '0 0 * * *' + - cron: "0 0 * * *" # Limits workflow concurrency to only the latest commit in the PR. concurrency: @@ -15,7 +15,26 @@ concurrency: cancel-in-progress: true jobs: + detect-changes: + runs-on: ubuntu-24.04 + outputs: + code: ${{ steps.filter.outputs.code }} + steps: + - uses: actions/checkout@v4 + - uses: dorny/paths-filter@v3 + id: filter + with: + filters: | + code: + - 'crates/**' + - '!**/*.md' + - 'Cargo.toml' + - 'Cargo.lock' + - '.github/workflows/**' + test-all-features: + needs: detect-changes + if: needs.detect-changes.outputs.code == 'true' runs-on: ubuntu-24.04 env: CARGO_TERM_COLOR: always @@ -23,12 +42,8 @@ jobs: LLVM_SYS_191_PREFIX: "/usr/lib/llvm-19" TABLEGEN_190_PREFIX: "/usr/lib/llvm-19" steps: - - name: Maximize build space - uses: easimon/maximize-build-space@v10 - with: - root-reserve-mb: "16384" - temp-reserve-mb: "3072" - uses: actions/checkout@v4 + - uses: ./.github/actions/free-disk-space - uses: rui314/setup-mold@v1 - uses: Swatinem/rust-cache@v2 with: @@ -53,14 +68,10 @@ jobs: rm -rf ~/.cargo/git - name: Compile pathfinder binary in release mode to check if integration testing cli is unavailable run: cargo build --release -p pathfinder --bin pathfinder -F p2p - - name: Compile pathfinder binary for the consensus integration tests - run: cargo build -p pathfinder -F p2p -F consensus-integration-tests --bin pathfinder - name: Compile unit tests with all features enabled run: cargo nextest run --cargo-profile ci-dev --all-targets --all-features --workspace --locked --no-run --timings - name: Run unit tests with all features enabled excluding consensus integration tests - run: timeout 10m cargo nextest run --cargo-profile ci-dev --no-fail-fast --all-targets --all-features --workspace --locked -E 'not test(/^test::consensus_3_nodes/)' - - name: Run consensus integration tests - run: PATHFINDER_CONSENSUS_TEST_DUMP_CHILD_LOGS_ON_FAIL=1 PATHFINDER_TEST_ENABLE_PORT_MARKER_FILES=1 timeout 10m cargo nextest run --test consensus -p pathfinder --features p2p,consensus-integration-tests --locked + run: timeout 10m cargo nextest run --cargo-profile ci-dev --no-fail-fast --all-targets --all-features --workspace --locked -E 'not test(/^test::consensus_[34]_nodes/)' --retries 2 - name: Store timings with all features enabled uses: actions/upload-artifact@v4 with: @@ -68,17 +79,55 @@ jobs: path: target/cargo-timings/ if-no-files-found: warn - test-default-features: + test-consensus: + needs: detect-changes + if: needs.detect-changes.outputs.code == 'true' runs-on: ubuntu-24.04 env: CARGO_TERM_COLOR: always steps: - - name: Maximize build space - uses: easimon/maximize-build-space@master + - uses: actions/checkout@v4 + - uses: ./.github/actions/free-disk-space + - uses: rui314/setup-mold@v1 + - uses: Swatinem/rust-cache@v2 + with: + save-if: ${{ (github.event_name == 'push' && github.ref == 'refs/heads/main') || github.event_name == 'schedule' }} + - uses: arduino/setup-protoc@v3 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + - uses: taiki-e/install-action@nextest + - name: Clear cache + if: github.event_name == 'schedule' + run: | + cargo clean + rm -rf ~/.cargo/registry + rm -rf ~/.cargo/git + - name: Compile feeder gateway binary for consensus integration tests + run: cargo build -p feeder-gateway -F small_aggregate_filters --bin feeder-gateway + - name: Compile pathfinder binary for consensus integration tests + run: cargo build -p pathfinder -F p2p -F consensus-integration-tests --bin pathfinder + - name: Run consensus integration tests + env: + APP_TEMP_DIR: ${{ runner.temp }} + run: PATHFINDER_TEST_ENABLE_MARKER_FILES=1 timeout 30m cargo nextest run --test consensus -p pathfinder --features p2p,consensus-integration-tests --locked --retries 2 -j 1 + - name: Store test artifacts for consensus integration tests + if: always() + uses: actions/upload-artifact@v4 with: - root-reserve-mb: "3072" - temp-reserve-mb: "3072" + name: consensus-integration-tests + include-hidden-files: true + path: ${{ runner.temp }}/consensus-integration-tests/ + if-no-files-found: warn + + test-default-features: + needs: detect-changes + if: needs.detect-changes.outputs.code == 'true' + runs-on: ubuntu-24.04 + env: + CARGO_TERM_COLOR: always + steps: - uses: actions/checkout@v4 + - uses: ./.github/actions/free-disk-space - uses: rui314/setup-mold@v1 - uses: Swatinem/rust-cache@v2 with: @@ -103,8 +152,10 @@ jobs: name: timings-default-features path: target/cargo-timings/ if-no-files-found: warn - + clippy: + needs: detect-changes + if: needs.detect-changes.outputs.code == 'true' runs-on: ubuntu-24.04 env: MLIR_SYS_190_PREFIX: "/usr/lib/llvm-19" @@ -137,7 +188,6 @@ jobs: cargo clippy --workspace --all-targets --locked -- -D warnings -D rust_2018_idioms cargo clippy --workspace --all-targets --all-features --locked --manifest-path crates/load-test/Cargo.toml -- -D warnings -D rust_2018_idioms - rustfmt: runs-on: ubuntu-24.04 steps: @@ -150,6 +200,8 @@ jobs: cargo +nightly fmt --all --manifest-path crates/load-test/Cargo.toml -- --check doc: + needs: detect-changes + if: needs.detect-changes.outputs.code == 'true' runs-on: ubuntu-24.04 env: RUSTDOCFLAGS: "-D warnings" @@ -173,7 +225,7 @@ jobs: - uses: baptiste0928/cargo-install@v3 with: crate: cargo-sort - version: "^2.0.1" + version: "~2.0.2" - run: | cargo sort --check --workspace @@ -186,6 +238,8 @@ jobs: files: . load_test: + needs: detect-changes + if: needs.detect-changes.outputs.code == 'true' runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 @@ -193,3 +247,21 @@ jobs: run: | cd crates/load-test cargo check + + required: + needs: + - test-all-features + - test-consensus + - test-default-features + - clippy + - rustfmt + - doc + - dep-sort + - typos + - load_test + if: ${{ !cancelled() }} + runs-on: ubuntu-24.04 + steps: + - name: On failure + if: always() && contains(needs.*.result, 'failure') + run: exit 1 diff --git a/CHANGELOG.md b/CHANGELOG.md index 8cb600f37b..6eb42bc268 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,11 +2,181 @@ All notable changes to this project will be documented in this file. -More expansive patch notes and explanations may be found in the specific [pathfinder release notes](https://github.com/eqlabs/pathfinder/releases). +More expansive patch notes and explanations may be found in the specific [pathfinder release notes](https://github.com/equilibriumco/pathfinder/releases). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.22.3-karnot.1] - 2026-05-02 + +### Changed + +- Ported Karnot-specific Pathfinder compatibility changes onto upstream Pathfinder 0.22.3. + +## [0.22.3] - 2026-04-20 + +### Changed + +- `starknet_getEvents` now returns `block_number` for events from pre-confirmed and pre-latest blocks. + +### Fixed + +- `starknet_estimateFee` and `starknet_simulateTransactions` rejecting transactions with a non-zero tip when the account balance could cover the fee. The maximum L2 gas bound now accounts for the tip, matching the blockifier's fee calculation (`max_amount * (max_price_per_unit + tip)`). + +## [0.22.2] - 2026-04-07 + +### Changed + +- The `blockifier` and `starknet_api` crates have been upgraded to 0.18.0-rc.1. + +### Added + +- Blockifier libfunc list used for compilation verification is now defaulting to `audited` and configurable with the new `--blockifier.libfunc-list` CLI option. + +## [0.22.1] - 2026-03-31 + +### Fixed + +- The running Bloom filter for block events is now correctly rebuilt after unexpected shutdowns when blockchain pruning is enabled. +- Preconfirmed classes are not downloaded because `get_class_by_hash` for `pending` is now mapped to `latest`. + +### Changed + +- The `proof` field in broadcasted invoke v3 transactions is now a base64-encoded byte blob (`Vec`) instead of base64-encoded packed `u32` values (`Vec`). This reflects the upstream change to use compressed proofs. +- The `blockifier` crate has been upgraded to 0.18.0-rc.1 (and its dependencies to match that). +- HTTP request bodies for `add_invoke_transaction` are compressed with `gzip` if the transaction contains a nonempty proof. Compression can be disabled in custom networks using the `gateway.compress-requests` CLI flag. + +## [0.22.0] - 2026-03-19 + +### Fixed + +- The pre-latest block (introduced in Starknet 0.14.0) is now reported with `PRE_CONFIRMED` finality + status instead of `ACCEPTED_ON_L2`. This aligns with the changes to block hash and commitment + calculation in Starknet 0.14.2, where the pre-latest block can no longer be treated as fully + accepted on L2. Affected RPC methods: + - `starknet_getTransactionReceipt` + - `starknet_getTransactionStatus` + - `starknet_subscribeEvents` + - `starknet_subscribeNewTransactionReceipts` + - `starknet_subscribeNewTransactions` + - `starknet_subscribeTransactionStatus` + +### Changed + +- The v10 JSON-RPC endpoint now supports final JSON-RPC v0.10.1 spec. +- `blockifier` has been upgraded to 0.18.0-dev.1, ensuring correctness of execution results on Starknet 0.14.2. + +## [0.22.0-beta.3] - 2026-03-11 + +### Fixed + +- `starknet_traceBlockTransactions` parameter `trace_flags` is not optional (as required by the spec). +- Starknet 0.14.2 blocks are now using the correct versioned constants. + +### Changed + +- The `--ethereum.url` option now requires a WebSocket URL (`ws://` or `wss://`). HTTP/HTTPS URLs are no longer automatically converted to WebSocket and will result in an error. +- The Pathfinder binary now has two subcommands: + - `node` - runs the Pathfinder node as before, serving JSON-RPC and syncing with the network. + This is the default subcommand and will run if no subcommand is passed. + - `compile` - compile a Sierra class (passed via `stdin`) to CASM (output to `stdout`). + +### Added + +- Forwarding gateway HTTP error 413 when handling `starknet_addDeclareTransaction`, `starknet_addDeployAccountTransaction` and `starknet_addInvokeTransaction`. +- Two new CLI options for the `node` subcommand: + - `compiler.max-memory-usage-mib` - maximum memory usage for the compiler process, in MiB. + - `compiler.max-cpu-time-secs` - maximum (active) CPU time for the compiler process, in seconds. +- Pathfinder is now polling for DNS changes for the feeder gateway and gateway host name. By default the host names are resolved every 60s and the HTTP client connection pool is re-created to force reconnecting to the new address. The interval is configurable with the new `--gateway.check-for-dns-updates-interval` CLI option. +- `starknet_getStorageAt` now returns the last update block (in addition to storage value) if the `INCLUDE_LAST_UPDATE_BLOCK` flag was set in its input. +- `starknet_getStateUpdate` now supports an address filter. + +## [0.22.0-beta.2] - 2026-02-16 + +### Fixed + +- JSON-RPC serialization of `INITIAL_READS` is not compliant with the specification. Pathfinder returns `storage_key` properties for storage reads instead of the `key` property required by the spec. +- `starknet_addInvokeTransaction` is not forwarding `proof_facts` property to the Starknet gateway. + +## [0.22.0-beta.1] - 2026-01-30 + +### Added + +- Added support for the "return initial reads" feature introduced in JSON-RPC version 0.10.1: + - Added `RETURN_INITIAL_READS` flag to `starknet_simulateTransactions` input simulation flags. + Only supported if JSON-RPC version is 0.10.0 or higher. + - Added a `trace_flags` field to `starknet_traceBlockTransactions` input. Currently the only available flag is `RETURN_INITIAL_READS`. + Only supported if JSON-RPC version is V10 or higher. + +- Preliminary support for JSON-RPC 0.10.1 `proof_facts` and `proof` transaction properties. + +### Changed + +- `starknet_simulateTransactions` now has a different response format based on whether or not + the `RETURN_INITIAL_READS` flag was set in the input: + 1. If the flag was not set, the response is identical to previous RPC versions (an array of transaction simulations). + 2. If the flag was set, the response is an object with two fields: + - "simulated_transactions" - an array of transaction simulations (previous RPC version output). + - "initial_reads" - an `INITIAL_READS` object, containing an aggregate of all initial reads for the simulated transactions. + +- `starknet_traceBlockTransactions` now has a different response format based on whether or not + the `RETURN_INITIAL_READS` flag was set in the input: + 1. If the flag was not set, the response is identical to previous RPC versions (an array of transaction traces). + 2. If the flag was set, the response is an object with two fields: + - "traces" - an array of transaction traces (previous RPC version output). + - "initial_reads" - an `INITIAL_READS` object, containing an aggregate of all initial reads for the traced transactions. + +## [0.21.5] - 2026-01-12 + +### Added + +- Support for `deflate`-compressed responses from the feeder gateway. + +### Fixed + +- Pathfinder stops syncing on networks where response compression has been enabled on the feeder gateway. + +## [0.21.4] - 2026-01-08 + +### Added + +- Support for gzip-compressed responses from the feeder gateway. +- The new `--rpc.native-execution-force-use-for-incompatible-classes` CLI option can be used to force use of native execution even for pre-1.7.0 Sierra classes (where fee calculation is known to be inaccurate). Use this flag at your own risk. + +### Changed + +- `blockifier` has been upgraded to 0.16.0-rc.3. + +## [0.21.3] - 2025-12-03 + +### Added + +- The new histogram metric `rpc_method_calls_duration_milliseconds` has been added to expose JSON-RPC method call latency data. + +### Changed + +- `blockifier` has been upgraded to 0.16.0-rc.2. +- Pathfinder no longer returns `event_commitment` and `transaction_commitment` values for Starknet blocks older than Starknet version 0.13.2. + +### Fixed + +- `starknet_traceTransaction` times out for some transactions because fetching transaction traces from the feeder gateway fails due to some unknown fields in the response. + +## [0.21.2] - 2025-11-27 + +### Changed + +- Pathfinder now serves the JSON-RPC 0.10.0 API on the `v0_10` routes. +- The size of the block trace cache is now configurable by the new `--rpc.block-trace-cache-size` CLI argument. + +## [0.21.1] - 2025-11-20 + +### Fixed + +- Pathfinder exits after receiving an internal server error from the feeder gateway. +- `starknet_estimateFee` and `starknet_simulateTransactions` fails if one of the transactions is using a class that has been declared by a simulated DECLARE transaction in the batch. +- Cairo Native is not working correctly with Docker images published on Docker Hub due to a linker error. + ## [0.21.0] - 2025-11-11 ### Added @@ -87,7 +257,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - The default JSON-RPC listen address has been changed to the IPv6 wildcard address in our Docker images. This avoids problems on IPv6-enabled hosts where `localhost` resolves to `::1`. - The default JSON-RPC version (served on the '/' route) has been changed to v08. - JSON-RPC `starknet_estimateFee` and `starknet_simulateTransactions` now use non-strict nonce checking when using the `SKIP_VALIDATE` flag. That is, the nonce value needs to be larger than the last used value but no exact match is required. -- `starknet_getTransactionStatus` now returns ACCEPTED_* only when that status is known locally, not when it's received from the gateway for an otherwise-unknown transaction. +- `starknet_getTransactionStatus` now returns ACCEPTED\_\* only when that status is known locally, not when it's received from the gateway for an otherwise-unknown transaction. - value of the `--sync.poll-interval` command-line option can now specify fractional seconds ### Fixed @@ -105,7 +275,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - All WebSocket API routes (served on `/ws`) are now deprecated and will be removed on the next release. Additionally, Pathfinder no longer supports `pathfinder_subscribe` and `pathfinder_unsubscribe` methods on these routes. - Some of the CLI options that are no longer needed have also been removed: - - `rpc.websocket.buffer-capacity` - `rpc.websocket.topic-capacity` @@ -122,14 +291,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Pathfinder now supports _syncing_ from Starknet 0.14.0. Support is still incomplete, execution and compilation of new classes will likely fail for new classes until a further upgrade. - Pathfinder now supports storing only the latest state of the blockchain history. This can be configured with the '--storage.blockchain-history' CLI option. - - Accepted values are: - - "archive" (default) – Full history of the blockchain is stored. - "N" – An integer specifying the number of historical blocks to store, in addition to the latest block (N + 1 blocks will be stored). - Affected JSON-RPC methods are: - - `starknet_call` - `starknet_estimateFee` - `starknet_estimateMessageFee` @@ -157,10 +323,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 b. The latest L2 block if it is behind the latest L1 checkpoint or no L1 checkpoints have been received by the node (practically unreachable) - `starknet_getTransactionStatus` now returns RECEIVED even when the gateway cannot find the transaction, provided the transaction was successfully sent by the responding node within the last 5 minutes. -- Pathfinder now allows the users to configure the number of historical messages to be streamed via the [webscoket API](https://eqlabs.github.io/pathfinder/interacting-with-pathfinder/websocket-api). This can be done using the `--rpc.websocket.max-history` CLI option. - +- Pathfinder now allows the users to configure the number of historical messages to be streamed via the [webscoket API](https://equilibriumco.github.io/pathfinder/interacting-with-pathfinder/websocket-api). This can be done using the `--rpc.websocket.max-history` CLI option. - Accepted values are: - - "unlimited" - All historical messages will be streamed. - "N" - An integer specifying the number of historical messages to be streamed. @@ -209,7 +373,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - `starknet_subscribeEvents` subscriptions stop sending notifications. -- Broken aggregate bloom filter migration has been updated to work properly. If you migrated from a database running in archived mode, please [re-download our latest snapshot](https://eqlabs.github.io/pathfinder/database-snapshots) and re-run the migrations. +- Broken aggregate bloom filter migration has been updated to work properly. If you migrated from a database running in archived mode, please [re-download our latest snapshot](https://equilibriumco.github.io/pathfinder/database-snapshots) and re-run the migrations. - `starknet_getStateUpdate` has `new_root` and `old_root` swapped. ### Changed @@ -883,7 +1047,6 @@ Users should not use this version. - `cairo-lang` upgraded to 0.11.2a0 - Subscription to `newHead` events via websocket using the method `pathfinder_subscribe_newHeads`, which can be managed by the following command line options - - `rpc.websocket`, which enables websocket transport - `rpc.websocket.capacity`, which sets the maximum number of websocket subscriptions per subscription type @@ -999,10 +1162,10 @@ Users should not use this version. ### Removed -- `--config` configuration option (deprecated in [v0.4.1](https://github.com/eqlabs/pathfinder/releases/tag/v0.4.1)) -- `--integration` configuration option (deprecated in [v0.4.1](https://github.com/eqlabs/pathfinder/releases/tag/v0.4.1)) -- `--sequencer-url` configuration option (deprecated in [v0.4.1](https://github.com/eqlabs/pathfinder/releases/tag/v0.4.1)) -- `--testnet2` configuration option (deprecated in [v0.4.1](https://github.com/eqlabs/pathfinder/releases/tag/v0.4.1)) +- `--config` configuration option (deprecated in [v0.4.1](https://github.com/equilibriumco/pathfinder/releases/tag/v0.4.1)) +- `--integration` configuration option (deprecated in [v0.4.1](https://github.com/equilibriumco/pathfinder/releases/tag/v0.4.1)) +- `--sequencer-url` configuration option (deprecated in [v0.4.1](https://github.com/equilibriumco/pathfinder/releases/tag/v0.4.1)) +- `--testnet2` configuration option (deprecated in [v0.4.1](https://github.com/equilibriumco/pathfinder/releases/tag/v0.4.1)) - `starknet_addDeployTransaction` as this is no longer an allowed transaction - RPC api version `0.1`, which used to be served on path `/rpc/v0.1` @@ -1083,4 +1246,4 @@ Users should not use this version. ## Ancient History -Older history may be found in the [pathfinder release notes](https://github.com/eqlabs/pathfinder/releases). +Older history may be found in the [pathfinder release notes](https://github.com/equilibriumco/pathfinder/releases). diff --git a/Cargo.lock b/Cargo.lock index 2137ded047..131e3785b9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "addchain" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2e69442aa5628ea6951fa33e24efe8313f4321a91bd729fc2f75bdfc858570" +checksum = "2e33f6a175ec6a9e0aca777567f9ff7c3deefc255660df887e7fa3585e9801d8" dependencies = [ "num-bigint 0.3.3", "num-integer", @@ -37,7 +37,7 @@ checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", - "cpufeatures", + "cpufeatures 0.2.17", ] [[package]] @@ -54,17 +54,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom 0.2.16", - "once_cell", - "version_check", -] - [[package]] name = "ahash" version = "0.8.12" @@ -79,9 +68,9 @@ dependencies = [ [[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", ] @@ -94,9 +83,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b17c19591d57add4f0c47922877a48aae1f47074e3433436545f8948353b3bbb" +checksum = "50ab0cd8afe573d1f7dc2353698a51b1f93aec362c8211e28cfd3948c6adba39" dependencies = [ "alloy-consensus", "alloy-contract", @@ -116,20 +105,20 @@ dependencies = [ [[package]] name = "alloy-chains" -version = "0.2.14" +version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf01dd83a1ca5e4807d0ca0223c9615e211ce5db0a9fd1443c2778cacf89b546" +checksum = "f4e9e31d834fe25fe991b8884e4b9f0e59db4a97d86e05d1464d6899c013cd62" dependencies = [ "alloy-primitives", "num_enum", - "strum 0.27.2", + "strum", ] [[package]] name = "alloy-consensus" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a0dd3ed764953a6b20458b2b7abbfdc93d20d14b38babe1a70fe631a443a9f1" +checksum = "7f16daaf7e1f95f62c6c3bf8a3fc3d78b08ae9777810c0bb5e94966c7cd57ef0" dependencies = [ "alloy-eips", "alloy-primitives", @@ -138,8 +127,9 @@ dependencies = [ "alloy-trie", "alloy-tx-macros", "auto_impl", + "borsh", "c-kzg", - "derive_more 2.0.1", + "derive_more", "either", "k256", "once_cell", @@ -148,14 +138,14 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "alloy-consensus-any" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9556182afa73cddffa91e64a5aa9508d5e8c912b3a15f26998d2388a824d2c7b" +checksum = "118998d9015332ab1b4720ae1f1e3009491966a0349938a1f43ff45a8a4c6299" dependencies = [ "alloy-consensus", "alloy-eips", @@ -167,9 +157,9 @@ dependencies = [ [[package]] name = "alloy-contract" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b19d7092c96defc3d132ee0d8969ca1b79ef512b5eda5c66e3065266b253adf2" +checksum = "7ac9e0c34dc6bce643b182049cdfcca1b8ce7d9c260cbdd561f511873b7e26cd" dependencies = [ "alloy-consensus", "alloy-dyn-abi", @@ -185,26 +175,28 @@ dependencies = [ "futures", "futures-util", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", + "tracing", ] [[package]] name = "alloy-core" -version = "1.4.1" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca96214615ec8cf3fa2a54b32f486eb49100ca7fe7eb0b8c1137cd316e7250a" +checksum = "23e8604b0c092fabc80d075ede181c9b9e596249c70b99253082d7e689836529" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", "alloy-primitives", + "alloy-rlp", "alloy-sol-types", ] [[package]] name = "alloy-dyn-abi" -version = "1.4.1" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdff496dd4e98a81f4861e66f7eaf5f2488971848bb42d9c892f871730245c8" +checksum = "cc2db5c583aaef0255aa63a4fe827f826090142528bba48d1bf4119b62780cad" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -213,7 +205,7 @@ dependencies = [ "itoa", "serde", "serde_json", - "winnow", + "winnow 0.7.15", ] [[package]] @@ -226,59 +218,74 @@ dependencies = [ "alloy-rlp", "crc", "serde", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "alloy-eip2930" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b82752a889170df67bbb36d42ca63c531eb16274f0d7299ae2a680facba17bd" +checksum = "9441120fa82df73e8959ae0e4ab8ade03de2aaae61be313fbf5746277847ce25" dependencies = [ "alloy-primitives", "alloy-rlp", + "borsh", "serde", ] [[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", + "borsh", + "serde", + "thiserror 2.0.18", +] + +[[package]] +name = "alloy-eip7928" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8222b1d88f9a6d03be84b0f5e76bb60cd83991b43ad8ab6477f0e4a7809b98d" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "borsh", "serde", - "thiserror 2.0.17", ] [[package]] name = "alloy-eips" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "305fa99b538ca7006b0c03cfed24ec6d82beda67aac857ef4714be24231d15e6" +checksum = "e6ef28c9fdad22d4eec52d894f5f2673a0895f1e5ef196734568e68c0f6caca8" dependencies = [ "alloy-eip2124", "alloy-eip2930", "alloy-eip7702", + "alloy-eip7928", "alloy-primitives", "alloy-rlp", "alloy-serde", "auto_impl", + "borsh", "c-kzg", - "derive_more 2.0.1", + "derive_more", "either", "serde", "serde_with", "sha2 0.10.9", - "thiserror 2.0.17", ] [[package]] name = "alloy-json-abi" -version = "1.4.1" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5513d5e6bd1cba6bdcf5373470f559f320c05c8c59493b6e98912fbe6733943f" +checksum = "e9dbe713da0c737d9e5e387b0ba790eb98b14dd207fe53eef50e19a5a8ec3dac" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -288,24 +295,24 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91676d242c0ced99c0dd6d0096d7337babe9457cc43407d26aa6367fcf90553" +checksum = "422d110f1c40f1f8d0e5562b0b649c35f345fccb7093d9f02729943dcd1eef71" dependencies = [ "alloy-primitives", "alloy-sol-types", - "http 1.3.1", + "http 1.4.0", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", ] [[package]] name = "alloy-network" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77f82150116b30ba92f588b87f08fa97a46a1bd5ffc0d0597efdf0843d36bfda" +checksum = "7197a66d94c4de1591cdc16a9bcea5f8cccd0da81b865b49aef97b1b4016e0fa" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -320,18 +327,18 @@ dependencies = [ "alloy-sol-types", "async-trait", "auto_impl", - "derive_more 2.0.1", + "derive_more", "futures-utils-wasm", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "alloy-network-primitives" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "223612259a080160ce839a4e5df0125ca403a1d5e7206cc911cea54af5d769aa" +checksum = "eb82711d59a43fdfd79727c99f270b974c784ec4eb5728a0d0d22f26716c87ef" dependencies = [ "alloy-consensus", "alloy-eips", @@ -342,36 +349,36 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "1.4.1" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "355bf68a433e0fd7f7d33d5a9fc2583fde70bf5c530f63b80845f8da5505cf28" +checksum = "de3b431b4e72cd8bd0ec7a50b4be18e73dab74de0dba180eef171055e5d5926e" dependencies = [ "alloy-rlp", "bytes", "cfg-if", "const-hex", - "derive_more 2.0.1", + "derive_more", "foldhash 0.2.0", - "hashbrown 0.16.0", - "indexmap 2.11.4", + "hashbrown 0.16.1", + "indexmap 2.13.0", "itoa", "k256", "keccak-asm", "paste", "proptest", "rand 0.9.2", + "rapidhash", "ruint", - "rustc-hash 2.1.1", + "rustc-hash 2.1.2", "serde", "sha3", - "tiny-keccak", ] [[package]] name = "alloy-provider" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7283b81b6f136100b152e699171bc7ed8184a58802accbc91a7df4ebb944445" +checksum = "bf6b18b929ef1d078b834c3631e9c925177f3b23ddc6fa08a722d13047205876" dependencies = [ "alloy-chains", "alloy-consensus", @@ -395,13 +402,13 @@ dependencies = [ "either", "futures", "futures-utils-wasm", - "lru 0.13.0", + "lru 0.16.3", "parking_lot 0.12.5", "pin-project", - "reqwest", + "reqwest 0.13.2", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", "url", @@ -410,9 +417,9 @@ dependencies = [ [[package]] name = "alloy-pubsub" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee7e3d343814ec0dfea69bd1820042a133a9d0b9ac5faf1e6eb133b43366315" +checksum = "5ad54073131e7292d4e03e1aa2287730f737280eb160d8b579fb31939f558c11" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -425,16 +432,16 @@ dependencies = [ "serde_json", "tokio", "tokio-stream", - "tower 0.5.2", + "tower 0.5.3", "tracing", "wasmtimer", ] [[package]] name = "alloy-rlp" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" +checksum = "e93e50f64a77ad9c5470bf2ad0ca02f228da70c792a8f06634801e202579f35e" dependencies = [ "alloy-rlp-derive", "arrayvec", @@ -443,20 +450,20 @@ dependencies = [ [[package]] name = "alloy-rlp-derive" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" +checksum = "ce8849c74c9ca0f5a03da1c865e3eb6f768df816e67dd3721a398a8a7e398011" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "alloy-rpc-client" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1154b12d470bef59951c62676e106f4ce5de73b987d86b9faa935acebb138ded" +checksum = "94fcc9604042ca80bd37aa5e232ea1cd851f337e31e2babbbb345bc0b1c30de3" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -466,12 +473,12 @@ dependencies = [ "alloy-transport-ws", "futures", "pin-project", - "reqwest", + "reqwest 0.13.2", "serde", "serde_json", "tokio", "tokio-stream", - "tower 0.5.2", + "tower 0.5.3", "tracing", "url", "wasmtimer", @@ -479,9 +486,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47ab76bf97648a1c6ad8fb00f0d594618942b5a9e008afbfb5c8a8fca800d574" +checksum = "4faad925d3a669ffc15f43b3deec7fbdf2adeb28a4d6f9cf4bc661698c0f8f4b" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -491,9 +498,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-any" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23cc57ee0c1ac9fb14854195fc249494da7416591dc4a4d981ddfd5dd93b9bce" +checksum = "3823026d1ed239a40f12364fac50726c8daf1b6ab8077a97212c5123910429ed" dependencies = [ "alloy-consensus-any", "alloy-rpc-types-eth", @@ -502,9 +509,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d7d47bca1a2a1541e4404aa38b7e262bb4dffd9ac23b4f178729a4ddc5a5caa" +checksum = "59c095f92c4e1ff4981d89e9aa02d5f98c762a1980ab66bec49c44be11349da2" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -518,14 +525,14 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "alloy-serde" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8468f1a7f9ee3bae73c24eead0239abea720dbf7779384b9c7e20d51bfb6b0" +checksum = "11ece63b89294b8614ab3f483560c08d016930f842bf36da56bf0b764a15c11e" dependencies = [ "alloy-primitives", "serde", @@ -534,9 +541,9 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33387c90b0a5021f45a5a77c2ce6c49b8f6980e66a318181468fb24cea771670" +checksum = "43f447aefab0f1c0649f71edc33f590992d4e122bc35fb9cdbbf67d4421ace85" dependencies = [ "alloy-primitives", "async-trait", @@ -544,47 +551,47 @@ dependencies = [ "either", "elliptic-curve", "k256", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "alloy-sol-macro" -version = "1.4.1" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3ce480400051b5217f19d6e9a82d9010cdde20f1ae9c00d53591e4a1afbb312" +checksum = "ab81bab693da9bb79f7a95b64b394718259fdd7e41dceeced4cad57cb71c4f6a" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "alloy-sol-macro-expander" -version = "1.4.1" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d792e205ed3b72f795a8044c52877d2e6b6e9b1d13f431478121d8d4eaa9028" +checksum = "489f1620bb7e2483fb5819ed01ab6edc1d2f93939dce35a5695085a1afd1d699" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", "const-hex", "heck 0.5.0", - "indexmap 2.11.4", + "indexmap 2.13.0", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.106", + "sha3", + "syn 2.0.117", "syn-solidity", - "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "1.4.1" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd1247a8f90b465ef3f1207627547ec16940c35597875cdc09c49d58b19693c" +checksum = "56cef806ad22d4392c5fc83cf8f2089f988eb99c7067b4e0c6f1971fc1cca318" dependencies = [ "alloy-json-abi", "const-hex", @@ -594,25 +601,25 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.106", + "syn 2.0.117", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "1.4.1" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "954d1b2533b9b2c7959652df3076954ecb1122a28cc740aa84e7b0a49f6ac0a9" +checksum = "a6df77fea9d6a2a75c0ef8d2acbdfd92286cc599983d3175ccdc170d3433d249" dependencies = [ "serde", - "winnow", + "winnow 0.7.15", ] [[package]] name = "alloy-sol-types" -version = "1.4.1" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70319350969a3af119da6fb3e9bddb1bce66c9ea933600cb297c8b1850ad2a3c" +checksum = "64612d29379782a5dde6f4b6570d9c756d734d760c0c94c254d361e678a6591f" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -622,23 +629,22 @@ dependencies = [ [[package]] name = "alloy-transport" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702002659778d89a94cd4ff2044f6b505460df6c162e2f47d1857573845b0ace" +checksum = "8098f965442a9feb620965ba4b4be5e2b320f4ec5a3fff6bfa9e1ff7ef42bed1" dependencies = [ "alloy-json-rpc", - "alloy-primitives", "auto_impl", "base64 0.22.1", - "derive_more 2.0.1", + "derive_more", "futures", "futures-utils-wasm", "parking_lot 0.12.5", "serde", "serde_json", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", - "tower 0.5.2", + "tower 0.5.3", "tracing", "url", "wasmtimer", @@ -646,64 +652,65 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6bdc0830e5e8f08a4c70a4c791d400a86679c694a3b4b986caf26fad680438" +checksum = "e8597d36d546e1dab822345ad563243ec3920e199322cb554ce56c8ef1a1e2e7" dependencies = [ "alloy-json-rpc", "alloy-transport", - "reqwest", + "itertools 0.14.0", + "reqwest 0.13.2", "serde_json", - "tower 0.5.2", + "tower 0.5.3", "tracing", "url", ] [[package]] name = "alloy-transport-ws" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686219dcef201655763bd3d4eabe42388d9368bfbf6f1c8016d14e739ec53aac" +checksum = "ec3ab7a72b180992881acc112628b7668337a19ce15293ee974600ea7b693691" dependencies = [ "alloy-pubsub", "alloy-transport", "futures", - "http 1.3.1", + "http 1.4.0", "rustls", "serde_json", "tokio", - "tokio-tungstenite 0.26.2", + "tokio-tungstenite 0.28.0", "tracing", + "url", "ws_stream_wasm", ] [[package]] name = "alloy-trie" -version = "0.9.1" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3412d52bb97c6c6cc27ccc28d4e6e8cf605469101193b50b0bd5813b1f990b5" +checksum = "3f14b5d9b2c2173980202c6ff470d96e7c5e202c65a9f67884ad565226df7fbb" dependencies = [ "alloy-primitives", "alloy-rlp", - "arrayvec", - "derive_more 2.0.1", + "derive_more", "nybbles", "serde", "smallvec", + "thiserror 2.0.18", "tracing", ] [[package]] name = "alloy-tx-macros" -version = "1.0.38" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bf39928a5e70c9755d6811a2928131b53ba785ad37c8bf85c90175b5d43b818" +checksum = "d69722eddcdf1ce096c3ab66cf8116999363f734eb36fe94a148f4f71c85da84" dependencies = [ - "alloy-primitives", - "darling 0.21.3", + "darling 0.23.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -723,9 +730,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstream" -version = "0.6.21" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" dependencies = [ "anstyle", "anstyle-parse", @@ -738,55 +745,55 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "anstyle-parse" -version = "0.2.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.10" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "anyhow" -version = "1.0.100" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "apollo_compilation_utils" -version = "0.16.0-rc.1" +version = "0.18.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89a5aeb60f9dd6b11414a637d314bd4aa5e9090c014e18205b412971996e8885" +checksum = "a67f3331354ca1f12d0e020ca49f4e7186b7608de0839e47c721282fd5729dd8" dependencies = [ "apollo_infra_utils", - "cairo-lang-sierra 2.12.3", + "cairo-lang-sierra 2.17.0-rc.4", "cairo-lang-starknet-classes", - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.17.0-rc.4", "rlimit", "serde", "serde_json", @@ -798,9 +805,9 @@ dependencies = [ [[package]] name = "apollo_compile_to_native" -version = "0.16.0-rc.1" +version = "0.18.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942ff41fac7691b52372d28462d877a9a64c7c28d66d4217c9e288c89eebd6c0" +checksum = "aa476e7f3f471ac5097214a8e5ca79947762bbafb0bb9303359705524c20c70e" dependencies = [ "apollo_compilation_utils", "apollo_compile_to_native_types", @@ -812,9 +819,9 @@ dependencies = [ [[package]] name = "apollo_compile_to_native_types" -version = "0.16.0-rc.1" +version = "0.18.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e1832a7d46b878c9d79a4f8686423916f8a4edc35fbfce2ddb98f7ec5f2d8f" +checksum = "2166124835b4bcea3d494e4e9e3fbde72d28e1e2c9b67cde6d950337f7e1cc12" dependencies = [ "apollo_config", "serde", @@ -823,9 +830,9 @@ dependencies = [ [[package]] name = "apollo_config" -version = "0.16.0-rc.1" +version = "0.18.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ada910d739cb2ac2ec59766ea956de736f87965b2de60799feedf0de46f7d57a" +checksum = "adcc050ef9fa92477c3543998d4208bd948afb42b859044e3fbbc2e432e28402" dependencies = [ "apollo_infra_utils", "clap", @@ -833,7 +840,7 @@ dependencies = [ "itertools 0.12.1", "serde", "serde_json", - "strum_macros 0.25.3", + "strum", "thiserror 1.0.69", "tracing", "url", @@ -842,78 +849,96 @@ dependencies = [ [[package]] name = "apollo_infra_utils" -version = "0.16.0-rc.1" +version = "0.18.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "780c31485db92467019b1ba6cb0a4596c883030238f36ee1e6205fd65b6415e0" +checksum = "ccac84e014c1f56323caa62db9d69555433fa0cce29abf59c6add18ddc2448de" dependencies = [ "apollo_proc_macros", "assert-json-diff", - "colored 3.0.0", + "colored 3.1.1", "num_enum", + "regex", "serde", "serde_json", "socket2 0.5.10", - "strum 0.25.0", + "strum", "tempfile", "thiserror 1.0.69", "tokio", "tracing", + "tracing-subscriber", + "url", ] [[package]] name = "apollo_metrics" -version = "0.16.0-rc.1" +version = "0.18.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e403e211be2ef8f5af561ee982c4d99291af022d93a63c3b5e983cdcdf4c33a" +checksum = "779a12979955eae309c494d9736f38cb64c723ed24aa457fb9b045fb89ef1026" dependencies = [ - "indexmap 2.11.4", - "metrics 0.24.2", + "apollo_time", + "indexmap 2.13.0", + "metrics", "num-traits", "paste", "regex", + "strum", ] [[package]] name = "apollo_proc_macros" -version = "0.16.0-rc.1" +version = "0.18.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde929210d699f0fce6c8e4068881a48304c5ff1f09e6607962725d1d7bd015d" +checksum = "d3f4078d3e701d15584fabbe3573b302a56e28eeec24ae6c5e7362d9bb5b1d81" dependencies = [ "lazy_static", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] -name = "aquamarine" -version = "0.6.0" +name = "apollo_sizeof" +version = "0.18.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f50776554130342de4836ba542aa85a4ddb361690d7e8df13774d7284c3d5c2" +checksum = "96b3080899396e91925dd0eff941108e2880cd6983d748573f9de1d725b5163b" +dependencies = [ + "apollo_sizeof_macros", + "starknet-types-core", +] + +[[package]] +name = "apollo_sizeof_macros" +version = "0.18.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62c16ee6e9dda1fe74aabd406e2e46e467940e6884db18602c6edb6cf48699a" dependencies = [ - "include_dir", - "itertools 0.10.5", - "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] -name = "ark-ec" -version = "0.4.2" +name = "apollo_time" +version = "0.18.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +checksum = "fade79dc45af880ec43aefc347cb3c276a802bc9a15e34fe94ecfdba2dd14538" dependencies = [ - "ark-ff 0.4.2", - "ark-poly 0.4.2", - "ark-serialize 0.4.2", - "ark-std 0.4.0", - "derivative", - "hashbrown 0.13.2", + "chrono", +] + +[[package]] +name = "aquamarine" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f50776554130342de4836ba542aa85a4ddb361690d7e8df13774d7284c3d5c2" +dependencies = [ + "include_dir", "itertools 0.10.5", - "num-traits", - "zeroize", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] @@ -922,9 +947,9 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" dependencies = [ - "ahash 0.8.12", + "ahash", "ark-ff 0.5.0", - "ark-poly 0.5.0", + "ark-poly", "ark-serialize 0.5.0", "ark-std 0.5.0", "educe 0.6.0", @@ -1022,7 +1047,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -1060,20 +1085,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.106", -] - -[[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" -dependencies = [ - "ark-ff 0.4.2", - "ark-serialize 0.4.2", - "ark-std 0.4.0", - "derivative", - "hashbrown 0.13.2", + "syn 2.0.117", ] [[package]] @@ -1082,7 +1094,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" dependencies = [ - "ahash 0.8.12", + "ahash", "ark-ff 0.5.0", "ark-serialize 0.5.0", "ark-std 0.5.0", @@ -1091,46 +1103,24 @@ dependencies = [ "hashbrown 0.15.5", ] -[[package]] -name = "ark-secp256k1" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c02e954eaeb4ddb29613fee20840c2bbc85ca4396d53e33837e11905363c5f2" -dependencies = [ - "ark-ec 0.4.2", - "ark-ff 0.4.2", - "ark-std 0.4.0", -] - [[package]] name = "ark-secp256k1" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8bd211c48debd3037b48873a7aa22c3aba034e83388aa4124795c9f220b88c7" dependencies = [ - "ark-ec 0.5.0", + "ark-ec", "ark-ff 0.5.0", "ark-std 0.5.0", ] -[[package]] -name = "ark-secp256r1" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3975a01b0a6e3eae0f72ec7ca8598a6620fc72fa5981f6f5cca33b7cd788f633" -dependencies = [ - "ark-ec 0.4.2", - "ark-ff 0.4.2", - "ark-std 0.4.0", -] - [[package]] name = "ark-secp256r1" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cf8be5820de567729bfa73a410ddd07cec8ad102d9a4bf61fd6b2e60db264e8" dependencies = [ - "ark-ec 0.5.0", + "ark-ec", "ark-ff 0.5.0", "ark-std 0.5.0", ] @@ -1151,7 +1141,6 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ - "ark-serialize-derive 0.4.2", "ark-std 0.4.0", "digest 0.10.7", "num-bigint 0.4.6", @@ -1163,24 +1152,13 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" dependencies = [ - "ark-serialize-derive 0.5.0", + "ark-serialize-derive", "ark-std 0.5.0", "arrayvec", "digest 0.10.7", "num-bigint 0.4.6", ] -[[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "ark-serialize-derive" version = "0.5.0" @@ -1189,7 +1167,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -1233,9 +1211,6 @@ name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" -dependencies = [ - "serde", -] [[package]] name = "ascii-canvas" @@ -1252,7 +1227,7 @@ version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef1e3e699d84ab1b0911a1010c5c106aa34ae89aeac103be5ce0c3859db1e891" dependencies = [ - "term 1.2.0", + "term 1.2.1", ] [[package]] @@ -1267,7 +1242,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror 2.0.17", + "thiserror 2.0.18", "time", ] @@ -1279,7 +1254,7 @@ checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", "synstructure", ] @@ -1291,7 +1266,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -1310,27 +1285,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" -[[package]] -name = "async-attributes" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "async-channel" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" -dependencies = [ - "concurrent-queue", - "event-listener 2.5.3", - "futures-core", -] - [[package]] name = "async-channel" version = "2.5.0" @@ -1344,43 +1298,15 @@ dependencies = [ ] [[package]] -name = "async-executor" -version = "1.13.3" +name = "async-compression" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" +checksum = "d0f9ee0f6e02ffd7ad5816e9464499fba7b3effd01123b515c41d1697c43dad1" dependencies = [ - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", + "compression-codecs", + "compression-core", "pin-project-lite", - "slab", -] - -[[package]] -name = "async-fs" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8034a681df4aed8b8edbd7fbe472401ecf009251c8b40556b304567052e294c5" -dependencies = [ - "async-lock", - "blocking", - "futures-lite", -] - -[[package]] -name = "async-global-executor" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" -dependencies = [ - "async-channel 2.5.0", - "async-executor", - "async-io", - "async-lock", - "blocking", - "futures-lite", - "once_cell", + "tokio", ] [[package]] @@ -1401,55 +1327,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "async-lock" -version = "3.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" -dependencies = [ - "event-listener 5.4.1", - "event-listener-strategy", - "pin-project-lite", -] - -[[package]] -name = "async-net" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" -dependencies = [ - "async-io", - "blocking", - "futures-lite", -] - -[[package]] -name = "async-object-pool" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "333c456b97c3f2d50604e8b2624253b7f787208cb72eb75e64b0ad11b221652c" -dependencies = [ - "async-std", -] - -[[package]] -name = "async-process" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" -dependencies = [ - "async-channel 2.5.0", - "async-io", - "async-lock", - "async-signal", - "async-task", - "blocking", - "cfg-if", - "event-listener 5.4.1", - "futures-lite", - "rustix", -] - [[package]] name = "async-recursion" version = "1.1.1" @@ -1458,53 +1335,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", -] - -[[package]] -name = "async-signal" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" -dependencies = [ - "async-io", - "async-lock", - "atomic-waker", - "cfg-if", - "futures-core", - "futures-io", - "rustix", - "signal-hook-registry", - "slab", - "windows-sys 0.61.2", -] - -[[package]] -name = "async-std" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c8e079a4ab67ae52b7403632e4618815d6db36d2a010cfe41b02c1b1578f93b" -dependencies = [ - "async-attributes", - "async-channel 1.9.0", - "async-global-executor", - "async-io", - "async-lock", - "async-process", - "crossbeam-utils", - "futures-channel", - "futures-core", - "futures-io", - "futures-lite", - "gloo-timers", - "kv-log-macro", - "log", - "memchr", - "once_cell", - "pin-project-lite", - "pin-utils", - "slab", - "wasm-bindgen-futures", + "syn 2.0.117", ] [[package]] @@ -1526,15 +1357,9 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] -[[package]] -name = "async-task" -version = "4.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" - [[package]] name = "async-trait" version = "0.1.89" @@ -1543,7 +1368,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -1570,6 +1395,15 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", +] + [[package]] name = "atomic-waker" version = "1.1.2" @@ -1578,11 +1412,12 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "attohttpc" -version = "0.24.1" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9a9bf8b79a749ee0b911b91b671cc2b6c670bdbc7e3dfd537576ddc94bb2a2" +checksum = "16e2cdb6d5ed835199484bb92bb8b3edd526effe995c61732580439c1a67e2e9" dependencies = [ - "http 0.2.12", + "base64 0.22.1", + "http 1.4.0", "log", "url", ] @@ -1606,7 +1441,7 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -1616,51 +1451,46 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] -name = "axum" -version = "0.7.9" +name = "aws-lc-rs" +version = "1.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +checksum = "a054912289d18629dc78375ba2c3726a3afe3ff71b4edba9dedfca0e3446d1fc" dependencies = [ - "async-trait", - "axum-core 0.4.5", - "bytes", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "itoa", - "matchit 0.7.3", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "sync_wrapper", - "tower 0.5.2", - "tower-layer", - "tower-service", + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.39.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a25cf98105baa966497416dbd42565ce3a8cf8dbfd59803ec9ad46f3126399" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", ] [[package]] name = "axum" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18ed336352031311f4e0b4dd2ff392d4fbb370777c9d18d7fc9d7359f73871" +checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8" dependencies = [ - "axum-core 0.5.5", + "axum-core", "axum-macros", "base64 0.22.1", "bytes", "form_urlencoded", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "http-body-util", - "hyper 1.7.0", + "hyper 1.9.0", "hyper-util", "itoa", - "matchit 0.8.4", + "matchit", "memchr", "mime", "percent-encoding", @@ -1673,41 +1503,21 @@ dependencies = [ "sync_wrapper", "tokio", "tokio-tungstenite 0.28.0", - "tower 0.5.2", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "axum-core" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http 1.3.1", - "http-body 1.0.1", - "http-body-util", - "mime", - "pin-project-lite", - "rustversion", - "sync_wrapper", + "tower 0.5.3", "tower-layer", "tower-service", + "tracing", ] [[package]] name = "axum-core" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22" +checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" dependencies = [ "bytes", "futures-core", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "http-body-util", "mime", @@ -1726,7 +1536,7 @@ checksum = "604fde5e028fea851ce1d8570bbdc034bec850d157f7569d10f347d06808c05c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -1771,20 +1581,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" - -[[package]] -name = "basic-cookies" -version = "0.1.5" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67bd8fd42c16bdb08688243dc5f0cc117a3ca9efeeaba3a345a18a6159ad96f7" -dependencies = [ - "lalrpop 0.20.2", - "lalrpop-util 0.20.2", - "regex", -] +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bimap" @@ -1818,7 +1617,7 @@ version = "0.71.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -1827,9 +1626,9 @@ dependencies = [ "proc-macro2", "quote", "regex", - "rustc-hash 2.1.1", + "rustc-hash 2.1.2", "shlex", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -1856,12 +1655,6 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" -[[package]] -name = "bit-vec" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22" - [[package]] name = "bit-vec" version = "0.8.0" @@ -1870,15 +1663,15 @@ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitcoin-io" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" +checksum = "2dee39a0ee5b4095224a0cfc6bf4cc1baf0f9624b96b367e53b66d974e51d953" [[package]] name = "bitcoin_hashes" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" +checksum = "26ec84b80c482df901772e931a9a681e26a1b9ee2302edeff23cb30328745c8b" dependencies = [ "bitcoin-io", "hex-conservative", @@ -1892,9 +1685,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.4" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" [[package]] name = "bitvec" @@ -1937,9 +1730,9 @@ dependencies = [ [[package]] name = "blockifier" -version = "0.16.0-rc.1" +version = "0.18.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b33eff1e4bb8d60cc248781b3aeb87e61c0707f3fd3f483b78ce72bbc29e15c" +checksum = "d17e91934e751261cb3cfaf8fe3efe80cc431d8c386be67d3e701cda3c814552" dependencies = [ "anyhow", "apollo_compilation_utils", @@ -1948,21 +1741,21 @@ dependencies = [ "apollo_config", "apollo_infra_utils", "apollo_metrics", - "ark-ec 0.4.2", - "ark-ff 0.4.2", - "ark-secp256k1 0.4.0", - "ark-secp256r1 0.4.0", + "ark-ec", + "ark-ff 0.5.0", + "ark-secp256k1", + "ark-secp256r1", "blockifier_test_utils", "cached", - "cairo-lang-casm 2.12.3", + "cairo-lang-casm 2.17.0-rc.4", "cairo-lang-runner", "cairo-lang-starknet-classes", - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.17.0-rc.4", "cairo-native", "cairo-vm", "dashmap", - "derive_more 0.99.20", - "indexmap 2.11.4", + "derive_more", + "indexmap 2.13.0", "itertools 0.12.1", "keccak", "log", @@ -1979,55 +1772,27 @@ dependencies = [ "sha2 0.10.9", "starknet-types-core", "starknet_api", - "strum 0.25.0", - "strum_macros 0.25.3", + "strum", "thiserror 1.0.69", + "validator", ] [[package]] name = "blockifier_test_utils" -version = "0.16.0-rc.1" +version = "0.18.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13684e476726ef52254b9a80425b1e6cb32a15f417f19e2291656f01d203896e" +checksum = "fa7077372e5e198c7976bfda59443f68521040c05337b6f4e6f034d8f9f0b361" dependencies = [ "apollo_infra_utils", "cairo-lang-starknet-classes", - "expect-test", - "pretty_assertions", - "rstest 0.17.0", + "digest 0.10.7", "serde_json", + "sha2 0.10.9", "starknet-types-core", "starknet_api", - "strum 0.25.0", - "strum_macros 0.25.3", + "strum", "tempfile", - "tokio", "tracing", - "tracing-test", -] - -[[package]] -name = "blocking" -version = "1.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" -dependencies = [ - "async-channel 2.5.0", - "async-task", - "futures-io", - "futures-lite", - "piper", -] - -[[package]] -name = "bloomfilter" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c541c70a910b485670304fd420f0eab8f7bde68439db6a8d98819c3d2774d7e2" -dependencies = [ - "bit-vec 0.7.0", - "getrandom 0.2.16", - "siphasher", ] [[package]] @@ -2044,13 +1809,34 @@ dependencies = [ [[package]] name = "borsh" -version = "1.5.7" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" +checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a" dependencies = [ + "borsh-derive", + "bytes", "cfg_aliases", ] +[[package]] +name = "borsh-derive" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfcfdc083699101d5a7965e49925975f2f55060f94f9a05e7187be95d530ca59" +dependencies = [ + "once_cell", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "boxcar" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f64beae40a84da1b4b26ff2761a5b895c12adc41dc25aaee1c4f2bbfe97a6e" + [[package]] name = "bs58" version = "0.5.1" @@ -2062,9 +1848,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" +checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" dependencies = [ "memchr", "serde", @@ -2072,9 +1858,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "byte-slice-cast" @@ -2090,18 +1876,18 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.10.1" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" dependencies = [ "serde", ] [[package]] name = "c-kzg" -version = "2.1.5" +version = "2.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e00bf4b112b07b505472dbefd19e37e53307e2bfed5a79e0cc161d58ccd0e687" +checksum = "6648ed1e4ea8e8a1a4a2c78e1cda29a3fd500bc622899c340d8525ea9a76b24a" dependencies = [ "blst", "cc", @@ -2193,7 +1979,7 @@ version = "1.0.0-rc0" source = "git+https://github.com/starkware-libs/cairo?tag=v1.0.0-rc0#05867c82de42d5ee5cfa953dcca1cb826402f74b" dependencies = [ "cairo-lang-utils 1.0.0-rc0", - "indoc 2.0.6", + "indoc 2.0.7", "num-bigint 0.4.6", "num-traits", "serde", @@ -2207,7 +1993,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "076a07a68b7f4b3f04e0e23f1e4bee42358abab54929b7842b42108bdb76a164" dependencies = [ "cairo-lang-utils 1.1.1", - "indoc 2.0.6", + "indoc 2.0.7", "num-bigint 0.4.6", "num-traits", "serde", @@ -2216,12 +2002,12 @@ dependencies = [ [[package]] name = "cairo-lang-casm" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d1d84a85b59c753aa4a7f0c455a5c815e0aebb89faf0c8ab366b0d87c0bb934" +checksum = "5851c5a1f0feebbf29a2b1697629c071333a6cf3ad2a36be1edc4da2864cefe1" dependencies = [ - "cairo-lang-utils 2.12.3", - "indoc 2.0.6", + "cairo-lang-utils 2.17.0-rc.4", + "indoc 2.0.7", "num-bigint 0.4.6", "num-traits", "parity-scale-codec", @@ -2248,7 +2034,7 @@ dependencies = [ "cairo-lang-utils 1.0.0-alpha.6", "clap", "log", - "salsa", + "salsa 0.16.1", "thiserror 1.0.69", ] @@ -2272,7 +2058,7 @@ dependencies = [ "cairo-lang-utils 1.0.0-rc0", "clap", "log", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", "thiserror 1.0.69", ] @@ -2298,36 +2084,36 @@ dependencies = [ "cairo-lang-utils 1.1.1", "clap", "log", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", "thiserror 1.0.69", ] [[package]] name = "cairo-lang-compiler" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a5cbeb4e134cf29c63d18a235beae3f124bef2824ec45d09d6e18a0c334e509" +checksum = "9f7dfa6cff06eda927981b78acbf578711e66c528183f604a62b4d08b1420d0c" dependencies = [ "anyhow", - "cairo-lang-defs 2.12.3", - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-lowering 2.12.3", - "cairo-lang-parser 2.12.3", - "cairo-lang-project 2.12.3", + "cairo-lang-defs 2.17.0-rc.4", + "cairo-lang-diagnostics 2.17.0-rc.4", + "cairo-lang-filesystem 2.17.0-rc.4", + "cairo-lang-lowering 2.17.0-rc.4", + "cairo-lang-parser 2.17.0-rc.4", + "cairo-lang-project 2.17.0-rc.4", "cairo-lang-runnable-utils", - "cairo-lang-semantic 2.12.3", - "cairo-lang-sierra 2.12.3", - "cairo-lang-sierra-generator 2.12.3", - "cairo-lang-syntax 2.12.3", - "cairo-lang-utils 2.12.3", - "indoc 2.0.6", + "cairo-lang-semantic 2.17.0-rc.4", + "cairo-lang-sierra 2.17.0-rc.4", + "cairo-lang-sierra-generator 2.17.0-rc.4", + "cairo-lang-syntax 2.17.0-rc.4", + "cairo-lang-utils 2.17.0-rc.4", + "indoc 2.0.7", "rayon", - "rust-analyzer-salsa", + "salsa 0.26.0", "semver 1.0.27", - "smol_str 0.3.2", - "thiserror 2.0.17", + "smol_str 0.3.6", + "thiserror 2.0.18", ] [[package]] @@ -2348,11 +2134,13 @@ checksum = "c99d41a14f98521c617c0673a0faa41fd00029d32106a4643e1291a1813340a7" [[package]] name = "cairo-lang-debug" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa5311e1c31d413f3fa34e40e48b662c19151f0fb4b10467d627a52c93eae918" +checksum = "40a3e014149f4cb0ab1eff9aec22b85d6a5502f0fc608a31bc281fe2a4fb4e4a" dependencies = [ - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.17.0-rc.4", + "id-arena", + "salsa 0.26.0", ] [[package]] @@ -2368,7 +2156,7 @@ dependencies = [ "cairo-lang-utils 1.0.0-alpha.6", "indexmap 1.9.3", "itertools 0.10.5", - "salsa", + "salsa 0.16.1", "smol_str 0.1.24", ] @@ -2385,7 +2173,7 @@ dependencies = [ "cairo-lang-utils 1.0.0-rc0", "indexmap 1.9.3", "itertools 0.10.5", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", ] @@ -2403,27 +2191,27 @@ dependencies = [ "cairo-lang-utils 1.1.1", "indexmap 1.9.3", "itertools 0.10.5", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", ] [[package]] name = "cairo-lang-defs" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "872feccf7b8f70ed5d74c40548bf974fbcc5069b2ea1ae15a9b8f1ab911c536b" +checksum = "fbdb053cf9298bd4b608c21794e3ff217a875c2b4bc369ef597235364174eb4e" dependencies = [ - "bincode", - "cairo-lang-debug 2.12.3", - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-parser 2.12.3", - "cairo-lang-syntax 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-debug 2.17.0-rc.4", + "cairo-lang-diagnostics 2.17.0-rc.4", + "cairo-lang-filesystem 2.17.0-rc.4", + "cairo-lang-parser 2.17.0-rc.4", + "cairo-lang-proc-macros 2.17.0-rc.4", + "cairo-lang-syntax 2.17.0-rc.4", + "cairo-lang-utils 2.17.0-rc.4", "itertools 0.14.0", - "rust-analyzer-salsa", + "postcard", + "salsa 0.26.0", "serde", - "smol_str 0.3.2", "typetag", "xxhash-rust", ] @@ -2436,7 +2224,7 @@ dependencies = [ "cairo-lang-filesystem 1.0.0-alpha.6", "cairo-lang-utils 1.0.0-alpha.6", "itertools 0.10.5", - "salsa", + "salsa 0.16.1", ] [[package]] @@ -2447,7 +2235,7 @@ dependencies = [ "cairo-lang-filesystem 1.0.0-rc0", "cairo-lang-utils 1.0.0-rc0", "itertools 0.10.5", - "salsa", + "salsa 0.16.1", ] [[package]] @@ -2459,19 +2247,21 @@ dependencies = [ "cairo-lang-filesystem 1.1.1", "cairo-lang-utils 1.1.1", "itertools 0.10.5", - "salsa", + "salsa 0.16.1", ] [[package]] name = "cairo-lang-diagnostics" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e7c551a634708366af3003176f2f9cdea56fd4a91c834ddd802030366f6a5" +checksum = "cb7b10e940c523b16650ae01564ec61e45e3260e5dcfcda4a8a9549d7aecca45" dependencies = [ - "cairo-lang-debug 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-debug 2.17.0-rc.4", + "cairo-lang-filesystem 2.17.0-rc.4", + "cairo-lang-proc-macros 2.17.0-rc.4", + "cairo-lang-utils 2.17.0-rc.4", "itertools 0.14.0", + "salsa 0.26.0", ] [[package]] @@ -2510,11 +2300,11 @@ dependencies = [ [[package]] name = "cairo-lang-eq-solver" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed04fc3f52d68157f359257c477e30f68dec36bbf568c85d567812583cd5f9c8" +checksum = "9feb66fa1e080f43df3ca40844906be124a63d3fb8b6d1c8ec90626d991b0013" dependencies = [ - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.17.0-rc.4", "good_lp", ] @@ -2526,7 +2316,7 @@ dependencies = [ "cairo-lang-debug 1.0.0-alpha.6", "cairo-lang-utils 1.0.0-alpha.6", "path-clean 0.1.0", - "salsa", + "salsa 0.16.1", "smol_str 0.1.24", ] @@ -2538,7 +2328,7 @@ dependencies = [ "cairo-lang-debug 1.0.0-rc0", "cairo-lang-utils 1.0.0-rc0", "path-clean 0.1.0", - "salsa", + "salsa 0.16.1", "serde", "smol_str 0.2.2", ] @@ -2552,44 +2342,47 @@ dependencies = [ "cairo-lang-debug 1.1.1", "cairo-lang-utils 1.1.1", "path-clean 0.1.0", - "salsa", + "salsa 0.16.1", "serde", "smol_str 0.2.2", ] [[package]] name = "cairo-lang-filesystem" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca1835a43a00a90d5cd4ca3f6bb9178ec450d55458e8b56ac34ca1d6d0ccf58f" +checksum = "5a3fbf0cda59f1e78440e91ebf249a8aa66c13684153cf05408353fa55fa8364" dependencies = [ - "cairo-lang-debug 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-debug 2.17.0-rc.4", + "cairo-lang-proc-macros 2.17.0-rc.4", + "cairo-lang-utils 2.17.0-rc.4", + "itertools 0.14.0", "path-clean 1.0.1", - "rust-analyzer-salsa", + "salsa 0.26.0", "semver 1.0.27", "serde", - "smol_str 0.3.2", - "toml 0.8.23", + "smol_str 0.3.6", + "toml 0.9.12+spec-1.1.0", ] [[package]] name = "cairo-lang-formatter" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bd0736456004f1d334bad5b366c6933c4b856a23a5dfade96cfe0a1c5eb3ddb" +checksum = "c45fa9248c0fcae74282bcdf5579d474508f8e4c7e29c88eb5a9bc787714ad55" dependencies = [ "anyhow", - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-parser 2.12.3", - "cairo-lang-syntax 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-diagnostics 2.17.0-rc.4", + "cairo-lang-filesystem 2.17.0-rc.4", + "cairo-lang-parser 2.17.0-rc.4", + "cairo-lang-syntax 2.17.0-rc.4", + "cairo-lang-utils 2.17.0-rc.4", "diffy", "ignore", "itertools 0.14.0", + "salsa 0.26.0", "serde", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -2612,7 +2405,7 @@ dependencies = [ "log", "num-bigint 0.4.6", "num-traits", - "salsa", + "salsa 0.16.1", "smol_str 0.1.24", ] @@ -2636,7 +2429,7 @@ dependencies = [ "log", "num-bigint 0.4.6", "num-traits", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", ] @@ -2661,35 +2454,38 @@ dependencies = [ "log", "num-bigint 0.4.6", "num-traits", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", ] [[package]] name = "cairo-lang-lowering" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd2e1d66c241fba4f3dc43e42956001940298fb4ea5970acfc8b2db8bf4b6629" +checksum = "6d383663b556f344f1305296d6c042fda50091d28931df207925c4ba4303c07e" dependencies = [ "assert_matches", - "bincode", - "cairo-lang-debug 2.12.3", - "cairo-lang-defs 2.12.3", - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-parser 2.12.3", - "cairo-lang-proc-macros 2.12.3", - "cairo-lang-semantic 2.12.3", - "cairo-lang-syntax 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-debug 2.17.0-rc.4", + "cairo-lang-defs 2.17.0-rc.4", + "cairo-lang-diagnostics 2.17.0-rc.4", + "cairo-lang-filesystem 2.17.0-rc.4", + "cairo-lang-proc-macros 2.17.0-rc.4", + "cairo-lang-semantic 2.17.0-rc.4", + "cairo-lang-syntax 2.17.0-rc.4", + "cairo-lang-utils 2.17.0-rc.4", "id-arena", + "indent", "itertools 0.14.0", "log", "num-bigint 0.4.6", "num-integer", "num-traits", - "rust-analyzer-salsa", + "postcard", + "salsa 0.26.0", "serde", + "starknet-types-core", + "thiserror 2.0.18", + "tracing", ] [[package]] @@ -2705,7 +2501,7 @@ dependencies = [ "colored 2.2.0", "itertools 0.10.5", "log", - "salsa", + "salsa 0.16.1", "smol_str 0.1.24", ] @@ -2724,7 +2520,7 @@ dependencies = [ "log", "num-bigint 0.4.6", "num-traits", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", "unescaper", ] @@ -2745,29 +2541,28 @@ dependencies = [ "log", "num-bigint 0.4.6", "num-traits", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", "unescaper", ] [[package]] name = "cairo-lang-parser" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15c3ab263d4afd34a002dc0e37f9bacca734aa133dbbb8540651d28308977a68" +checksum = "1e00f86c34523b5ad1cb9bc43540e9de1a82e873523a81963c77f63682dca25d" dependencies = [ - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", + "cairo-lang-diagnostics 2.17.0-rc.4", + "cairo-lang-filesystem 2.17.0-rc.4", "cairo-lang-primitive-token", - "cairo-lang-syntax 2.12.3", - "cairo-lang-syntax-codegen 2.12.3", - "cairo-lang-utils 2.12.3", - "colored 3.0.0", + "cairo-lang-syntax 2.17.0-rc.4", + "cairo-lang-syntax-codegen 2.17.0-rc.4", + "cairo-lang-utils 2.17.0-rc.4", + "colored 3.1.1", "itertools 0.14.0", "num-bigint 0.4.6", "num-traits", - "rust-analyzer-salsa", - "smol_str 0.3.2", + "salsa 0.26.0", "unescaper", ] @@ -2786,7 +2581,7 @@ dependencies = [ "indoc 1.0.9", "itertools 0.10.5", "pretty_assertions", - "salsa", + "salsa 0.16.1", "smol_str 0.1.24", ] @@ -2802,9 +2597,9 @@ dependencies = [ "cairo-lang-semantic 1.0.0-rc0", "cairo-lang-syntax 1.0.0-rc0", "cairo-lang-utils 1.0.0-rc0", - "indoc 2.0.6", + "indoc 2.0.7", "itertools 0.10.5", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", ] @@ -2821,29 +2616,28 @@ dependencies = [ "cairo-lang-semantic 1.1.1", "cairo-lang-syntax 1.1.1", "cairo-lang-utils 1.1.1", - "indoc 2.0.6", + "indoc 2.0.7", "itertools 0.10.5", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", ] [[package]] name = "cairo-lang-plugins" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "566059584384c12fa598ae0e0509fd3d12b3985a25872de22e37245c4bc5762c" +checksum = "138dd3d415c141a1234000c5a60f17b2a4c8650969e2877e93018ce482dc5725" dependencies = [ - "cairo-lang-defs 2.12.3", - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-parser 2.12.3", - "cairo-lang-syntax 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-defs 2.17.0-rc.4", + "cairo-lang-diagnostics 2.17.0-rc.4", + "cairo-lang-filesystem 2.17.0-rc.4", + "cairo-lang-parser 2.17.0-rc.4", + "cairo-lang-syntax 2.17.0-rc.4", + "cairo-lang-utils 2.17.0-rc.4", "indent", - "indoc 2.0.6", + "indoc 2.0.7", "itertools 0.14.0", - "rust-analyzer-salsa", - "smol_str 0.3.2", + "salsa 0.26.0", ] [[package]] @@ -2885,13 +2679,15 @@ dependencies = [ [[package]] name = "cairo-lang-proc-macros" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61599d8cac760505d1913fa5d7dddcf019f22d47f0748ff66b1b58afe1858b62" +checksum = "d7a35a488185d450ac00964aba9e449f15dba03c4f9f49d0af5b7aae35a02b6b" dependencies = [ - "cairo-lang-debug 2.12.3", + "cairo-lang-debug 2.17.0-rc.4", + "proc-macro2", "quote", - "syn 2.0.106", + "salsa 0.26.0", + "syn 2.0.117", ] [[package]] @@ -2933,63 +2729,64 @@ dependencies = [ [[package]] name = "cairo-lang-project" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99635e2569cebc31583110b417e6a410990a494c7d56998f2be0a169a1158456" +checksum = "90c766f8045cdda7d4037302eda499c9e227837685b3a9d618baf2fb5f8b562c" dependencies = [ - "cairo-lang-filesystem 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-filesystem 2.17.0-rc.4", + "cairo-lang-utils 2.17.0-rc.4", "serde", - "thiserror 2.0.17", - "toml 0.8.23", + "thiserror 2.0.18", + "toml 0.9.12+spec-1.1.0", ] [[package]] name = "cairo-lang-runnable-utils" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f747c3d433ec5e82576e59852fd8c86a802fefe55e7bdbb9c0db61adb1a40e7b" +checksum = "3f4e9452504d2f146dd9b47e6654111d2ad081e2dff0b19edff5d0fd36748d67" dependencies = [ - "cairo-lang-casm 2.12.3", - "cairo-lang-sierra 2.12.3", - "cairo-lang-sierra-ap-change 2.12.3", - "cairo-lang-sierra-gas 2.12.3", - "cairo-lang-sierra-to-casm 2.12.3", + "cairo-lang-casm 2.17.0-rc.4", + "cairo-lang-sierra 2.17.0-rc.4", + "cairo-lang-sierra-ap-change 2.17.0-rc.4", + "cairo-lang-sierra-gas 2.17.0-rc.4", + "cairo-lang-sierra-to-casm 2.17.0-rc.4", "cairo-lang-sierra-type-size", - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.17.0-rc.4", "cairo-vm", - "itertools 0.14.0", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "cairo-lang-runner" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40a9ab4bb286d641463b2253070c145c53ff7e71f29cda2a49915f79ff7db927" +checksum = "f973b5848f89e1afcaa9b11abd03d3e15b0530c49b34e45fc601590b0a4b65ba" dependencies = [ "ark-ff 0.5.0", - "ark-secp256k1 0.5.0", - "ark-secp256r1 0.5.0", - "cairo-lang-casm 2.12.3", - "cairo-lang-lowering 2.12.3", + "ark-secp256k1", + "ark-secp256r1", + "cairo-lang-casm 2.17.0-rc.4", + "cairo-lang-lowering 2.17.0-rc.4", "cairo-lang-runnable-utils", - "cairo-lang-sierra 2.12.3", - "cairo-lang-sierra-generator 2.12.3", - "cairo-lang-sierra-to-casm 2.12.3", - "cairo-lang-starknet 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-sierra 2.17.0-rc.4", + "cairo-lang-sierra-generator 2.17.0-rc.4", + "cairo-lang-sierra-to-casm 2.17.0-rc.4", + "cairo-lang-starknet 2.17.0-rc.4", + "cairo-lang-utils 2.17.0-rc.4", "cairo-vm", + "clap", "itertools 0.14.0", "keccak", "num-bigint 0.4.6", "num-integer", "num-traits", "rand 0.9.2", + "salsa 0.26.0", + "serde", "sha2 0.10.9", - "smol_str 0.3.2", "starknet-types-core", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -3011,7 +2808,7 @@ dependencies = [ "num-bigint 0.4.6", "num-traits", "pretty_assertions", - "salsa", + "salsa 0.16.1", "smol_str 0.1.24", "unescaper", ] @@ -3034,7 +2831,7 @@ dependencies = [ "log", "num-bigint 0.4.6", "num-traits", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", ] @@ -3057,35 +2854,38 @@ dependencies = [ "log", "num-bigint 0.4.6", "num-traits", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", ] [[package]] name = "cairo-lang-semantic" -version = "2.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf1e01333b127fa3733f2f93b3febc45219ef55b807d196f298cadea6ad8fe44" -dependencies = [ - "cairo-lang-debug 2.12.3", - "cairo-lang-defs 2.12.3", - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-parser 2.12.3", - "cairo-lang-plugins 2.12.3", - "cairo-lang-proc-macros 2.12.3", - "cairo-lang-syntax 2.12.3", +version = "2.17.0-rc.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b59bb17344fbdd66115c040663a0e70f1613bfcee4a15fd3ee9b5a62c8f4ed1" +dependencies = [ + "cairo-lang-debug 2.17.0-rc.4", + "cairo-lang-defs 2.17.0-rc.4", + "cairo-lang-diagnostics 2.17.0-rc.4", + "cairo-lang-filesystem 2.17.0-rc.4", + "cairo-lang-parser 2.17.0-rc.4", + "cairo-lang-plugins 2.17.0-rc.4", + "cairo-lang-proc-macros 2.17.0-rc.4", + "cairo-lang-syntax 2.17.0-rc.4", "cairo-lang-test-utils", - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.17.0-rc.4", "id-arena", - "indoc 2.0.6", + "indoc 2.0.7", "itertools 0.14.0", "num-bigint 0.4.6", "num-traits", - "rust-analyzer-salsa", + "postcard", + "salsa 0.26.0", + "serde", "sha3", - "smol_str 0.3.2", - "toml 0.8.23", + "starknet-types-core", + "toml 0.9.12+spec-1.1.0", + "tracing", ] [[package]] @@ -3103,7 +2903,7 @@ dependencies = [ "num-bigint 0.4.6", "num-traits", "regex", - "salsa", + "salsa 0.16.1", "serde", "sha3", "smol_str 0.1.24", @@ -3125,7 +2925,7 @@ dependencies = [ "num-bigint 0.4.6", "num-traits", "regex", - "salsa", + "salsa 0.16.1", "serde", "sha3", "smol_str 0.2.2", @@ -3148,7 +2948,7 @@ dependencies = [ "num-bigint 0.4.6", "num-traits", "regex", - "salsa", + "salsa 0.16.1", "serde", "sha3", "smol_str 0.2.2", @@ -3157,14 +2957,14 @@ dependencies = [ [[package]] name = "cairo-lang-sierra" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300655046f505cf806a918918e5397b20c22b579d78c2ef09bc7d4d59fd733be" +checksum = "b870a259cdbe4870d4c1012ec7177951e24c4ac722f9d005fde2523e1ee3fe6b" dependencies = [ "anyhow", - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.17.0-rc.4", "const-fnv1a-hash", - "convert_case 0.8.0", + "convert_case 0.11.0", "derivative", "itertools 0.14.0", "lalrpop 0.22.2", @@ -3173,13 +2973,12 @@ dependencies = [ "num-integer", "num-traits", "regex", - "rust-analyzer-salsa", "serde", "serde_json", "sha3", - "smol_str 0.3.2", + "smol_str 0.3.6", "starknet-types-core", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -3221,18 +3020,18 @@ dependencies = [ [[package]] name = "cairo-lang-sierra-ap-change" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c51190f463ac9f7d4a2ce0e0345cfc92334589811a7114eeeec84029999d7f1" +checksum = "12eda47418f539da02df223437d22a5b802bf5621df191c47c4abc08c033125e" dependencies = [ - "cairo-lang-eq-solver 2.12.3", - "cairo-lang-sierra 2.12.3", + "cairo-lang-eq-solver 2.17.0-rc.4", + "cairo-lang-sierra 2.17.0-rc.4", "cairo-lang-sierra-type-size", - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.17.0-rc.4", "itertools 0.14.0", "num-bigint 0.4.6", "num-traits", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -3274,18 +3073,18 @@ dependencies = [ [[package]] name = "cairo-lang-sierra-gas" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0d0f038acd79aedcadad4ad2ad928b0881c4e96a2d9ad0e0b3173a6111f313" +checksum = "683dc16f1983afc0061331e48259e0add0bd31cbe1aed4fc28e9cfcb8c7455df" dependencies = [ - "cairo-lang-eq-solver 2.12.3", - "cairo-lang-sierra 2.12.3", + "cairo-lang-eq-solver 2.17.0-rc.4", + "cairo-lang-sierra 2.17.0-rc.4", "cairo-lang-sierra-type-size", - "cairo-lang-utils 2.12.3", + "cairo-lang-utils 2.17.0-rc.4", "itertools 0.14.0", "num-bigint 0.4.6", "num-traits", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -3309,7 +3108,7 @@ dependencies = [ "indexmap 1.9.3", "itertools 0.10.5", "num-bigint 0.4.6", - "salsa", + "salsa 0.16.1", "smol_str 0.1.24", ] @@ -3334,7 +3133,7 @@ dependencies = [ "indexmap 1.9.3", "itertools 0.10.5", "num-bigint 0.4.6", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", ] @@ -3360,32 +3159,33 @@ dependencies = [ "indexmap 1.9.3", "itertools 0.10.5", "num-bigint 0.4.6", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", ] [[package]] name = "cairo-lang-sierra-generator" -version = "2.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bc8d2a89273ba24529319982a4a7833f2a6c4a87752baea2bc70ceb4b3285b7" -dependencies = [ - "cairo-lang-debug 2.12.3", - "cairo-lang-defs 2.12.3", - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-lowering 2.12.3", - "cairo-lang-parser 2.12.3", - "cairo-lang-semantic 2.12.3", - "cairo-lang-sierra 2.12.3", - "cairo-lang-syntax 2.12.3", - "cairo-lang-utils 2.12.3", +version = "2.17.0-rc.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcae17f00ac91a26ab049068fd34e5d7f0d062bd45db7fb97ca8d1056ce6df4d" +dependencies = [ + "cairo-lang-debug 2.17.0-rc.4", + "cairo-lang-defs 2.17.0-rc.4", + "cairo-lang-diagnostics 2.17.0-rc.4", + "cairo-lang-filesystem 2.17.0-rc.4", + "cairo-lang-lowering 2.17.0-rc.4", + "cairo-lang-proc-macros 2.17.0-rc.4", + "cairo-lang-semantic 2.17.0-rc.4", + "cairo-lang-sierra 2.17.0-rc.4", + "cairo-lang-syntax 2.17.0-rc.4", + "cairo-lang-utils 2.17.0-rc.4", "itertools 0.14.0", "num-traits", - "rust-analyzer-salsa", + "rayon", + "salsa 0.26.0", "serde", "serde_json", - "smol_str 0.3.2", + "smol_str 0.3.6", ] [[package]] @@ -3424,7 +3224,7 @@ dependencies = [ "cairo-lang-sierra-gas 1.0.0-rc0", "cairo-lang-utils 1.0.0-rc0", "clap", - "indoc 2.0.6", + "indoc 2.0.7", "itertools 0.10.5", "log", "num-bigint 0.4.6", @@ -3447,7 +3247,7 @@ dependencies = [ "cairo-lang-sierra-gas 1.1.1", "cairo-lang-utils 1.1.1", "clap", - "indoc 2.0.6", + "indoc 2.0.7", "itertools 0.10.5", "log", "num-bigint 0.4.6", @@ -3457,33 +3257,33 @@ dependencies = [ [[package]] name = "cairo-lang-sierra-to-casm" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c852277442b2d8ca9741cdc8ccb737c6ad381d300ab4e2d982a98ba40e5f5b6" +checksum = "5b6c02d7c7b256cfbee7af138b5ada564498e36d4c59abaa4ec15e0d4d8b307d" dependencies = [ "assert_matches", - "cairo-lang-casm 2.12.3", - "cairo-lang-sierra 2.12.3", - "cairo-lang-sierra-ap-change 2.12.3", - "cairo-lang-sierra-gas 2.12.3", + "cairo-lang-casm 2.17.0-rc.4", + "cairo-lang-sierra 2.17.0-rc.4", + "cairo-lang-sierra-ap-change 2.17.0-rc.4", + "cairo-lang-sierra-gas 2.17.0-rc.4", "cairo-lang-sierra-type-size", - "cairo-lang-utils 2.12.3", - "indoc 2.0.6", + "cairo-lang-utils 2.17.0-rc.4", + "indoc 2.0.7", "itertools 0.14.0", "num-bigint 0.4.6", "num-traits", "starknet-types-core", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "cairo-lang-sierra-type-size" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "265aa8daaa94cc4d5e135a82c0bbe7d28d2c0fbc612332903dbf1a68ed15978f" +checksum = "dc9f01e4a110a5493d3794c06dcc08e1a8c0c0cee6436db40c6216ae0b0a847d" dependencies = [ - "cairo-lang-sierra 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-sierra 2.17.0-rc.4", + "cairo-lang-utils 2.17.0-rc.4", ] [[package]] @@ -3510,7 +3310,7 @@ dependencies = [ "cairo-lang-utils 1.0.0-alpha.6", "clap", "convert_case 0.6.0", - "genco", + "genco 0.17.10", "indoc 1.0.9", "itertools 0.10.5", "lazy_static", @@ -3550,8 +3350,8 @@ dependencies = [ "cairo-lang-utils 1.0.0-rc0", "clap", "convert_case 0.6.0", - "genco", - "indoc 2.0.6", + "genco 0.17.10", + "indoc 2.0.7", "itertools 0.10.5", "log", "num-bigint 0.4.6", @@ -3591,8 +3391,8 @@ dependencies = [ "cairo-lang-utils 1.1.1", "clap", "convert_case 0.6.0", - "genco", - "indoc 2.0.6", + "genco 0.17.10", + "indoc 2.0.7", "itertools 0.10.5", "log", "num-bigint 0.4.6", @@ -3608,47 +3408,49 @@ dependencies = [ [[package]] name = "cairo-lang-starknet" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb8bf3ccf8fe1f910291d388a2351b6f40ad32be07bdbd3a628e103387b1a48" +checksum = "24a9faa4b3349e9899972d9ef37bb08904e0c2c802278b2afc4b3e51d87f6f1c" dependencies = [ "anyhow", - "cairo-lang-compiler 2.12.3", - "cairo-lang-defs 2.12.3", - "cairo-lang-diagnostics 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-lowering 2.12.3", - "cairo-lang-parser 2.12.3", - "cairo-lang-plugins 2.12.3", - "cairo-lang-semantic 2.12.3", - "cairo-lang-sierra 2.12.3", - "cairo-lang-sierra-generator 2.12.3", + "cairo-lang-compiler 2.17.0-rc.4", + "cairo-lang-defs 2.17.0-rc.4", + "cairo-lang-diagnostics 2.17.0-rc.4", + "cairo-lang-filesystem 2.17.0-rc.4", + "cairo-lang-lowering 2.17.0-rc.4", + "cairo-lang-parser 2.17.0-rc.4", + "cairo-lang-plugins 2.17.0-rc.4", + "cairo-lang-semantic 2.17.0-rc.4", + "cairo-lang-sierra 2.17.0-rc.4", + "cairo-lang-sierra-generator 2.17.0-rc.4", "cairo-lang-starknet-classes", - "cairo-lang-syntax 2.12.3", - "cairo-lang-utils 2.12.3", + "cairo-lang-syntax 2.17.0-rc.4", + "cairo-lang-utils 2.17.0-rc.4", "const_format", "indent", - "indoc 2.0.6", + "indoc 2.0.7", "itertools 0.14.0", + "rayon", + "salsa 0.26.0", "serde", "serde_json", - "smol_str 0.3.2", "starknet-types-core", - "thiserror 2.0.17", + "thiserror 2.0.18", "typetag", ] [[package]] name = "cairo-lang-starknet-classes" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4839b63927954a7c3d018fd012ce0bea256db205b85ee45df27fb1e90cb10e02" +checksum = "68d9733079428e92c16c67de32ff329140c47e979c1e0a399115454429159fbd" dependencies = [ - "cairo-lang-casm 2.12.3", - "cairo-lang-sierra 2.12.3", - "cairo-lang-sierra-to-casm 2.12.3", - "cairo-lang-utils 2.12.3", - "convert_case 0.8.0", + "cairo-lang-casm 2.17.0-rc.4", + "cairo-lang-sierra 2.17.0-rc.4", + "cairo-lang-sierra-to-casm 2.17.0-rc.4", + "cairo-lang-sierra-type-size", + "cairo-lang-utils 2.17.0-rc.4", + "convert_case 0.11.0", "itertools 0.14.0", "num-bigint 0.4.6", "num-integer", @@ -3656,9 +3458,9 @@ dependencies = [ "serde", "serde_json", "sha3", - "smol_str 0.3.2", + "smol_str 0.3.6", "starknet-types-core", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -3669,7 +3471,7 @@ dependencies = [ "cairo-lang-debug 1.0.0-alpha.6", "cairo-lang-filesystem 1.0.0-alpha.6", "cairo-lang-utils 1.0.0-alpha.6", - "salsa", + "salsa 0.16.1", "smol_str 0.1.24", ] @@ -3683,7 +3485,7 @@ dependencies = [ "cairo-lang-utils 1.0.0-rc0", "num-bigint 0.4.6", "num-traits", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", "thiserror 1.0.69", "unescaper", @@ -3700,7 +3502,7 @@ dependencies = [ "cairo-lang-utils 1.1.1", "num-bigint 0.4.6", "num-traits", - "salsa", + "salsa 0.16.1", "smol_str 0.2.2", "thiserror 1.0.69", "unescaper", @@ -3708,19 +3510,20 @@ dependencies = [ [[package]] name = "cairo-lang-syntax" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f83d5b0213ddab04090f4a10d009ff3428a0d6e289f4fea31798210d60d5cb" +checksum = "0c1e3372dc7dae119038822b8e697f3ad5db32610c7edf6ef9bcf5ba0efbacd4" dependencies = [ - "cairo-lang-debug 2.12.3", - "cairo-lang-filesystem 2.12.3", + "cairo-lang-debug 2.17.0-rc.4", + "cairo-lang-filesystem 2.17.0-rc.4", "cairo-lang-primitive-token", - "cairo-lang-utils 2.12.3", + "cairo-lang-proc-macros 2.17.0-rc.4", + "cairo-lang-utils 2.17.0-rc.4", + "itertools 0.14.0", "num-bigint 0.4.6", "num-traits", - "rust-analyzer-salsa", + "salsa 0.26.0", "serde", - "smol_str 0.3.2", "unescaper", ] @@ -3730,7 +3533,7 @@ version = "1.0.0-alpha.6" source = "git+https://github.com/starkware-libs/cairo?tag=v1.0.0-alpha.6#439da05a031c2eda263c4ce12d0b71d20f38205f" dependencies = [ "cairo-lang-utils 1.0.0-alpha.6", - "genco", + "genco 0.17.10", "log", "xshell", ] @@ -3741,7 +3544,7 @@ version = "1.0.0-rc0" source = "git+https://github.com/starkware-libs/cairo?tag=v1.0.0-rc0#05867c82de42d5ee5cfa953dcca1cb826402f74b" dependencies = [ "cairo-lang-utils 1.0.0-rc0", - "genco", + "genco 0.17.10", "log", "xshell", ] @@ -3753,58 +3556,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9bbfda9a61c4875a4e487cbf78bbae983a0b18adaaf6c8356ade9f128bbb91f" dependencies = [ "cairo-lang-utils 1.1.1", - "genco", + "genco 0.17.10", "log", "xshell", ] [[package]] name = "cairo-lang-syntax-codegen" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00ae64466774b6e34a91c4a66202778b17ef5a844a6f668436e28d71ccb9b2" +checksum = "be894f3cff1edb12b8b76e6c0db361a422c14528d015dd9792b06a0fe62da513" dependencies = [ - "genco", + "genco 0.19.0", "xshell", ] -[[package]] -name = "cairo-lang-test-plugin" -version = "2.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e90cf75528c423cd6b6faaab2dde0c1b23efe36103e1e57f338293552ee16f" -dependencies = [ - "anyhow", - "cairo-lang-compiler 2.12.3", - "cairo-lang-debug 2.12.3", - "cairo-lang-defs 2.12.3", - "cairo-lang-filesystem 2.12.3", - "cairo-lang-lowering 2.12.3", - "cairo-lang-parser 2.12.3", - "cairo-lang-semantic 2.12.3", - "cairo-lang-sierra 2.12.3", - "cairo-lang-sierra-generator 2.12.3", - "cairo-lang-starknet 2.12.3", - "cairo-lang-starknet-classes", - "cairo-lang-syntax 2.12.3", - "cairo-lang-utils 2.12.3", - "indoc 2.0.6", - "itertools 0.14.0", - "num-bigint 0.4.6", - "num-traits", - "serde", - "starknet-types-core", -] - [[package]] name = "cairo-lang-test-utils" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebbd4ebcd82ab07fba3d376a6aa992aa552fcb7f051736f6b5a2122381754bdb" +checksum = "53237008d9bcd9ed9aaf71b77b0252895f928a26565b2ab4d0cbe78613f42850" dependencies = [ "cairo-lang-formatter", - "cairo-lang-utils 2.12.3", - "colored 3.0.0", + "cairo-lang-proc-macros 2.17.0-rc.4", + "cairo-lang-utils 2.17.0-rc.4", + "colored 3.1.1", "log", "pretty_assertions", ] @@ -3860,53 +3636,52 @@ dependencies = [ [[package]] name = "cairo-lang-utils" -version = "2.12.3" +version = "2.17.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cca315cce0937801a772bee5fe92cca28b8172421bdd2f67c96e8288a0dcfb9f" +checksum = "6fae6863d3e0768a860a7e60208f7bc2caae2cd5eec103eed5993e08c9351d28" dependencies = [ - "hashbrown 0.15.5", - "indexmap 2.11.4", + "hashbrown 0.16.1", + "indexmap 2.13.0", "itertools 0.14.0", "num-bigint 0.4.6", "num-traits", "parity-scale-codec", - "schemars 0.8.22", + "salsa 0.26.0", + "schemars 1.2.1", "serde", - "smol_str 0.3.2", + "smol_str 0.3.6", + "tracing", + "tracing-log", + "tracing-subscriber", + "vector-map", ] [[package]] name = "cairo-native" -version = "0.6.2" +version = "0.9.0-rc.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a1b73479b3b3676bf81d2e3586f7e7d234227d7bdb6d8635b0256af7a41592" +checksum = "9950a82462e862001b66def6d99927d7067a8816af6b11e4623d4796c04907e9" dependencies = [ - "anyhow", "aquamarine", - "ark-ec 0.5.0", + "ark-ec", "ark-ff 0.5.0", - "ark-secp256k1 0.5.0", - "ark-secp256r1 0.5.0", + "ark-secp256k1", + "ark-secp256r1", "bumpalo", - "cairo-lang-compiler 2.12.3", - "cairo-lang-defs 2.12.3", - "cairo-lang-filesystem 2.12.3", + "cairo-lang-lowering 2.17.0-rc.4", "cairo-lang-runner", - "cairo-lang-semantic 2.12.3", - "cairo-lang-sierra 2.12.3", - "cairo-lang-sierra-ap-change 2.12.3", - "cairo-lang-sierra-gas 2.12.3", - "cairo-lang-sierra-to-casm 2.12.3", - "cairo-lang-starknet 2.12.3", + "cairo-lang-sierra 2.17.0-rc.4", + "cairo-lang-sierra-ap-change 2.17.0-rc.4", + "cairo-lang-sierra-gas 2.17.0-rc.4", + "cairo-lang-sierra-to-casm 2.17.0-rc.4", + "cairo-lang-sierra-type-size", + "cairo-lang-starknet 2.17.0-rc.4", "cairo-lang-starknet-classes", - "cairo-lang-test-plugin", - "cairo-lang-utils 2.12.3", - "cc", - "clap", - "colored 2.2.0", + "cairo-lang-utils 2.17.0-rc.4", "educe 0.5.11", "itertools 0.14.0", "keccak", + "lambdaworks-math", "lazy_static", "libc", "libloading", @@ -3922,27 +3697,22 @@ dependencies = [ "sha2 0.10.9", "starknet-curve", "starknet-types-core", - "stats_alloc", "tempfile", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", - "tracing-subscriber", "utf8_iter", ] [[package]] name = "cairo-vm" -version = "2.5.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c21cacdf4e290ab5f0018f24d6bf97f8d3a8809bd09568550669270e7f9ed534" +checksum = "38fb2559063ab5f35c1596b6b79a8a18809306a419a3cbd141c2149639386da9" dependencies = [ "anyhow", - "bincode", "bitvec", "generic-array", - "hashbrown 0.15.5", - "hex", - "indoc 2.0.6", + "indoc 2.0.7", "keccak", "lazy_static", "nom", @@ -3958,10 +3728,21 @@ dependencies = [ "sha3", "starknet-crypto", "starknet-types-core", - "thiserror 2.0.17", + "thiserror 2.0.18", + "tracing", "zip", ] +[[package]] +name = "cargo_toml" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" +dependencies = [ + "serde", + "toml 0.9.12+spec-1.1.0", +] + [[package]] name = "caseless" version = "0.2.2" @@ -3979,9 +3760,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.41" +version = "1.2.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" +checksum = "e1e928d4b69e3077709075a938a05ffbedfa53a84c8f766efbf8220bb1ff60e1" dependencies = [ "find-msvc-tools", "jobserver", @@ -3989,6 +3770,12 @@ dependencies = [ "shlex", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + [[package]] name = "cexpr" version = "0.6.0" @@ -4000,9 +3787,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" @@ -4018,7 +3805,18 @@ checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" dependencies = [ "cfg-if", "cipher", - "cpufeatures", + "cpufeatures 0.2.17", +] + +[[package]] +name = "chacha20" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "rand_core 0.10.0", ] [[package]] @@ -4028,7 +3826,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" dependencies = [ "aead", - "chacha20", + "chacha20 0.9.1", "cipher", "poly1305", "zeroize", @@ -4036,9 +3834,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.42" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" dependencies = [ "iana-time-zone", "js-sys", @@ -4099,9 +3897,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.49" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4512b90fa68d3a9932cea5184017c5d200f5921df706d45e853537dea51508f" +checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" dependencies = [ "clap_builder", "clap_derive", @@ -4109,9 +3907,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.49" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0025e98baa12e766c67ba13ff4695a887a1eba19569aad00a472546795bd6730" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" dependencies = [ "anstream", "anstyle", @@ -4122,27 +3920,45 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.49" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "clap_lex" -version = "0.7.6" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" + +[[package]] +name = "cmake" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" +dependencies = [ + "cc", +] + +[[package]] +name = "cobs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" +dependencies = [ + "thiserror 2.0.18", +] [[package]] name = "colorchoice" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "colored" @@ -4156,11 +3972,21 @@ dependencies = [ [[package]] name = "colored" -version = "3.0.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fde0e0ec90c9dfb3b4b1a0891a7dcd0e2bffde2f7efed5fe7c9bb00e5bfb915e" +checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", +] + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", ] [[package]] @@ -4169,6 +3995,23 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bed69047ed42e52c7e38d6421eeb8ceefb4f2a2b52eed59137f7bad7908f6800" +[[package]] +name = "compression-codecs" +version = "0.4.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb7b51a7d9c967fc26773061ba86150f19c50c0d65c887cb1fbe295fd16619b7" +dependencies = [ + "compression-core", + "flate2", + "memchr", +] + +[[package]] +name = "compression-core" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75984efb6ed102a0d42db99afb6c1948f0380d1d91808d5529916e6c08b49d8d" + [[package]] name = "comrak" version = "0.33.0" @@ -4194,22 +4037,23 @@ dependencies = [ [[package]] name = "console-api" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8030735ecb0d128428b64cd379809817e620a40e5001c54465b99ec5feec2857" +checksum = "e8599749b6667e2f0c910c1d0dff6901163ff698a52d5a39720f61b5be4b20d3" dependencies = [ "futures-core", - "prost", - "prost-types", + "prost 0.14.3", + "prost-types 0.14.3", "tonic", + "tonic-prost", "tracing-core", ] [[package]] name = "console-subscriber" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6539aa9c6a4cd31f4b1c040f860a1eac9aa80e7df6b05d506a6e7179936d6a01" +checksum = "fb4915b7d8dd960457a1b6c380114c2944f728e7c65294ab247ae6b6f1f37592" dependencies = [ "console-api", "crossbeam-channel", @@ -4218,8 +4062,8 @@ dependencies = [ "hdrhistogram", "humantime", "hyper-util", - "prost", - "prost-types", + "prost 0.14.3", + "prost-types 0.14.3", "serde", "serde_json", "thread_local", @@ -4248,12 +4092,12 @@ checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca" [[package]] name = "const-hex" -version = "1.17.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bb320cac8a0750d7f25280aa97b09c26edfe161164238ecbbb31092b079e735" +checksum = "531185e432bb31db1ecda541e9e7ab21468d4d844ad7505e0546a49b4945d49b" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "proptest", "serde_core", ] @@ -4290,12 +4134,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - [[package]] name = "convert_case" version = "0.6.0" @@ -4316,9 +4154,18 @@ dependencies = [ [[package]] name = "convert_case" -version = "0.8.0" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "convert_case" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f" +checksum = "affbf0190ed2caf063e3def54ff444b449371d55c58e513a95ab98eca50adb49" dependencies = [ "unicode-segmentation", ] @@ -4367,11 +4214,20 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + [[package]] name = "crc" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" dependencies = [ "crc-catalog", ] @@ -4427,6 +4283,12 @@ dependencies = [ "itertools 0.10.5", ] +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + [[package]] name = "crossbeam-channel" version = "0.5.15" @@ -4455,6 +4317,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" @@ -4481,9 +4352,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "rand_core 0.6.4", @@ -4506,7 +4377,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "curve25519-dalek-derive", "digest 0.10.7", "fiat-crypto", @@ -4523,7 +4394,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -4561,12 +4432,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.21.3" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" dependencies = [ - "darling_core 0.21.3", - "darling_macro 0.21.3", + "darling_core 0.23.0", + "darling_macro 0.23.0", ] [[package]] @@ -4593,22 +4464,22 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "syn 2.0.106", + "strsim 0.11.1", + "syn 2.0.117", ] [[package]] name = "darling_core" -version = "0.21.3" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" dependencies = [ - "fnv", "ident_case", "proc-macro2", "quote", "serde", "strsim 0.11.1", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -4630,18 +4501,18 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "darling_macro" -version = "0.21.3" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ - "darling_core 0.21.3", + "darling_core 0.23.0", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -4672,15 +4543,15 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" +checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" [[package]] name = "data-encoding-macro" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d" +checksum = "8142a83c17aa9461d637e649271eae18bf2edd00e91f2e105df36c3c16355bdb" dependencies = [ "data-encoding", "data-encoding-macro-internal", @@ -4688,14 +4559,32 @@ dependencies = [ [[package]] name = "data-encoding-macro-internal" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" +checksum = "7ab67060fc6b8ef687992d439ca0fa36e7ed17e9a0b16b25b601e8757df720de" dependencies = [ "data-encoding", - "syn 2.0.106", + "syn 2.0.117", +] + +[[package]] +name = "deadpool" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b" +dependencies = [ + "deadpool-runtime", + "lazy_static", + "num_cpus", + "tokio", ] +[[package]] +name = "deadpool-runtime" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" + [[package]] name = "der" version = "0.7.10" @@ -4722,9 +4611,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.4" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", "serde_core", @@ -4743,46 +4632,35 @@ dependencies = [ [[package]] name = "derive-where" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "derive_more" -version = "0.99.20" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" +checksum = "d08b3a0bcc0d079199cd476b2cae8435016ec11d1c0986c6901c5ac223041534" dependencies = [ - "convert_case 0.4.0", "proc-macro2", "quote", - "rustc_version 0.4.1", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "derive_more" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" dependencies = [ "derive_more-impl", ] [[package]] name = "derive_more-impl" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" dependencies = [ + "convert_case 0.10.0", "proc-macro2", "quote", - "syn 2.0.106", + "rustc_version 0.4.1", + "syn 2.0.117", "unicode-xid", ] @@ -4863,14 +4741,14 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "dissimilar" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8975ffdaa0ef3661bfe02dbdcc06c9f829dfafe6a3c474de366a8d5e44276921" +checksum = "aeda16ab4059c5fd2a83f2b9c9e9c981327b18aa8e3b313f7e6563799d4f093e" [[package]] name = "downcast" @@ -4880,9 +4758,9 @@ checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" [[package]] name = "dtoa" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" [[package]] name = "dummy" @@ -4893,7 +4771,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -4971,7 +4849,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -4983,7 +4861,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -5015,11 +4893,23 @@ dependencies = [ "zeroize", ] +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + [[package]] name = "ena" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" +checksum = "eabffdaee24bd1bf95c5ef7cec31260444317e72ea56c4c91750e8b7ee58d5f1" dependencies = [ "log", ] @@ -5048,34 +4938,34 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[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.106", + "syn 2.0.117", ] [[package]] name = "env_filter" -version = "0.1.4" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" +checksum = "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef" dependencies = [ "log", ] @@ -5095,9 +4985,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.8" +version = "0.11.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +checksum = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a" dependencies = [ "anstream", "anstyle", @@ -5113,9 +5003,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "erased-serde" -version = "0.4.8" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "259d404d09818dec19332e31d94558aeb442fea04c817006456c24b5460bbd4b" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" dependencies = [ "serde", "serde_core", @@ -5132,12 +5022,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - [[package]] name = "event-listener" version = "5.4.1" @@ -5155,7 +5039,7 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener 5.4.1", + "event-listener", "pin-project-lite", ] @@ -5223,12 +5107,14 @@ dependencies = [ [[package]] name = "feeder-gateway" -version = "0.21.0" +version = "0.22.3" dependencies = [ "anyhow", "clap", "const-decoder", + "futures", "pathfinder", + "pathfinder-block-commitments", "pathfinder-common", "pathfinder-storage", "primitive-types", @@ -5277,9 +5163,9 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "find-msvc-tools" -version = "0.1.4" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "fixed-hash" @@ -5307,9 +5193,9 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "flate2" -version = "1.1.4" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", "miniz_oxide", @@ -5363,9 +5249,18 @@ dependencies = [ [[package]] name = "fragile" -version = "2.0.1" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8878864ba14bb86e818a412bfd6f18f9eabd4ec0f008a28e8f7eb61db532fcf9" +dependencies = [ + "futures-core", +] + +[[package]] +name = "fs_extra" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "funty" @@ -5375,9 +5270,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -5410,9 +5305,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -5420,27 +5315,26 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", "futures-util", - "num_cpus", ] [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-lite" @@ -5448,22 +5342,19 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ - "fastrand", "futures-core", - "futures-io", - "parking", "pin-project-lite", ] [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -5479,15 +5370,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-timer" @@ -5497,9 +5388,9 @@ checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -5509,7 +5400,6 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] @@ -5519,17 +5409,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" -[[package]] -name = "gateway-test-utils" -version = "0.21.0" -dependencies = [ - "reqwest", - "serde_json", - "starknet-gateway-types", - "tokio", - "warp", -] - [[package]] name = "genawaiter" version = "0.99.1" @@ -5551,7 +5430,18 @@ version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a35958104272e516c2a5f66a9d82fba4784d2b585fc1e2358b8f96e15d342995" dependencies = [ - "genco-macros", + "genco-macros 0.17.10", + "relative-path", + "smallvec", +] + +[[package]] +name = "genco" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ab846431e5d637791b3279e7242fe2b21e11c3d8b4cf6a99f645c5f16ba7c0" +dependencies = [ + "genco-macros 0.19.0", "relative-path", "smallvec", ] @@ -5564,14 +5454,25 @@ checksum = "43eaff6bbc0b3a878361aced5ec6a2818ee7c541c5b33b5880dfa9a86c23e9e7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", +] + +[[package]] +name = "genco-macros" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c42a1fe5a699c7f1d36ea6e04ed680a5c787cabff4b610ae3b8954ea3bcefec1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] name = "generic-array" -version = "0.14.9" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -5580,14 +5481,14 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] @@ -5600,11 +5501,25 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi", + "r-efi 5.3.0", "wasip2", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "rand_core 0.10.0", + "wasip2", + "wasip3", +] + [[package]] name = "ghash" version = "0.5.1" @@ -5623,34 +5538,22 @@ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "globset" -version = "0.4.16" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5" +checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3" dependencies = [ "aho-corasick", "bstr", "log", "regex-automata", - "regex-syntax 0.8.8", -] - -[[package]] -name = "gloo-timers" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", + "regex-syntax 0.8.10", ] [[package]] name = "good_lp" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d976304a59dd741fa234623e96473cf399e10f3f91f0487215fc561f6131d362" +checksum = "8c071f15f0c38eb6445a8100660c5806f4c597b611f24442de1b31b87d41da5c" dependencies = [ "fnv", "microlp", @@ -5658,9 +5561,9 @@ dependencies = [ [[package]] name = "governor" -version = "0.10.1" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444405bbb1a762387aa22dd569429533b54a1d8759d35d3b64cb39b0293eaa19" +checksum = "9efcab3c1958580ff1f25a2a41be1668f7603d849bb63af523b208a3cc1223b8" dependencies = [ "cfg-if", "dashmap", @@ -5668,11 +5571,11 @@ dependencies = [ "futures-timer", "futures-util", "getrandom 0.3.4", - "hashbrown 0.15.5", + "hashbrown 0.16.1", "nonzero_ext", "parking_lot 0.12.5", - "portable-atomic 1.11.1", - "quanta 0.12.6", + "portable-atomic", + "quanta", "rand 0.9.2", "smallvec", "spinning_top", @@ -5702,7 +5605,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.11.4", + "indexmap 2.13.0", "slab", "tokio", "tokio-util", @@ -5711,17 +5614,17 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "http 1.3.1", - "indexmap 2.11.4", + "http 1.4.0", + "indexmap 2.13.0", "slab", "tokio", "tokio-util", @@ -5739,23 +5642,26 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + [[package]] name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.8", -] [[package]] name = "hashbrown" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash 0.8.12", -] [[package]] name = "hashbrown" @@ -5763,7 +5669,7 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "ahash 0.8.12", + "ahash", ] [[package]] @@ -5775,17 +5681,19 @@ dependencies = [ "allocator-api2", "equivalent", "foldhash 0.1.5", - "serde", ] [[package]] name = "hashbrown" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ + "allocator-api2", + "equivalent", "foldhash 0.2.0", "serde", + "serde_core", ] [[package]] @@ -5844,19 +5752,27 @@ dependencies = [ ] [[package]] -name = "heck" -version = "0.3.3" +name = "heapless" +version = "0.7.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" dependencies = [ - "unicode-segmentation", + "atomic-polyfill", + "hash32", + "rustc_version 0.4.1", + "serde", + "spin", + "stable_deref_trait", ] [[package]] name = "heck" -version = "0.4.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] [[package]] name = "heck" @@ -5887,9 +5803,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hex-conservative" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5313b072ce3c597065a808dbf612c4c8e8590bdbf8b579508bf7a762c5eae6cd" +checksum = "fda06d18ac606267c40c04e41b9947729bf8b9efe74bd4e82b61a5f26a510b9f" dependencies = [ "arrayvec", ] @@ -5902,11 +5818,10 @@ checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f" [[package]] name = "hickory-proto" -version = "0.25.0-alpha.5" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d00147af6310f4392a31680db52a3ed45a2e0f68eb18e8c3fe5537ecc96d9e2" +checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" dependencies = [ - "async-recursion", "async-trait", "cfg-if", "data-encoding", @@ -5914,12 +5829,13 @@ dependencies = [ "futures-channel", "futures-io", "futures-util", - "idna 1.1.0", + "idna", "ipnet", "once_cell", "rand 0.9.2", + "ring", "socket2 0.5.10", - "thiserror 2.0.17", + "thiserror 2.0.18", "tinyvec", "tokio", "tracing", @@ -5928,9 +5844,9 @@ dependencies = [ [[package]] name = "hickory-resolver" -version = "0.25.0-alpha.5" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5762f69ebdbd4ddb2e975cd24690bf21fe6b2604039189c26acddbc427f12887" +checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" dependencies = [ "cfg-if", "futures-util", @@ -5942,7 +5858,7 @@ dependencies = [ "rand 0.9.2", "resolv-conf", "smallvec", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", ] @@ -5987,12 +5903,11 @@ dependencies = [ [[package]] name = "http" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", - "fnv", "itoa", ] @@ -6014,7 +5929,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.3.1", + "http 1.4.0", ] [[package]] @@ -6025,7 +5940,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "pin-project-lite", ] @@ -6042,34 +5957,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" -[[package]] -name = "httpmock" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08ec9586ee0910472dec1a1f0f8acf52f0fdde93aea74d70d4a3107b4be0fd5b" -dependencies = [ - "assert-json-diff", - "async-object-pool", - "async-std", - "async-trait", - "base64 0.21.7", - "basic-cookies", - "crossbeam-utils", - "form_urlencoded", - "futures-util", - "hyper 0.14.32", - "lazy_static", - "levenshtein", - "log", - "regex", - "serde", - "serde_json", - "serde_regex", - "similar", - "tokio", - "url", -] - [[package]] name = "humantime" version = "2.3.0" @@ -6102,22 +5989,21 @@ dependencies = [ [[package]] name = "hyper" -version = "1.7.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", - "h2 0.4.12", - "http 1.3.1", + "h2 0.4.13", + "http 1.4.0", "http-body 1.0.1", "httparse", "httpdate", "itoa", "pin-project-lite", - "pin-utils", "smallvec", "tokio", "want", @@ -6129,8 +6015,8 @@ version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "http 1.3.1", - "hyper 1.7.0", + "http 1.4.0", + "hyper 1.9.0", "hyper-util", "rustls", "rustls-native-certs", @@ -6138,7 +6024,6 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "webpki-roots 1.0.3", ] [[package]] @@ -6147,7 +6032,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper 1.7.0", + "hyper 1.9.0", "hyper-util", "pin-project-lite", "tokio", @@ -6156,23 +6041,22 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.17" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ "base64 0.22.1", "bytes", "futures-channel", - "futures-core", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", - "hyper 1.7.0", + "hyper 1.9.0", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.1", + "socket2 0.6.3", "tokio", "tower-service", "tracing", @@ -6180,9 +6064,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.64" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -6190,7 +6074,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.62.2", + "windows-core", ] [[package]] @@ -6204,12 +6088,13 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" dependencies = [ "displaydoc", "potential_utf", + "utf8_iter", "yoke", "zerofrom", "zerovec", @@ -6217,9 +6102,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" dependencies = [ "displaydoc", "litemap", @@ -6230,11 +6115,10 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -6245,42 +6129,38 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" dependencies = [ "displaydoc", "icu_locale_core", - "stable_deref_trait", - "tinystr", "writeable", "yoke", "zerofrom", @@ -6290,9 +6170,9 @@ dependencies = [ [[package]] name = "id-arena" -version = "2.2.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" [[package]] name = "ident_case" @@ -6300,17 +6180,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" -[[package]] -name = "idna" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - [[package]] name = "idna" version = "1.1.0" @@ -6334,19 +6203,19 @@ dependencies = [ [[package]] name = "if-addrs" -version = "0.10.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" +checksum = "c0a05c691e1fae256cf7013d99dad472dc52d5543322761f83ec8d47eab40d2b" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] name = "if-watch" -version = "3.2.1" +version = "3.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf9d64cfcf380606e64f9a0bcf493616b65331199f984151a6fa11a7b3cde38" +checksum = "71c02a5161c313f0cbdbadc511611893584a10a7b6153cb554bdf83ddce99ec2" dependencies = [ "async-io", "core-foundation 0.9.4", @@ -6360,34 +6229,27 @@ dependencies = [ "netlink-proto", "netlink-sys", "rtnetlink", - "smol", "system-configuration", "tokio", "windows", ] -[[package]] -name = "if_chain" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd62e6b5e86ea8eeeb8db1de02880a6abc01a397b2ebb64b5d74ac255318f5cb" - [[package]] name = "igd-next" -version = "0.15.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76b0d7d4541def58a37bf8efc559683f21edce7c82f0d866c93ac21f7e098f93" +checksum = "516893339c97f6011282d5825ac94fc1c7aad5cad26bdc2d0cee068c0bf97f97" dependencies = [ "async-trait", "attohttpc", "bytes", "futures", - "http 1.3.1", + "http 1.4.0", "http-body-util", - "hyper 1.7.0", + "hyper 1.9.0", "hyper-util", "log", - "rand 0.8.5", + "rand 0.9.2", "tokio", "url", "xmltree", @@ -6395,9 +6257,9 @@ dependencies = [ [[package]] name = "ignore" -version = "0.4.23" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" +checksum = "d3d782a365a015e0f5c04902246139249abf769125006fbe7649e2ee88169b4a" dependencies = [ "crossbeam-deque", "globset", @@ -6435,7 +6297,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -6476,12 +6338,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.4" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", - "hashbrown 0.16.0", + "hashbrown 0.16.1", "serde", "serde_core", ] @@ -6494,9 +6356,12 @@ checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306" [[package]] name = "indoc" -version = "2.0.6" +version = "2.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" +checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" +dependencies = [ + "rustversion", +] [[package]] name = "informalsystems-malachitebft-core-consensus" @@ -6512,7 +6377,7 @@ dependencies = [ "informalsystems-malachitebft-metrics", "informalsystems-malachitebft-peer", "multiaddr", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", ] @@ -6526,7 +6391,7 @@ dependencies = [ "informalsystems-malachitebft-core-state-machine", "informalsystems-malachitebft-core-types", "informalsystems-malachitebft-core-votekeeper", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6549,7 +6414,7 @@ dependencies = [ "bytes", "derive-where", "informalsystems-malachitebft-peer", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6560,7 +6425,7 @@ checksum = "b6b13bbf2be8ac7bddcab1c0eb9316d0c6e5ffc7d01110e28f7863be2f407af5" dependencies = [ "derive-where", "informalsystems-malachitebft-core-types", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6570,7 +6435,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "508750b3dc4ca64defb9eb726e0c44e3faa854c3218a1ac26301bc4e47a6f472" dependencies = [ "informalsystems-malachitebft-core-state-machine", - "prometheus-client 0.23.1", + "prometheus-client", ] [[package]] @@ -6581,7 +6446,7 @@ checksum = "da31c9d74b9013c19015f7421cecc041a0b42d6b57ffcd07e4eb246738bfee32" dependencies = [ "bs58", "multihash", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] @@ -6615,38 +6480,48 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "intrusive-collections" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "189d0897e4cbe8c75efedf3502c18c887b05046e59d28404d4d8e46cbc4d1e86" +dependencies = [ + "memoffset", +] + [[package]] name = "inventory" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" +checksum = "a4f0c30c76f2f4ccee3fe55a2435f691ca00c0e4bd87abe4f4a851b1d4dac39b" dependencies = [ "rustversion", ] [[package]] name = "ipconfig" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222" dependencies = [ - "socket2 0.5.10", + "socket2 0.6.3", "widestring", - "windows-sys 0.48.0", - "winreg", + "windows-registry", + "windows-result", + "windows-sys 0.61.2", ] [[package]] name = "ipnet" -version = "2.11.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" [[package]] name = "iri-string" -version = "0.7.8" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +checksum = "25e659a4bb38e810ebc252e53b5814ff908a8c58c2a9ce2fae1bbec24cbf4e20" dependencies = [ "memchr", "serde", @@ -6654,20 +6529,20 @@ dependencies = [ [[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.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" @@ -6678,15 +6553,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.12.1" @@ -6716,9 +6582,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jemalloc-sys" @@ -6740,6 +6606,50 @@ dependencies = [ "libc", ] +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys 0.3.1", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.117", +] + [[package]] name = "jobserver" version = "0.1.34" @@ -6751,13 +6661,37 @@ dependencies = [ ] [[package]] -name = "js-sys" -version = "0.3.81" +name = "js-sys" +version = "0.3.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9" +dependencies = [ + "cfg-if", + "futures-util", + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f300e415e2134745ef75f04562dd0145405c2f7fd92065db029ac4b16b57fe90" +dependencies = [ + "jsonptr", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "jsonptr" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +checksum = "a5a3cc660ba5d72bce0b3bb295bf20847ccbb40fd423f3f05b61273672e561fe" dependencies = [ - "once_cell", - "wasm-bindgen", + "serde", + "serde_json", ] [[package]] @@ -6776,32 +6710,23 @@ dependencies = [ [[package]] name = "keccak" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" dependencies = [ - "cpufeatures", + "cpufeatures 0.2.17", ] [[package]] name = "keccak-asm" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" +checksum = "fa468878266ad91431012b3e5ef1bf9b170eab22883503a318d46857afa4579a" dependencies = [ "digest 0.10.7", "sha3-asm", ] -[[package]] -name = "kv-log-macro" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" -dependencies = [ - "log", -] - [[package]] name = "lalrpop" version = "0.19.12" @@ -6824,28 +6749,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "lalrpop" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" -dependencies = [ - "ascii-canvas 3.0.0", - "bit-set 0.5.3", - "ena", - "itertools 0.11.0", - "lalrpop-util 0.20.2", - "petgraph 0.6.5", - "pico-args", - "regex", - "regex-syntax 0.8.8", - "string_cache", - "term 0.7.0", - "tiny-keccak", - "unicode-xid", - "walkdir", -] - [[package]] name = "lalrpop" version = "0.22.2" @@ -6860,10 +6763,10 @@ dependencies = [ "petgraph 0.7.1", "pico-args", "regex", - "regex-syntax 0.8.8", + "regex-syntax 0.8.10", "sha3", "string_cache", - "term 1.2.0", + "term 1.2.1", "unicode-xid", "walkdir", ] @@ -6877,15 +6780,6 @@ dependencies = [ "regex", ] -[[package]] -name = "lalrpop-util" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" -dependencies = [ - "regex-automata", -] - [[package]] name = "lalrpop-util" version = "0.22.2" @@ -6916,10 +6810,11 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "018a95aa873eb49896a858dee0d925c33f3978d073c64b08dd4f2c9b35a017c6" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "num-bigint 0.4.6", "num-traits", "rand 0.8.5", + "rayon", "serde", "serde_json", ] @@ -6934,16 +6829,16 @@ dependencies = [ ] [[package]] -name = "levenshtein" -version = "1.0.5" +name = "leb128fmt" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.177" +version = "0.2.184" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" [[package]] name = "libloading" @@ -6957,21 +6852,21 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libp2p" -version = "0.55.0" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b72dc443ddd0254cb49a794ed6b6728400ee446a0f7ab4a07d0209ee98de20e9" +checksum = "ce71348bf5838e46449ae240631117b487073d5f347c06d434caddcb91dceb5a" dependencies = [ "bytes", "either", "futures", "futures-timer", - "getrandom 0.2.16", + "getrandom 0.2.17", "libp2p-allow-block-list", "libp2p-autonat", "libp2p-connection-limits", @@ -6996,14 +6891,14 @@ dependencies = [ "multiaddr", "pin-project", "rw-stream-sink", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "libp2p-allow-block-list" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38944b7cb981cc93f2f0fb411ff82d0e983bd226fbcc8d559639a3a73236568b" +checksum = "d16ccf824ee859ca83df301e1c0205270206223fd4b1f2e512a693e1912a8f4a" dependencies = [ "libp2p-core", "libp2p-identity", @@ -7012,9 +6907,9 @@ dependencies = [ [[package]] name = "libp2p-autonat" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e297bfc6cabb70c6180707f8fa05661b77ecb9cb67e8e8e1c469301358fa21d0" +checksum = "fab5e25c49a7d48dac83d95d8f3bac0a290d8a5df717012f6e34ce9886396c0b" dependencies = [ "async-trait", "asynchronous-codec", @@ -7030,16 +6925,16 @@ dependencies = [ "quick-protobuf-codec", "rand 0.8.5", "rand_core 0.6.4", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", "web-time", ] [[package]] name = "libp2p-connection-limits" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efe9323175a17caa8a2ed4feaf8a548eeef5e0b72d03840a0eab4bcb0210ce1c" +checksum = "a18b8b607cf3bfa2f8c57db9c7d8569a315d5cc0a282e6bfd5ebfc0a9840b2a0" dependencies = [ "libp2p-core", "libp2p-identity", @@ -7048,9 +6943,9 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.43.1" +version = "0.43.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d28e2d2def7c344170f5c6450c0dbe3dfef655610dbfde2f6ac28a527abbe36" +checksum = "249128cd37a2199aff30a7675dffa51caf073b51aa612d2f544b19932b9aebca" dependencies = [ "either", "fnv", @@ -7065,7 +6960,7 @@ dependencies = [ "quick-protobuf", "rand 0.8.5", "rw-stream-sink", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", "unsigned-varint 0.8.0", "web-time", @@ -7073,31 +6968,31 @@ dependencies = [ [[package]] name = "libp2p-dcutr" -version = "0.13.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6c2c365b66866da34d06dfe41e001b49b9cfb5cafff6b9c4718eb2da7e35a4" +checksum = "2b4107305e12158af3e66960b6181789c547394c9c9a8696f721521602bfc73a" dependencies = [ "asynchronous-codec", "either", "futures", "futures-bounded 0.2.4", "futures-timer", + "hashlink 0.10.0", "libp2p-core", "libp2p-identity", "libp2p-swarm", - "lru 0.12.5", "quick-protobuf", "quick-protobuf-codec", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", "web-time", ] [[package]] name = "libp2p-dns" -version = "0.43.0" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b780a1150214155b0ed1cdf09fbd2e1b0442604f9146a431d1b21d23eef7bd7" +checksum = "0b770c1c8476736ca98c578cba4b505104ff8e842c2876b528925f9766379f9a" dependencies = [ "async-trait", "futures", @@ -7111,11 +7006,11 @@ dependencies = [ [[package]] name = "libp2p-gossipsub" -version = "0.48.0" +version = "0.49.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d558548fa3b5a8e9b66392f785921e363c57c05dcadfda4db0d41ae82d313e4a" +checksum = "a538e571cd38f504f761c61b8f79127489ea7a7d6f05c41ca15d31ffb5726326" dependencies = [ - "async-channel 2.5.0", + "async-channel", "asynchronous-codec", "base64 0.22.1", "byteorder", @@ -7124,13 +7019,12 @@ dependencies = [ "fnv", "futures", "futures-timer", - "getrandom 0.2.16", + "getrandom 0.2.17", "hashlink 0.9.1", "hex_fmt", "libp2p-core", "libp2p-identity", "libp2p-swarm", - "prometheus-client 0.22.3", "quick-protobuf", "quick-protobuf-codec", "rand 0.8.5", @@ -7143,9 +7037,9 @@ dependencies = [ [[package]] name = "libp2p-identify" -version = "0.46.0" +version = "0.47.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c06862544f02d05d62780ff590cc25a75f5c2b9df38ec7a370dcae8bb873cf" +checksum = "8ab792a8b68fdef443a62155b01970c81c3aadab5e659621b063ef252a8e65e8" dependencies = [ "asynchronous-codec", "either", @@ -7158,15 +7052,15 @@ dependencies = [ "quick-protobuf", "quick-protobuf-codec", "smallvec", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", ] [[package]] name = "libp2p-identity" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3104e13b51e4711ff5738caa1fb54467c8604c2e94d607e27745bcf709068774" +checksum = "f0c7892c221730ba55f7196e98b0b8ba5e04b4155651736036628e9f73ed6fc3" dependencies = [ "bs58", "ed25519-dalek", @@ -7176,16 +7070,16 @@ dependencies = [ "rand 0.8.5", "serde", "sha2 0.10.9", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", "zeroize", ] [[package]] name = "libp2p-kad" -version = "0.47.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bab0466a27ebe955bcbc27328fae5429c5b48c915fd6174931414149802ec23" +checksum = "13d3fd632a5872ec804d37e7413ceea20588f69d027a0fa3c46f82574f4dee60" dependencies = [ "asynchronous-codec", "bytes", @@ -7203,7 +7097,7 @@ dependencies = [ "serde", "sha2 0.10.9", "smallvec", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", "uint 0.10.0", "web-time", @@ -7211,9 +7105,9 @@ dependencies = [ [[package]] name = "libp2p-mdns" -version = "0.47.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d0ba095e1175d797540e16b62e7576846b883cb5046d4159086837b36846cc" +checksum = "c66872d0f1ffcded2788683f76931be1c52e27f343edb93bc6d0bcd8887be443" dependencies = [ "futures", "hickory-proto", @@ -7230,9 +7124,9 @@ dependencies = [ [[package]] name = "libp2p-metrics" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ce58c64292e87af624fcb86465e7dd8342e46a388d71e8fec0ab37ee789630a" +checksum = "805a555148522cb3414493a5153451910cb1a146c53ffbf4385708349baf62b7" dependencies = [ "futures", "libp2p-core", @@ -7245,7 +7139,7 @@ dependencies = [ "libp2p-relay", "libp2p-swarm", "pin-project", - "prometheus-client 0.22.3", + "prometheus-client", "web-time", ] @@ -7266,7 +7160,7 @@ dependencies = [ "rand 0.8.5", "snow", "static_assertions", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", "x25519-dalek", "zeroize", @@ -7274,9 +7168,9 @@ dependencies = [ [[package]] name = "libp2p-ping" -version = "0.46.0" +version = "0.47.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2529993ff22deb2504c0130a58b60fb77f036be555053922db1a0490b5798b" +checksum = "74bb7fcdfd9fead4144a3859da0b49576f171a8c8c7c0bfc7c541921d25e60d3" dependencies = [ "futures", "futures-timer", @@ -7306,9 +7200,9 @@ dependencies = [ [[package]] name = "libp2p-quic" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41432a159b00424a0abaa2c80d786cddff81055ac24aa127e0cf375f7858d880" +checksum = "8dc448b2de9f4745784e3751fe8bc6c473d01b8317edd5ababcb0dec803d843f" dependencies = [ "futures", "futures-timer", @@ -7321,16 +7215,16 @@ dependencies = [ "ring", "rustls", "socket2 0.5.10", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", ] [[package]] name = "libp2p-relay" -version = "0.19.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08a41e346681395877118c270cf993f90d57d045fbf0913ca2f07b59ec6062e4" +checksum = "d8b9b0392ed623243ad298326b9f806d51191829ac7585cc825c54c6c67b04d9" dependencies = [ "asynchronous-codec", "bytes", @@ -7345,16 +7239,16 @@ dependencies = [ "quick-protobuf-codec", "rand 0.8.5", "static_assertions", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", "web-time", ] [[package]] name = "libp2p-request-response" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "548fe44a80ff275d400f1b26b090d441d83ef73efabbeb6415f4ce37e5aed865" +checksum = "a9f1cca83488b90102abac7b67d5c36fc65bc02ed47620228af7ed002e6a1478" dependencies = [ "async-trait", "futures", @@ -7369,21 +7263,19 @@ dependencies = [ [[package]] name = "libp2p-swarm" -version = "0.46.0" +version = "0.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "803399b4b6f68adb85e63ab573ac568154b193e9a640f03e0f2890eabbcb37f8" +checksum = "ce88c6c4bf746c8482480345ea3edfd08301f49e026889d1cbccfa1808a9ed9e" dependencies = [ - "async-std", "either", "fnv", "futures", "futures-timer", + "hashlink 0.10.0", "libp2p-core", "libp2p-identity", "libp2p-swarm-derive", - "lru 0.12.5", "multistream-select", - "once_cell", "rand 0.8.5", "smallvec", "tokio", @@ -7393,21 +7285,20 @@ dependencies = [ [[package]] name = "libp2p-swarm-derive" -version = "0.35.0" +version = "0.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206e0aa0ebe004d778d79fb0966aa0de996c19894e2c0605ba2f8524dd4443d8" +checksum = "dd297cf53f0cb3dee4d2620bb319ae47ef27c702684309f682bdb7e55a18ae9c" dependencies = [ "heck 0.5.0", - "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "libp2p-swarm-test" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bb6354e3a50496d750805f6cf33679bd698850d535602f42c61e465e0734d0b" +checksum = "7b149112570d507efe305838c7130835955a0b1147aa8051c1c3867a83175cf6" dependencies = [ "async-trait", "futures", @@ -7423,17 +7314,16 @@ dependencies = [ [[package]] name = "libp2p-tcp" -version = "0.43.0" +version = "0.44.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65346fb4d36035b23fec4e7be4c320436ba53537ce9b6be1d1db1f70c905cad0" +checksum = "fb6585b9309699f58704ec9ab0bb102eca7a3777170fa91a8678d73ca9cafa93" dependencies = [ - "async-io", "futures", "futures-timer", "if-watch", "libc", "libp2p-core", - "socket2 0.5.10", + "socket2 0.6.3", "tokio", "tracing", ] @@ -7452,16 +7342,16 @@ dependencies = [ "ring", "rustls", "rustls-webpki", - "thiserror 2.0.17", + "thiserror 2.0.18", "x509-parser", "yasna", ] [[package]] name = "libp2p-upnp" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d457b9ecceb66e7199f049926fad447f1f17f040e8d29d690c086b4cab8ed14a" +checksum = "4757e65fe69399c1a243bbb90ec1ae5a2114b907467bf09f3575e899815bb8d3" dependencies = [ "futures", "futures-timer", @@ -7481,19 +7371,18 @@ dependencies = [ "either", "futures", "libp2p-core", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", "yamux 0.12.1", - "yamux 0.13.7", + "yamux 0.13.10", ] [[package]] name = "libredox" -version = "0.1.10" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +checksum = "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08" dependencies = [ - "bitflags 2.9.4", "libc", ] @@ -7510,21 +7399,21 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] name = "llvm-sys" -version = "191.0.0" +version = "191.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "893cddf1adf0354b93411e413553dd4daf5c43195d73f1acfa1e394bdd371456" +checksum = "d0ad1fffbdac72a40b55aa58b31aa0efe925e277941b6705f128692b27f1d506" dependencies = [ "anyhow", "cc", @@ -7545,12 +7434,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" -dependencies = [ - "value-bag", -] +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "lru" @@ -7563,11 +7449,11 @@ dependencies = [ [[package]] name = "lru" -version = "0.13.0" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465" +checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" dependencies = [ - "hashbrown 0.15.5", + "hashbrown 0.16.1", ] [[package]] @@ -7576,15 +7462,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" -[[package]] -name = "mach" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" -dependencies = [ - "libc", -] - [[package]] name = "macro-string" version = "0.1.4" @@ -7593,18 +7470,18 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "match-lookup" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e" +checksum = "757aee279b8bdbb9f9e676796fd459e4207a1f986e87886700abf589f5abf771" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.117", ] [[package]] @@ -7616,18 +7493,6 @@ dependencies = [ "regex-automata", ] -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - [[package]] name = "matchit" version = "0.8.4" @@ -7665,93 +7530,75 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.106", + "syn 2.0.117", "tblgen", "unindent", ] [[package]] name = "memchr" -version = "2.7.6" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] -name = "metrics" -version = "0.20.1" +name = "memoffset" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b9b8653cec6897f73b519a43fba5ee3d50f62fe9af80b428accdcc093b4a849" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ - "ahash 0.7.8", - "metrics-macros", - "portable-atomic 0.3.20", + "autocfg", ] [[package]] name = "metrics" -version = "0.24.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dea7ac8057892855ec285c440160265225438c3c45072613c25a4b26e98ef5" +checksum = "5d5312e9ba3771cfa961b585728215e3d972c950a3eed9252aa093d6301277e8" dependencies = [ - "ahash 0.8.12", - "portable-atomic 1.11.1", + "ahash", + "portable-atomic", ] [[package]] name = "metrics-exporter-prometheus" -version = "0.11.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8603921e1f54ef386189335f288441af761e0fc61bcb552168d9cedfe63ebc70" +checksum = "3589659543c04c7dc5526ec858591015b87cd8746583b51b48ef4353f99dbcda" dependencies = [ - "hyper 0.14.32", - "indexmap 1.9.3", - "ipnet", - "metrics 0.20.1", + "base64 0.22.1", + "indexmap 2.13.0", + "metrics", "metrics-util", - "parking_lot 0.12.5", - "portable-atomic 0.3.20", - "quanta 0.10.1", - "thiserror 1.0.69", - "tokio", - "tracing", -] - -[[package]] -name = "metrics-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "731f8ecebd9f3a4aa847dfe75455e4757a45da40a7793d2f0b1f9b6ed18b23f3" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "quanta", + "thiserror 2.0.18", ] [[package]] name = "metrics-util" -version = "0.14.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d24dc2dbae22bff6f1f9326ffce828c9f07ef9cc1e8002e5279f845432a30a" +checksum = "cdfb1365fea27e6dd9dc1dbc19f570198bc86914533ad639dae939635f096be4" dependencies = [ "crossbeam-epoch", "crossbeam-utils", - "hashbrown 0.12.3", - "metrics 0.20.1", - "num_cpus", - "parking_lot 0.12.5", - "portable-atomic 0.3.20", - "quanta 0.10.1", + "hashbrown 0.16.1", + "metrics", + "quanta", + "rand 0.9.2", + "rand_xoshiro", "sketches-ddsketch", ] [[package]] name = "microlp" -version = "0.2.11" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d1790c73b93164ff65868f63164497cb32339458a9297e17e212d91df62258" +checksum = "458ed987196f802dc47c69d4c5afcd19002d6c1c5f8f75c76d129bcf2425057a" dependencies = [ "log", "sprs", + "web-time", ] [[package]] @@ -7788,13 +7635,13 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.4" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" dependencies = [ "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "wasi", + "windows-sys 0.61.2", ] [[package]] @@ -7832,7 +7679,7 @@ dependencies = [ "fragile", "lazy_static", "mockall_derive 0.12.1", - "predicates 3.1.3", + "predicates 3.1.4", "predicates-tree", ] @@ -7857,22 +7704,21 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "moka" -version = "0.12.11" +version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077" +checksum = "957228ad12042ee839f93c8f257b62b4c0ab5eaae1d4fa60de53b27c9d7c5046" dependencies = [ "crossbeam-channel", "crossbeam-epoch", "crossbeam-utils", "equivalent", "parking_lot 0.12.5", - "portable-atomic 1.11.1", - "rustc_version 0.4.1", + "portable-atomic", "smallvec", "tagptr", "uuid", @@ -7964,84 +7810,67 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] name = "ndarray" -version = "0.16.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "882ed72dce9365842bf196bdeedf5055305f11fc8c03dee7bb0194a6cad34841" +checksum = "520080814a7a6b4a6e9070823bb24b4531daac8c4627e08ba5de8c5ef2f2752d" dependencies = [ "matrixmultiply", "num-complex", "num-integer", "num-traits", - "portable-atomic 1.11.1", + "portable-atomic", "portable-atomic-util", "rawpointer", ] [[package]] name = "netlink-packet-core" -version = "0.7.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72724faf704479d67b388da142b186f916188505e7e0b26719019c525882eda4" +checksum = "3463cbb78394cb0141e2c926b93fc2197e473394b761986eca3b9da2c63ae0f4" dependencies = [ - "anyhow", - "byteorder", - "netlink-packet-utils", + "paste", ] [[package]] name = "netlink-packet-route" -version = "0.17.1" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" +checksum = "4ce3636fa715e988114552619582b530481fd5ef176a1e5c1bf024077c2c9445" dependencies = [ - "anyhow", - "bitflags 1.3.2", - "byteorder", + "bitflags 2.11.0", "libc", + "log", "netlink-packet-core", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-utils" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" -dependencies = [ - "anyhow", - "byteorder", - "paste", - "thiserror 1.0.69", ] [[package]] name = "netlink-proto" -version = "0.11.5" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72452e012c2f8d612410d89eea01e2d9b56205274abb35d53f60200b2ec41d60" +checksum = "b65d130ee111430e47eed7896ea43ca693c387f097dd97376bffafbf25812128" dependencies = [ "bytes", "futures", "log", "netlink-packet-core", "netlink-sys", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "netlink-sys" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" +checksum = "cd6c30ed10fa69cc491d491b85cc971f6bdeb8e7367b7cde2ee6cc878d583fae" dependencies = [ - "async-io", "bytes", - "futures", + "futures-util", "libc", "log", "tokio", @@ -8055,12 +7884,13 @@ checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "nix" -version = "0.26.4" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.11.0", "cfg-if", + "cfg_aliases", "libc", ] @@ -8135,9 +7965,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" [[package]] name = "num-integer" @@ -8209,9 +8039,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" dependencies = [ "num_enum_derive", "rustversion", @@ -8219,14 +8049,14 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -8240,9 +8070,9 @@ dependencies = [ [[package]] name = "nybbles" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4b5ecbd0beec843101bffe848217f770e8b8da81d8355b7d6e226f2199b3dc" +checksum = "0d49ff0c0d00d4a502b39df9af3a525e1efeb14b9dabb5bb83335284c1309210" dependencies = [ "alloy-rlp", "cfg-if", @@ -8263,15 +8093,19 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" +dependencies = [ + "critical-section", + "portable-atomic", +] [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "oorandom" @@ -8287,9 +8121,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl-probe" -version = "0.1.6" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "ordered-float" @@ -8302,7 +8136,7 @@ dependencies = [ [[package]] name = "p2p" -version = "0.21.0" +version = "0.22.3" dependencies = [ "anyhow", "async-trait", @@ -8322,9 +8156,9 @@ dependencies = [ "pathfinder-tagged-debug-derive", "pretty_assertions_sorted", "primitive-types", - "prost", + "prost 0.13.5", "rand 0.8.5", - "rstest 0.18.2", + "rstest", "serde", "serde_json", "sha3", @@ -8341,7 +8175,7 @@ dependencies = [ [[package]] name = "p2p_proto" -version = "0.21.0" +version = "0.22.3" dependencies = [ "fake", "libp2p-identity", @@ -8350,9 +8184,9 @@ dependencies = [ "pathfinder-tagged", "pathfinder-tagged-debug-derive", "primitive-types", - "prost", + "prost 0.13.5", "prost-build", - "prost-types", + "prost-types 0.13.5", "rand 0.8.5", "serde", "serde_json", @@ -8360,7 +8194,7 @@ dependencies = [ [[package]] name = "p2p_proto_derive" -version = "0.21.0" +version = "0.22.3" dependencies = [ "proc-macro2", "quote", @@ -8369,7 +8203,7 @@ dependencies = [ [[package]] name = "p2p_stream" -version = "0.21.0" +version = "0.22.3" dependencies = [ "anyhow", "async-trait", @@ -8379,7 +8213,7 @@ dependencies = [ "libp2p", "libp2p-plaintext", "libp2p-swarm-test", - "rstest 0.18.2", + "rstest", "test-log", "tokio", "tracing", @@ -8412,7 +8246,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -8489,12 +8323,12 @@ checksum = "17359afc20d7ab31fdb42bb844c8b3bb1dabd7dcf7e68428492da7f16966fcef" [[package]] name = "pathfinder" -version = "0.21.0" +version = "0.22.3" dependencies = [ "anyhow", "assert_matches", "async-trait", - "axum 0.8.6", + "axum", "base64 0.22.1", "bincode", "bitvec", @@ -8505,15 +8339,17 @@ dependencies = [ "fake", "flate2", "futures", - "http 1.3.1", + "http 1.4.0", "ipnet", "jemallocator", - "metrics 0.20.1", + "metrics", "metrics-exporter-prometheus", "mockall 0.11.4", + "num-bigint 0.4.6", "p2p", "p2p_proto", "paste", + "pathfinder-block-commitments", "pathfinder-block-hashes", "pathfinder-casm-hashes", "pathfinder-class-hash", @@ -8524,11 +8360,13 @@ dependencies = [ "pathfinder-crypto", "pathfinder-ethereum", "pathfinder-executor", + "pathfinder-gas-price", "pathfinder-merkle-tree", "pathfinder-retry", "pathfinder-rpc", "pathfinder-serde", "pathfinder-storage", + "pathfinder-validator", "pathfinder-version", "pretty_assertions_sorted", "primitive-types", @@ -8536,9 +8374,10 @@ dependencies = [ "rand 0.8.5", "rand_chacha 0.3.1", "rayon", - "reqwest", - "rstest 0.18.2", + "reqwest 0.12.28", + "rstest", "rusqlite", + "rustls", "semver 1.0.27", "serde", "serde_json", @@ -8550,7 +8389,7 @@ dependencies = [ "starknet_api", "tempfile", "test-log", - "thiserror 2.0.17", + "thiserror 2.0.18", "time", "tokio", "tokio-stream", @@ -8563,9 +8402,27 @@ dependencies = [ "zstd", ] +[[package]] +name = "pathfinder-block-commitments" +version = "0.22.3" +dependencies = [ + "anyhow", + "assert_matches", + "pathfinder-common", + "pathfinder-crypto", + "pathfinder-merkle-tree", + "rayon", + "rstest", + "serde_json", + "sha3", + "starknet-gateway-test-fixtures", + "starknet-gateway-types", + "tracing", +] + [[package]] name = "pathfinder-block-hashes" -version = "0.21.0" +version = "0.22.3" dependencies = [ "pathfinder-common", "pathfinder-crypto", @@ -8573,7 +8430,7 @@ dependencies = [ [[package]] name = "pathfinder-casm-hashes" -version = "0.21.0" +version = "0.22.3" dependencies = [ "pathfinder-common", "pathfinder-crypto", @@ -8581,7 +8438,7 @@ dependencies = [ [[package]] name = "pathfinder-class-hash" -version = "0.21.0" +version = "0.22.3" dependencies = [ "anyhow", "fake", @@ -8594,18 +8451,19 @@ dependencies = [ "serde_with", "sha3", "starknet-gateway-test-fixtures", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", ] [[package]] name = "pathfinder-common" -version = "0.21.0" +version = "0.22.3" dependencies = [ "anyhow", + "base64 0.22.1", "bitvec", "fake", - "metrics 0.20.1", + "metrics", "num-bigint 0.4.6", "num-traits", "paste", @@ -8614,29 +8472,30 @@ dependencies = [ "pathfinder-tagged-debug-derive", "primitive-types", "rand 0.8.5", - "rstest 0.18.2", + "rstest", "serde", "serde_json", "serde_with", "sha3", - "thiserror 2.0.17", + "thiserror 2.0.18", "vergen", ] [[package]] name = "pathfinder-compiler" -version = "0.21.0" +version = "0.22.3" dependencies = [ "anyhow", "cairo-lang-starknet 1.0.0-alpha.6", "cairo-lang-starknet 1.0.0-rc0", "cairo-lang-starknet 1.1.1", - "cairo-lang-starknet 2.12.3", + "cairo-lang-starknet 2.17.0-rc.4", "cairo-lang-starknet-classes", + "libc", "num-bigint 0.4.6", "pathfinder-common", "pathfinder-crypto", - "rstest 0.18.2", + "rstest", "serde", "serde_json", "starknet-gateway-test-fixtures", @@ -8646,7 +8505,7 @@ dependencies = [ [[package]] name = "pathfinder-consensus" -version = "0.21.0" +version = "0.22.3" dependencies = [ "anyhow", "base64 0.22.1", @@ -8668,7 +8527,7 @@ dependencies = [ [[package]] name = "pathfinder-consensus-fetcher" -version = "0.21.0" +version = "0.22.3" dependencies = [ "anyhow", "pathfinder-common", @@ -8678,12 +8537,12 @@ dependencies = [ "pathfinder-serde", "pathfinder-storage", "primitive-types", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "pathfinder-crypto" -version = "0.21.0" +version = "0.22.3" dependencies = [ "ark-ff 0.5.0", "assert_matches", @@ -8700,7 +8559,7 @@ dependencies = [ [[package]] name = "pathfinder-ethereum" -version = "0.21.0" +version = "0.22.3" dependencies = [ "alloy", "anyhow", @@ -8711,7 +8570,7 @@ dependencies = [ "pathfinder-common", "pathfinder-crypto", "primitive-types", - "reqwest", + "reqwest 0.12.28", "serde_json", "tokio", "tracing", @@ -8720,7 +8579,7 @@ dependencies = [ [[package]] name = "pathfinder-executor" -version = "0.21.0" +version = "0.22.3" dependencies = [ "anyhow", "blockifier", @@ -8728,7 +8587,7 @@ dependencies = [ "cairo-lang-starknet-classes", "cairo-native", "cairo-vm", - "metrics 0.20.1", + "metrics", "num-bigint 0.4.6", "pathfinder-common", "pathfinder-crypto", @@ -8743,9 +8602,27 @@ dependencies = [ "util", ] +[[package]] +name = "pathfinder-gas-price" +version = "0.22.3" +dependencies = [ + "anyhow", + "cargo_toml", + "mockall 0.11.4", + "pathfinder-common", + "pathfinder-ethereum", + "reqwest 0.12.28", + "rstest", + "serde", + "starknet_api", + "thiserror 2.0.18", + "tokio", + "tracing", +] + [[package]] name = "pathfinder-merkle-tree" -version = "0.21.0" +version = "0.22.3" dependencies = [ "anyhow", "bitvec", @@ -8755,13 +8632,13 @@ dependencies = [ "pretty_assertions_sorted", "rand 0.8.5", "rayon", - "thiserror 2.0.17", + "thiserror 2.0.18", "tracing", ] [[package]] name = "pathfinder-retry" -version = "0.21.0" +version = "0.22.3" dependencies = [ "tokio", "tokio-retry", @@ -8769,12 +8646,12 @@ dependencies = [ [[package]] name = "pathfinder-rpc" -version = "0.21.0" +version = "0.22.3" dependencies = [ "anyhow", "assert_matches", "async-trait", - "axum 0.8.6", + "axum", "base64 0.22.1", "bitvec", "bytes", @@ -8783,12 +8660,11 @@ dependencies = [ "fake", "flate2", "futures", - "gateway-test-utils", "hex", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", - "hyper 1.7.0", - "metrics 0.20.1", + "hyper 1.9.0", + "metrics", "mime", "pathfinder-class-hash", "pathfinder-common", @@ -8805,8 +8681,8 @@ dependencies = [ "pretty_assertions_sorted", "primitive-types", "rayon", - "reqwest", - "rstest 0.18.2", + "reqwest 0.12.28", + "rstest", "serde", "serde_json", "serde_with", @@ -8817,7 +8693,7 @@ dependencies = [ "starknet_api", "tempfile", "test-log", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tokio-tungstenite 0.27.0", "tower 0.4.13", @@ -8825,12 +8701,13 @@ dependencies = [ "tracing", "tracing-subscriber", "util", + "wiremock", "zstd", ] [[package]] name = "pathfinder-serde" -version = "0.21.0" +version = "0.22.3" dependencies = [ "anyhow", "num-bigint 0.4.6", @@ -8845,19 +8722,18 @@ dependencies = [ [[package]] name = "pathfinder-storage" -version = "0.21.0" +version = "0.22.3" dependencies = [ "anyhow", "base64 0.22.1", "bincode", "bitvec", - "bloomfilter", "cached", "const_format", "fake", "flume", "hex", - "metrics 0.20.1", + "metrics", "paste", "pathfinder-casm-hashes", "pathfinder-class-hash", @@ -8872,15 +8748,16 @@ dependencies = [ "r2d2_sqlite", "rand 0.8.5", "rayon", - "rstest 0.18.2", + "rstest", "rusqlite", "serde", "serde_json", "serde_with", "sha3", + "siphasher", "tempfile", "test-log", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", "tracing", "tracing-subscriber", @@ -8907,9 +8784,35 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "pathfinder-validator" +version = "0.22.3" +dependencies = [ + "anyhow", + "assert_matches", + "p2p", + "p2p_proto", + "pathfinder-block-commitments", + "pathfinder-class-hash", + "pathfinder-common", + "pathfinder-compiler", + "pathfinder-crypto", + "pathfinder-executor", + "pathfinder-gas-price", + "pathfinder-rpc", + "pathfinder-storage", + "rayon", + "rstest", + "serde_json", + "starknet_api", + "thiserror 2.0.18", + "tokio", + "tracing", +] + [[package]] name = "pathfinder-version" -version = "0.21.0" +version = "0.22.3" dependencies = [ "vergen", ] @@ -8932,9 +8835,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.3" +version = "2.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" +checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662" dependencies = [ "memchr", "ucd-trie", @@ -8947,7 +8850,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset 0.4.2", - "indexmap 2.11.4", + "indexmap 2.13.0", ] [[package]] @@ -8957,7 +8860,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset 0.5.7", - "indexmap 2.11.4", + "indexmap 2.13.0", ] [[package]] @@ -9000,7 +8903,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -9020,29 +8923,29 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "pin-project" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "pin-project-lite" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pin-utils" @@ -9050,17 +8953,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "piper" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" -dependencies = [ - "atomic-waker", - "fastrand", - "futures-io", -] - [[package]] name = "pkcs8" version = "0.10.2" @@ -9125,7 +9017,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" dependencies = [ - "cpufeatures", + "cpufeatures 0.2.17", "opaque-debug", "universal-hash", ] @@ -9137,40 +9029,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "opaque-debug", "universal-hash", ] [[package]] name = "portable-atomic" -version = "0.3.20" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e30165d31df606f5726b090ec7592c308a0eaf61721ff64c9a3018e344a8753e" -dependencies = [ - "portable-atomic 1.11.1", -] +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] -name = "portable-atomic" -version = "1.11.1" +name = "portable-atomic-util" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +checksum = "091397be61a01d4be58e7841595bd4bfedb15f1cd54977d79b8271e94ed799a3" +dependencies = [ + "portable-atomic", +] [[package]] -name = "portable-atomic-util" -version = "0.2.4" +name = "postcard" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" dependencies = [ - "portable-atomic 1.11.1", + "cobs", + "embedded-io 0.4.0", + "embedded-io 0.6.1", + "heapless", + "serde", ] [[package]] name = "potential_utf" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" dependencies = [ "zerovec", ] @@ -9212,9 +9108,9 @@ dependencies = [ [[package]] name = "predicates" -version = "3.1.3" +version = "3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" +checksum = "ada8f2932f28a27ee7b70dd6c1c39ea0675c55a36879ab92f3a715eaa1e63cfe" dependencies = [ "anstyle", "predicates-core", @@ -9222,15 +9118,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" +checksum = "cad38746f3166b4031b1a0d39ad9f954dd291e7854fcc0eed52ee41a0b50d144" [[package]] name = "predicates-tree" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" +checksum = "d0de1b847b39c8131db0467e9df1ff60e6d0562ab8e9a16e568ad0fdb372e2f2" dependencies = [ "predicates-core", "termtree", @@ -9263,7 +9159,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -9280,35 +9176,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" -dependencies = [ - "toml_edit 0.23.7", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "proc-macro2", - "quote", - "version_check", + "toml_edit", ] [[package]] @@ -9330,30 +9202,18 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] -[[package]] -name = "prometheus-client" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca" -dependencies = [ - "dtoa", - "itoa", - "parking_lot 0.12.5", - "prometheus-client-derive-encode", -] - [[package]] name = "prometheus-client" version = "0.23.1" @@ -9374,24 +9234,23 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "proptest" -version = "1.8.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bb0be07becd10686a0bb407298fb425360a5c44a663774406340c59a22de4ce" +checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" dependencies = [ "bit-set 0.8.0", "bit-vec 0.8.0", - "bitflags 2.9.4", - "lazy_static", + "bitflags 2.11.0", "num-traits", "rand 0.9.2", "rand_chacha 0.9.0", "rand_xorshift", - "regex-syntax 0.8.8", + "regex-syntax 0.8.10", "rusty-fork", "tempfile", "unarray", @@ -9404,7 +9263,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" dependencies = [ "bytes", - "prost-derive", + "prost-derive 0.13.5", +] + +[[package]] +name = "prost" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" +dependencies = [ + "bytes", + "prost-derive 0.14.3", ] [[package]] @@ -9420,10 +9289,10 @@ dependencies = [ "once_cell", "petgraph 0.7.1", "prettyplease", - "prost", - "prost-types", + "prost 0.13.5", + "prost-types 0.13.5", "regex", - "syn 2.0.106", + "syn 2.0.117", "tempfile", ] @@ -9437,7 +9306,20 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", +] + +[[package]] +name = "prost-derive" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" +dependencies = [ + "anyhow", + "itertools 0.14.0", + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] @@ -9446,23 +9328,16 @@ version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" dependencies = [ - "prost", + "prost 0.13.5", ] [[package]] -name = "quanta" -version = "0.10.1" +name = "prost-types" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e31331286705f455e56cca62e0e717158474ff02b7936c1fa596d983f4ae27" +checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" dependencies = [ - "crossbeam-utils", - "libc", - "mach", - "once_cell", - "raw-cpuid 10.7.0", - "wasi 0.10.2+wasi-snapshot-preview1", - "web-sys", - "winapi", + "prost 0.14.3", ] [[package]] @@ -9474,8 +9349,8 @@ dependencies = [ "crossbeam-utils", "libc", "once_cell", - "raw-cpuid 11.6.0", - "wasi 0.11.1+wasi-snapshot-preview1", + "raw-cpuid", + "wasi", "web-sys", "winapi", ] @@ -9520,10 +9395,10 @@ dependencies = [ "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.1.1", + "rustc-hash 2.1.2", "rustls", - "socket2 0.6.1", - "thiserror 2.0.17", + "socket2 0.6.3", + "thiserror 2.0.18", "tokio", "tracing", "web-time", @@ -9531,20 +9406,21 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.13" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" dependencies = [ + "aws-lc-rs", "bytes", "getrandom 0.3.4", "lru-slab", "rand 0.9.2", "ring", - "rustc-hash 2.1.1", + "rustc-hash 2.1.2", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.17", + "thiserror 2.0.18", "tinyvec", "tracing", "web-time", @@ -9559,16 +9435,16 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.1", + "socket2 0.6.3", "tracing", "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.41" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] @@ -9579,6 +9455,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "r2d2" version = "0.8.10" @@ -9626,10 +9508,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", - "rand_core 0.9.3", + "rand_core 0.9.5", "serde", ] +[[package]] +name = "rand" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc266eb313df6c5c09c1c7b1fbe2510961e5bcd3add930c1e31f7ed9da0feff8" +dependencies = [ + "chacha20 0.10.0", + "getrandom 0.4.2", + "rand_core 0.10.0", +] + [[package]] name = "rand_chacha" version = "0.3.1" @@ -9647,7 +9540,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -9656,35 +9549,50 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ "getrandom 0.3.4", "serde", ] +[[package]] +name = "rand_core" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c8d0fd677905edcbeedbf2edb6494d676f0e98d54d5cf9bda0b061cb8fb8aba" + [[package]] name = "rand_xorshift" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" dependencies = [ - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] -name = "raw-cpuid" -version = "10.7.0" +name = "rand_xoshiro" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332" +checksum = "f703f4665700daf5512dcca5f43afa6af89f09db47fb56be587f80636bda2d41" dependencies = [ - "bitflags 1.3.2", + "rand_core 0.9.5", +] + +[[package]] +name = "rapidhash" +version = "4.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e48930979c155e2f33aa36ab3119b5ee81332beb6482199a8ecd6029b80b59" +dependencies = [ + "rustversion", ] [[package]] @@ -9693,7 +9601,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.0", ] [[package]] @@ -9750,7 +9658,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.0", ] [[package]] @@ -9759,7 +9667,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "libredox", "thiserror 1.0.69", ] @@ -9781,37 +9689,37 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "regex" -version = "1.12.2" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", "regex-automata", - "regex-syntax 0.8.8", + "regex-syntax 0.8.10", ] [[package]] name = "regex-automata" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.8", + "regex-syntax 0.8.10", ] [[package]] name = "regex-lite" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d942b98df5e658f56f20d592c7f868833fe38115e65c33003d8cd224b0155da" +checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" @@ -9821,9 +9729,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.8" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "relative-path" @@ -9833,19 +9741,19 @@ checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" [[package]] name = "reqwest" -version = "0.12.24" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64 0.22.1", "bytes", "encoding_rs", "futures-core", - "h2 0.4.12", - "http 1.3.1", + "h2 0.4.13", + "http 1.4.0", "http-body 1.0.1", "http-body-util", - "hyper 1.7.0", + "hyper 1.9.0", "hyper-rustls", "hyper-util", "js-sys", @@ -9863,21 +9771,57 @@ dependencies = [ "sync_wrapper", "tokio", "tokio-rustls", - "tower 0.5.2", - "tower-http 0.6.6", + "tower 0.5.3", + "tower-http 0.6.8", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "reqwest" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "http 1.4.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.9.0", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pki-types", + "rustls-platform-verifier", + "serde", + "serde_json", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tower 0.5.3", + "tower-http 0.6.8", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots 1.0.3", ] [[package]] name = "resolv-conf" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" +checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" [[package]] name = "rfc6979" @@ -9897,7 +9841,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", @@ -9922,18 +9866,6 @@ dependencies = [ "rustc-hex", ] -[[package]] -name = "rstest" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de1bb486a691878cd320c2f0d319ba91eeaa2e894066d8b5f8f117c000e9d962" -dependencies = [ - "futures", - "futures-timer", - "rstest_macros 0.17.0", - "rustc_version 0.4.1", -] - [[package]] name = "rstest" version = "0.18.2" @@ -9942,22 +9874,8 @@ checksum = "97eeab2f3c0a199bc4be135c36c924b6590b88c377d416494288c14f2db30199" dependencies = [ "futures", "futures-timer", - "rstest_macros 0.18.2", - "rustc_version 0.4.1", -] - -[[package]] -name = "rstest_macros" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290ca1a1c8ca7edb7c3283bd44dc35dd54fdec6253a3912e201ba1072018fca8" -dependencies = [ - "cfg-if", - "proc-macro2", - "quote", + "rstest_macros", "rustc_version 0.4.1", - "syn 1.0.109", - "unicode-ident", ] [[package]] @@ -9973,22 +9891,21 @@ dependencies = [ "regex", "relative-path", "rustc_version 0.4.1", - "syn 2.0.106", + "syn 2.0.117", "unicode-ident", ] [[package]] name = "rtnetlink" -version = "0.13.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a552eb82d19f38c3beed3f786bd23aa434ceb9ac43ab44419ca6d67a7e186c0" +checksum = "4b960d5d873a75b5be9761b1e73b146f52dddcd27bac75263f40fba686d4d7b5" dependencies = [ - "async-global-executor", - "futures", + "futures-channel", + "futures-util", "log", "netlink-packet-core", "netlink-packet-route", - "netlink-packet-utils", "netlink-proto", "netlink-sys", "nix", @@ -9998,9 +9915,9 @@ dependencies = [ [[package]] name = "ruint" -version = "1.17.0" +version = "1.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a68df0380e5c9d20ce49534f292a36a7514ae21350726efe1865bdb1fa91d278" +checksum = "c141e807189ad38a07276942c6623032d3753c8859c146104ac2e4d68865945a" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", @@ -10036,7 +9953,7 @@ version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "165ca6e57b20e1351573e3729b958bc62f0e48025386970b6e4d29e7a7e71f3f" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.0", "fallible-iterator", "fallible-streaming-iterator", "hashlink 0.10.0", @@ -10044,40 +9961,11 @@ dependencies = [ "smallvec", ] -[[package]] -name = "rust-analyzer-salsa" -version = "0.17.0-pre.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719825638c59fd26a55412a24561c7c5bcf54364c88b9a7a04ba08a6eafaba8d" -dependencies = [ - "indexmap 2.11.4", - "lock_api", - "oorandom", - "parking_lot 0.12.5", - "rust-analyzer-salsa-macros", - "rustc-hash 1.1.0", - "smallvec", - "tracing", - "triomphe", -] - -[[package]] -name = "rust-analyzer-salsa-macros" -version = "0.17.0-pre.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d96498e9684848c6676c399032ebc37c52da95ecbefa83d71ccc53b9f8a4a8e" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 2.0.106", -] - [[package]] name = "rust_decimal" -version = "1.39.0" +version = "1.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35affe401787a9bd846712274d97654355d21b2a2c092a3139aabe31e9022282" +checksum = "2ce901f9a19d251159075a4c37af514c3b8ef99c22e02dd8c19161cf397ee94a" dependencies = [ "arrayvec", "num-traits", @@ -10091,9 +9979,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" [[package]] name = "rustc-hex" @@ -10130,11 +10018,11 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.0", "errno", "libc", "linux-raw-sys", @@ -10143,10 +10031,12 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.32" +version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" dependencies = [ + "aws-lc-rs", + "log", "once_cell", "ring", "rustls-pki-types", @@ -10157,9 +10047,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -10169,20 +10059,48 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.12.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" dependencies = [ "web-time", "zeroize", ] +[[package]] +name = "rustls-platform-verifier" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" +dependencies = [ + "core-foundation 0.10.1", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki", + "security-framework", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + [[package]] name = "rustls-webpki" -version = "0.103.7" +version = "0.103.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" +checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -10219,9 +10137,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "salsa" @@ -10236,10 +10154,41 @@ dependencies = [ "oorandom", "parking_lot 0.11.2", "rustc-hash 1.1.0", - "salsa-macros", + "salsa-macros 0.16.0", + "smallvec", +] + +[[package]] +name = "salsa" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f77debccd43ba198e9cee23efd7f10330ff445e46a98a2b107fed9094a1ee676" +dependencies = [ + "boxcar", + "crossbeam-queue", + "crossbeam-utils", + "hashbrown 0.15.5", + "hashlink 0.10.0", + "indexmap 2.13.0", + "intrusive-collections", + "inventory", + "parking_lot 0.12.5", + "portable-atomic", + "rayon", + "rustc-hash 2.1.2", + "salsa-macro-rules", + "salsa-macros 0.26.0", "smallvec", + "thin-vec", + "tracing", ] +[[package]] +name = "salsa-macro-rules" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea07adbf42d91cc076b7daf3b38bc8168c19eb362c665964118a89bc55ef19a5" + [[package]] name = "salsa-macros" version = "0.16.0" @@ -10252,6 +10201,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "salsa-macros" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16d4d8b66451b9c75ddf740b7fc8399bc7b8ba33e854a5d7526d18708f67b05" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "synstructure", +] + [[package]] name = "same-file" version = "1.0.6" @@ -10263,9 +10224,9 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" dependencies = [ "windows-sys 0.61.2", ] @@ -10279,19 +10240,6 @@ dependencies = [ "parking_lot 0.12.5", ] -[[package]] -name = "schemars" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" -dependencies = [ - "dyn-clone", - "indexmap 1.9.3", - "schemars_derive", - "serde", - "serde_json", -] - [[package]] name = "schemars" version = "0.9.0" @@ -10306,26 +10254,27 @@ dependencies = [ [[package]] name = "schemars" -version = "1.0.4" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" dependencies = [ "dyn-clone", "ref-cast", + "schemars_derive", "serde", "serde_json", ] [[package]] name = "schemars_derive" -version = "0.8.22" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +checksum = "7d115b50f4aaeea07e79c1912f645c7513d81715d0420f8bc77a18c6260b307f" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -10378,11 +10327,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.5.1" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.0", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -10391,9 +10340,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.15.0" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", @@ -10460,7 +10409,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -10471,50 +10420,51 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] -name = "serde_path_to_error" -version = "0.1.20" +name = "serde_json_pythonic" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" +checksum = "62212da9872ca2a0cad0093191ee33753eddff9266cbbc1b4a602d13a3a768db" dependencies = [ "itoa", + "ryu", "serde", - "serde_core", ] [[package]] -name = "serde_regex" -version = "1.1.0" +name = "serde_path_to_error" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8136f1a4ea815d7eac4101cfd0b16dc0cb5e1fe1b8609dfd728058656b7badf" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" dependencies = [ - "regex", + "itoa", "serde", + "serde_core", ] [[package]] name = "serde_spanned" -version = "0.6.9" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -10531,17 +10481,17 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.15.0" +version = "3.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6093cd8c01b25262b84927e0f7151692158fab02d961e04c979d3903eba7ecc5" +checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.11.4", + "indexmap 2.13.0", "schemars 0.9.0", - "schemars 1.0.4", + "schemars 1.2.1", "serde_core", "serde_json", "serde_with_macros", @@ -10550,14 +10500,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.15.0" +version = "3.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27" +checksum = "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65" dependencies = [ - "darling 0.21.3", + "darling 0.23.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -10577,7 +10527,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest 0.10.7", ] @@ -10589,7 +10539,7 @@ checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer 0.9.0", "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest 0.9.0", "opaque-debug", ] @@ -10601,7 +10551,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest 0.10.7", ] @@ -10617,9 +10567,9 @@ dependencies = [ [[package]] name = "sha3-asm" -version = "0.1.4" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" +checksum = "59cbb88c189d6352cc8ae96a39d19c7ecad8f7330b29461187f2587fdc2988d5" dependencies = [ "cc", "cfg-if", @@ -10642,10 +10592,11 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.6" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] @@ -10661,69 +10612,27 @@ dependencies = [ [[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" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" +checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" [[package]] name = "siphasher" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" - -[[package]] -name = "size-of" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e36eca171fddeda53901b0a436573b3f2391eaa9189d439b2bd8ea8cebd7e3" - -[[package]] -name = "sizeof" -version = "0.16.0-rc.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29dcfb1a76f2e5486a3c2d4e66d939813ce9be7500b2169e059a627ed13436cd" -dependencies = [ - "sizeof_internal", - "sizeof_macro", -] - -[[package]] -name = "sizeof_internal" -version = "0.16.0-rc.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2361e1b34f9c2b742419e30e99e2f3094a846dd93fb5edc23ee0f714feb4e43d" -dependencies = [ - "starknet-types-core", -] - -[[package]] -name = "sizeof_macro" -version = "0.16.0-rc.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6503474d48a3ff40a3da73f2e277e33e958245d78fc77e2386c5e521d38b16d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "sketches-ddsketch" -version = "0.2.2" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85636c14b73d81f541e525f585c0a2109e6744e1565b5c1668e31c70c10ed65c" +checksum = "0c6f73aeb92d671e0cc4dca167e59b2deb6387c375391bc99ee743f326994a2b" [[package]] name = "slab" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "slug" @@ -10744,23 +10653,6 @@ dependencies = [ "serde", ] -[[package]] -name = "smol" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" -dependencies = [ - "async-channel 2.5.0", - "async-executor", - "async-fs", - "async-io", - "async-lock", - "async-net", - "async-process", - "blocking", - "futures-lite", -] - [[package]] name = "smol_str" version = "0.1.24" @@ -10781,12 +10673,12 @@ dependencies = [ [[package]] name = "smol_str" -version = "0.3.2" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9676b89cd56310a87b93dec47b11af744f34d5fc9f367b829474eec0a891350d" +checksum = "4aaa7368fcf4852a4c2dd92df0cace6a71f2091ca0a23391ce7f3a31833f1523" dependencies = [ "borsh", - "serde", + "serde_core", ] [[package]] @@ -10818,12 +10710,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -10856,9 +10748,9 @@ dependencies = [ [[package]] name = "sprs" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bff8419009a08f6cb7519a602c5590241fbff1446bcc823c07af15386eb801b" +checksum = "6dca58a33be2188d4edc71534f8bafa826e787cc28ca1c47f31be3423f0d6e55" dependencies = [ "ndarray", "num-complex", @@ -10872,6 +10764,40 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" +[[package]] +name = "starknet-core" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb7212226769766c1c7d79b70f9242ffbd213290a41604ecc7e78faa0ed0deb" +dependencies = [ + "base64 0.21.7", + "crypto-bigint", + "flate2", + "foldhash 0.1.5", + "hex", + "indexmap 2.13.0", + "num-traits", + "serde", + "serde_json", + "serde_json_pythonic", + "serde_with", + "sha3", + "starknet-core-derive", + "starknet-crypto", + "starknet-types-core", +] + +[[package]] +name = "starknet-core-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b08520b7d80eda7bf1a223e8db4f9bb5779a12846f15ebf8f8d76667eca7f5ad" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "starknet-crypto" version = "0.8.1" @@ -10902,7 +10828,7 @@ dependencies = [ [[package]] name = "starknet-gateway-client" -version = "0.21.0" +version = "0.22.3" dependencies = [ "anyhow", "assert_matches", @@ -10912,9 +10838,7 @@ dependencies = [ "fake", "flate2", "futures", - "gateway-test-utils", - "httpmock", - "metrics 0.20.1", + "metrics", "mockall 0.11.4", "pathfinder-common", "pathfinder-crypto", @@ -10922,7 +10846,7 @@ dependencies = [ "pathfinder-serde", "pathfinder-version", "pretty_assertions_sorted", - "reqwest", + "reqwest 0.12.28", "serde", "serde_json", "starknet-gateway-test-fixtures", @@ -10932,11 +10856,12 @@ dependencies = [ "tracing", "tracing-subscriber", "warp", + "wiremock", ] [[package]] name = "starknet-gateway-test-fixtures" -version = "0.21.0" +version = "0.22.3" dependencies = [ "pathfinder-common", "pathfinder-crypto", @@ -10944,7 +10869,7 @@ dependencies = [ [[package]] name = "starknet-gateway-types" -version = "0.21.0" +version = "0.22.3" dependencies = [ "anyhow", "fake", @@ -10954,21 +10879,21 @@ dependencies = [ "pretty_assertions_sorted", "primitive-types", "rand 0.8.5", - "reqwest", + "reqwest 0.12.28", "serde", "serde_json", "serde_with", "sha3", "starknet-gateway-test-fixtures", - "thiserror 2.0.17", + "thiserror 2.0.18", "tokio", ] [[package]] name = "starknet-types-core" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab92594a86ac627dd4c8d3350362cc8035e55c548c27c71dfa4c9fc6b3b6ab1a" +checksum = "90d23b1bc014ee4cce40056ab3114bcbcdc2dbc1e845bbfb1f8bd0bab63507d4" dependencies = [ "blake2", "digest 0.10.7", @@ -10980,28 +10905,30 @@ dependencies = [ "num-traits", "rand 0.9.2", "serde", - "size-of", "zeroize", ] [[package]] name = "starknet_api" -version = "0.16.0-rc.1" +version = "0.18.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9893be10768a72f91012e34ad3fbf66d4e058d3b1886195ebcd05815d3969e00" +checksum = "94f3991e6f1afe218357fa16e3ed9a72cdbb1d9b6ccc472d37851b5cf268bd39" dependencies = [ "apollo_infra_utils", + "apollo_sizeof", "base64 0.13.1", "bitvec", "cached", "cairo-lang-runner", "cairo-lang-starknet-classes", - "cairo-lang-utils 2.12.3", - "derive_more 0.99.20", + "cairo-lang-utils 2.17.0-rc.4", + "derive_more", + "expect-test", "flate2", "hex", - "indexmap 2.11.4", + "indexmap 2.13.0", "itertools 0.12.1", + "json-patch", "num-bigint 0.4.6", "num-traits", "pretty_assertions", @@ -11011,13 +10938,13 @@ dependencies = [ "serde", "serde_json", "sha3", - "sizeof", + "starknet-core", "starknet-crypto", "starknet-types-core", - "strum 0.25.0", - "strum_macros 0.25.3", + "strum", "thiserror 1.0.69", "time", + "tokio", ] [[package]] @@ -11026,12 +10953,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "stats_alloc" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c0e04424e733e69714ca1bbb9204c1a57f09f5493439520f9f68c132ad25eec" - [[package]] name = "string_cache" version = "0.8.9" @@ -11056,35 +10977,13 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "strum" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" -dependencies = [ - "strum_macros 0.25.3", -] - [[package]] name = "strum" version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" dependencies = [ - "strum_macros 0.27.2", -] - -[[package]] -name = "strum_macros" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.106", + "strum_macros", ] [[package]] @@ -11096,7 +10995,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -11124,9 +11023,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.106" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -11135,14 +11034,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "1.4.1" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff790eb176cc81bb8936aed0f7b9f14fc4670069a2d371b3e3b0ecce908b2cb3" +checksum = "53f425ae0b12e2f5ae65542e00898d500d4d318b4baf09f40fd0d410454e9947" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -11162,16 +11061,16 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "system-configuration" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.0", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -11207,17 +11106,17 @@ dependencies = [ "bindgen", "cc", "paste", - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "tempfile" -version = "3.23.0" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.2", "once_cell", "rustix", "windows-sys 0.61.2", @@ -11236,9 +11135,9 @@ dependencies = [ [[package]] name = "term" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2111ef44dae28680ae9752bb89409e7310ca33a8c621ebe7b106cf5c928b3ac0" +checksum = "d8c27177b12a6399ffc08b98f76f7c9a1f4fe9fc967c784c5a071fa8d93cf7e1" dependencies = [ "windows-sys 0.61.2", ] @@ -11254,12 +11153,12 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" +checksum = "230a1b821ccbd75b185820a1f1ff7b14d21da1e442e22c0863ea5f08771a8874" dependencies = [ "rustix", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -11270,26 +11169,32 @@ checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" [[package]] name = "test-log" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e33b98a582ea0be1168eba097538ee8dd4bbe0f2b01b22ac92ea30054e5be7b" +checksum = "37d53ac171c92a39e4769491c4b4dde7022c60042254b5fc044ae409d34a24d4" dependencies = [ - "env_logger 0.11.8", + "env_logger 0.11.10", "test-log-macros", "tracing-subscriber", ] [[package]] name = "test-log-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451b374529930d7601b1eef8d32bc79ae870b6079b069401709c2a8bf9e75f36" +checksum = "be35209fd0781c5401458ab66e4f98accf63553e8fae7425503e92fdd319783b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] +[[package]] +name = "thin-vec" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "144f754d318415ac792f9d69fc87abbbfc043ce2ef041c60f16ad828f638717d" + [[package]] name = "thiserror" version = "1.0.69" @@ -11301,11 +11206,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.17", + "thiserror-impl 2.0.18", ] [[package]] @@ -11316,18 +11221,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "thiserror-impl" -version = "2.0.17" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -11350,9 +11255,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.44" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "itoa", @@ -11360,22 +11265,22 @@ dependencies = [ "num-conv", "num_threads", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.24" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" dependencies = [ "num-conv", "time-core", @@ -11392,9 +11297,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", "zerovec", @@ -11412,9 +11317,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" dependencies = [ "tinyvec_macros", ] @@ -11427,9 +11332,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.48.0" +version = "1.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" dependencies = [ "bytes", "libc", @@ -11437,7 +11342,7 @@ dependencies = [ "parking_lot 0.12.5", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.1", + "socket2 0.6.3", "tokio-macros", "tracing", "windows-sys 0.61.2", @@ -11445,13 +11350,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -11477,9 +11382,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" dependencies = [ "futures-core", "pin-project-lite", @@ -11499,22 +11404,6 @@ dependencies = [ "tungstenite 0.21.0", ] -[[package]] -name = "tokio-tungstenite" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" -dependencies = [ - "futures-util", - "log", - "rustls", - "rustls-pki-types", - "tokio", - "tokio-rustls", - "tungstenite 0.26.2", - "webpki-roots 0.26.11", -] - [[package]] name = "tokio-tungstenite" version = "0.27.0" @@ -11535,15 +11424,19 @@ checksum = "d25a406cddcc431a75d3d9afc6a7c0f7428d4891dd973e4d54c56b46127bf857" dependencies = [ "futures-util", "log", + "rustls", + "rustls-pki-types", "tokio", + "tokio-rustls", "tungstenite 0.28.0", + "webpki-roots 0.26.11", ] [[package]] name = "tokio-util" -version = "0.7.16" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", @@ -11564,105 +11457,104 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.23" +version = "0.9.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" dependencies = [ - "serde", + "indexmap 2.13.0", + "serde_core", "serde_spanned", - "toml_datetime 0.6.11", - "toml_edit 0.22.27", + "toml_datetime 0.7.5+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 0.7.15", ] [[package]] name = "toml_datetime" -version = "0.6.11" +version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" dependencies = [ - "serde", + "serde_core", ] [[package]] name = "toml_datetime" -version = "0.7.3" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" dependencies = [ "serde_core", ] [[package]] name = "toml_edit" -version = "0.22.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" -dependencies = [ - "indexmap 2.11.4", - "serde", - "serde_spanned", - "toml_datetime 0.6.11", - "toml_write", - "winnow", -] - -[[package]] -name = "toml_edit" -version = "0.23.7" +version = "0.25.10+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +checksum = "a82418ca169e235e6c399a84e395ab6debeb3bc90edc959bf0f48647c6a32d1b" dependencies = [ - "indexmap 2.11.4", - "toml_datetime 0.7.3", + "indexmap 2.13.0", + "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", - "winnow", + "winnow 1.0.1", ] [[package]] name = "toml_parser" -version = "1.0.4" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow", + "winnow 1.0.1", ] [[package]] -name = "toml_write" -version = "0.1.2" +name = "toml_writer" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" [[package]] name = "tonic" -version = "0.12.3" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" +checksum = "fec7c61a0695dc1887c1b53952990f3ad2e3a31453e1f49f10e75424943a93ec" dependencies = [ - "async-stream", "async-trait", - "axum 0.7.9", + "axum", "base64 0.22.1", "bytes", - "h2 0.4.12", - "http 1.3.1", + "h2 0.4.13", + "http 1.4.0", "http-body 1.0.1", "http-body-util", - "hyper 1.7.0", + "hyper 1.9.0", "hyper-timeout", "hyper-util", "percent-encoding", "pin-project", - "prost", - "socket2 0.5.10", + "socket2 0.6.3", + "sync_wrapper", "tokio", "tokio-stream", - "tower 0.4.13", + "tower 0.5.3", "tower-layer", "tower-service", "tracing", ] +[[package]] +name = "tonic-prost" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a55376a0bbaa4975a3f10d009ad763d8f4108f067c7c2e74f3001fb49778d309" +dependencies = [ + "bytes", + "prost 0.14.3", + "tonic", +] + [[package]] name = "tower" version = "0.4.13" @@ -11671,11 +11563,8 @@ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", - "indexmap 1.9.3", "pin-project", "pin-project-lite", - "rand 0.8.5", - "slab", "tokio", "tokio-util", "tower-layer", @@ -11685,15 +11574,18 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", + "indexmap 2.13.0", "pin-project-lite", + "slab", "sync_wrapper", "tokio", + "tokio-util", "tower-layer", "tower-service", "tracing", @@ -11705,9 +11597,9 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.0", "bytes", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "http-body-util", "pin-project-lite", @@ -11720,18 +11612,23 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "bitflags 2.9.4", + "async-compression", + "bitflags 2.11.0", "bytes", + "futures-core", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", + "http-body-util", "iri-string", "pin-project-lite", - "tower 0.5.2", + "tokio", + "tokio-util", + "tower 0.5.3", "tower-layer", "tower-service", ] @@ -11750,9 +11647,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "log", "pin-project-lite", @@ -11762,20 +11659,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "tracing-core" -version = "0.1.34" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -11804,9 +11701,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.20" +version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" dependencies = [ "matchers", "nu-ansi-term", @@ -11824,37 +11721,6 @@ dependencies = [ "tracing-serde", ] -[[package]] -name = "tracing-test" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "557b891436fe0d5e0e363427fc7f217abf9ccd510d5136549847bdcbcd011d68" -dependencies = [ - "tracing-core", - "tracing-subscriber", - "tracing-test-macro", -] - -[[package]] -name = "tracing-test-macro" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" -dependencies = [ - "quote", - "syn 2.0.106", -] - -[[package]] -name = "triomphe" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd69c5aa8f924c7519d6372789a74eac5b94fb0f8fcf0d4a97eb0bfc3e785f39" -dependencies = [ - "serde", - "stable_deref_trait", -] - [[package]] name = "try-lock" version = "0.2.5" @@ -11870,7 +11736,7 @@ dependencies = [ "byteorder", "bytes", "data-encoding", - "http 1.3.1", + "http 1.4.0", "httparse", "log", "rand 0.8.5", @@ -11880,25 +11746,6 @@ dependencies = [ "utf-8", ] -[[package]] -name = "tungstenite" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" -dependencies = [ - "bytes", - "data-encoding", - "http 1.3.1", - "httparse", - "log", - "rand 0.9.2", - "rustls", - "rustls-pki-types", - "sha1", - "thiserror 2.0.17", - "utf-8", -] - [[package]] name = "tungstenite" version = "0.27.0" @@ -11907,12 +11754,12 @@ checksum = "eadc29d668c91fcc564941132e17b28a7ceb2f3ebf0b9dae3e03fd7a6748eb0d" dependencies = [ "bytes", "data-encoding", - "http 1.3.1", + "http 1.4.0", "httparse", "log", "rand 0.9.2", "sha1", - "thiserror 2.0.17", + "thiserror 2.0.18", "utf-8", ] @@ -11924,12 +11771,14 @@ checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442" dependencies = [ "bytes", "data-encoding", - "http 1.3.1", + "http 1.4.0", "httparse", "log", "rand 0.9.2", + "rustls", + "rustls-pki-types", "sha1", - "thiserror 2.0.17", + "thiserror 2.0.18", "utf-8", ] @@ -11972,7 +11821,7 @@ checksum = "27a7a9b72ba121f6f1f6c3632b85604cac41aedb5ddc70accbebb6cac83de846" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -12013,45 +11862,39 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unescaper" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c01d12e3a56a4432a8b436f293c25f4808bdf9e9f9f98f9260bba1f1bc5a1f26" +checksum = "4064ed685c487dbc25bd3f0e9548f2e34bab9d18cefc700f9ec2dba74ba1138e" dependencies = [ - "thiserror 2.0.17", + "thiserror 2.0.18", ] [[package]] name = "unicase" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" - -[[package]] -name = "unicode-bidi" -version = "0.3.18" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" [[package]] name = "unicode-ident" -version = "1.0.19" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[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", ] [[package]] name = "unicode-segmentation" -version = "1.12.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" [[package]] name = "unicode-xid" @@ -12111,14 +11954,15 @@ checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" [[package]] name = "url" -version = "2.5.7" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", - "idna 1.1.0", + "idna", "percent-encoding", "serde", + "serde_derive", ] [[package]] @@ -12129,9 +11973,9 @@ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] name = "utf8-width" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" +checksum = "1292c0d970b54115d14f2492fe0170adf21d68a1de108eebc51c1df4f346a091" [[package]] name = "utf8_iter" @@ -12147,7 +11991,7 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "util" -version = "0.21.0" +version = "0.22.3" dependencies = [ "anyhow", "num-traits", @@ -12158,73 +12002,67 @@ dependencies = [ [[package]] name = "uuid" -version = "1.18.1" +version = "1.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.2", "js-sys", - "rand 0.9.2", + "rand 0.10.0", "wasm-bindgen", ] [[package]] name = "validator" -version = "0.12.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d6937c33ec6039d8071bcf72933146b5bbe378d645d8fa59bdadabfc2a249" +checksum = "43fb22e1a008ece370ce08a3e9e4447a910e92621bb49b85d6e48a45397e7cfa" dependencies = [ - "idna 0.2.3", - "lazy_static", + "idna", + "once_cell", "regex", "serde", "serde_derive", "serde_json", "url", "validator_derive", - "validator_types", ] [[package]] name = "validator_derive" -version = "0.12.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4286b4497f270f59276a89ae0ad109d5f8f18c69b613e3fb22b61201aadb0c4d" +checksum = "b7df16e474ef958526d1205f6dda359fdfab79d9aa6d54bafcb92dcd07673dca" dependencies = [ - "if_chain", - "lazy_static", - "proc-macro-error", + "darling 0.20.11", + "once_cell", + "proc-macro-error2", "proc-macro2", "quote", - "regex", - "syn 1.0.109", - "validator_types", + "syn 2.0.117", ] -[[package]] -name = "validator_types" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad9680608df133af2c1ddd5eaf1ddce91d60d61b6bc51494ef326458365a470a" - [[package]] name = "valuable" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" -[[package]] -name = "value-bag" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943ce29a8a743eb10d6082545d861b24f9d1b160b7d741e0f2cdf726bec909c5" - [[package]] name = "vcpkg" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vector-map" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b34e878e32c750bb4253be124adb9da1dc93ca5d98c210787badf1e1ccdca7" +dependencies = [ + "serde", +] + [[package]] name = "vergen" version = "8.3.2" @@ -12289,6 +12127,7 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4378d202ff965b011c64817db11d5829506d3404edeadb61f190d111da3f231c" dependencies = [ + "async-compression", "bytes", "futures-channel", "futures-util", @@ -12312,12 +12151,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" - [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" @@ -12326,58 +12159,50 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.1+wasi-0.2.4" +version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" dependencies = [ "wit-bindgen", ] [[package]] -name = "wasm-bindgen" -version = "0.2.104" +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", + "wit-bindgen", ] [[package]] -name = "wasm-bindgen-backend" -version = "0.2.104" +name = "wasm-bindgen" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" +checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0" dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.106", + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.54" +version = "0.4.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +checksum = "03623de6905b7206edd0a75f69f747f134b7f0a2323392d664448bf2d3c5d87e" dependencies = [ - "cfg-if", "js-sys", - "once_cell", "wasm-bindgen", - "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.104" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -12385,26 +12210,60 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.104" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.106", - "wasm-bindgen-backend", + "syn 2.0.117", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.104" +version = "0.2.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b" dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap 2.13.0", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.11.0", + "hashbrown 0.15.5", + "indexmap 2.13.0", + "semver 1.0.27", +] + [[package]] name = "wasmtimer" version = "0.4.3" @@ -12421,9 +12280,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.81" +version = "0.3.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +checksum = "cd70027e39b12f0849461e08ffc50b9cd7688d942c1c8e3c7b22273236b4dd0a" dependencies = [ "js-sys", "wasm-bindgen", @@ -12439,20 +12298,29 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki-root-certs" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "webpki-roots" version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "webpki-roots 1.0.3", + "webpki-roots 1.0.6", ] [[package]] name = "webpki-roots" -version = "1.0.3" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" +checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" dependencies = [ "rustls-pki-types", ] @@ -12496,22 +12364,23 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.53.0" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efc5cf48f83140dcaab716eeaea345f9e93d0018fb81162753a3f76c3397b538" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" dependencies = [ - "windows-core 0.53.0", - "windows-targets 0.52.6", + "windows-collections", + "windows-core", + "windows-future", + "windows-numerics", ] [[package]] -name = "windows-core" -version = "0.53.0" +name = "windows-collections" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dcc5b895a6377f1ab9fa55acedab1fd5ac0db66ad1e6c7f47e28a22e446a5dd" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" dependencies = [ - "windows-result 0.1.2", - "windows-targets 0.52.6", + "windows-core", ] [[package]] @@ -12523,10 +12392,21 @@ dependencies = [ "windows-implement", "windows-interface", "windows-link", - "windows-result 0.4.1", + "windows-result", "windows-strings", ] +[[package]] +name = "windows-future" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" +dependencies = [ + "windows-core", + "windows-link", + "windows-threading", +] + [[package]] name = "windows-implement" version = "0.60.2" @@ -12535,7 +12415,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -12546,7 +12426,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -12556,12 +12436,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] -name = "windows-result" -version = "0.1.2" +name = "windows-numerics" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" dependencies = [ - "windows-targets 0.52.6", + "windows-core", + "windows-link", +] + +[[package]] +name = "windows-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +dependencies = [ + "windows-link", + "windows-result", + "windows-strings", ] [[package]] @@ -12584,11 +12476,11 @@ dependencies = [ [[package]] name = "windows-sys" -version = "0.48.0" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets 0.48.5", + "windows-targets 0.42.2", ] [[package]] @@ -12629,17 +12521,17 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -12675,11 +12567,20 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] +[[package]] +name = "windows-threading" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link", +] + [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" @@ -12695,9 +12596,9 @@ checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" @@ -12713,9 +12614,9 @@ checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" @@ -12743,9 +12644,9 @@ checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" @@ -12761,9 +12662,9 @@ checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" @@ -12779,9 +12680,9 @@ checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" @@ -12797,9 +12698,9 @@ checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" @@ -12815,34 +12716,138 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.13" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" dependencies = [ "memchr", ] [[package]] -name = "winreg" -version = "0.50.0" +name = "winnow" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" dependencies = [ - "cfg-if", - "windows-sys 0.48.0", + "memchr", +] + +[[package]] +name = "wiremock" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08db1edfb05d9b3c1542e521aea074442088292f00b5f28e435c714a98f85031" +dependencies = [ + "assert-json-diff", + "base64 0.22.1", + "deadpool", + "futures", + "http 1.4.0", + "http-body-util", + "hyper 1.9.0", + "hyper-util", + "log", + "once_cell", + "regex", + "serde", + "serde_json", + "tokio", + "url", ] [[package]] name = "wit-bindgen" -version = "0.46.0" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck 0.5.0", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap 2.13.0", + "prettyplease", + "syn 2.0.117", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.117", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.11.0", + "indexmap 2.13.0", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap 2.13.0", + "log", + "semver 1.0.27", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "ws_stream_wasm" @@ -12857,7 +12862,7 @@ dependencies = [ "pharos", "rustc_version 0.4.1", "send_wrapper", - "thiserror 2.0.17", + "thiserror 2.0.18", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -12897,15 +12902,15 @@ dependencies = [ "nom", "oid-registry", "rusticata-macros", - "thiserror 2.0.17", + "thiserror 2.0.18", "time", ] [[package]] name = "xml-rs" -version = "0.8.27" +version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" +checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" [[package]] name = "xmltree" @@ -12954,9 +12959,9 @@ dependencies = [ [[package]] name = "yamux" -version = "0.13.7" +version = "0.13.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6927cfe0edfae4b26a369df6bad49cd0ef088c0ec48f4045b2084bcaedc10246" +checksum = "1991f6690292030e31b0144d73f5e8368936c58e45e7068254f7138b23b00672" dependencies = [ "futures", "log", @@ -12985,11 +12990,10 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -12997,54 +13001,54 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.27" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.27" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "zerofrom" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", "synstructure", ] @@ -13059,20 +13063,20 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" dependencies = [ "displaydoc", "yoke", @@ -13081,9 +13085,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.4" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" dependencies = [ "yoke", "zerofrom", @@ -13092,13 +13096,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -13113,6 +13117,12 @@ dependencies = [ "flate2", ] +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" + [[package]] name = "zstd" version = "0.13.3" diff --git a/Cargo.toml b/Cargo.toml index aa794f5a56..81add3dda5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,6 @@ [workspace] members = [ + "crates/block-commitments", "crates/block-hashes", "crates/casm-hashes", "crates/class-hash", @@ -11,9 +12,9 @@ members = [ "crates/ethereum", "crates/executor", "crates/feeder-gateway", + "crates/gas-price", "crates/gateway-client", "crates/gateway-test-fixtures", - "crates/gateway-test-utils", "crates/gateway-types", "crates/merkle-tree", "crates/p2p", @@ -28,123 +29,131 @@ members = [ "crates/tagged", "crates/tagged-debug-derive", "crates/util", + "crates/validator", "crates/version", ] exclude = ["crates/load-test", "utils/pathfinder-probe"] resolver = "2" [workspace.package] -version = "0.21.0" +version = "0.22.3" edition = "2021" license = "MIT OR Apache-2.0" -rust-version = "1.88" +rust-version = "1.91" authors = ["Equilibrium Labs "] [workspace.dependencies] -anyhow = "1.0.99" +anyhow = "1.0.102" ark-ff = "0.5.0" assert_matches = "1.5.0" -async-trait = "0.1.73" -axum = "0.8.4" +async-trait = "0.1.89" +axum = "0.8.8" base64 = "0.22.1" bincode = "2.0.1" bitvec = "1.0.1" -blockifier = { version = "0.16.0-rc.1", features = ["node_api", "reexecution"] } -bloomfilter = "1.0.16" -bytes = "1.4.0" +blockifier = { version = "0.18.0-rc.1", features = [ + "node_api", + "reexecution", +] } +bytes = "1.11.1" cached = "0.44.0" # This one needs to match the version used by blockifier -cairo-lang-starknet-classes = "=2.12.3" +cairo-lang-starknet-classes = "=2.17.0-rc.4" # This one needs to match the version used by blockifier -cairo-native = "0.6.0" +cairo-native = "0.9.0-rc.5" # This one needs to match the version used by blockifier -cairo-vm = "=2.5.0" +cairo-vm = "=3.2.0" casm-compiler-v1_0_0-alpha6 = { package = "cairo-lang-starknet", git = "https://github.com/starkware-libs/cairo", tag = "v1.0.0-alpha.6" } casm-compiler-v1_0_0-rc0 = { package = "cairo-lang-starknet", git = "https://github.com/starkware-libs/cairo", tag = "v1.0.0-rc0" } casm-compiler-v1_1_1 = { package = "cairo-lang-starknet", version = "=1.1.1" } -casm-compiler-v2 = { package = "cairo-lang-starknet", version = "=2.12.3" } -clap = "4.5.45" -console-subscriber = "0.4.1" +casm-compiler-v2 = { package = "cairo-lang-starknet", version = "=2.17.0-rc.4" } +clap = "4.6.0" +console-subscriber = "0.5" const-decoder = "0.4.0" -const_format = "0.2.31" +const_format = "0.2.35" criterion = "0.5.1" dashmap = "6.1" -fake = "2.8.0" +fake = "2.10.0" ff = "0.13" -flate2 = "1.0.27" +flate2 = "1.1.9" futures = { version = "0.3", default-features = false } futures-bounded = "0.3.0" -governor = "0.10.1" +governor = "0.10.4" hex = "0.4.3" -http = "1.0.0" -http-body = "1.0.0" -httpmock = "0.7.0-rc.1" -hyper = "1.0.0" -ipnet = "2.9.0" +http = "1.4.0" +http-body = "1.0.1" +hyper = "1.8.1" +ipnet = "2.12.0" jemallocator = "0.5.4" -libp2p = { version = "0.55.0", default-features = false } -libp2p-identity = "0.2.2" +libc = "0.2.183" +libp2p = { version = "0.56.0", default-features = false } +libp2p-identity = "0.2.13" libp2p-plaintext = "0.43.0" -libp2p-swarm-test = "0.5.0" -metrics = "0.20.1" -metrics-exporter-prometheus = "0.11.0" +libp2p-swarm-test = "0.6.0" +metrics = "0.24.3" +metrics-exporter-prometheus = { version = "0.18.1", default-features = false } mime = "0.3" mockall = "0.11.4" -num-bigint = "0.4.4" +num-bigint = "0.4.6" num-traits = "0.2.19" -paste = "1.0.14" +paste = "1.0.15" pretty_assertions_sorted = "1.2.3" -primitive-types = "0.12.1" -proc-macro2 = "1.0.97" -proptest = "1.2.0" -prost = "0.13.0" -prost-build = "0.13.0" -prost-types = "0.13.0" +primitive-types = "0.12.2" +proc-macro2 = "1.0.106" +proptest = "1.11.0" +prost = "0.13.5" +prost-build = "0.13.5" +prost-types = "0.13.5" quote = "1.0" r2d2 = "0.8.10" r2d2_sqlite = "0.31.0" rand = "0.8.5" rand_chacha = "0.3.1" rayon = "1.11.0" -reqwest = { version = "0.12.23", default-features = false, features = [ +reqwest = { version = "0.12.28", default-features = false, features = [ "http2", "rustls-tls-native-roots", "charset", + "gzip", + "deflate", ] } rstest = "0.18.2" rusqlite = "0.37.0" -semver = "1.0.18" -serde = "1.0.192" -serde_json = "1.0.142" -serde_with = "3.7.0" -sha2 = "0.10.7" +rustls = "0.23.37" +semver = "1.0.27" +serde = "1.0.228" +serde_json = "1.0.149" +serde_with = "3.18.0" +sha2 = "0.10.9" sha3 = "0.10" +siphasher = "1.0.2" smallvec = "1.15.1" # This one needs to match the version used by blockifier -starknet-types-core = "=0.2.3" +starknet-types-core = "=0.2.4" # This one needs to match the version used by blockifier -starknet_api = "0.16.0-rc.1" +starknet_api = { version = "0.18.0-rc.1" } syn = "1.0" -tempfile = "3.8" -test-log = { version = "0.2.12", features = ["trace"] } -thiserror = "2.0.14" -time = "0.3.36" -tokio = "1.47" +tempfile = "3.27" +test-log = { version = "0.2.19", features = ["trace"] } +thiserror = "2.0.18" +time = "0.3.47" +tokio = "1.50" tokio-retry = "0.3.0" -tokio-stream = "0.1.14" +tokio-stream = "0.1.18" tokio-tungstenite = "0.27" -tokio-util = { version = "0.7.16", features = ["rt"] } +tokio-util = { version = "0.7.18", features = ["rt"] } tower = { version = "0.4.13", default-features = false } tower-http = { version = "0.5.2", default-features = false } -tracing = "0.1.37" -tracing-subscriber = { version = "0.3.18", features = ["json"] } +tracing = "0.1.44" +tracing-subscriber = { version = "0.3.23", features = ["json"] } unsigned-varint = "0.8.0" -url = "2.4.1" +url = "2.5.8" vergen = { version = "8", default-features = false } void = "1.0.2" warp = "0.3.7" -zeroize = "1.6.0" -zstd = "0.13.2" +wiremock = "0.6.5" +zeroize = "1.8.2" +zstd = "0.13.3" [profile.release] overflow-checks = true diff --git a/Dockerfile b/Dockerfile index e9d48267fe..6d620c755e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ # Note that we're explicitly using the Debian bookworm image to make sure we're # compatible with the Debian container we'll be copying the pathfinder # executable to. -FROM --platform=$BUILDPLATFORM lukemathwalker/cargo-chef:0.1.72-rust-1.88.0-slim-bookworm AS cargo-chef +FROM --platform=$BUILDPLATFORM lukemathwalker/cargo-chef:0.1.73-rust-1.91.1-slim-bookworm AS cargo-chef WORKDIR /usr/src/pathfinder FROM --platform=$BUILDPLATFORM cargo-chef AS rust-planner @@ -32,7 +32,7 @@ RUN TARGETARCH=${TARGETARCH} ./cargo-chef-cook.sh --profile release-lto --recipe # Compile the actual libraries and binary now COPY --exclude=rust-toolchain.toml . . -ARG PATHFINDER_FORCE_VERSION +ARG PATHFINDER_FORCE_VERSION=0.0.0-docker COPY ./build/cargo-build.sh ./cargo-build.sh RUN TARGETARCH=${TARGETARCH} \ PATHFINDER_FORCE_VERSION=${PATHFINDER_FORCE_VERSION} \ @@ -53,7 +53,7 @@ RUN groupadd --gid 1000 pathfinder && useradd --no-log-init --uid 1000 --gid pat COPY --from=rust-builder /usr/src/pathfinder/pathfinder-${TARGETARCH} /usr/local/bin/pathfinder # Hack to enable `ld` link with glibc without the libc6-dev package being installed -RUN if [[ ${TARGETARCH} == "amd64" ]]; then ln -s /lib/x86_64-linux-gnu/libc.so.6 /lib/x86_64-linux-gnu/libc.so; fi +RUN if [ "${TARGETARCH}" = "amd64" ]; then ln -s /lib/x86_64-linux-gnu/libc.so.6 /lib/x86_64-linux-gnu/libc.so; fi # Create directory and volume for persistent data RUN install --owner 1000 --group 1000 --mode 0755 -d /usr/share/pathfinder/data diff --git a/README.md b/README.md index 2b8c2cfbf1..ecbb414e0c 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ A [Starknet](https://www.starknet.io) full node giving you a safe view into Starknet. For detailed instructions on how to install, run and use Pathfinder please check our -[documentation site](https://eqlabs.github.io/pathfinder/). +[documentation site](https://equilibriumco.github.io/pathfinder/). ## License diff --git a/crates/block-commitments/Cargo.toml b/crates/block-commitments/Cargo.toml new file mode 100644 index 0000000000..842ec2d2aa --- /dev/null +++ b/crates/block-commitments/Cargo.toml @@ -0,0 +1,26 @@ +[package] +name = "pathfinder-block-commitments" +version = { workspace = true } +authors = { workspace = true } +edition = { workspace = true } +license = { workspace = true } +rust-version = { workspace = true } + +[dependencies] +anyhow = { workspace = true } +pathfinder-common = { path = "../common" } +pathfinder-crypto = { path = "../crypto" } +pathfinder-merkle-tree = { path = "../merkle-tree" } +rayon = { workspace = true } +serde_json = { workspace = true } +sha3 = { workspace = true } +starknet-gateway-types = { path = "../gateway-types" } +tracing = { workspace = true } + +[dev-dependencies] +assert_matches = { workspace = true } +pathfinder-common = { path = "../common", features = ["full-serde"] } +pathfinder-crypto = { path = "../crypto" } +rstest = { workspace = true } +starknet-gateway-test-fixtures = { path = "../gateway-test-fixtures" } +starknet-gateway-types = { path = "../gateway-types" } diff --git a/crates/pathfinder/src/state/block_hash.rs b/crates/block-commitments/src/lib.rs similarity index 99% rename from crates/pathfinder/src/state/block_hash.rs rename to crates/block-commitments/src/lib.rs index de817c3439..b223879e68 100644 --- a/crates/pathfinder/src/state/block_hash.rs +++ b/crates/block-commitments/src/lib.rs @@ -374,6 +374,8 @@ fn compute_final_hash_v1(header: &BlockHeader, starknet_version_str: &str) -> Bl BlockHash(hasher.finish().into()) } +// TODO consider passing a representation of the block header that does not +// contain the hash itself. pub fn compute_final_hash(header: &BlockHeader) -> BlockHash { compute_final_hash0(header, &header.starknet_version.to_string()) } diff --git a/crates/class-hash/Cargo.toml b/crates/class-hash/Cargo.toml index 1fd2d8cd85..f7fe8331bc 100644 --- a/crates/class-hash/Cargo.toml +++ b/crates/class-hash/Cargo.toml @@ -6,7 +6,7 @@ edition = { workspace = true } license = { workspace = true } rust-version = { workspace = true } description = "Pathfinder's class hash computation and verification" -repository = "https://github.com/eqlabs/pathfinder" +repository = "https://github.com/equilibriumco/pathfinder" keywords = ["starknet", "ethereum", "web3", "cryptography", "hash"] categories = [ "cryptography", @@ -17,14 +17,11 @@ categories = [ [dependencies] anyhow = { workspace = true } -pathfinder-common = { version = "0.21.0", path = "../common" } -pathfinder-crypto = { version = "0.21.0", path = "../crypto" } +pathfinder-common = { version = "0.22.3", path = "../common" } +pathfinder-crypto = { version = "0.22.3", path = "../crypto" } primitive-types = { workspace = true } serde = { workspace = true, features = ["derive"] } -serde_json = { workspace = true, features = [ - "arbitrary_precision", - "raw_value", -] } +serde_json = { workspace = true, features = ["arbitrary_precision", "raw_value"] } serde_with = { workspace = true } sha3 = { workspace = true } thiserror = { workspace = true } diff --git a/crates/class-hash/README.md b/crates/class-hash/README.md index 475c919084..2f4e605b88 100644 --- a/crates/class-hash/README.md +++ b/crates/class-hash/README.md @@ -2,7 +2,7 @@ [![Documentation](https://docs.rs/pathfinder-class-hash/badge.svg)](https://docs.rs/pathfinder-class-hash) [![Crates.io](https://img.shields.io/crates/v/pathfinder-class-hash)](https://crates.io/crates/pathfinder-class-hash) -[![License](https://img.shields.io/crates/l/pathfinder-class-hash)](https://github.com/eqlabs/pathfinder/blob/main/LICENSE-MIT) +[![License](https://img.shields.io/crates/l/pathfinder-class-hash)](https://github.com/equilibriumco/pathfinder/blob/main/LICENSE-MIT) This crate provides functionality to compute class hashes for both Cairo 0.x and Sierra (Cairo 1.x+) contracts in the Starknet ecosystem. It implements the official Starknet class hash computation algorithm, handling special cases for different Cairo versions and maintaining compatibility with the network's expectations. diff --git a/crates/class-hash/src/lib.rs b/crates/class-hash/src/lib.rs index 2400fe0097..4750834526 100644 --- a/crates/class-hash/src/lib.rs +++ b/crates/class-hash/src/lib.rs @@ -58,6 +58,12 @@ use anyhow::{Context, Error, Result}; use pathfinder_common::class_definition::EntryPointType::*; +use pathfinder_common::class_definition::{ + SerializedCairoDefinition, + SerializedClassDefinition, + SerializedOpaqueClassDefinition, + SerializedSierraDefinition, +}; use pathfinder_common::{felt_bytes, ClassHash}; use pathfinder_crypto::hash::{HashChain, PoseidonHasher}; use pathfinder_crypto::Felt; @@ -80,22 +86,47 @@ impl ComputedClassHash { } } -/// Computes the starknet class hash for given class definition JSON blob. +/// Consumes an opaque serialized class definition and outputs the computed +/// class hash as well as the definition reinterpreted as either a serialized +/// Cairo or Sierra definition. /// /// This function first parses the JSON blob to decide if it's a Cairo or Sierra /// class definition and then calls the appropriate function to compute the /// class hash with the parsed definition. -pub fn compute_class_hash(contract_definition_dump: &[u8]) -> Result { - let contract_definition = parse_contract_definition(contract_definition_dump) +pub fn compute_class_hash( + serialized_definition: SerializedOpaqueClassDefinition, +) -> Result<(ComputedClassHash, SerializedClassDefinition)> { + let contract_definition = parse_contract_definition(&serialized_definition) .context("Failed to parse contract definition")?; match contract_definition { json::ContractDefinition::Sierra(definition) => compute_sierra_class_hash(definition) .map(ComputedClassHash::Sierra) - .context("Compute class hash"), + .context("Compute class hash") + .map(|hash| { + ( + hash, + // It is safe to reinterpret the serialized definition as a Sierra definition + // since the parsing step succeeded and confirmed it is a + // Sierra definition. + SerializedClassDefinition::Sierra(SerializedSierraDefinition::from_bytes( + serialized_definition.into_bytes(), + )), + ) + }), json::ContractDefinition::Cairo(definition) => compute_cairo_class_hash(definition.into()) .map(ComputedClassHash::Cairo) - .context("Compute class hash"), + .context("Compute class hash") + .map(|hash| { + ( + hash, + // It is safe to reinterpret the serialized definition as a Cairo definition + // since the parsing step succeeded and confirmed it is a Cairo definition. + SerializedClassDefinition::Cairo(SerializedCairoDefinition::from_bytes( + serialized_definition.into_bytes(), + )), + ) + }), } } @@ -132,14 +163,16 @@ pub fn compute_cairo_hinted_class_hash( /// /// Due to an issue in serde_json we can't use an untagged enum and simply /// derive a Deserialize implementation: -pub fn parse_contract_definition( - contract_definition_dump: &[u8], +fn parse_contract_definition( + serialized_definition: &SerializedOpaqueClassDefinition, ) -> serde_json::Result> { - serde_json::from_slice::>(contract_definition_dump) + serde_json::from_slice::>(serialized_definition.as_bytes()) .map(json::ContractDefinition::Sierra) .or_else(|_| { - serde_json::from_slice::>(contract_definition_dump) - .map(json::ContractDefinition::Cairo) + serde_json::from_slice::>( + serialized_definition.as_bytes(), + ) + .map(json::ContractDefinition::Cairo) }) } @@ -799,17 +832,22 @@ pub mod json { #[cfg(test)] mod test_vectors { + use pathfinder_common::class_definition::SerializedOpaqueClassDefinition; use pathfinder_common::macro_prelude::*; use starknet_gateway_test_fixtures::class_definitions::*; use super::super::{compute_class_hash, ComputedClassHash}; - #[tokio::test] - async fn first() { - let hash = compute_class_hash(INTEGRATION_TEST).unwrap(); + fn hash(data: &[u8]) -> ComputedClassHash { + compute_class_hash(SerializedOpaqueClassDefinition::from_slice(data)) + .unwrap() + .0 + } + #[test] + fn first() { assert_eq!( - hash, + hash(INTEGRATION_TEST), ComputedClassHash::Cairo(class_hash!( "0x031da92cf5f54bcb81b447e219e2b791b23f3052d12b6c9abd04ff2e5626576" )) @@ -818,113 +856,93 @@ pub mod json { #[test] fn second() { - let hash = super::super::compute_class_hash(CONTRACT_DEFINITION).unwrap(); - assert_eq!( - hash, + hash(CONTRACT_DEFINITION), ComputedClassHash::Cairo(class_hash!( "0x50b2148c0d782914e0b12a1a32abe5e398930b7e914f82c65cb7afce0a0ab9b" )) ); } - #[tokio::test] - async fn genesis_contract() { - let hash = compute_class_hash(GOERLI_GENESIS).unwrap(); - + #[test] + fn genesis_contract() { assert_eq!( - hash, + hash(GOERLI_GENESIS), ComputedClassHash::Cairo(class_hash!( "0x10455c752b86932ce552f2b0fe81a880746649b9aee7e0d842bf3f52378f9f8" )) ); } - #[tokio::test] - async fn cairo_0_8() { + #[test] + fn cairo_0_8() { // Cairo 0.8 update broke our class hash calculation by adding new attribute // fields (which we now need to ignore if empty). - - let expected = ComputedClassHash::Cairo(class_hash!( - "056b96c1d1bbfa01af44b465763d1b71150fa00c6c9d54c3947f57e979ff68c3" - )); - - // Known contract which triggered a hash mismatch failure. - let extract = tokio::task::spawn_blocking(move || -> anyhow::Result<_> { - let hash = compute_class_hash(CAIRO_0_8_NEW_ATTRIBUTES)?; - Ok(hash) - }); - let calculated_hash = extract.await.unwrap().unwrap(); - - assert_eq!(calculated_hash, expected); + assert_eq!( + // Known contract which triggered a hash mismatch failure. + hash(CAIRO_0_8_NEW_ATTRIBUTES), + ComputedClassHash::Cairo(class_hash!( + "056b96c1d1bbfa01af44b465763d1b71150fa00c6c9d54c3947f57e979ff68c3" + )) + ); } - #[tokio::test] - async fn cairo_0_10() { + #[test] + fn cairo_0_10() { // Contract whose class triggered a deserialization issue because of the new // `compiler_version` property. - let hash = compute_class_hash(CAIRO_0_10_COMPILER_VERSION).unwrap(); - assert_eq!( - hash, + hash(CAIRO_0_10_COMPILER_VERSION), ComputedClassHash::Cairo(class_hash!( "0xa69700a89b1fa3648adff91c438b79c75f7dcb0f4798938a144cce221639d6" )) ); } - #[tokio::test] - async fn cairo_0_10_part_2() { + #[test] + fn cairo_0_10_part_2() { // Contract who's class contains `compiler_version` property as well as // `cairo_type` with tuple values. These tuple values require a // space to be injected in order to achieve the correct hash. - let hash = compute_class_hash(CAIRO_0_10_TUPLES_INTEGRATION).unwrap(); - assert_eq!( - hash, + hash(CAIRO_0_10_TUPLES_INTEGRATION), ComputedClassHash::Cairo(class_hash!( "0x542460935cea188d21e752d8459d82d60497866aaad21f873cbb61621d34f7f" )) ); } - #[tokio::test] - async fn cairo_0_10_part_3() { + #[test] + fn cairo_0_10_part_3() { // Contract who's class contains `compiler_version` property as well as // `cairo_type` with tuple values. These tuple values require a // space to be injected in order to achieve the correct hash. - let hash = compute_class_hash(CAIRO_0_10_TUPLES_GOERLI).unwrap(); - assert_eq!( - hash, + hash(CAIRO_0_10_TUPLES_GOERLI), ComputedClassHash::Cairo(class_hash!( "0x66af14b94491ba4e2aea1117acf0a3155c53d92fdfd9c1f1dcac90dc2d30157" )) ); } - #[tokio::test] - async fn cairo_0_11_sierra() { - let hash = compute_class_hash(CAIRO_0_11_SIERRA).unwrap(); - + #[test] + fn cairo_0_11_sierra() { assert_eq!( - hash, + hash(CAIRO_0_11_SIERRA), ComputedClassHash::Sierra(class_hash!( "0x4e70b19333ae94bd958625f7b61ce9eec631653597e68645e13780061b2136c" )) ) } - #[tokio::test] - async fn cairo_0_11_with_decimal_entry_point_offset() { - let hash = compute_class_hash(CAIRO_0_11_WITH_DECIMAL_ENTRY_POINT_OFFSET).unwrap(); - + #[test] + fn cairo_0_11_with_decimal_entry_point_offset() { assert_eq!( - hash, + hash(CAIRO_0_11_WITH_DECIMAL_ENTRY_POINT_OFFSET), ComputedClassHash::Cairo(class_hash!( "0x0484c163658bcce5f9916f486171ac60143a92897533aa7ff7ac800b16c63311" )) - ) + ); } } diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index 976fcbf232..29c0c104c3 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -6,7 +6,7 @@ edition = { workspace = true } license = { workspace = true } rust-version = { workspace = true } description = "Common types and utilities for Pathfinder" -repository = "https://github.com/eqlabs/pathfinder" +repository = "https://github.com/equilibriumco/pathfinder" keywords = ["starknet", "ethereum", "blockchain", "web3", "types"] categories = [ "cryptography::cryptocurrencies", @@ -21,22 +21,20 @@ full-serde = [] [dependencies] anyhow = { workspace = true } +base64 = { workspace = true } bitvec = { workspace = true } fake = { workspace = true, features = ["derive"] } metrics = { workspace = true } num-bigint = { workspace = true } num-traits = "0.2" paste = { workspace = true } -pathfinder-crypto = { version = "0.21.0", path = "../crypto" } +pathfinder-crypto = { version = "0.22.3", path = "../crypto" } pathfinder-tagged = { version = "0.1.0", path = "../tagged" } pathfinder-tagged-debug-derive = { version = "0.1.0", path = "../tagged-debug-derive" } primitive-types = { workspace = true, features = ["serde"] } rand = { workspace = true } serde = { workspace = true, features = ["derive"] } -serde_json = { workspace = true, features = [ - "arbitrary_precision", - "raw_value", -] } +serde_json = { workspace = true, features = ["arbitrary_precision", "raw_value"] } serde_with = { workspace = true } sha3 = { workspace = true } thiserror = { workspace = true } diff --git a/crates/common/fixtures/test_contract.casm b/crates/common/fixtures/test_contract.casm deleted file mode 100644 index 28101d37b7..0000000000 --- a/crates/common/fixtures/test_contract.casm +++ /dev/null @@ -1,563 +0,0 @@ -{ - "prime": "0x800000000000011000000000000000000000000000000000000000000000001", - "compiler_version": "1.0.0", - "bytecode": [ - "0xa0680017fff8000", - "0x7", - "0x482680017ffa8000", - "0xffffffffffffffffffffffffffffa5c4", - "0x400280007ff97fff", - "0x10780017fff7fff", - "0xa", - "0x4825800180007ffa", - "0x5a3c", - "0x400280007ff97fff", - "0x482680017ff98000", - "0x1", - "0x48127ffe7fff8000", - "0x10780017fff7fff", - "0x13", - "0x40780017fff7fff", - "0x68", - "0x40780017fff7fff", - "0x1", - "0x480680017fff8000", - "0x4f7574206f6620676173", - "0x400080007ffe7fff", - "0x482680017ff98000", - "0x1", - "0x480a7ffa7fff8000", - "0x480a7ffb7fff8000", - "0x480680017fff8000", - "0x1", - "0x48127ffa7fff8000", - "0x482480017ff98000", - "0x1", - "0x208b7fff7fff7ffe", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0xe3", - "0x20680017fff7ffe", - "0x7", - "0x10780017fff7fff", - "0x2", - "0x48127fff7fff8000", - "0x10780017fff7fff", - "0x12", - "0x40780017fff7fff", - "0x5d", - "0x40780017fff7fff", - "0x1", - "0x480680017fff8000", - "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473", - "0x400080007ffe7fff", - "0x48127f967fff8000", - "0x48127f967fff8000", - "0x480a7ffb7fff8000", - "0x480680017fff8000", - "0x1", - "0x48127ffa7fff8000", - "0x482480017ff98000", - "0x1", - "0x208b7fff7fff7ffe", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", - "0x1104800180018000", - "0xc8", - "0x20680017fff7ffe", - "0x7", - "0x10780017fff7fff", - "0x2", - "0x48127fff7fff8000", - "0x10780017fff7fff", - "0x12", - "0x40780017fff7fff", - "0x53", - "0x40780017fff7fff", - "0x1", - "0x480680017fff8000", - "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473", - "0x400080007ffe7fff", - "0x48127f967fff8000", - "0x48127f967fff8000", - "0x480a7ffb7fff8000", - "0x480680017fff8000", - "0x1", - "0x48127ffa7fff8000", - "0x482480017ff98000", - "0x1", - "0x208b7fff7fff7ffe", - "0x48127ffb7fff8000", - "0x48127ffb7fff8000", - "0x1104800180018000", - "0xad", - "0x20680017fff7ffe", - "0x7", - "0x10780017fff7fff", - "0x2", - "0x48127fff7fff8000", - "0x10780017fff7fff", - "0x12", - "0x40780017fff7fff", - "0x49", - "0x40780017fff7fff", - "0x1", - "0x480680017fff8000", - "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473", - "0x400080007ffe7fff", - "0x48127f967fff8000", - "0x48127f967fff8000", - "0x480a7ffb7fff8000", - "0x480680017fff8000", - "0x1", - "0x48127ffa7fff8000", - "0x482480017ff98000", - "0x1", - "0x208b7fff7fff7ffe", - "0x48307ffb80007ffc", - "0x480680017fff8000", - "0x0", - "0x1104800180018000", - "0xa5", - "0x20680017fff7fff", - "0x6", - "0x10780017fff7fff", - "0x2", - "0x10780017fff7fff", - "0x15", - "0x40780017fff7fff", - "0x3a", - "0x480a7ffb7fff8000", - "0x1104800180018000", - "0xa8", - "0x40780017fff7fff", - "0x1", - "0x480680017fff8000", - "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", - "0x400080007ffe7fff", - "0x48127f967fff8000", - "0x48127f967fff8000", - "0x48127ffb7fff8000", - "0x480680017fff8000", - "0x1", - "0x48127ffa7fff8000", - "0x482480017ff98000", - "0x1", - "0x208b7fff7fff7ffe", - "0x48127fd77fff8000", - "0x480a7ffb7fff8000", - "0x48127fdf7fff8000", - "0x48127fe87fff8000", - "0x48127ff17fff8000", - "0x1104800180018000", - "0x95", - "0x20680017fff7ffd", - "0x7", - "0x10780017fff7fff", - "0x2", - "0x48127ffe7fff8000", - "0x10780017fff7fff", - "0xc", - "0x40780017fff7fff", - "0x10", - "0x48127f967fff8000", - "0x48127fe97fff8000", - "0x48127fe97fff8000", - "0x480680017fff8000", - "0x1", - "0x48127fea7fff8000", - "0x48127fea7fff8000", - "0x208b7fff7fff7ffe", - "0x40780017fff7fff", - "0x1", - "0x48127fff7fff8000", - "0x48127ffe7fff8000", - "0x48127ff87fff8000", - "0x1104800180018000", - "0xb3", - "0x48127ffe7fff8000", - "0x48127ffe7fff8000", - "0x48127ff57fff8000", - "0x1104800180018000", - "0xae", - "0x48127f967fff8000", - "0x48127fe97fff8000", - "0x48127fe97fff8000", - "0x480680017fff8000", - "0x0", - "0x48127ffa7fff8000", - "0x48127ffa7fff8000", - "0x208b7fff7fff7ffe", - "0xa0680017fff8000", - "0x7", - "0x482680017ffa8000", - "0xfffffffffffffffffffffffffffff704", - "0x400280007ff97fff", - "0x10780017fff7fff", - "0xa", - "0x4825800180007ffa", - "0x8fc", - "0x400280007ff97fff", - "0x482680017ff98000", - "0x1", - "0x48127ffe7fff8000", - "0x10780017fff7fff", - "0x13", - "0x40780017fff7fff", - "0x10", - "0x40780017fff7fff", - "0x1", - "0x480680017fff8000", - "0x4f7574206f6620676173", - "0x400080007ffe7fff", - "0x482680017ff98000", - "0x1", - "0x480a7ffa7fff8000", - "0x480a7ffb7fff8000", - "0x480680017fff8000", - "0x1", - "0x48127ffa7fff8000", - "0x482480017ff98000", - "0x1", - "0x208b7fff7fff7ffe", - "0x48297ffc80007ffd", - "0x480680017fff8000", - "0x0", - "0x1104800180018000", - "0x3b", - "0x20680017fff7fff", - "0x8", - "0x10780017fff7fff", - "0x2", - "0x40780017fff7fff", - "0x3", - "0x10780017fff7fff", - "0x13", - "0x480a7ffb7fff8000", - "0x1104800180018000", - "0x3e", - "0x40780017fff7fff", - "0x1", - "0x480680017fff8000", - "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", - "0x400080007ffe7fff", - "0x48127fee7fff8000", - "0x48127fee7fff8000", - "0x48127ffb7fff8000", - "0x480680017fff8000", - "0x1", - "0x48127ffa7fff8000", - "0x482480017ff98000", - "0x1", - "0x208b7fff7fff7ffe", - "0x1104800180018000", - "0x6b", - "0x40780017fff7fff", - "0x1", - "0x48127fee7fff8000", - "0x48127fee7fff8000", - "0x480a7ffb7fff8000", - "0x480680017fff8000", - "0x0", - "0x48127ffb7fff8000", - "0x48127ffa7fff8000", - "0x208b7fff7fff7ffe", - "0x48297ffc80007ffd", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0xa", - "0x482680017ffc8000", - "0x1", - "0x480a7ffd7fff8000", - "0x480680017fff8000", - "0x0", - "0x480280007ffc8000", - "0x10780017fff7fff", - "0x8", - "0x480a7ffc7fff8000", - "0x480a7ffd7fff8000", - "0x480680017fff8000", - "0x1", - "0x480680017fff8000", - "0x0", - "0x208b7fff7fff7ffe", - "0x48297ffd80007ffc", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0x6", - "0x480680017fff8000", - "0x0", - "0x10780017fff7fff", - "0x4", - "0x480680017fff8000", - "0x1", - "0x1104800180018000", - "0x41", - "0x208b7fff7fff7ffe", - "0x480a7ffd7fff8000", - "0x208b7fff7fff7ffe", - "0x480a7ff97fff8000", - "0x480a7ffa7fff8000", - "0x1104800180018000", - "0x3e", - "0x20680017fff7ffd", - "0x7", - "0x10780017fff7fff", - "0x2", - "0x48127ffe7fff8000", - "0x10780017fff7fff", - "0xc", - "0x40780017fff7fff", - "0x13", - "0x48127fe87fff8000", - "0x48127fe87fff8000", - "0x480a7ffb7fff8000", - "0x480680017fff8000", - "0x1", - "0x48127fe77fff8000", - "0x48127fe77fff8000", - "0x208b7fff7fff7ffe", - "0x48127ffa7fff8000", - "0x48127ffa7fff8000", - "0x482480017ffd8000", - "0x1", - "0x1104800180018000", - "0x50", - "0x20680017fff7ffd", - "0x6", - "0x10780017fff7fff", - "0x2", - "0x10780017fff7fff", - "0xc", - "0x40780017fff7fff", - "0x3", - "0x48127ff87fff8000", - "0x48127ff87fff8000", - "0x480a7ffb7fff8000", - "0x480680017fff8000", - "0x1", - "0x48127ff77fff8000", - "0x48127ff77fff8000", - "0x208b7fff7fff7ffe", - "0x1104800180018000", - "0x66", - "0x48127ff87fff8000", - "0x48127ff87fff8000", - "0x480a7ffb7fff8000", - "0x480680017fff8000", - "0x0", - "0x48307ffb7fe98000", - "0x480680017fff8000", - "0x0", - "0x208b7fff7fff7ffe", - "0x400380007ffc7ffd", - "0x480a7ffb7fff8000", - "0x482680017ffc8000", - "0x1", - "0x208b7fff7fff7ffe", - "0x208b7fff7fff7ffe", - "0x480680017fff8000", - "0x1", - "0x48287ffd80007fff", - "0x208b7fff7fff7ffe", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x1275130f95dda36bcbb6e9d28796c1d7e10b6e9fd5ed083e0ede4b12f613528", - "0x480680017fff8000", - "0x53746f7261676552656164", - "0x400280007ffd7fff", - "0x400380017ffd7ffc", - "0x400280027ffd7ffd", - "0x400280037ffd7ffe", - "0x480280057ffd8000", - "0x20680017fff7fff", - "0x8", - "0x480280047ffd8000", - "0x482680017ffd8000", - "0x7", - "0x480280067ffd8000", - "0x10780017fff7fff", - "0x10", - "0x40780017fff7fff", - "0x2", - "0x40780017fff7fff", - "0x1", - "0x400080007fff7ffc", - "0x480280047ffd8000", - "0x482680017ffd8000", - "0x7", - "0x480680017fff8000", - "0x1", - "0x48127ffc7fff8000", - "0x482480017ffb8000", - "0x1", - "0x208b7fff7fff7ffe", - "0x48127ffd7fff8000", - "0x48127ffd7fff8000", - "0x480680017fff8000", - "0x0", - "0x48127ffc7fff8000", - "0x480680017fff8000", - "0x0", - "0x208b7fff7fff7ffe", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x1275130f95dda36bcbb6e9d28796c1d7e10b6e9fd5ed083e0ede4b12f613528", - "0x480680017fff8000", - "0x53746f726167655772697465", - "0x400280007ffc7fff", - "0x400380017ffc7ffb", - "0x400280027ffc7ffd", - "0x400280037ffc7ffe", - "0x400380047ffc7ffd", - "0x480280067ffc8000", - "0x20680017fff7fff", - "0x9", - "0x40780017fff7fff", - "0x1", - "0x480280057ffc8000", - "0x482680017ffc8000", - "0x7", - "0x10780017fff7fff", - "0xe", - "0x40780017fff7fff", - "0x1", - "0x400080007fff7ffe", - "0x480280057ffc8000", - "0x482680017ffc8000", - "0x7", - "0x480680017fff8000", - "0x1", - "0x48127ffc7fff8000", - "0x482480017ffb8000", - "0x1", - "0x208b7fff7fff7ffe", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x208b7fff7fff7ffe", - "0x480680017fff8000", - "0x1", - "0x208b7fff7fff7ffe" - ], - "hints": [ - [ - 0, - [ - "memory[ap + 0] = 23100 <= memory[fp + -6]" - ] - ], - [ - 17, - [ - "memory[ap + 0] = segments.add()" - ] - ], - [ - 45, - [ - "memory[ap + 0] = segments.add()" - ] - ], - [ - 72, - [ - "memory[ap + 0] = segments.add()" - ] - ], - [ - 99, - [ - "memory[ap + 0] = segments.add()" - ] - ], - [ - 129, - [ - "memory[ap + 0] = segments.add()" - ] - ], - [ - 167, - [ - "memory[ap + 0] = segments.add()" - ] - ], - [ - 187, - [ - "memory[ap + 0] = 2300 <= memory[fp + -6]" - ] - ], - [ - 204, - [ - "memory[ap + 0] = segments.add()" - ] - ], - [ - 235, - [ - "memory[ap + 0] = segments.add()" - ] - ], - [ - 251, - [ - "memory[ap + 0] = segments.add()" - ] - ], - [ - 371, - [ - "syscall_handler.syscall(syscall_ptr=memory[fp + -3])" - ] - ], - [ - 382, - [ - "memory[ap + 0] = segments.add()" - ] - ], - [ - 413, - [ - "syscall_handler.syscall(syscall_ptr=memory[fp + -4])" - ] - ], - [ - 423, - [ - "memory[ap + 0] = segments.add()" - ] - ] - ], - "entry_points_by_type": { - "EXTERNAL": [ - { - "selector": "0x22ff5f21f0b81b113e63f7db6da94fedef11b2119b4088b89664fb9a3cb658", - "offset": 0, - "builtins": [ - "range_check" - ] - }, - { - "selector": "0x1fc3f77ebc090777f567969ad9823cf6334ab888acb385ca72668ec5adbde80", - "offset": 187, - "builtins": [ - "range_check" - ] - } - ], - "L1_HANDLER": [], - "CONSTRUCTOR": [] - } -} diff --git a/crates/common/fixtures/test_contract.json b/crates/common/fixtures/test_contract.json deleted file mode 100644 index 001ccbb1c5..0000000000 --- a/crates/common/fixtures/test_contract.json +++ /dev/null @@ -1,3890 +0,0 @@ -{ - "sierra_program": [ - "0xd", - "0x4796fc05dd91ed72", - "0x4796fc05dd91ed72", - "0x0", - "0x73b9292e27823975", - "0x73b9292e27823975", - "0x0", - "0x1019fc7928c89c74", - "0x1019fc7928c89c74", - "0x0", - "0xda421e7696ea3653", - "0x6b36f3c18920c686", - "0x1", - "0x1", - "0x1019fc7928c89c74", - "0x3fec3caf3eeac8c1", - "0xbbeca76c5f31d160", - "0x3", - "0x0", - "0x3fec3caf3eeac8c1", - "0x1", - "0xda421e7696ea3653", - "0x1", - "0xda421e7696ea3653", - "0xa81e2cdaf6921adc", - "0xa81e2cdaf6921adc", - "0x0", - "0x8f26e0f086cc2787", - "0xab807cec72d2ca00", - "0x1", - "0x0", - "0x50e2cd3738c9e831", - "0x6bc7cb23210710ea", - "0xbbeca76c5f31d160", - "0x3", - "0x0", - "0x6bc7cb23210710ea", - "0x1", - "0x1019fc7928c89c74", - "0x1", - "0x8f26e0f086cc2787", - "0x9478b2e531ac5cf1", - "0x9478b2e531ac5cf1", - "0x0", - "0x34a42c11f822cb6e", - "0xbbeca76c5f31d160", - "0x3", - "0x0", - "0x34a42c11f822cb6e", - "0x1", - "0x8f26e0f086cc2787", - "0x1", - "0x8f26e0f086cc2787", - "0x1527969abfed2874", - "0xbbeca76c5f31d160", - "0x3", - "0x0", - "0x1527969abfed2874", - "0x1", - "0x1019fc7928c89c74", - "0x1", - "0xda421e7696ea3653", - "0x3d1853debe46c7d7", - "0xbbeca76c5f31d160", - "0x3", - "0x0", - "0x3d1853debe46c7d7", - "0x1", - "0x8f26e0f086cc2787", - "0x1", - "0xda421e7696ea3653", - "0x8f052623299f54ce", - "0x8f052623299f54ce", - "0x0", - "0x4a", - "0x40001aa317609755", - "0x40001aa317609755", - "0x0", - "0x2e3080ad677e478f", - "0x2e3080ad677e478f", - "0x0", - "0xde3d8cad2eafc132", - "0x6cf23f6e840da115", - "0x1", - "0x1", - "0x4796fc05dd91ed72", - "0x4e3806ea276a3e4c", - "0x1f573f5f6e8fdd53", - "0x1", - "0x1", - "0x4796fc05dd91ed72", - "0x80524a506b1a247f", - "0x6cf23f6e840da115", - "0x1", - "0x1", - "0x73b9292e27823975", - "0xeb1776ddf832a4cd", - "0xeb1776ddf832a4cd", - "0x0", - "0xd68dca6cdd702c52", - "0xf1a2a766dcd55bac", - "0x1", - "0x1", - "0xda421e7696ea3653", - "0x6b832b529245fc0e", - "0x5c3b512ab65429ab", - "0x1", - "0x1", - "0x1019fc7928c89c74", - "0x49b7b88f79411c37", - "0xdee7a697d3ffd720", - "0x1", - "0x2", - "0x4f7574206f6620676173", - "0xe19a8b360a2ecaf0", - "0x6cf23f6e840da115", - "0x1", - "0x1", - "0x1019fc7928c89c74", - "0x1a6384043777ab9e", - "0xf2386aab8139bfdb", - "0x1", - "0x1", - "0x1019fc7928c89c74", - "0xcd74e575508f1d86", - "0xdd9d9fc20319c2ab", - "0x2", - "0x1", - "0x3fec3caf3eeac8c1", - "0x2", - "0x1", - "0xf180aa0ea7c19064", - "0x6cf23f6e840da115", - "0x1", - "0x1", - "0xa81e2cdaf6921adc", - "0x5153fdc14e766f67", - "0x6cf23f6e840da115", - "0x1", - "0x1", - "0x3fec3caf3eeac8c1", - "0x4b561324e135e845", - "0x1f573f5f6e8fdd53", - "0x1", - "0x1", - "0x3fec3caf3eeac8c1", - "0x9c9b35d154bee19", - "0x6cf23f6e840da115", - "0x1", - "0x1", - "0xda421e7696ea3653", - "0xdd789742f18f358a", - "0x13862ed316aec3c6", - "0x1", - "0x3", - "0x117c73d904c08776", - "0xd80c729bdaefe9", - "0xa159ac87b7eaf0ce", - "0x1", - "0x1", - "0x6bc7cb23210710ea", - "0xade79fa6b970cf3", - "0x3d62743225635773", - "0x1", - "0x1", - "0x8f26e0f086cc2787", - "0x69206aae01c2bbdf", - "0xdee7a697d3ffd720", - "0x1", - "0x2", - "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473", - "0x8758a0f7745fcde9", - "0xf1a2a766dcd55bac", - "0x1", - "0x1", - "0x1019fc7928c89c74", - "0xe2f13e1412afc37", - "0x6e67aa2ac0dcbffa", - "0x1", - "0x1", - "0x1019fc7928c89c74", - "0xd66c84e010e5eb1", - "0x6fe2c988d1309f21", - "0x1", - "0x2", - "0x0", - "0x766e2b5dfa3adf7", - "0x6cf23f6e840da115", - "0x1", - "0x1", - "0x9478b2e531ac5cf1", - "0x4c0bdccbdff83b25", - "0x1f573f5f6e8fdd53", - "0x1", - "0x1", - "0x9478b2e531ac5cf1", - "0xfb244b6d29152080", - "0x13862ed316aec3c6", - "0x1", - "0x3", - "0x7ea4f3b74f17576c", - "0xc326331c0e22b25", - "0xa159ac87b7eaf0ce", - "0x1", - "0x1", - "0x34a42c11f822cb6e", - "0xa87b4aed3bbd1a60", - "0xf1a2a766dcd55bac", - "0x1", - "0x1", - "0x8f26e0f086cc2787", - "0xeb626ee71b52bda9", - "0x13862ed316aec3c6", - "0x1", - "0x3", - "0x7ea2e0fdfaa4df37", - "0x860b04ac4720f5e9", - "0xdee7a697d3ffd720", - "0x1", - "0x2", - "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", - "0x26a38667531876bb", - "0x13862ed316aec3c6", - "0x1", - "0x3", - "0xee258eef7ff5cdcd", - "0xe779e1cc21dd27ed", - "0xa159ac87b7eaf0ce", - "0x1", - "0x1", - "0x1527969abfed2874", - "0x5521fbfd6000c2c3", - "0x13862ed316aec3c6", - "0x1", - "0x3", - "0x7c7236b29914f265", - "0xcd78677550923043", - "0xdd9d9fc20319c2ab", - "0x2", - "0x1", - "0x3fec3caf3eeac8c1", - "0x2", - "0x0", - "0x2b69557ab8ac93ba", - "0x13862ed316aec3c6", - "0x1", - "0x3", - "0x4fe0bfde64138346", - "0x1e2af3539e94062f", - "0xbf771ae2c728ab62", - "0x1", - "0x1", - "0x1019fc7928c89c74", - "0x7222b8a3a97e2054", - "0xdd9d9fc20319c2ab", - "0x2", - "0x1", - "0x6bc7cb23210710ea", - "0x2", - "0x0", - "0x4b767b5215972f1f", - "0x1f573f5f6e8fdd53", - "0x1", - "0x1", - "0xda421e7696ea3653", - "0x57aff1bc04c19b82", - "0x6cf23f6e840da115", - "0x1", - "0x1", - "0x6bc7cb23210710ea", - "0x4d91ad1ee830fbc4", - "0x1f573f5f6e8fdd53", - "0x1", - "0x1", - "0x6bc7cb23210710ea", - "0xfa2ac48bb106f38e", - "0xe77b664c82917caa", - "0x1", - "0x1", - "0x8f26e0f086cc2787", - "0x72263aa3a9813311", - "0xdd9d9fc20319c2ab", - "0x2", - "0x1", - "0x6bc7cb23210710ea", - "0x2", - "0x1", - "0x5f98d15b8b837aa4", - "0x5f98d15b8b837aa4", - "0x0", - "0xdcc917876828c798", - "0xdd9d9fc20319c2ab", - "0x2", - "0x1", - "0x34a42c11f822cb6e", - "0x2", - "0x0", - "0x800537254fd781ae", - "0x6cf23f6e840da115", - "0x1", - "0x1", - "0x34a42c11f822cb6e", - "0xcf4b4476de7c4ac8", - "0x1f573f5f6e8fdd53", - "0x1", - "0x1", - "0x34a42c11f822cb6e", - "0xdccc9987682bda55", - "0xdd9d9fc20319c2ab", - "0x2", - "0x1", - "0x34a42c11f822cb6e", - "0x2", - "0x1", - "0x6d19cfb44bd7bd60", - "0x13862ed316aec3c6", - "0x1", - "0x3", - "0xc9100565330fcf74", - "0xcb6a317e425994cd", - "0x6cf23f6e840da115", - "0x1", - "0x1", - "0x8f26e0f086cc2787", - "0x813e88e74519a693", - "0x1f573f5f6e8fdd53", - "0x1", - "0x1", - "0x8f26e0f086cc2787", - "0x161cb8f5a90f1ec5", - "0x13862ed316aec3c6", - "0x1", - "0x3", - "0x253646d1241f703f", - "0xf93bac73abde77df", - "0xdd9d9fc20319c2ab", - "0x2", - "0x1", - "0x1527969abfed2874", - "0x2", - "0x1", - "0x355cf7988c2d4538", - "0x6cf23f6e840da115", - "0x1", - "0x1", - "0x1527969abfed2874", - "0x602a965ec286fa86", - "0x1f573f5f6e8fdd53", - "0x1", - "0x1", - "0x1527969abfed2874", - "0x3c6772f9fdc790d3", - "0xdee7a697d3ffd720", - "0x1", - "0x2", - "0x1", - "0x73b3134f0555e2f3", - "0xca642818f4346d26", - "0x1", - "0x1", - "0x1019fc7928c89c74", - "0xa99eeeec04fd7428", - "0xa99eeeec04fd7428", - "0x0", - "0x457817b1652bacc6", - "0x1f573f5f6e8fdd53", - "0x1", - "0x1", - "0x1019fc7928c89c74", - "0x7c0b66f97d94213a", - "0x13862ed316aec3c6", - "0x1", - "0x3", - "0x5321223df47fae5e", - "0x6e3f08889c24dfe8", - "0xa159ac87b7eaf0ce", - "0x1", - "0x1", - "0x3d1853debe46c7d7", - "0x6dd9dffc2626891", - "0x13862ed316aec3c6", - "0x1", - "0x3", - "0x368b13f928889537", - "0xf9382a73abdb6522", - "0xdd9d9fc20319c2ab", - "0x2", - "0x1", - "0x1527969abfed2874", - "0x2", - "0x0", - "0xa0b9663f16816682", - "0xa0b9663f16816682", - "0x0", - "0x3c63f0f9fdc47e16", - "0xdee7a697d3ffd720", - "0x1", - "0x2", - "0x0", - "0x486254ecff162827", - "0xe66d7bce32a43cb9", - "0x1", - "0x2", - "0x1275130f95dda36bcbb6e9d28796c1d7e10b6e9fd5ed083e0ede4b12f613528", - "0x914900394fdb7662", - "0x6cf23f6e840da115", - "0x1", - "0x1", - "0x8f052623299f54ce", - "0xaaa39b37c3c2490d", - "0xaaa39b37c3c2490d", - "0x0", - "0x26a9331975ac9649", - "0x1f573f5f6e8fdd53", - "0x1", - "0x1", - "0x73b9292e27823975", - "0x9a2e86cd6963b01e", - "0x1f573f5f6e8fdd53", - "0x1", - "0x1", - "0xa81e2cdaf6921adc", - "0x74903af5ed38aea8", - "0x74903af5ed38aea8", - "0x0", - "0x94700eff4bc4fff8", - "0xdd9d9fc20319c2ab", - "0x2", - "0x1", - "0x3d1853debe46c7d7", - "0x2", - "0x1", - "0xa85c4ad5c8e4bcd5", - "0x6cf23f6e840da115", - "0x1", - "0x1", - "0x3d1853debe46c7d7", - "0xc71e6d1009f3cbd3", - "0x1f573f5f6e8fdd53", - "0x1", - "0x1", - "0x3d1853debe46c7d7", - "0x947390ff4bc812b5", - "0xdd9d9fc20319c2ab", - "0x2", - "0x1", - "0x3d1853debe46c7d7", - "0x2", - "0x0", - "0x170", - "0x0", - "0x40001aa317609755", - "0x2", - "0x0", - "0x1", - "0x2", - "0xffffffffffffffff", - "0x2", - "0x4", - "0x5", - "0x6", - "0x2", - "0x6", - "0x7", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xde3d8cad2eafc132", - "0x1", - "0x4", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x4", - "0x0", - "0x4e3806ea276a3e4c", - "0x1", - "0x4", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x8", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x5", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x9", - "0x0", - "0xeb1776ddf832a4cd", - "0x0", - "0x1", - "0x14", - "0x0", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xd68dca6cdd702c52", - "0x1", - "0x3", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x6b832b529245fc0e", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xa", - "0x0", - "0x49b7b88f79411c37", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xb", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0xb", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xb", - "0x0", - "0x1a6384043777ab9e", - "0x2", - "0xa", - "0xb", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xc", - "0x0", - "0xcd74e575508f1d86", - "0x1", - "0xc", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xd", - "0x0", - "0xde3d8cad2eafc132", - "0x1", - "0x6", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x6", - "0x0", - "0x4e3806ea276a3e4c", - "0x1", - "0x6", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xe", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x7", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xf", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x2", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x10", - "0x0", - "0x5153fdc14e766f67", - "0x1", - "0xd", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xd", - "0x0", - "0x4b561324e135e845", - "0x1", - "0xd", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x11", - "0x1", - "0x4", - "0xe", - "0xf", - "0x10", - "0x11", - "0x0", - "0x9c9b35d154bee19", - "0x1", - "0x3", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x14", - "0x0", - "0xdd789742f18f358a", - "0x1", - "0x14", - "0x1", - "0xffffffffffffffff", - "0x2", - "0x12", - "0x13", - "0x0", - "0xd80c729bdaefe9", - "0x1", - "0x13", - "0x2", - "0x17", - "0x1", - "0x15", - "0x1a", - "0x1", - "0x16", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x15", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x17", - "0x0", - "0xeb1776ddf832a4cd", - "0x0", - "0x1", - "0x28", - "0x0", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xd68dca6cdd702c52", - "0x1", - "0x12", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xade79fa6b970cf3", - "0x1", - "0x16", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x6b832b529245fc0e", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x18", - "0x0", - "0x69206aae01c2bbdf", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x19", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x19", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x19", - "0x0", - "0x1a6384043777ab9e", - "0x2", - "0x18", - "0x19", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1a", - "0x0", - "0xcd74e575508f1d86", - "0x1", - "0x1a", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1b", - "0x0", - "0xde3d8cad2eafc132", - "0x1", - "0x8", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1c", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x9", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1d", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x2", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1e", - "0x0", - "0x5153fdc14e766f67", - "0x1", - "0x1b", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1b", - "0x0", - "0x4b561324e135e845", - "0x1", - "0x1b", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1f", - "0x1", - "0x4", - "0x1c", - "0x1d", - "0x1e", - "0x1f", - "0x0", - "0x9c9b35d154bee19", - "0x1", - "0x12", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x22", - "0x0", - "0xdd789742f18f358a", - "0x1", - "0x22", - "0x1", - "0xffffffffffffffff", - "0x2", - "0x20", - "0x21", - "0x0", - "0xd80c729bdaefe9", - "0x1", - "0x21", - "0x2", - "0x2b", - "0x1", - "0x23", - "0x2e", - "0x1", - "0x24", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x23", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x25", - "0x0", - "0xeb1776ddf832a4cd", - "0x0", - "0x1", - "0x3d", - "0x0", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x8758a0f7745fcde9", - "0x1", - "0x17", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xd68dca6cdd702c52", - "0x1", - "0x20", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xade79fa6b970cf3", - "0x1", - "0x24", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x6b832b529245fc0e", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x26", - "0x0", - "0x69206aae01c2bbdf", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x27", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x27", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x27", - "0x0", - "0x1a6384043777ab9e", - "0x2", - "0x26", - "0x27", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x28", - "0x0", - "0xcd74e575508f1d86", - "0x1", - "0x28", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x29", - "0x0", - "0xde3d8cad2eafc132", - "0x1", - "0x8", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x2a", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x9", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x2b", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x2", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x2c", - "0x0", - "0x5153fdc14e766f67", - "0x1", - "0x29", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x29", - "0x0", - "0x4b561324e135e845", - "0x1", - "0x29", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x2d", - "0x1", - "0x4", - "0x2a", - "0x2b", - "0x2c", - "0x2d", - "0x0", - "0x9c9b35d154bee19", - "0x1", - "0x20", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x30", - "0x0", - "0xdd789742f18f358a", - "0x1", - "0x30", - "0x1", - "0xffffffffffffffff", - "0x2", - "0x2e", - "0x2f", - "0x0", - "0xd80c729bdaefe9", - "0x1", - "0x2f", - "0x2", - "0x40", - "0x1", - "0x31", - "0x43", - "0x1", - "0x32", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x31", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x33", - "0x0", - "0xeb1776ddf832a4cd", - "0x0", - "0x1", - "0x53", - "0x0", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x8758a0f7745fcde9", - "0x1", - "0x17", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x8758a0f7745fcde9", - "0x1", - "0x25", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xd68dca6cdd702c52", - "0x1", - "0x2e", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xade79fa6b970cf3", - "0x1", - "0x32", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x6b832b529245fc0e", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x34", - "0x0", - "0x69206aae01c2bbdf", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x35", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x35", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x35", - "0x0", - "0x1a6384043777ab9e", - "0x2", - "0x34", - "0x35", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x36", - "0x0", - "0xcd74e575508f1d86", - "0x1", - "0x36", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x37", - "0x0", - "0xde3d8cad2eafc132", - "0x1", - "0x8", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x38", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x9", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x39", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x2", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x3a", - "0x0", - "0x5153fdc14e766f67", - "0x1", - "0x37", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x37", - "0x0", - "0x4b561324e135e845", - "0x1", - "0x37", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x3b", - "0x1", - "0x4", - "0x38", - "0x39", - "0x3a", - "0x3b", - "0x0", - "0xe2f13e1412afc37", - "0x1", - "0x2e", - "0x1", - "0xffffffffffffffff", - "0x2", - "0x3c", - "0x3d", - "0x0", - "0xd68dca6cdd702c52", - "0x1", - "0x3c", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xd66c84e010e5eb1", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x3e", - "0x0", - "0x766e2b5dfa3adf7", - "0x1", - "0x3d", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x3d", - "0x0", - "0x4c0bdccbdff83b25", - "0x1", - "0x3d", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x40", - "0x0", - "0x766e2b5dfa3adf7", - "0x1", - "0x3e", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x41", - "0x0", - "0xfb244b6d29152080", - "0x2", - "0x40", - "0x41", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x3f", - "0x0", - "0xc326331c0e22b25", - "0x1", - "0x3f", - "0x2", - "0x5b", - "0x1", - "0x42", - "0x5e", - "0x1", - "0x43", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xa87b4aed3bbd1a60", - "0x1", - "0x42", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xeb1776ddf832a4cd", - "0x0", - "0x1", - "0x71", - "0x0", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xa87b4aed3bbd1a60", - "0x1", - "0x43", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x8758a0f7745fcde9", - "0x1", - "0x17", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x8758a0f7745fcde9", - "0x1", - "0x25", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x8758a0f7745fcde9", - "0x1", - "0x33", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x2", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x46", - "0x0", - "0xeb626ee71b52bda9", - "0x1", - "0x46", - "0x1", - "0xffffffffffffffff", - "0x2", - "0x44", - "0x45", - "0x0", - "0xa87b4aed3bbd1a60", - "0x1", - "0x45", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x6b832b529245fc0e", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x47", - "0x0", - "0x860b04ac4720f5e9", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x48", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x48", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x48", - "0x0", - "0x1a6384043777ab9e", - "0x2", - "0x47", - "0x48", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x49", - "0x0", - "0xcd74e575508f1d86", - "0x1", - "0x49", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x4a", - "0x0", - "0xde3d8cad2eafc132", - "0x1", - "0x8", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x4b", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x9", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x4c", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x44", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x4d", - "0x0", - "0x5153fdc14e766f67", - "0x1", - "0x4a", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x4a", - "0x0", - "0x4b561324e135e845", - "0x1", - "0x4a", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x4e", - "0x1", - "0x4", - "0x4b", - "0x4c", - "0x4d", - "0x4e", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x9", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x53", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x2", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x54", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x17", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x55", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x25", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x56", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x33", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x57", - "0x0", - "0x26a38667531876bb", - "0x5", - "0x53", - "0x54", - "0x55", - "0x56", - "0x57", - "0x1", - "0xffffffffffffffff", - "0x4", - "0x4f", - "0x50", - "0x51", - "0x52", - "0x0", - "0xe779e1cc21dd27ed", - "0x1", - "0x52", - "0x2", - "0x78", - "0x1", - "0x58", - "0x7b", - "0x1", - "0x59", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x58", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x5a", - "0x0", - "0xeb1776ddf832a4cd", - "0x0", - "0x1", - "0x84", - "0x0", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x8758a0f7745fcde9", - "0x1", - "0x51", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xcd74e575508f1d86", - "0x1", - "0x59", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x5b", - "0x0", - "0xde3d8cad2eafc132", - "0x1", - "0x8", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x5c", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x4f", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x5d", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x50", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x5e", - "0x0", - "0x5153fdc14e766f67", - "0x1", - "0x5b", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x5b", - "0x0", - "0x4b561324e135e845", - "0x1", - "0x5b", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x5f", - "0x1", - "0x4", - "0x5c", - "0x5d", - "0x5e", - "0x5f", - "0x0", - "0x6b832b529245fc0e", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x60", - "0x0", - "0x9c9b35d154bee19", - "0x1", - "0x60", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x63", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x51", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x64", - "0x0", - "0x5521fbfd6000c2c3", - "0x2", - "0x63", - "0x64", - "0x1", - "0xffffffffffffffff", - "0x2", - "0x61", - "0x62", - "0x0", - "0xa87b4aed3bbd1a60", - "0x1", - "0x62", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x9c9b35d154bee19", - "0x1", - "0x61", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x67", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x5a", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x68", - "0x0", - "0x5521fbfd6000c2c3", - "0x2", - "0x67", - "0x68", - "0x1", - "0xffffffffffffffff", - "0x2", - "0x65", - "0x66", - "0x0", - "0xa87b4aed3bbd1a60", - "0x1", - "0x66", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xcd78677550923043", - "0x1", - "0x65", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x69", - "0x0", - "0xde3d8cad2eafc132", - "0x1", - "0x8", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x6a", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x4f", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x6b", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x50", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x6c", - "0x0", - "0x5153fdc14e766f67", - "0x1", - "0x69", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x69", - "0x0", - "0x4b561324e135e845", - "0x1", - "0x69", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x6d", - "0x1", - "0x4", - "0x6a", - "0x6b", - "0x6c", - "0x6d", - "0x0", - "0x40001aa317609755", - "0x2", - "0x0", - "0x1", - "0x2", - "0xffffffffffffffff", - "0x2", - "0x4", - "0x5", - "0x9a", - "0x2", - "0x6", - "0x7", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xde3d8cad2eafc132", - "0x1", - "0x4", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x4", - "0x0", - "0x4e3806ea276a3e4c", - "0x1", - "0x4", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x8", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x5", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x9", - "0x0", - "0xeb1776ddf832a4cd", - "0x0", - "0x1", - "0xa8", - "0x0", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xd68dca6cdd702c52", - "0x1", - "0x3", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x6b832b529245fc0e", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xa", - "0x0", - "0x49b7b88f79411c37", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xb", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0xb", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xb", - "0x0", - "0x1a6384043777ab9e", - "0x2", - "0xa", - "0xb", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xc", - "0x0", - "0xcd74e575508f1d86", - "0x1", - "0xc", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xd", - "0x0", - "0xde3d8cad2eafc132", - "0x1", - "0x6", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x6", - "0x0", - "0x4e3806ea276a3e4c", - "0x1", - "0x6", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xe", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x7", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xf", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x2", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x10", - "0x0", - "0x5153fdc14e766f67", - "0x1", - "0xd", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xd", - "0x0", - "0x4b561324e135e845", - "0x1", - "0xd", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x11", - "0x1", - "0x4", - "0xe", - "0xf", - "0x10", - "0x11", - "0x0", - "0xe2f13e1412afc37", - "0x1", - "0x3", - "0x1", - "0xffffffffffffffff", - "0x2", - "0x12", - "0x13", - "0x0", - "0xd68dca6cdd702c52", - "0x1", - "0x12", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xd66c84e010e5eb1", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x14", - "0x0", - "0x766e2b5dfa3adf7", - "0x1", - "0x13", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x13", - "0x0", - "0x4c0bdccbdff83b25", - "0x1", - "0x13", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x16", - "0x0", - "0x766e2b5dfa3adf7", - "0x1", - "0x14", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x17", - "0x0", - "0xfb244b6d29152080", - "0x2", - "0x16", - "0x17", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x15", - "0x0", - "0xc326331c0e22b25", - "0x1", - "0x15", - "0x2", - "0xb0", - "0x1", - "0x18", - "0xb3", - "0x1", - "0x19", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xa87b4aed3bbd1a60", - "0x1", - "0x18", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xeb1776ddf832a4cd", - "0x0", - "0x1", - "0xc3", - "0x0", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xa87b4aed3bbd1a60", - "0x1", - "0x19", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x2", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1c", - "0x0", - "0xeb626ee71b52bda9", - "0x1", - "0x1c", - "0x1", - "0xffffffffffffffff", - "0x2", - "0x1a", - "0x1b", - "0x0", - "0xa87b4aed3bbd1a60", - "0x1", - "0x1b", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x6b832b529245fc0e", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1d", - "0x0", - "0x860b04ac4720f5e9", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1e", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x1e", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1e", - "0x0", - "0x1a6384043777ab9e", - "0x2", - "0x1d", - "0x1e", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1f", - "0x0", - "0xcd74e575508f1d86", - "0x1", - "0x1f", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x20", - "0x0", - "0xde3d8cad2eafc132", - "0x1", - "0x8", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x21", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x9", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x22", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x1a", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x23", - "0x0", - "0x5153fdc14e766f67", - "0x1", - "0x20", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x20", - "0x0", - "0x4b561324e135e845", - "0x1", - "0x20", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x24", - "0x1", - "0x4", - "0x21", - "0x22", - "0x23", - "0x24", - "0x0", - "0x2b69557ab8ac93ba", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x25", - "0x0", - "0xa87b4aed3bbd1a60", - "0x1", - "0x25", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x6b832b529245fc0e", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x26", - "0x0", - "0xcd78677550923043", - "0x1", - "0x26", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x27", - "0x0", - "0xde3d8cad2eafc132", - "0x1", - "0x8", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x28", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x9", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x29", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x2", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x2a", - "0x0", - "0x5153fdc14e766f67", - "0x1", - "0x27", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x27", - "0x0", - "0x4b561324e135e845", - "0x1", - "0x27", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x2b", - "0x1", - "0x4", - "0x28", - "0x29", - "0x2a", - "0x2b", - "0x0", - "0x1e2af3539e94062f", - "0x1", - "0x0", - "0x2", - "0xffffffffffffffff", - "0x2", - "0x1", - "0x2", - "0xd5", - "0x1", - "0x3", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x7222b8a3a97e2054", - "0x1", - "0x2", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x4", - "0x0", - "0x9c9b35d154bee19", - "0x1", - "0x1", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1", - "0x0", - "0x4b767b5215972f1f", - "0x1", - "0x1", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x5", - "0x0", - "0x57aff1bc04c19b82", - "0x1", - "0x4", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x4", - "0x0", - "0x4d91ad1ee830fbc4", - "0x1", - "0x4", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x6", - "0x0", - "0xeb1776ddf832a4cd", - "0x0", - "0x1", - "0xdb", - "0x0", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xfa2ac48bb106f38e", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x7", - "0x0", - "0x72263aa3a9813311", - "0x1", - "0x7", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x8", - "0x0", - "0x9c9b35d154bee19", - "0x1", - "0x3", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x5", - "0x0", - "0x57aff1bc04c19b82", - "0x1", - "0x8", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x8", - "0x0", - "0x4d91ad1ee830fbc4", - "0x1", - "0x8", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x6", - "0x0", - "0x4b767b5215972f1f", - "0x1", - "0x5", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x9", - "0x0", - "0x4d91ad1ee830fbc4", - "0x1", - "0x6", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xa", - "0x1", - "0x2", - "0x9", - "0xa", - "0x0", - "0x5f98d15b8b837aa4", - "0x2", - "0x0", - "0x1", - "0x2", - "0xffffffffffffffff", - "0x0", - "0xe5", - "0x0", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xfa2ac48bb106f38e", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x2", - "0x0", - "0xdcc917876828c798", - "0x1", - "0x2", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x3", - "0x0", - "0x800537254fd781ae", - "0x1", - "0x3", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x3", - "0x0", - "0xcf4b4476de7c4ac8", - "0x1", - "0x3", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x4", - "0x0", - "0xeb1776ddf832a4cd", - "0x0", - "0x1", - "0xea", - "0x0", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xfa2ac48bb106f38e", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x5", - "0x0", - "0xdccc9987682bda55", - "0x1", - "0x5", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x6", - "0x0", - "0x800537254fd781ae", - "0x1", - "0x6", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x6", - "0x0", - "0xcf4b4476de7c4ac8", - "0x1", - "0x6", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x4", - "0x0", - "0xcf4b4476de7c4ac8", - "0x1", - "0x4", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x8", - "0x0", - "0x6d19cfb44bd7bd60", - "0x1", - "0x8", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x7", - "0x0", - "0xcf4b4476de7c4ac8", - "0x1", - "0x7", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x9", - "0x1", - "0x1", - "0x9", - "0x0", - "0xfa2ac48bb106f38e", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x2", - "0x0", - "0xcb6a317e425994cd", - "0x1", - "0x1", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1", - "0x0", - "0x813e88e74519a693", - "0x1", - "0x1", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x3", - "0x1", - "0x2", - "0x2", - "0x3", - "0x0", - "0x8758a0f7745fcde9", - "0x1", - "0x3", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x8758a0f7745fcde9", - "0x1", - "0x4", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x8", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x1", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x9", - "0x0", - "0x161cb8f5a90f1ec5", - "0x2", - "0x8", - "0x9", - "0x1", - "0xffffffffffffffff", - "0x3", - "0x5", - "0x6", - "0x7", - "0x0", - "0xe779e1cc21dd27ed", - "0x1", - "0x7", - "0x2", - "0xf9", - "0x1", - "0xa", - "0xfc", - "0x1", - "0xb", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0xa", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xc", - "0x0", - "0xeb1776ddf832a4cd", - "0x0", - "0x1", - "0x104", - "0x0", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xf93bac73abde77df", - "0x1", - "0xb", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xd", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x5", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xe", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x6", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xf", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x2", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x10", - "0x0", - "0x355cf7988c2d4538", - "0x1", - "0xd", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xd", - "0x0", - "0x602a965ec286fa86", - "0x1", - "0xd", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x11", - "0x1", - "0x4", - "0xe", - "0xf", - "0x10", - "0x11", - "0x0", - "0x3c6772f9fdc790d3", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x12", - "0x0", - "0x73b3134f0555e2f3", - "0x1", - "0xc", - "0x1", - "0xffffffffffffffff", - "0x2", - "0xc", - "0x29", - "0x0", - "0xa99eeeec04fd7428", - "0x2", - "0x29", - "0x12", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x13", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x5", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x17", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x6", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x18", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x13", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x13", - "0x0", - "0x457817b1652bacc6", - "0x1", - "0x13", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x19", - "0x0", - "0x7c0b66f97d94213a", - "0x3", - "0x17", - "0x18", - "0x19", - "0x1", - "0xffffffffffffffff", - "0x3", - "0x14", - "0x15", - "0x16", - "0x0", - "0x6e3f08889c24dfe8", - "0x1", - "0x16", - "0x2", - "0x10d", - "0x1", - "0x1a", - "0x110", - "0x1", - "0x1b", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xcb6a317e425994cd", - "0x1", - "0x1a", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1c", - "0x0", - "0xeb1776ddf832a4cd", - "0x0", - "0x1", - "0x119", - "0x0", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x8758a0f7745fcde9", - "0x1", - "0xc", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0xf93bac73abde77df", - "0x1", - "0x1b", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1d", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x14", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1e", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x15", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1f", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x2", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x20", - "0x0", - "0x355cf7988c2d4538", - "0x1", - "0x1d", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1d", - "0x0", - "0x602a965ec286fa86", - "0x1", - "0x1d", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x21", - "0x1", - "0x4", - "0x1e", - "0x1f", - "0x20", - "0x21", - "0x0", - "0xa87b4aed3bbd1a60", - "0x1", - "0x1c", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x6dd9dffc2626891", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x22", - "0x0", - "0xa99eeeec04fd7428", - "0x2", - "0xc", - "0x22", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x23", - "0x0", - "0xf9382a73abdb6522", - "0x1", - "0x23", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x24", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x14", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x25", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x15", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x26", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x2", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x27", - "0x0", - "0x355cf7988c2d4538", - "0x1", - "0x24", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x24", - "0x0", - "0x602a965ec286fa86", - "0x1", - "0x24", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x28", - "0x1", - "0x4", - "0x25", - "0x26", - "0x27", - "0x28", - "0x0", - "0x1a6384043777ab9e", - "0x2", - "0x0", - "0x1", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x2", - "0x0", - "0xfa2ac48bb106f38e", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x3", - "0x0", - "0x9c9b35d154bee19", - "0x1", - "0x2", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x2", - "0x0", - "0x4b767b5215972f1f", - "0x1", - "0x2", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x4", - "0x0", - "0xcb6a317e425994cd", - "0x1", - "0x3", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x3", - "0x0", - "0x813e88e74519a693", - "0x1", - "0x3", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x5", - "0x1", - "0x2", - "0x4", - "0x5", - "0x0", - "0xfa2ac48bb106f38e", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x0", - "0x0", - "0xcb6a317e425994cd", - "0x1", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x0", - "0x0", - "0x813e88e74519a693", - "0x1", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1", - "0x1", - "0x1", - "0x1", - "0x0", - "0xa0b9663f16816682", - "0x1", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1", - "0x0", - "0x800537254fd781ae", - "0x1", - "0x1", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1", - "0x0", - "0xcf4b4476de7c4ac8", - "0x1", - "0x1", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x2", - "0x1", - "0x1", - "0x2", - "0x0", - "0x3c63f0f9fdc47e16", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x2", - "0x0", - "0x486254ecff162827", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x3", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x2", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x2", - "0x0", - "0x914900394fdb7662", - "0x1", - "0x3", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x3", - "0x0", - "0xaaa39b37c3c2490d", - "0x4", - "0x0", - "0x1", - "0x2", - "0x3", - "0x2", - "0xffffffffffffffff", - "0x3", - "0x4", - "0x5", - "0x6", - "0x13f", - "0x3", - "0x7", - "0x8", - "0x9", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x4", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x4", - "0x0", - "0x26a9331975ac9649", - "0x1", - "0x4", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xa", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x5", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x5", - "0x0", - "0x9a2e86cd6963b01e", - "0x1", - "0x5", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xb", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x6", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x6", - "0x0", - "0x457817b1652bacc6", - "0x1", - "0x6", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xc", - "0x0", - "0xeb1776ddf832a4cd", - "0x0", - "0x1", - "0x14a", - "0x0", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x6b832b529245fc0e", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xd", - "0x0", - "0x1a6384043777ab9e", - "0x2", - "0xd", - "0x9", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xe", - "0x0", - "0xf93bac73abde77df", - "0x1", - "0xe", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xf", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x7", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x7", - "0x0", - "0x26a9331975ac9649", - "0x1", - "0x7", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x10", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x8", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x8", - "0x0", - "0x9a2e86cd6963b01e", - "0x1", - "0x8", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x11", - "0x0", - "0x355cf7988c2d4538", - "0x1", - "0xf", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xf", - "0x0", - "0x602a965ec286fa86", - "0x1", - "0xf", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x12", - "0x1", - "0x3", - "0x10", - "0x11", - "0x12", - "0x0", - "0xf9382a73abdb6522", - "0x1", - "0xc", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x13", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0xa", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x14", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0xb", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x15", - "0x0", - "0x355cf7988c2d4538", - "0x1", - "0x13", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x13", - "0x0", - "0x602a965ec286fa86", - "0x1", - "0x13", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x16", - "0x1", - "0x3", - "0x14", - "0x15", - "0x16", - "0x0", - "0x3c63f0f9fdc47e16", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x3", - "0x0", - "0x486254ecff162827", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x4", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x3", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x3", - "0x0", - "0x914900394fdb7662", - "0x1", - "0x4", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x4", - "0x0", - "0x74903af5ed38aea8", - "0x5", - "0x0", - "0x1", - "0x3", - "0x4", - "0x2", - "0x2", - "0xffffffffffffffff", - "0x2", - "0x5", - "0x6", - "0x15b", - "0x3", - "0x7", - "0x8", - "0x9", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x5", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x5", - "0x0", - "0x26a9331975ac9649", - "0x1", - "0x5", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xa", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x6", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x6", - "0x0", - "0x9a2e86cd6963b01e", - "0x1", - "0x6", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xb", - "0x0", - "0xeb1776ddf832a4cd", - "0x0", - "0x1", - "0x166", - "0x0", - "0x0", - "0x2e3080ad677e478f", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x0", - "0x0", - "0x6b832b529245fc0e", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xc", - "0x0", - "0x1a6384043777ab9e", - "0x2", - "0xc", - "0x9", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xd", - "0x0", - "0x94700eff4bc4fff8", - "0x1", - "0xd", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xe", - "0x0", - "0x80524a506b1a247f", - "0x1", - "0x7", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x7", - "0x0", - "0x26a9331975ac9649", - "0x1", - "0x7", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xf", - "0x0", - "0xf180aa0ea7c19064", - "0x1", - "0x8", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x8", - "0x0", - "0x9a2e86cd6963b01e", - "0x1", - "0x8", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x10", - "0x0", - "0xa85c4ad5c8e4bcd5", - "0x1", - "0xe", - "0x1", - "0xffffffffffffffff", - "0x1", - "0xe", - "0x0", - "0xc71e6d1009f3cbd3", - "0x1", - "0xe", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x11", - "0x1", - "0x3", - "0xf", - "0x10", - "0x11", - "0x0", - "0xfa2ac48bb106f38e", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x12", - "0x0", - "0x947390ff4bc812b5", - "0x1", - "0x12", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x13", - "0x0", - "0x26a9331975ac9649", - "0x1", - "0xa", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x14", - "0x0", - "0x9a2e86cd6963b01e", - "0x1", - "0xb", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x15", - "0x0", - "0xa85c4ad5c8e4bcd5", - "0x1", - "0x13", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x13", - "0x0", - "0xc71e6d1009f3cbd3", - "0x1", - "0x13", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x16", - "0x1", - "0x3", - "0x14", - "0x15", - "0x16", - "0x0", - "0x3c6772f9fdc790d3", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x0", - "0x0", - "0xe19a8b360a2ecaf0", - "0x1", - "0x0", - "0x1", - "0xffffffffffffffff", - "0x1", - "0x1", - "0x1", - "0x1", - "0x1", - "0xc", - "0xecf867dce092bdb0", - "0x4", - "0x4796fc05dd91ed72", - "0x73b9292e27823975", - "0xa81e2cdaf6921adc", - "0xda421e7696ea3653", - "0x4", - "0x4796fc05dd91ed72", - "0x73b9292e27823975", - "0xa81e2cdaf6921adc", - "0x3fec3caf3eeac8c1", - "0x4", - "0x0", - "0x4796fc05dd91ed72", - "0x1", - "0x73b9292e27823975", - "0x2", - "0xa81e2cdaf6921adc", - "0x3", - "0xda421e7696ea3653", - "0x0", - "0x56e7c66e9e075ed5", - "0x4", - "0x4796fc05dd91ed72", - "0x73b9292e27823975", - "0xa81e2cdaf6921adc", - "0xda421e7696ea3653", - "0x4", - "0x4796fc05dd91ed72", - "0x73b9292e27823975", - "0xa81e2cdaf6921adc", - "0x3fec3caf3eeac8c1", - "0x4", - "0x0", - "0x4796fc05dd91ed72", - "0x1", - "0x73b9292e27823975", - "0x2", - "0xa81e2cdaf6921adc", - "0x3", - "0xda421e7696ea3653", - "0x94", - "0x117c73d904c08776", - "0x1", - "0xda421e7696ea3653", - "0x2", - "0xda421e7696ea3653", - "0x6bc7cb23210710ea", - "0x1", - "0x0", - "0xda421e7696ea3653", - "0xcd", - "0x7ea4f3b74f17576c", - "0x2", - "0x9478b2e531ac5cf1", - "0x9478b2e531ac5cf1", - "0x1", - "0x34a42c11f822cb6e", - "0x2", - "0x0", - "0x9478b2e531ac5cf1", - "0x1", - "0x9478b2e531ac5cf1", - "0xde", - "0x7ea2e0fdfaa4df37", - "0x1", - "0xa81e2cdaf6921adc", - "0x2", - "0xa81e2cdaf6921adc", - "0x8f26e0f086cc2787", - "0x1", - "0x0", - "0xa81e2cdaf6921adc", - "0xee", - "0xee258eef7ff5cdcd", - "0x5", - "0x73b9292e27823975", - "0xa81e2cdaf6921adc", - "0x1019fc7928c89c74", - "0x1019fc7928c89c74", - "0x1019fc7928c89c74", - "0x4", - "0x73b9292e27823975", - "0xa81e2cdaf6921adc", - "0x1019fc7928c89c74", - "0x1527969abfed2874", - "0x5", - "0x0", - "0x73b9292e27823975", - "0x1", - "0xa81e2cdaf6921adc", - "0x2", - "0x1019fc7928c89c74", - "0x3", - "0x1019fc7928c89c74", - "0x4", - "0x1019fc7928c89c74", - "0xf3", - "0x7c7236b29914f265", - "0x2", - "0xda421e7696ea3653", - "0x1019fc7928c89c74", - "0x2", - "0xda421e7696ea3653", - "0x8f26e0f086cc2787", - "0x2", - "0x0", - "0xda421e7696ea3653", - "0x1", - "0x1019fc7928c89c74", - "0x123", - "0x4fe0bfde64138346", - "0x0", - "0x1", - "0x8f26e0f086cc2787", - "0x0", - "0x12a", - "0xc9100565330fcf74", - "0x1", - "0x34a42c11f822cb6e", - "0x1", - "0x34a42c11f822cb6e", - "0x1", - "0x0", - "0x34a42c11f822cb6e", - "0x12e", - "0x253646d1241f703f", - "0x2", - "0x73b9292e27823975", - "0xa81e2cdaf6921adc", - "0x3", - "0x73b9292e27823975", - "0xa81e2cdaf6921adc", - "0x1527969abfed2874", - "0x2", - "0x0", - "0x73b9292e27823975", - "0x1", - "0xa81e2cdaf6921adc", - "0x132", - "0x5321223df47fae5e", - "0x3", - "0x73b9292e27823975", - "0xa81e2cdaf6921adc", - "0x1019fc7928c89c74", - "0x3", - "0x73b9292e27823975", - "0xa81e2cdaf6921adc", - "0x3d1853debe46c7d7", - "0x3", - "0x0", - "0x73b9292e27823975", - "0x1", - "0xa81e2cdaf6921adc", - "0x2", - "0x1019fc7928c89c74", - "0x150", - "0x368b13f928889537", - "0x0", - "0x1", - "0x1019fc7928c89c74", - "0x0", - "0x16d" - ], - "sierra_program_debug_info": { - "type_names": [ - [ - 1160235976330091636, - "felt" - ], - [ - 1524352590277322868, - "core::PanicResult::" - ], - [ - 3793205241841896302, - "core::bool" - ], - [ - 4402360851894814679, - "core::PanicResult::<()>" - ], - [ - 4606123242265692353, - "core::PanicResult::>" - ], - [ - 5158587525321846130, - "RangeCheck" - ], - [ - 7766399434162114794, - "core::option::Option::" - ], - [ - 8338741463261264245, - "GasBuiltin" - ], - [ - 10305685254771266766, - "StorageAddress" - ], - [ - 10315179320196999047, - "Unit" - ], - [ - 10698497612269247729, - "u128" - ], - [ - 12114169366624475868, - "System" - ], - [ - 15727166343418099283, - "Array" - ] - ], - "libfunc_names": [ - [ - 60812281350123497, - "enum_match>" - ], - [ - 494725255884073105, - "function_call" - ], - [ - 533362876658986487, - "store_temp" - ], - [ - 705292029030821401, - "store_temp>" - ], - [ - 783197501662891251, - "struct_deconstruct" - ], - [ - 878873942631263013, - "enum_match" - ], - [ - 965679407468273329, - "u128_const<0>" - ], - [ - 1022057498618297399, - "array_len" - ], - [ - 1593351733425151685, - "function_call" - ], - [ - 1901508621325806494, - "array_append" - ], - [ - 2173817310628021807, - "array_pop_front" - ], - [ - 2784216772978964155, - "function_call" - ], - [ - 2785814028946806345, - "rename" - ], - [ - 3128125401758208954, - "function_call" - ], - [ - 3328301606880823183, - "branch_align" - ], - [ - 3845220416426427704, - "store_temp>" - ], - [ - 4351586621465067030, - "felt_const<0>" - ], - [ - 4352573982907011283, - "felt_const<1>" - ], - [ - 4611715306201585493, - "get_gas" - ], - [ - 5005777036496317638, - "rename" - ], - [ - 5215824695317112871, - "storage_address_const<521780245902522698637863835114646400086704280925471510886115468919502353704>" - ], - [ - 5311917211860933687, - "felt_const<375233589013918064796019>" - ], - [ - 5428547449959868485, - "rename>>" - ], - [ - 5437669192576216863, - "rename>" - ], - [ - 5479716139820399397, - "rename" - ], - [ - 5589438960799644612, - "rename>" - ], - [ - 5636262536407563852, - "rename" - ], - [ - 5860306546826047335, - "store_temp>>" - ], - [ - 6134461233111286467, - "function_call" - ], - [ - 6318534592060038018, - "store_temp>" - ], - [ - 6888485821176052388, - "u128_eq" - ], - [ - 6929516310397647494, - "rename>" - ], - [ - 7575171868823567327, - "felt_const<1979706721653833758925397712865600297316042839304765459608024204080243>" - ], - [ - 7747083417648757774, - "array_new" - ], - [ - 7861542997825404256, - "function_call" - ], - [ - 7944077650533081064, - "enum_match>" - ], - [ - 8224338882594742356, - "enum_init, 0>" - ], - [ - 8225326244036686609, - "enum_init, 1>" - ], - [ - 8337028565305778931, - "dup" - ], - [ - 8399278132967288488, - "storage_write_syscall" - ], - [ - 8938351107186630970, - "function_call" - ], - [ - 9224840045131170222, - "store_temp" - ], - [ - 9246534694199764095, - "store_temp" - ], - [ - 9313031606326896275, - "rename" - ], - [ - 9658818963800389097, - "felt_const<7733229381460288120802334208475838166080759535023995805565484692595>" - ], - [ - 9752721977740611049, - "drop" - ], - [ - 10468899054952347234, - "store_temp" - ], - [ - 10696065604655579128, - "enum_init, 1>" - ], - [ - 10697052966097523381, - "enum_init, 0>" - ], - [ - 11109965547564150814, - "rename" - ], - [ - 11581400337906493058, - "bool_not_impl" - ], - [ - 12131653778288196821, - "store_temp>" - ], - [ - 12140379603277257312, - "drop" - ], - [ - 12222469136193516584, - "felt_add" - ], - [ - 12295842071461382413, - "storage_read_syscall" - ], - [ - 14348025378502855635, - "rename>" - ], - [ - 14657582355579507917, - "store_temp" - ], - [ - 14804710167099153798, - "enum_init>, 1>" - ], - [ - 14805697528541098051, - "enum_init>, 0>" - ], - [ - 14937107866433899208, - "rename" - ], - [ - 15460235664753175634, - "drop>" - ], - [ - 15909273028998514584, - "enum_init" - ], - [ - 15910260390440458837, - "enum_init" - ], - [ - 15958671593363682698, - "function_call" - ], - [ - 16014110525439852850, - "store_temp" - ], - [ - 16256458869162560240, - "store_temp" - ], - [ - 16679610961801062381, - "enum_match>" - ], - [ - 16940139219101328589, - "jump" - ], - [ - 16961241085505617321, - "function_call" - ], - [ - 17402095940080341092, - "store_temp" - ], - [ - 17958150190432740642, - "enum_init, 0>" - ], - [ - 17959137551874684895, - "enum_init, 1>" - ], - [ - 18026436562753352590, - "struct_construct" - ], - [ - 18096672134894264448, - "function_call" - ] - ], - "user_func_names": [ - [ - 1260009371681720182, - "core::serde::deserialize_felt" - ], - [ - 2681408492213858367, - "test_contract::test_contract::TestContract::my_storage_var::read" - ], - [ - 3930257060658713911, - "test_contract::test_contract::TestContract::internal_func" - ], - [ - 5755811285662139206, - "test_contract::test_contract::TestContract::empty" - ], - [ - 5990106628869828190, - "test_contract::test_contract::TestContract::my_storage_var::write" - ], - [ - 6262191985281949397, - "test_contract::test_contract::TestContract::__external::empty" - ], - [ - 8967289948748444261, - "core::serde::serialize_felt" - ], - [ - 9125103176442502967, - "core::starknet::use_system_implicit" - ], - [ - 9125686713590962028, - "core::integer::u128_ne" - ], - [ - 14488085933457395572, - "core::bool_not" - ], - [ - 17075512185533414832, - "test_contract::test_contract::TestContract::__external::test" - ], - [ - 17160279114460286413, - "test_contract::test_contract::TestContract::test" - ] - ] - }, - "entry_points_by_type": { - "EXTERNAL": [ - { - "selector": "0x22ff5f21f0b81b113e63f7db6da94fedef11b2119b4088b89664fb9a3cb658", - "function_idx": 0 - }, - { - "selector": "0x1fc3f77ebc090777f567969ad9823cf6334ab888acb385ca72668ec5adbde80", - "function_idx": 1 - } - ], - "L1_HANDLER": [], - "CONSTRUCTOR": [] - }, - "abi": [ - { - "type": "function", - "name": "test", - "inputs": [ - { - "name": "arg", - "ty": "core::felt" - }, - { - "name": "arg1", - "ty": "core::felt" - }, - { - "name": "arg2", - "ty": "core::felt" - } - ], - "output_ty": "core::felt" - }, - { - "type": "function", - "name": "empty", - "inputs": [], - "output_ty": "()" - } - ] -} diff --git a/crates/common/src/casm_class.rs b/crates/common/src/casm_class.rs index 2385410edf..d4db5dcaf1 100644 --- a/crates/common/src/casm_class.rs +++ b/crates/common/src/casm_class.rs @@ -90,10 +90,10 @@ pub enum NestedIntList { Node(Vec), } -impl TryFrom<&str> for CasmContractClass { - type Error = serde_json::Error; - - fn try_from(value: &str) -> Result { - serde_json::from_str(value) +impl CasmContractClass { + pub fn from_serialized_def( + definition: &crate::class_definition::SerializedCasmDefinition, + ) -> Result { + serde_json::from_slice(definition.as_bytes()) } } diff --git a/crates/common/src/class_definition.rs b/crates/common/src/class_definition.rs index 665c5466ea..f47400a9c0 100644 --- a/crates/common/src/class_definition.rs +++ b/crates/common/src/class_definition.rs @@ -12,13 +12,35 @@ use crate::{ByteCodeOffset, EntryPoint}; pub const CLASS_DEFINITION_MAX_ALLOWED_SIZE: u64 = 4 * 1024 * 1024; +#[derive(Clone, Debug, Default, PartialEq, Eq, Hash, Dummy)] +pub struct SerializedSierraDefinition(Vec); + +#[derive(Clone, Debug, Default, PartialEq, Eq, Hash, Dummy)] +pub struct SerializedCasmDefinition(Vec); + +#[derive(Clone, Debug, Default, PartialEq, Eq, Hash, Dummy)] +pub struct SerializedCairoDefinition(Vec); + +/// Carries the definition of a serialized contract class, either Sierra or +/// Cairo. The caller does not care which class definition it is. +#[derive(Clone, Debug, Default, PartialEq, Eq, Hash, Dummy)] +pub struct SerializedOpaqueClassDefinition(Vec); + +/// Carries the definition of a serialized contract class, either Sierra or +/// Cairo. +#[derive(Clone, Debug)] +pub enum SerializedClassDefinition { + Sierra(SerializedSierraDefinition), + Cairo(SerializedCairoDefinition), +} + #[derive(Debug, Deserialize, Dummy)] pub enum ClassDefinition<'a> { Sierra(Sierra<'a>), Cairo(Cairo<'a>), } -#[derive(Debug, Deserialize, Serialize)] +#[derive(Debug, Clone, Deserialize, Serialize)] #[serde(deny_unknown_fields)] pub struct Sierra<'a> { /// Contract ABI. @@ -190,3 +212,89 @@ pub struct SelectorAndFunctionIndex { pub selector: EntryPoint, pub function_idx: u64, } + +impl SerializedSierraDefinition { + pub fn from_bytes(bytes: Vec) -> Self { + Self(bytes) + } + + pub fn from_slice(bytes: &[u8]) -> Self { + Self(bytes.to_vec()) + } + + pub fn into_bytes(self) -> Vec { + self.0 + } + + pub fn as_bytes(&self) -> &[u8] { + &self.0 + } +} + +impl SerializedCasmDefinition { + pub fn from_bytes(bytes: Vec) -> Self { + Self(bytes) + } + + pub fn from_slice(bytes: &[u8]) -> Self { + Self(bytes.to_vec()) + } + + pub fn into_bytes(self) -> Vec { + self.0 + } + + pub fn as_bytes(&self) -> &[u8] { + &self.0 + } +} + +impl SerializedCairoDefinition { + pub fn from_bytes(bytes: Vec) -> Self { + Self(bytes) + } + + pub fn from_slice(bytes: &[u8]) -> Self { + Self(bytes.to_vec()) + } + + pub fn into_bytes(self) -> Vec { + self.0 + } + + pub fn as_bytes(&self) -> &[u8] { + &self.0 + } +} + +impl SerializedOpaqueClassDefinition { + pub fn from_bytes(bytes: Vec) -> Self { + Self(bytes) + } + + pub fn from_slice(bytes: &[u8]) -> Self { + Self(bytes.to_vec()) + } + + pub fn into_bytes(self) -> Vec { + self.0 + } + + pub fn as_bytes(&self) -> &[u8] { + &self.0 + } +} + +/// We can use `From` because this is always safe. +impl From for SerializedOpaqueClassDefinition { + fn from(d: SerializedSierraDefinition) -> Self { + Self::from_bytes(d.into_bytes()) + } +} + +/// We can use `From` because this is always safe. +impl From for SerializedOpaqueClassDefinition { + fn from(d: SerializedCairoDefinition) -> Self { + Self::from_bytes(d.into_bytes()) + } +} diff --git a/crates/common/src/consensus_info.rs b/crates/common/src/consensus_info.rs new file mode 100644 index 0000000000..3281a24292 --- /dev/null +++ b/crates/common/src/consensus_info.rs @@ -0,0 +1,44 @@ +use std::collections::BTreeMap; + +use serde::Deserialize; + +use crate::{BlockNumber, ContractAddress, ProposalCommitment}; + +#[derive(Default, Debug, Clone)] +pub struct ConsensusInfo { + /// Highest decided height and value. + pub highest_decision: Option, + /// Application-specific peer scores, keyed by base58-encoded peer ID. + /// + /// A peer score will only appear in the map if it has changed from the + /// initial value. + pub application_peer_scores: BTreeMap, + /// Track the state of cached proposals and finalized blocks. + pub cached: BTreeMap, +} + +#[derive(Default, Debug, Copy, Clone, PartialEq, Eq, Deserialize)] +pub struct Decision { + pub height: BlockNumber, + pub round: u32, + pub value: ProposalCommitment, +} + +#[derive(Default, Debug, Clone, PartialEq, Eq, Deserialize)] +pub struct CachedAtHeight { + pub proposals: Vec, + pub blocks: Vec, +} + +#[derive(Default, Debug, Copy, Clone, PartialEq, Eq, Deserialize)] +pub struct ProposalParts { + pub round: u32, + pub proposer: ContractAddress, + pub parts_len: usize, +} + +#[derive(Default, Debug, Copy, Clone, PartialEq, Eq, Deserialize)] +pub struct FinalizedBlock { + pub round: u32, + pub is_decided: bool, +} diff --git a/crates/common/src/header.rs b/crates/common/src/header.rs index 234fc89db8..09bf642b8c 100644 --- a/crates/common/src/header.rs +++ b/crates/common/src/header.rs @@ -93,7 +93,11 @@ impl BlockHeaderBuilder { storage_commitment: StorageCommitment, class_commitment: ClassCommitment, ) -> Self { - self.0.state_commitment = StateCommitment::calculate(storage_commitment, class_commitment); + self.0.state_commitment = StateCommitment::calculate( + storage_commitment, + class_commitment, + self.0.starknet_version, + ); self } @@ -172,6 +176,16 @@ impl BlockHeaderBuilder { self } + pub fn state_diff_commitment(mut self, state_diff_commitment: StateDiffCommitment) -> Self { + self.0.state_diff_commitment = state_diff_commitment; + self + } + + pub fn state_diff_length(mut self, state_diff_length: u64) -> Self { + self.0.state_diff_length = state_diff_length; + self + } + pub fn finalize_with_hash(mut self, hash: BlockHash) -> BlockHeader { self.0.hash = hash; self.0 diff --git a/crates/common/src/integration_testing.rs b/crates/common/src/integration_testing.rs index 0d3179e1c8..9b12c6cc6c 100644 --- a/crates/common/src/integration_testing.rs +++ b/crates/common/src/integration_testing.rs @@ -13,7 +13,8 @@ use std::path::Path; pub fn debug_create_port_marker_file(_name: &str, _value: u16, _data_directory: &Path) { #[cfg(debug_assertions)] { - if std::env::var_os("PATHFINDER_TEST_ENABLE_PORT_MARKER_FILES").is_some() { + if std::env::var_os("PATHFINDER_TEST_ENABLE_MARKER_FILES").is_some() { + _ = std::fs::create_dir_all(_data_directory); let marker_file = _data_directory.join(format!("pid_{}_{}_port", std::process::id(), _name)); std::fs::write(&marker_file, _value.to_string()).unwrap_or_else(|_| { @@ -22,3 +23,24 @@ pub fn debug_create_port_marker_file(_name: &str, _value: u16, _data_directory: } } } + +/// ## Important +/// This function does nothing in production builds. +/// +/// ## Integration testing +/// Creates a marker file in the data directory. +/// +/// ## Panics +/// The function will panic if it fails to create the marker file. +pub fn debug_create_marker_file(_name: &str, _data_directory: &Path) { + #[cfg(debug_assertions)] + { + if std::env::var_os("PATHFINDER_TEST_ENABLE_MARKER_FILES").is_some() { + _ = std::fs::create_dir_all(_data_directory); + let marker_file = _data_directory.join(_name); + std::fs::File::create(&marker_file).unwrap_or_else(|_| { + panic!("Failed to create marker file {}", marker_file.display()) + }); + } + } +} diff --git a/crates/common/src/l1.rs b/crates/common/src/l1.rs index ecfa506ffd..4bb13eac6b 100644 --- a/crates/common/src/l1.rs +++ b/crates/common/src/l1.rs @@ -109,3 +109,55 @@ impl AsRef<[u8]> for L1TransactionHash { self.0.as_ref() } } + +/// An Ethereum block hash. +#[derive(Copy, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct L1BlockHash(H256); + +macros::fmt::thin_display!(L1BlockHash); +macros::fmt::thin_debug!(L1BlockHash); + +impl L1BlockHash { + /// Creates a new `L1BlockHash` from a `H256`. + pub fn new(hash: H256) -> Self { + Self(hash) + } + + /// Returns the raw bytes of the block hash. + pub fn as_bytes(&self) -> &[u8] { + self.0.as_bytes() + } + + /// Creates a new `L1BlockHash` from a slice of bytes. + /// + /// # Panics + /// + /// If the length of the byte slice is not 32. + pub fn from_slice(bytes: &[u8]) -> Self { + Self(H256::from_slice(bytes)) + } +} + +impl From for L1BlockHash { + fn from(hash: H256) -> Self { + Self(hash) + } +} + +impl From for H256 { + fn from(block_hash: L1BlockHash) -> Self { + block_hash.0 + } +} + +impl From<[u8; 32]> for L1BlockHash { + fn from(bytes: [u8; 32]) -> Self { + Self(H256::from(bytes)) + } +} + +impl AsRef<[u8]> for L1BlockHash { + fn as_ref(&self) -> &[u8] { + self.0.as_ref() + } +} diff --git a/crates/common/src/l2.rs b/crates/common/src/l2.rs new file mode 100644 index 0000000000..fdc2a448fd --- /dev/null +++ b/crates/common/src/l2.rs @@ -0,0 +1,181 @@ +use std::collections::BTreeMap; +use std::sync::{Arc, RwLock}; + +use fake::Dummy; + +use crate::class_definition::{SerializedCasmDefinition, SerializedSierraDefinition}; +use crate::event::Event; +use crate::receipt::Receipt; +use crate::state_update::StateUpdateData; +use crate::transaction::Transaction; +use crate::{ + BlockHash, + BlockHeader, + BlockNumber, + BlockTimestamp, + CasmHash, + EventCommitment, + GasPrice, + L1DataAvailabilityMode, + ReceiptCommitment, + SequencerAddress, + SierraHash, + StarknetVersion, + StateCommitment, + StateDiffCommitment, + TransactionCommitment, +}; + +pub enum L2BlockToCommit { + FromConsensus(ConsensusFinalizedL2Block), + FromFgw(L2Block), +} + +#[derive(Clone, Debug, Default)] +pub struct L2Block { + pub header: BlockHeader, + pub state_update: StateUpdateData, + pub transactions_and_receipts: Vec<(Transaction, Receipt)>, + pub events: Vec>, +} + +/// [`ConsensusFinalizedL2Block`] which also includes the round in which it was +/// decided upon. +#[derive(Clone, Debug)] +pub struct DecidedBlock { + pub round: u32, + pub block: ConsensusFinalizedL2Block, +} + +/// A type alias for a `Sync` collection of [`DecidedBlock`]-s +pub type DecidedBlocks = Arc>>; + +/// An [L2Block] that is the result of executing a consensus proposal. The only +/// differences from an [L2Block] are: +/// - the state tries have not been updated yet, +/// - in consequence the block hash could not have been computed yet. +#[derive(Clone, Debug, Default)] +pub struct ConsensusFinalizedL2Block { + pub header: ConsensusFinalizedBlockHeader, + pub state_update: StateUpdateData, + pub transactions_and_receipts: Vec<(Transaction, Receipt)>, + pub events: Vec>, + pub declared_classes: Vec, +} + +/// An L2 [BlockHeader] that is the result of executing a consensus proposal +/// that was decided upon. The only differences from a [BlockHeader] are: +/// - the state tries have not been updated yet, so the state commitment is +/// missing, +/// - in consequence the block hash could not have been computed yet, +/// - parent hash is updated when the header is transformed into a full +/// [BlockHeader] to avoid additional DB lookup in consensus. + +#[derive(Debug, Clone, Default, PartialEq, Eq, Dummy)] +pub struct ConsensusFinalizedBlockHeader { + pub number: BlockNumber, + pub timestamp: BlockTimestamp, + pub eth_l1_gas_price: GasPrice, + pub strk_l1_gas_price: GasPrice, + pub eth_l1_data_gas_price: GasPrice, + pub strk_l1_data_gas_price: GasPrice, + pub eth_l2_gas_price: GasPrice, + pub strk_l2_gas_price: GasPrice, + pub sequencer_address: SequencerAddress, + pub starknet_version: StarknetVersion, + pub event_commitment: EventCommitment, + pub transaction_commitment: TransactionCommitment, + pub transaction_count: usize, + pub event_count: usize, + pub l1_da_mode: L1DataAvailabilityMode, + pub receipt_commitment: ReceiptCommitment, + pub state_diff_commitment: StateDiffCommitment, + pub state_diff_length: u64, + pub l2_gas_consumed: u128, +} + +#[derive(Clone, Debug, Default)] +pub struct DeclaredClass { + pub sierra_hash: SierraHash, + pub casm_hash_v2: CasmHash, + pub sierra_def: SerializedSierraDefinition, + pub casm_def: SerializedCasmDefinition, +} + +impl From for L2BlockToCommit { + fn from(block: L2Block) -> Self { + L2BlockToCommit::FromFgw(block) + } +} + +impl From for L2BlockToCommit { + fn from(block: ConsensusFinalizedL2Block) -> Self { + L2BlockToCommit::FromConsensus(block) + } +} + +impl L2BlockToCommit { + pub fn number(&self) -> BlockNumber { + match self { + L2BlockToCommit::FromConsensus(block) => block.header.number, + L2BlockToCommit::FromFgw(block) => block.header.number, + } + } + + pub fn state_commitment(&self) -> Option { + match self { + L2BlockToCommit::FromConsensus(_) => None, + L2BlockToCommit::FromFgw(block) => Some(block.header.state_commitment), + } + } + + pub fn state_update(&self) -> &StateUpdateData { + match self { + L2BlockToCommit::FromConsensus(block) => &block.state_update, + L2BlockToCommit::FromFgw(block) => &block.state_update, + } + } + + pub fn starknet_version(&self) -> StarknetVersion { + match self { + L2BlockToCommit::FromConsensus(block) => block.header.starknet_version, + L2BlockToCommit::FromFgw(block) => block.header.starknet_version, + } + } +} + +impl ConsensusFinalizedBlockHeader { + pub fn compute_hash( + self, + parent_hash: BlockHash, + state_commitment: StateCommitment, + block_hash_fn: impl Fn(&BlockHeader) -> BlockHash, + ) -> BlockHeader { + let mut header = BlockHeader { + // Intentionally set to zero, will be computed later. + hash: BlockHash::ZERO, + parent_hash, + number: self.number, + timestamp: self.timestamp, + eth_l1_gas_price: self.eth_l1_gas_price, + strk_l1_gas_price: self.strk_l1_gas_price, + eth_l1_data_gas_price: self.eth_l1_data_gas_price, + strk_l1_data_gas_price: self.strk_l1_data_gas_price, + eth_l2_gas_price: self.eth_l2_gas_price, + strk_l2_gas_price: self.strk_l2_gas_price, + sequencer_address: self.sequencer_address, + starknet_version: self.starknet_version, + event_commitment: self.event_commitment, + state_commitment, + transaction_commitment: self.transaction_commitment, + transaction_count: self.transaction_count, + event_count: self.event_count, + l1_da_mode: self.l1_da_mode, + receipt_commitment: self.receipt_commitment, + state_diff_commitment: self.state_diff_commitment, + state_diff_length: self.state_diff_length, + }; + header.hash = block_hash_fn(&header); + header + } +} diff --git a/crates/common/src/lib.rs b/crates/common/src/lib.rs index 1190058e8d..cbc3532b15 100644 --- a/crates/common/src/lib.rs +++ b/crates/common/src/lib.rs @@ -8,7 +8,7 @@ use std::ops::Rem; use std::str::FromStr; use anyhow::Context; -use fake::Dummy; +use fake::{Dummy, Fake, Faker}; use pathfinder_crypto::hash::HashChain; use pathfinder_crypto::Felt; use primitive_types::H160; @@ -16,12 +16,14 @@ use serde::{Deserialize, Serialize}; pub mod casm_class; pub mod class_definition; +pub mod consensus_info; pub mod consts; pub mod event; pub mod hash; mod header; pub mod integration_testing; mod l1; +mod l2; mod macros; pub mod prelude; pub mod receipt; @@ -32,9 +34,18 @@ pub mod transaction; pub mod trie; pub use header::{BlockHeader, BlockHeaderBuilder, L1DataAvailabilityMode, SignedBlockHeader}; -pub use l1::{L1BlockNumber, L1TransactionHash}; +pub use l1::{L1BlockHash, L1BlockNumber, L1TransactionHash}; +pub use l2::{ + ConsensusFinalizedBlockHeader, + ConsensusFinalizedL2Block, + DecidedBlock, + DecidedBlocks, + DeclaredClass, + L2Block, + L2BlockToCommit, +}; pub use signature::BlockCommitmentSignature; -pub use state_update::StateUpdate; +pub use state_update::{FoundStorageValue, StateUpdate}; impl ContractAddress { /// The contract at 0x1 is special. It was never deployed and therefore @@ -87,30 +98,42 @@ impl EntryPoint { } impl StateCommitment { - /// Calculates global state commitment by combining the storage and class + /// Calculates global state commitment by combining the storage and class /// commitment. /// /// See /// /// for details. + /// + /// Starting from Starknet 0.14.0, the state commitment always uses the + /// Poseidon hash formula, even when `class_commitment` is zero. For older + /// versions, when `class_commitment` is zero, the state commitment equals + /// the storage commitment directly. pub fn calculate( storage_commitment: StorageCommitment, class_commitment: ClassCommitment, + version: StarknetVersion, ) -> Self { - if class_commitment == ClassCommitment::ZERO { - Self(storage_commitment.0) - } else { - const GLOBAL_STATE_VERSION: Felt = felt_bytes!(b"STARKNET_STATE_V0"); - - StateCommitment( - pathfinder_crypto::hash::poseidon::poseidon_hash_many(&[ - GLOBAL_STATE_VERSION.into(), - storage_commitment.0.into(), - class_commitment.0.into(), - ]) - .into(), - ) + if class_commitment == ClassCommitment::ZERO + && storage_commitment == StorageCommitment::ZERO + { + return StateCommitment::ZERO; + } + + if class_commitment == ClassCommitment::ZERO && version < StarknetVersion::V_0_14_0 { + return Self(storage_commitment.0); } + + const GLOBAL_STATE_VERSION: Felt = felt_bytes!(b"STARKNET_STATE_V0"); + + StateCommitment( + pathfinder_crypto::hash::poseidon::poseidon_hash_many(&[ + GLOBAL_STATE_VERSION.into(), + storage_commitment.0.into(), + class_commitment.0.into(), + ]) + .into(), + ) } } @@ -342,6 +365,22 @@ impl Dummy for EthereumAddress { } } +#[derive(Debug, Copy, Clone, PartialEq, Eq, Deserialize, Serialize)] +pub enum SettlementLayerAddress { + Ethereum(EthereumAddress), + Starknet(ContractAddress), +} + +impl Dummy for SettlementLayerAddress { + fn dummy_with_rng(_: &T, rng: &mut R) -> Self { + if rng.gen_bool(0.5) { + Self::Ethereum(EthereumAddress(H160::random_using(rng))) + } else { + Self::Starknet(Faker.fake_with_rng(rng)) + } + } +} + #[derive(Debug, thiserror::Error)] #[error("expected slice length of 16 or less, got {0}")] pub struct FromSliceError(usize); @@ -482,11 +521,30 @@ impl StarknetVersion { StarknetVersion(a, b, c, d) } + #[inline] + pub fn major(&self) -> u8 { + self.0 + } + + #[inline] + pub fn minor(&self) -> u8 { + self.1 + } + + #[inline] + pub fn patch(&self) -> u8 { + self.2 + } + pub const V_0_13_2: Self = Self::new(0, 13, 2, 0); // TODO: version at which block hash definition changes taken from // Starkware implementation but might yet change pub const V_0_13_4: Self = Self::new(0, 13, 4, 0); + // A version at which the state commitment formula changed to always use the + // Poseidon hash, even when `class_commitment` is zero. + pub const V_0_14_0: Self = Self::new(0, 14, 0, 0); + pub const V_0_14_1: Self = Self::new(0, 14, 1, 0); } impl FromStr for StarknetVersion { @@ -550,6 +608,7 @@ macros::felt_newtypes!( L1ToL2MessagePayloadElem, L2ToL1MessagePayloadElem, PaymasterDataElem, + ProofFactElem, ProposalCommitment, PublicKey, SequencerAddress, @@ -672,10 +731,38 @@ pub fn calculate_class_commitment_leaf_hash( ) } -#[derive(Debug, Clone, Copy)] -pub struct ConsensusInfo { - pub highest_decided_height: BlockNumber, - pub highest_decided_value: ProposalCommitment, +/// A SNOS stwo proof, serialized as a base64-encoded byte string. +#[derive(Clone, Debug, Default, PartialEq, Eq, Hash)] +pub struct Proof(pub Vec); + +impl Proof { + pub fn is_empty(&self) -> bool { + self.0.is_empty() + } +} + +impl serde::Serialize for Proof { + fn serialize(&self, serializer: S) -> Result { + use base64::Engine; + + let encoded = base64::engine::general_purpose::STANDARD.encode(&self.0); + serializer.serialize_str(&encoded) + } +} + +impl<'de> serde::Deserialize<'de> for Proof { + fn deserialize>(deserializer: D) -> Result { + use base64::Engine; + + let s = String::deserialize(deserializer)?; + if s.is_empty() { + return Ok(Proof::default()); + } + let bytes = base64::engine::general_purpose::STANDARD + .decode(&s) + .map_err(serde::de::Error::custom)?; + Ok(Proof(bytes)) + } } #[cfg(test)] @@ -740,4 +827,36 @@ mod tests { ); assert_eq!(actual_contract_address, expected_contract_address); } + + mod proof_serde { + use super::super::Proof; + + #[test] + fn round_trip() { + let proof = Proof(vec![0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 1, 200]); + let json = serde_json::to_string(&proof).unwrap(); + assert_eq!(json, r#""AAAAAAAAAHsAAAHI""#); + let deserialized: Proof = serde_json::from_str(&json).unwrap(); + assert_eq!(deserialized, proof); + } + + #[test] + fn empty_string_deserializes_to_default() { + let proof: Proof = serde_json::from_str(r#""""#).unwrap(); + assert_eq!(proof, Proof::default()); + } + + #[test] + fn invalid_base64_returns_error() { + let result = serde_json::from_str::(r#""not-valid-base64!@#""#); + assert!(result.is_err()); + } + + #[test] + fn empty_proof_serializes_to_empty_string() { + let proof = Proof::default(); + let json = serde_json::to_string(&proof).unwrap(); + assert_eq!(json, r#""""#); + } + } } diff --git a/crates/common/src/macros.rs b/crates/common/src/macros.rs index 987bcc24d0..cede112a7b 100644 --- a/crates/common/src/macros.rs +++ b/crates/common/src/macros.rs @@ -86,7 +86,8 @@ pub(super) mod i64_backed_u64 { }; } - pub(crate) use {new_get_partialeq, serdes}; + pub(crate) use new_get_partialeq; + pub(crate) use serdes; } /// Generates felt newtype-wrappers and the `macro_prelude` module. @@ -282,7 +283,8 @@ pub(super) mod fmt { }; } - pub(crate) use {thin_debug, thin_display}; + pub(crate) use thin_debug; + pub(crate) use thin_display; } /// Creates a [Felt](pathfinder_crypto::Felt) from a hex string literal verified diff --git a/crates/common/src/state_update.rs b/crates/common/src/state_update.rs index 8ad5773d2b..4588b5325d 100644 --- a/crates/common/src/state_update.rs +++ b/crates/common/src/state_update.rs @@ -85,6 +85,16 @@ pub enum StorageRefIter<'a> { Vec(slice::Iter<'a, (StorageAddress, StorageValue)>), } +#[derive(Debug, Copy, Clone)] +pub enum FoundStorageValue { + /// The default zero value for a contract that has been deployed, + /// but didn't have an explicit storage update at the sought + /// address. + Zero, + /// An explicitly set value (including zero). + Set(StorageValue), +} + impl ContractUpdate { pub fn replaced_class(&self) -> Option<&ClassHash> { match &self.class { @@ -270,18 +280,30 @@ impl StateUpdate { contract: ContractAddress, key: StorageAddress, ) -> Option { + self.storage_value_with_provenance(contract, key) + .map(|found| match found { + FoundStorageValue::Zero => StorageValue::ZERO, + FoundStorageValue::Set(inner) => inner, + }) + } + + pub fn storage_value_with_provenance( + &self, + contract: ContractAddress, + key: StorageAddress, + ) -> Option { self.contract_updates .get(&contract) .and_then(|update| { update .storage .iter() - .find_map(|(k, v)| (k == &key).then_some(*v)) + .find_map(|(k, v)| (k == &key).then_some(FoundStorageValue::Set(*v))) .or_else(|| { update.class.as_ref().and_then(|c| match c { // If the contract has been deployed in pending but the key has not been // set yet return the default value of zero. - ContractClassUpdate::Deploy(_) => Some(StorageValue::ZERO), + ContractClassUpdate::Deploy(_) => Some(FoundStorageValue::Zero), ContractClassUpdate::Replace(_) => None, }) }) @@ -293,7 +315,7 @@ impl StateUpdate { update .storage .iter() - .find_map(|(k, v)| (k == &key).then_some(*v)) + .find_map(|(k, v)| (k == &key).then_some(FoundStorageValue::Set(*v))) }) }) } @@ -406,6 +428,10 @@ impl StateUpdateData { len += self.declared_cairo_classes.len() + self.declared_sierra_classes.len(); len.try_into().expect("ptr size is 64bits") } + + pub fn as_ref(&self) -> StateUpdateRef<'_> { + StateUpdateRef::from(self) + } } impl From for StateUpdateData { diff --git a/crates/common/src/test_utils.rs b/crates/common/src/test_utils.rs index 9805638ad9..4c80571b61 100644 --- a/crates/common/src/test_utils.rs +++ b/crates/common/src/test_utils.rs @@ -31,42 +31,12 @@ pub mod metrics { Key, KeyName, Label, + Metadata, Recorder, SharedString, Unit, }; - /// # Purpose - /// - /// Unset the global recorder when this guard is dropped, so you don't have - /// to remember to call `metrics::clear_recorder()` manually at the end - /// of a test. - /// - /// # Warning - /// - /// Does __not__ provide any safety wrt. threading/reentrancy/etc. - /// - /// # Rationale - /// - /// The [`metrics`] crate relies on the recorder being a [singleton](https://docs.rs/metrics/latest/metrics/#installing-recorders). - pub struct ScopedRecorderGuard; - - impl ScopedRecorderGuard { - pub fn new(recorder: R) -> Self - where - R: Recorder + 'static, - { - metrics::set_boxed_recorder(Box::new(recorder)).unwrap(); - Self - } - } - - impl Drop for ScopedRecorderGuard { - fn drop(&mut self) { - unsafe { metrics::clear_recorder() } - } - } - /// Mocks a [recorder](`metrics::Recorder`) only for specified /// [labels](`metrics::Label`) treating the rest of registered metrics /// as _no-op_ @@ -95,7 +65,7 @@ pub mod metrics { /// # Warning /// /// Returns `Counter::noop()` in other cases. - fn register_counter(&self, key: &Key) -> Counter { + fn register_counter(&self, key: &Key, _metadata: &Metadata<'_>) -> Counter { if self.is_key_used(key) { // Check if the counter is already registered let read_guard = self.0.counters.read().unwrap(); @@ -117,10 +87,10 @@ pub mod metrics { } } - fn register_gauge(&self, _: &Key) -> Gauge { + fn register_gauge(&self, _: &Key, _metadata: &Metadata<'_>) -> Gauge { unimplemented!() } - fn register_histogram(&self, _: &Key) -> Histogram { + fn register_histogram(&self, _: &Key, _metadata: &Metadata<'_>) -> Histogram { // Ignored in tests for now Histogram::noop() } @@ -155,12 +125,11 @@ pub mod metrics { impl FakeRecorderHandle { /// Panics in any of the following cases - /// - `counter_name` was not registered via - /// [`metrics::register_counter`] + /// - `counter_name` was not registered via [`metrics::counter`] /// - `method_name` does not match any [value](https://docs.rs/metrics/latest/metrics/struct.Label.html#method.value) /// for the `method` [label](https://docs.rs/metrics/latest/metrics/struct.Label.html#) /// [key](https://docs.rs/metrics/latest/metrics/struct.Label.html#method.key) - /// registered via [`metrics::register_counter`] + /// registered via [`metrics::counter`] pub fn get_counter_value( &self, counter_name: &'static str, @@ -178,10 +147,9 @@ pub mod metrics { } /// Panics in any of the following cases - /// - `counter_name` was not registered via - /// [`metrics::register_counter`] + /// - `counter_name` was not registered via [`metrics::counter`] /// - `labels` don't match the [label](https://docs.rs/metrics/latest/metrics/struct.Label.html#)-s - /// registered via [`metrics::register_counter`] + /// registered via [`metrics::counter`] pub fn get_counter_value_by_label( &self, counter_name: &'static str, diff --git a/crates/common/src/transaction.rs b/crates/common/src/transaction.rs index 7dde85d459..387943188c 100644 --- a/crates/common/src/transaction.rs +++ b/crates/common/src/transaction.rs @@ -8,6 +8,7 @@ use crate::{ felt_bytes, AccountDeploymentDataElem, PaymasterDataElem, + ProofFactElem, ResourceAmount, ResourcePricePerUnit, Tip, @@ -372,6 +373,7 @@ pub struct InvokeTransactionV3 { pub account_deployment_data: Vec, pub calldata: Vec, pub sender_address: ContractAddress, + pub proof_facts: Vec, } #[derive(Clone, Default, Debug, PartialEq, Eq, Dummy)] @@ -694,6 +696,7 @@ impl DeclareTransactionV3 { fee_data_availability_mode: self.fee_data_availability_mode, resource_bounds: self.resource_bounds, query_only, + proof_facts: &[], } .hash(chain_id) } @@ -725,6 +728,7 @@ impl DeployAccountTransactionV3 { fee_data_availability_mode: self.fee_data_availability_mode, resource_bounds: self.resource_bounds, query_only, + proof_facts: &[], } .hash(chain_id) } @@ -760,6 +764,7 @@ impl InvokeTransactionV3 { fee_data_availability_mode: self.fee_data_availability_mode, resource_bounds: self.resource_bounds, query_only, + proof_facts: &self.proof_facts, } .hash(chain_id) } @@ -861,6 +866,7 @@ struct V3Hasher<'a> { pub fee_data_availability_mode: DataAvailabilityMode, pub resource_bounds: ResourceBounds, pub query_only: bool, + pub proof_facts: &'a [ProofFactElem], } impl V3Hasher<'_> { @@ -880,11 +886,26 @@ impl V3Hasher<'_> { .chain(self.nonce.0.into()) .chain(self.pack_data_availability().into()); - let hash = self + let hasher = self .data_hashes .iter() - .fold(hasher, |hasher, &data| hasher.chain(data.into())) - .finish(); + .fold(hasher, |hasher, &data| hasher.chain(data.into())); + + let hasher = if !self.proof_facts.is_empty() { + let proof_facts_hash = self + .proof_facts + .iter() + .fold(PoseidonHasher::default(), |hasher, data| { + hasher.chain(data.0.into()) + }) + .finish(); + + hasher.chain(proof_facts_hash) + } else { + hasher + }; + + let hash = hasher.finish(); TransactionHash(hash.into()) } @@ -1075,6 +1096,7 @@ mod tests { #[case::invoke_v0_legacy(invoke_v0_legacy(), GOERLI_TESTNET)] #[case::invoke_v1(invoke_v1(), ChainId::MAINNET)] #[case::invoke_v3(invoke_v3(), ChainId::SEPOLIA_TESTNET)] + #[case::invoke_v3_with_proof_facts(invoke_v3_with_proof_facts(), ChainId::MAINNET)] #[case::l1_handler(l1_handler(), ChainId::MAINNET)] #[case::l1_handler_v07(l1_handler_v07(), ChainId::MAINNET)] #[case::l1_handler_legacy(l1_handler_legacy(), GOERLI_TESTNET)] @@ -1511,6 +1533,60 @@ mod tests { } } + // A variant of invoke_v3 with proof facts. + // Taken from `starknet_api` tests: https://github.com/starkware-libs/sequencer/blob/2a5c56209c2bd8d2be5379c58eba32cf2ba0391d/crates/starknet_api/resources/transaction_hash.json#L116 + fn invoke_v3_with_proof_facts() -> Transaction { + Transaction { + hash: transaction_hash!( + "0x6d885b1a2b7cb7946480c63aa1697888a33e9ccd0b1516f41c41731a1628726" + ), + variant: TransactionVariant::InvokeV3(InvokeTransactionV3 { + signature: vec![ + transaction_signature_elem!( + "0x389bca189562763f6a73da4aaab30d87d8bbc243571f4a353c48493a43a0634" + ), + transaction_signature_elem!( + "0x62d30041a0b1199b3ad93515066d5c7791211fa32f585956fafe630082270e9" + ), + ], + nonce: transaction_nonce!("0x9d"), + nonce_data_availability_mode: DataAvailabilityMode::L1, + fee_data_availability_mode: DataAvailabilityMode::L1, + resource_bounds: ResourceBounds { + l1_gas: ResourceBound { + max_amount: ResourceAmount(0xa9e), + max_price_per_unit: ResourcePricePerUnit(0x7f2a1ad4f2f1), + }, + l2_gas: Default::default(), + l1_data_gas: Default::default(), + }, + sender_address: contract_address!( + "0x69c0f9bcd79697bdceaf7748e3ff8f34aa39e4063ce44896af664c0c96f6c10" + ), + calldata: vec![ + call_param!("0x1"), + call_param!( + "0x4c0a5193d58f74fbace4b74dcf65481e734ed1714121bdc571da345540efa05" + ), + call_param!( + "0x3943907ef0ef6f9d2e2408b05e520a66daaf74293dbf665e5a20b117676170e" + ), + call_param!("0x2"), + call_param!( + "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7" + ), + call_param!("0x16345785d8a0000"), + ], + proof_facts: vec![ + proof_fact_elem!("0x1"), + proof_fact_elem!("0x2"), + proof_fact_elem!("0x3"), + ], + ..Default::default() + }), + } + } + fn l1_handler() -> Transaction { Transaction { hash: transaction_hash!( diff --git a/crates/compiler/Cargo.toml b/crates/compiler/Cargo.toml index 09c1d3fc17..7f3e8a9075 100644 --- a/crates/compiler/Cargo.toml +++ b/crates/compiler/Cargo.toml @@ -13,14 +13,12 @@ casm-compiler-v1_0_0-alpha6 = { workspace = true } casm-compiler-v1_0_0-rc0 = { workspace = true } casm-compiler-v1_1_1 = { workspace = true } casm-compiler-v2 = { workspace = true } +libc = { workspace = true } num-bigint = { workspace = true } pathfinder-common = { path = "../common" } pathfinder-crypto = { path = "../crypto" } serde = { workspace = true, features = ["derive"] } -serde_json = { workspace = true, features = [ - "arbitrary_precision", - "raw_value", -] } +serde_json = { workspace = true, features = ["arbitrary_precision", "raw_value"] } starknet_api = { workspace = true } tracing = { workspace = true } diff --git a/crates/compiler/src/lib.rs b/crates/compiler/src/lib.rs index 05c29af073..723e5517c2 100644 --- a/crates/compiler/src/lib.rs +++ b/crates/compiler/src/lib.rs @@ -1,31 +1,347 @@ -use std::borrow::Cow; +use std::io::Write; use anyhow::Context; +use pathfinder_common::class_definition::{self, SerializedCasmDefinition}; use pathfinder_common::{felt, CasmHash}; use pathfinder_crypto::Felt; -/// Compile a Sierra class definition into CASM. +/// Resource limits for the compiler child process. +#[derive(Debug, Clone, Copy)] +pub struct ResourceLimits { + /// Virtual memory limit for the child process, in bytes. + pub memory_usage: u64, + /// CPU time limit for the child process, in whole seconds. + pub cpu_time: u64, +} + +impl ResourceLimits { + /// Recommended virtual memory limit for the compiler child process, in + /// bytes. + /// + /// See [`Self::RECOMMENDED_MEMORY_USAGE_LIMIT_MIB`]. + pub const RECOMMENDED_MEMORY_USAGE_LIMIT: u64 = + Self::RECOMMENDED_MEMORY_USAGE_LIMIT_MIB * 1024 * 1024; + + /// Recommended virtual memory limit for the compiler child process, in MiB. + pub const RECOMMENDED_MEMORY_USAGE_LIMIT_MIB: u64 = 4 * 1024; + + /// Recommended CPU time limit for the compiler child process, in seconds. + pub const RECOMMENDED_CPU_TIME_LIMIT: u64 = 10; + + /// Create a new [`ResourceLimits`] with the recommended limits. + pub const fn recommended() -> Self { + Self { + memory_usage: Self::RECOMMENDED_MEMORY_USAGE_LIMIT, + cpu_time: Self::RECOMMENDED_CPU_TIME_LIMIT, + } + } + + /// Create a new [`ResourceLimits`] with the limits suitable for executing + /// many tests in parallel. + pub fn for_test() -> Self { + let cpu_time = std::thread::available_parallelism() + .map(|n| n.get() as u64) + .unwrap_or(Self::RECOMMENDED_CPU_TIME_LIMIT); + + Self { + memory_usage: Self::RECOMMENDED_MEMORY_USAGE_LIMIT, + cpu_time, + } + } + + /// Create a new [`ResourceLimits`] with custom limits. + pub fn new(memory_usage: u64, cpu_time: u64) -> Self { + Self { + memory_usage, + cpu_time, + } + } +} + +#[derive(Clone, Copy, Debug, Default, PartialEq)] +pub enum BlockifierLibfuncs { + #[default] + Audited, + All, + Experimental, +} + +impl std::fmt::Display for BlockifierLibfuncs { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let s = match self { + BlockifierLibfuncs::Audited => "audited", + BlockifierLibfuncs::All => "all", + BlockifierLibfuncs::Experimental => "experimental", + }; + write!(f, "{}", s) + } +} + +/// Compile a Sierra class definition into CASM using an isolated child process. +/// +/// Runs the `pathfinder compile` command in a child process, passes +/// `sierra_definition` via stdin, and returns the serialized CASM output read +/// from stdout. Resource limits are applied before the child process starts to +/// prevent runaway compilation from consuming unbounded CPU or memory. +/// +/// This is a blocking function. When used inside an async runtime, it should be +/// called on a blocking thread. +/// +/// # Arguments +/// +/// * `sierra_definition` — raw JSON-encoded Sierra class definition. +/// +/// * `max_memory_usage` — virtual address space limit for the child process, in +/// **bytes**. See [`ResourceLimits::RECOMMENDED_MEMORY_USAGE_LIMIT`]. +/// +/// * `max_cpu_time` — CPU time limit for the child process, in **whole +/// seconds**. See [`ResourceLimits::RECOMMENDED_CPU_TIME_LIMIT`]. /// -/// The class representation expected by the compiler doesn't match the -/// representation used by the feeder gateway for Sierra classes, so we have to -/// convert the JSON to something that can be parsed into the expected input -/// format for the compiler. -pub fn compile_to_casm(sierra_definition: &[u8]) -> anyhow::Result> { - let definition = serde_json::from_slice::>(sierra_definition) - .context("Parsing Sierra class")?; +/// # Platform support +/// +/// Resource limits are applied via `setrlimit(2)` and are **Unix-only**. On +/// non-Unix platforms no resource limits are applied; the child process still +/// runs but without any resource constraints. +pub fn compile_sierra_to_casm( + sierra_definition: &class_definition::SerializedSierraDefinition, + resource_limits: ResourceLimits, + blockifier_libfuncs: BlockifierLibfuncs, +) -> anyhow::Result { + let mut pathfinder_cmd = pathfinder_exe() + .context("reading pathfinder executable path") + .map(std::process::Command::new)?; + + pathfinder_cmd + .arg("compile") + .arg("--blockifier.libfunc-list") + .arg(blockifier_libfuncs.to_string()) + .stdin(std::process::Stdio::piped()) + .stdout(std::process::Stdio::piped()) + .stderr(std::process::Stdio::piped()); + + let mut child = set_resource_limits(pathfinder_cmd, resource_limits) + .context("setting resource limits")? + .spawn() + .context("spawning compiler child process")?; + + { + let mut ch_stdin = child.stdin.take().context("opening child stdin")?; + ch_stdin + .write_all(sierra_definition.as_bytes()) + .context("writing Sierra definition to child stdin")?; + ch_stdin.flush().context("flushing child stdin")?; + } - let sierra_version = - parse_sierra_version(definition.sierra_program).context("Parsing Sierra version")?; + let output = child + .wait_with_output() + .context("waiting for compiler child process")?; + + if !output.status.success() { + let stderr = String::from_utf8_lossy(&output.stderr); + anyhow::bail!( + "compiler child process failed with status: {}; stderr: {}", + output.status, + stderr + ); + } - let started_at = std::time::Instant::now(); + Ok(SerializedCasmDefinition::from_bytes(output.stdout)) +} - let result = std::panic::catch_unwind(|| match sierra_version { - SierraVersion(0, 1, 0) => v1_0_0_alpha6::compile(definition), - SierraVersion(1, 0, 0) => v1_0_0_rc0::compile(definition), - SierraVersion(1, 1, 0) => v1_1_1::compile(definition), - _ => v2::compile(definition), - }); +/// Compile a Sierra class definition into CASM using an isolated child process. +/// +/// Because the definition is serialized before being to the child process, +/// there is some extra overhead compared to [`compile_sierra_to_casm`]. If +/// possible, try to use [`compile_sierra_to_casm`] directly to avoid this +/// overhead. +/// +/// For more details see [`compile_sierra_to_casm`]. +pub fn compile_sierra_to_casm_deser( + sierra_definition: class_definition::Sierra<'_>, + resource_limits: ResourceLimits, + blockifier_libfuncs: BlockifierLibfuncs, +) -> anyhow::Result { + serde_json::to_vec(&sierra_definition) + .context("serializing Sierra definition") + .map(|sierra_definition| { + compile_sierra_to_casm( + &class_definition::SerializedSierraDefinition::from_bytes(sierra_definition), + resource_limits, + blockifier_libfuncs, + ) + })? +} +/// Get the path to the `pathfinder` executable. +/// +/// In release builds, we assume this is the path to the current executable. In +/// debug builds, the previous assumption doesn't hold because we could either +/// be running the debug build of `pathfinder` or running from within `cargo +/// test`. Tricky. +fn pathfinder_exe() -> anyhow::Result { + let current_exe = std::env::current_exe().context("reading current executable path")?; + let is_pathfinder_exe = current_exe + .file_stem() + .is_some_and(|name| name == "pathfinder"); + + #[cfg(not(debug_assertions))] + { + if is_pathfinder_exe { + // We're inside the release build of `pathfinder`, so we can just run the + // current executable. + Ok(current_exe) + } else { + // We're running a release build of a different executable, which is not + // supported for now. + anyhow::bail!( + "In release builds, the compiler can only be used from the `pathfinder` \ + executable. Current executable: {:?}", + current_exe + ); + } + } + #[cfg(debug_assertions)] + { + if is_pathfinder_exe { + // We're inside the debug build of `pathfinder`, so we can just run the current + // executable. + Ok(current_exe) + } else { + // We're probably running from `cargo test`, so we need to find the `pathfinder` + // executable in the target directory. If this fails, we're running a debug + // build of a different executable, which won't be supported for now. + let debug_dir = current_exe + .parent() // target/debug/deps + .context("getting deps directory")? + .parent() // target/debug + .context("getting debug directory")?; + + let pathfinder_exe = debug_dir.join("pathfinder"); + anyhow::ensure!( + pathfinder_exe.exists(), + "pathfinder executable not found in target directory: {:?}", + pathfinder_exe + ); + + Ok(pathfinder_exe) + } + } +} + +/// Set resource limits for the child process using `setrlimit(2)` on Unix. +/// +/// Returns a [`spawn::Spawn`] which can be used to spawn the resource-limited +/// child process. +#[cfg(unix)] +fn set_resource_limits( + mut cmd: std::process::Command, + resource_limits: ResourceLimits, +) -> anyhow::Result { + use std::os::unix::process::CommandExt; + + // SAFETY: We call `libc::setrlimit` with valid arguments. We do not use + // any parent process memory, do not allocate memory, access environment + // variables etc. inside the closure. + unsafe { + cmd.pre_exec(move || { + let mem_limit = libc::rlimit { + rlim_cur: resource_limits.memory_usage, + rlim_max: resource_limits.memory_usage, + }; + if libc::setrlimit(libc::RLIMIT_AS, &mem_limit) != 0 { + return Err(std::io::Error::last_os_error()); + } + + let cpu_limit = libc::rlimit { + rlim_cur: resource_limits.cpu_time, + rlim_max: resource_limits.cpu_time, + }; + if libc::setrlimit(libc::RLIMIT_CPU, &cpu_limit) != 0 { + return Err(std::io::Error::last_os_error()); + } + + Ok(()) + }); + } + + Ok(spawn::Spawn::new(cmd)) +} + +/// Set resource limits for the child process on non-Unix platforms. +/// +/// # Critical +/// +/// Resource limits are **not supported** on non-Unix platforms. This function +/// logs a warning and returns the command unmodified, allowing the child +/// process to run without any resource constraints. +#[cfg(not(unix))] +fn set_resource_limits( + cmd: std::process::Command, + _: ResourceLimits, +) -> anyhow::Result { + tracing::warn!( + "Resource limits are not supported on this platform. Running `pathfinder-compiler` \ + without resource limits." + ); + + Ok(spawn::Spawn::new(cmd)) +} + +// The extra module will hide the `Command` to prevent misuse before spawning. +mod spawn { + /// A helper struct to allow spawning the child process after setting + /// resource limits while preventing misuse in the meantime. + pub struct Spawn(std::process::Command); + + impl Spawn { + pub fn new(cmd: std::process::Command) -> Self { + Self(cmd) + } + + pub fn spawn(&mut self) -> std::io::Result { + self.0.spawn() + } + } +} + +/// Compile a serialized Sierra class definition into CASM. +/// +/// Calling this function directly will compile the Sierra class in-process, +/// which is not recommended. Use [`compile_sierra_to_casm`] to compile in an +/// isolated child process with resource limits. +pub fn compile_sierra_to_casm_impl( + sierra_definition: &class_definition::SerializedSierraDefinition, + blockifier_libfuncs: BlockifierLibfuncs, +) -> anyhow::Result { + // The class representation expected by the compiler doesn't match the + // representation used by the feeder gateway for Sierra classes, so we have to + // convert the JSON to something that can be parsed into the expected input + // format for the compiler. + serde_json::from_slice::>(sierra_definition.as_bytes()) + .context("Parsing Sierra class") + .map(|sierra_class| compile_sierra_to_casm_deser_impl(sierra_class, blockifier_libfuncs))? + .context("Compiling Sierra to CASM") +} + +/// Compile a deserialized Sierra class definition into CASM. +/// +/// Calling this function directly will compile the Sierra class in-process, +/// which is not recommended. Use [`compile_sierra_to_casm_deser`] to compile +/// in an isolated child process with resource limits. +pub fn compile_sierra_to_casm_deser_impl( + sierra_definition: class_definition::Sierra<'_>, + blockifier_libfuncs: BlockifierLibfuncs, +) -> anyhow::Result { + let version = parse_sierra_version(&sierra_definition.sierra_program) + .context("Parsing Sierra version")?; + + let started_at = std::time::Instant::now(); + let result = std::panic::catch_unwind(|| match version { + SierraVersion(0, 1, 0) => v1_0_0_alpha6::compile(sierra_definition), + SierraVersion(1, 0, 0) => v1_0_0_rc0::compile(sierra_definition), + SierraVersion(1, 1, 0) => v1_1_1::compile(sierra_definition), + _ => v2::compile(sierra_definition, blockifier_libfuncs), + }); tracing::trace!(elapsed=?started_at.elapsed(), "Sierra class compilation finished"); result.unwrap_or_else(|e| Err(panic_error(e))) @@ -44,20 +360,17 @@ fn panic_error(e: Box) -> anyhow::Error { #[derive(Debug, PartialEq)] struct SierraVersion(u64, u64, u64); -/// Parse Sierra version from the JSON representation of the program. +/// Parse Sierra version from a [Felt] slice representation of the program. /// /// Sierra programs contain the version number in two possible formats. /// For pre-1.0-rc0 Cairo versions the program contains the Sierra version /// "0.1.0" as a shortstring in its first Felt (0x302e312e30 = "0.1.0"). /// For all subsequent versions the version number is the first three felts /// representing the three parts of a semantic version number. -fn parse_sierra_version(program: &serde_json::value::RawValue) -> anyhow::Result { - let felts: Vec = - serde_json::from_str(program.get()).context("Deserializing Sierra program felts")?; - +fn parse_sierra_version(program: &[Felt]) -> anyhow::Result { const VERSION_0_1_0_AS_SHORTSTRING: Felt = felt!("0x302e312e30"); - match felts.as_slice() { + match program { [VERSION_0_1_0_AS_SHORTSTRING, ..] => Ok(SierraVersion(0, 1, 0)), [a, b, c, ..] => { let (a, b, c) = ((*a).try_into()?, (*b).try_into()?, (*c).try_into()?); @@ -71,8 +384,8 @@ fn parse_sierra_version(program: &serde_json::value::RawValue) -> anyhow::Result /// Parse CASM class definition and return _Blake2_ CASM class hash. /// /// Uses the _latest_ compiler for the parsing and starknet_api for the hashing. -pub fn casm_class_hash_v2(casm_definition: &[u8]) -> anyhow::Result { - v2::casm_class_hash_v2(casm_definition) +pub fn casm_class_hash_v2(casm_definition: &SerializedCasmDefinition) -> anyhow::Result { + v2::casm_class_hash_v2(casm_definition.as_bytes()) } mod v1_0_0_alpha6 { @@ -83,31 +396,33 @@ mod v1_0_0_alpha6 { }; use casm_compiler_v1_0_0_alpha6::casm_contract_class::CasmContractClass; use casm_compiler_v1_0_0_alpha6::contract_class::ContractClass; - - use super::FeederGatewayContractClass; - - impl<'a> TryFrom> for ContractClass { - type Error = serde_json::Error; - - fn try_from(value: FeederGatewayContractClass<'a>) -> Result { - let json = serde_json::json!({ - "abi": [], - "sierra_program": value.sierra_program, - "contract_class_version": value.contract_class_version, - "entry_points_by_type": value.entry_points_by_type, - }); - serde_json::from_value::(json) - } + use pathfinder_common::class_definition; + + pub(super) fn pathfinder_to_starknet_contract_class( + definition: class_definition::Sierra<'_>, + ) -> Result { + let json = serde_json::json!({ + "abi": [], + "sierra_program": definition.sierra_program, + "contract_class_version": definition.contract_class_version, + "entry_points_by_type": definition.entry_points_by_type, + }); + serde_json::from_value::(json) } - pub(super) fn compile(definition: FeederGatewayContractClass<'_>) -> anyhow::Result> { - let sierra_class: ContractClass = definition - .try_into() + pub(super) fn compile( + definition: class_definition::Sierra<'_>, + ) -> anyhow::Result { + let sierra_class: ContractClass = pathfinder_to_starknet_contract_class(definition) .context("Converting to Sierra class")?; validate_compatible_sierra_version( &sierra_class, ListSelector::ListName( + // Keeping the "experimental" list for backwards + // compatibility. Also, the names in + // BlockifierLibfuncs would have to be mapped to + // (audited|testnet|experimental)_v0.1.0 . casm_compiler_v1_0_0_alpha6::allowed_libfuncs::DEFAULT_EXPERIMENTAL_LIBFUNCS_LIST .to_string(), ), @@ -116,9 +431,9 @@ mod v1_0_0_alpha6 { let casm_class = CasmContractClass::from_contract_class(sierra_class, true) .context("Compiling to CASM")?; - let casm_definition = serde_json::to_vec(&casm_class)?; - - Ok(casm_definition) + Ok(super::SerializedCasmDefinition::from_bytes( + serde_json::to_vec(&casm_class)?, + )) } } @@ -130,31 +445,33 @@ mod v1_0_0_rc0 { }; use casm_compiler_v1_0_0_rc0::casm_contract_class::CasmContractClass; use casm_compiler_v1_0_0_rc0::contract_class::ContractClass; - - use super::FeederGatewayContractClass; - - impl<'a> TryFrom> for ContractClass { - type Error = serde_json::Error; - - fn try_from(value: FeederGatewayContractClass<'a>) -> Result { - let json = serde_json::json!({ - "abi": [], - "sierra_program": value.sierra_program, - "contract_class_version": value.contract_class_version, - "entry_points_by_type": value.entry_points_by_type, - }); - serde_json::from_value::(json) - } + use pathfinder_common::class_definition; + + pub(super) fn pathfinder_to_starknet_contract_class( + definition: class_definition::Sierra<'_>, + ) -> Result { + let json = serde_json::json!({ + "abi": [], + "sierra_program": definition.sierra_program, + "contract_class_version": definition.contract_class_version, + "entry_points_by_type": definition.entry_points_by_type, + }); + serde_json::from_value::(json) } - pub(super) fn compile(definition: FeederGatewayContractClass<'_>) -> anyhow::Result> { - let sierra_class: ContractClass = definition - .try_into() + pub(super) fn compile( + definition: class_definition::Sierra<'_>, + ) -> anyhow::Result { + let sierra_class: ContractClass = pathfinder_to_starknet_contract_class(definition) .context("Converting to Sierra class")?; validate_compatible_sierra_version( &sierra_class, ListSelector::ListName( + // Keeping the "experimental" list for backwards + // compatibility. Also, the names in + // BlockifierLibfuncs would have to be mapped to + // (audited|testnet|experimental)_v0.1.0 . casm_compiler_v1_0_0_rc0::allowed_libfuncs::DEFAULT_EXPERIMENTAL_LIBFUNCS_LIST .to_string(), ), @@ -163,9 +480,9 @@ mod v1_0_0_rc0 { let casm_class = CasmContractClass::from_contract_class(sierra_class, true) .context("Compiling to CASM")?; - let casm_definition = serde_json::to_vec(&casm_class)?; - - Ok(casm_definition) + Ok(super::SerializedCasmDefinition::from_bytes( + serde_json::to_vec(&casm_class)?, + )) } } @@ -177,31 +494,33 @@ mod v1_1_1 { }; use casm_compiler_v1_1_1::casm_contract_class::CasmContractClass; use casm_compiler_v1_1_1::contract_class::ContractClass; - - use super::FeederGatewayContractClass; - - impl<'a> TryFrom> for ContractClass { - type Error = serde_json::Error; - - fn try_from(value: FeederGatewayContractClass<'a>) -> Result { - let json = serde_json::json!({ - "abi": [], - "sierra_program": value.sierra_program, - "contract_class_version": value.contract_class_version, - "entry_points_by_type": value.entry_points_by_type, - }); - serde_json::from_value::(json) - } + use pathfinder_common::class_definition; + + pub(super) fn pathfinder_to_starknet_contract_class( + definition: class_definition::Sierra<'_>, + ) -> Result { + let json = serde_json::json!({ + "abi": [], + "sierra_program": definition.sierra_program, + "contract_class_version": definition.contract_class_version, + "entry_points_by_type": definition.entry_points_by_type, + }); + serde_json::from_value::(json) } - pub(super) fn compile(definition: FeederGatewayContractClass<'_>) -> anyhow::Result> { - let sierra_class: ContractClass = definition - .try_into() + pub(super) fn compile( + definition: class_definition::Sierra<'_>, + ) -> anyhow::Result { + let sierra_class: ContractClass = pathfinder_to_starknet_contract_class(definition) .context("Converting to Sierra class")?; validate_compatible_sierra_version( &sierra_class, ListSelector::ListName( + // Keeping the "experimental" list for backwards + // compatibility. Also, the names in + // BlockifierLibfuncs would have to be mapped to + // (audited|testnet|experimental)_v0.1.0 . casm_compiler_v1_0_0_rc0::allowed_libfuncs::DEFAULT_EXPERIMENTAL_LIBFUNCS_LIST .to_string(), ), @@ -210,9 +529,9 @@ mod v1_1_1 { let casm_class = CasmContractClass::from_contract_class(sierra_class, true) .context("Compiling to CASM")?; - let casm_definition = serde_json::to_vec(&casm_class)?; - - Ok(casm_definition) + Ok(super::SerializedCasmDefinition::from_bytes( + serde_json::to_vec(&casm_class)?, + )) } } @@ -222,42 +541,50 @@ mod v2 { use cairo_lang_starknet_classes::casm_contract_class::CasmContractClass; use cairo_lang_starknet_classes::contract_class::ContractClass; - use super::{CasmHash, FeederGatewayContractClass}; - - impl<'a> TryFrom> for ContractClass { - type Error = serde_json::Error; - - fn try_from(value: FeederGatewayContractClass<'a>) -> Result { - let json = serde_json::json!({ - "abi": [], - "sierra_program": value.sierra_program, - "contract_class_version": value.contract_class_version, - "entry_points_by_type": value.entry_points_by_type, - }); - serde_json::from_value::(json) - } + use super::{BlockifierLibfuncs, CasmHash}; + + pub(super) fn pathfinder_to_starknet_contract_class( + definition: crate::class_definition::Sierra<'_>, + ) -> Result { + let json = serde_json::json!({ + "abi": [], + "sierra_program": definition.sierra_program, + "contract_class_version": definition.contract_class_version, + "entry_points_by_type": definition.entry_points_by_type, + }); + serde_json::from_value::(json) } - pub(super) fn compile(definition: FeederGatewayContractClass<'_>) -> anyhow::Result> { - let sierra_class: ContractClass = definition - .try_into() + pub(super) fn compile( + definition: crate::class_definition::Sierra<'_>, + blockifier_libfuncs: BlockifierLibfuncs, + ) -> anyhow::Result { + let sierra_class: ContractClass = pathfinder_to_starknet_contract_class(definition) .context("Converting to Sierra class")?; - sierra_class + let extracted_sierra_program = sierra_class + .extract_sierra_program(false) + .context("Extracting Sierra program")?; + + extracted_sierra_program .validate_version_compatible( cairo_lang_starknet_classes::allowed_libfuncs::ListSelector::ListName( - cairo_lang_starknet_classes::allowed_libfuncs::BUILTIN_ALL_LIBFUNCS_LIST - .to_string(), + blockifier_libfuncs.to_string(), ), ) .context("Validating Sierra class")?; // TODO: determine `max_bytecode_size` - let casm_class = CasmContractClass::from_contract_class(sierra_class, true, usize::MAX) - .context("Compiling to CASM")?; - let casm_definition = serde_json::to_vec(&casm_class)?; - - Ok(casm_definition) + let casm_class = CasmContractClass::from_contract_class( + sierra_class, + extracted_sierra_program, + true, + usize::MAX, + ) + .context("Compiling to CASM")?; + Ok(super::SerializedCasmDefinition::from_bytes( + serde_json::to_vec(&casm_class)?, + )) } pub(super) fn casm_class_hash_v2(casm_definition: &[u8]) -> anyhow::Result { @@ -279,27 +606,12 @@ mod v2 { } } -#[derive(serde::Deserialize, serde::Serialize)] -#[serde(deny_unknown_fields)] -struct FeederGatewayContractClass<'a> { - #[serde(borrow)] - pub abi: Cow<'a, str>, - - #[serde(borrow)] - pub sierra_program: &'a serde_json::value::RawValue, - - #[serde(borrow)] - pub contract_class_version: &'a serde_json::value::RawValue, - - #[serde(borrow)] - pub entry_points_by_type: &'a serde_json::value::RawValue, -} - #[cfg(test)] mod tests { - use super::{compile_to_casm, FeederGatewayContractClass}; + use super::compile_sierra_to_casm_impl; mod parse_version { + use pathfinder_common::class_definition; use rstest::rstest; use starknet_gateway_test_fixtures::class_definitions::{ CAIRO_1_0_0_ALPHA5_SIERRA, @@ -308,7 +620,7 @@ mod tests { CAIRO_2_0_0_STACK_OVERFLOW, }; - use super::super::{parse_sierra_version, FeederGatewayContractClass, SierraVersion}; + use super::super::{parse_sierra_version, SierraVersion}; #[rstest] #[case(CAIRO_1_0_0_ALPHA5_SIERRA, SierraVersion(0, 1, 0))] @@ -317,81 +629,110 @@ mod tests { #[case(CAIRO_2_0_0_STACK_OVERFLOW, SierraVersion(1, 2, 0))] fn parse_version(#[case] sierra_json: &[u8], #[case] expected_version: SierraVersion) { let sierra = - serde_json::from_slice::>(sierra_json).unwrap(); - let sierra_version = parse_sierra_version(sierra.sierra_program).unwrap(); + serde_json::from_slice::>(sierra_json).unwrap(); + let sierra_version = parse_sierra_version(&sierra.sierra_program).unwrap(); assert_eq!(sierra_version, expected_version); } } mod starknet_v0_11_0 { + use pathfinder_common::class_definition; use starknet_gateway_test_fixtures::class_definitions::CAIRO_1_0_0_ALPHA5_SIERRA; use super::*; + use crate::v1_0_0_rc0::pathfinder_to_starknet_contract_class; + use crate::BlockifierLibfuncs; #[test] fn test_feeder_gateway_contract_conversion() { let class = - serde_json::from_slice::>(CAIRO_1_0_0_ALPHA5_SIERRA) + serde_json::from_slice::>(CAIRO_1_0_0_ALPHA5_SIERRA) .unwrap(); let _: casm_compiler_v1_0_0_rc0::contract_class::ContractClass = - class.try_into().unwrap(); + pathfinder_to_starknet_contract_class(class).unwrap(); } #[test] - fn test_compile() { - compile_to_casm(CAIRO_1_0_0_ALPHA5_SIERRA).unwrap(); + fn test_compile_ser() { + compile_sierra_to_casm_impl( + &class_definition::SerializedSierraDefinition::from_slice( + CAIRO_1_0_0_ALPHA5_SIERRA, + ), + BlockifierLibfuncs::default(), + ) + .unwrap(); } } mod starknet_v0_11_1 { + use pathfinder_common::class_definition; use starknet_gateway_test_fixtures::class_definitions::CAIRO_1_0_0_RC0_SIERRA; use super::*; + use crate::v1_0_0_rc0::pathfinder_to_starknet_contract_class; + use crate::BlockifierLibfuncs; #[test] fn test_feeder_gateway_contract_conversion() { let class = - serde_json::from_slice::>(CAIRO_1_0_0_RC0_SIERRA) + serde_json::from_slice::>(CAIRO_1_0_0_RC0_SIERRA) .unwrap(); let _: casm_compiler_v1_0_0_rc0::contract_class::ContractClass = - class.try_into().unwrap(); + pathfinder_to_starknet_contract_class(class).unwrap(); } #[test] - fn test_compile() { - compile_to_casm(CAIRO_1_0_0_RC0_SIERRA).unwrap(); + fn test_compile_ser() { + compile_sierra_to_casm_impl( + &class_definition::SerializedSierraDefinition::from_slice(CAIRO_1_0_0_RC0_SIERRA), + BlockifierLibfuncs::default(), + ) + .unwrap(); } } mod starknet_v0_11_2_onwards { + use pathfinder_common::class_definition; use starknet_gateway_test_fixtures::class_definitions::{ CAIRO_1_1_0_RC0_SIERRA, CAIRO_2_0_0_STACK_OVERFLOW, }; use super::*; + use crate::v2::pathfinder_to_starknet_contract_class; + use crate::BlockifierLibfuncs; #[test] fn test_feeder_gateway_contract_conversion() { let class = - serde_json::from_slice::>(CAIRO_1_1_0_RC0_SIERRA) + serde_json::from_slice::>(CAIRO_1_1_0_RC0_SIERRA) .unwrap(); let _: cairo_lang_starknet_classes::contract_class::ContractClass = - class.try_into().unwrap(); + pathfinder_to_starknet_contract_class(class).unwrap(); } #[test] - fn test_compile() { - compile_to_casm(CAIRO_1_1_0_RC0_SIERRA).unwrap(); + fn test_compile_ser() { + compile_sierra_to_casm_impl( + &class_definition::SerializedSierraDefinition::from_slice(CAIRO_1_1_0_RC0_SIERRA), + BlockifierLibfuncs::default(), + ) + .unwrap(); } #[test] fn regression_stack_overflow() { // This class caused a stack-overflow in v2 compilers <= v2.0.1 - compile_to_casm(CAIRO_2_0_0_STACK_OVERFLOW).unwrap(); + compile_sierra_to_casm_impl( + &class_definition::SerializedSierraDefinition::from_slice( + CAIRO_2_0_0_STACK_OVERFLOW, + ), + BlockifierLibfuncs::default(), + ) + .unwrap(); } } } diff --git a/crates/consensus-fetcher/src/lib.rs b/crates/consensus-fetcher/src/lib.rs index 95a2099ff1..5356523a3e 100644 --- a/crates/consensus-fetcher/src/lib.rs +++ b/crates/consensus-fetcher/src/lib.rs @@ -123,6 +123,7 @@ fn get_proposer_contract_address( pub fn get_validators_at_height( storage: &Storage, chain_id: ChainId, + is_l3: bool, height: u64, ) -> Result, ConsensusFetcherError> { let mut db_conn = storage @@ -146,6 +147,7 @@ pub fn get_validators_at_height( // Create execution state for call let execution_state = ExecutionState::simulation( chain_id, + is_l3, header, None, // No pending state for this call L1BlobDataAvailability::Disabled, @@ -153,6 +155,7 @@ pub fn get_validators_at_height( ContractAddress::ZERO, // ETH fee address (not used for calls) ContractAddress::ZERO, // STRK fee address (not used for calls) None, // No native class cache + false, // Don't force native execution for incompatible classes ); // The entry point selector for get_validators_at_height @@ -182,6 +185,7 @@ pub fn get_validators_at_height( pub fn get_proposers_at_height( storage: &Storage, chain_id: ChainId, + is_l3: bool, height: u64, ) -> Result, ConsensusFetcherError> { let mut db_conn = storage @@ -205,6 +209,7 @@ pub fn get_proposers_at_height( // Create execution state for call let execution_state = ExecutionState::simulation( chain_id, + is_l3, header, None, // No pending state for this call L1BlobDataAvailability::Disabled, @@ -212,6 +217,7 @@ pub fn get_proposers_at_height( ContractAddress::ZERO, // ETH fee address (not used for calls) ContractAddress::ZERO, // STRK fee address (not used for calls) None, // No native class cache + false, // Don't force native execution for incompatible classes ); // The entry point selector for get_proposers_at_height diff --git a/crates/consensus/Cargo.toml b/crates/consensus/Cargo.toml index e75b68b998..d5feb7d553 100644 --- a/crates/consensus/Cargo.toml +++ b/crates/consensus/Cargo.toml @@ -18,8 +18,8 @@ malachite-consensus = { package = "informalsystems-malachitebft-core-consensus", malachite-metrics = { package = "informalsystems-malachitebft-metrics", version = "0.5" } malachite-signing-ed25519 = { package = "informalsystems-malachitebft-signing-ed25519", version = "0.5", features = ["serde"] } malachite-types = { package = "informalsystems-malachitebft-core-types", version = "0.5" } -pathfinder-common = { version = "0.21.0", path = "../common" } -pathfinder-crypto = { version = "0.21.0", path = "../crypto" } +pathfinder-common = { version = "0.22.3", path = "../common" } +pathfinder-crypto = { version = "0.22.3", path = "../crypto" } rand = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } diff --git a/crates/consensus/README.md b/crates/consensus/README.md index ac551d672c..a6549c24d5 100644 --- a/crates/consensus/README.md +++ b/crates/consensus/README.md @@ -12,121 +12,107 @@ Pathfinder Consensus provides a robust consensus engine for Starknet nodes that ```rust use pathfinder_consensus::*; -use serde::{Deserialize, Serialize}; -// Define your validator address type -#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] -struct MyAddress(String); +// Create and start consensus +let config = Config::new(my_address); +let mut consensus: DefaultConsensus = Consensus::new(config); +consensus.handle_command(ConsensusCommand::StartHeight(1, validator_set)); -impl std::fmt::Display for MyAddress { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", self.0) - } -} - -impl From for Vec { - fn from(addr: MyAddress) -> Self { - addr.0.into_bytes() - } -} - -// Define your consensus value type -#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] -struct BlockData(String); - -impl std::fmt::Display for BlockData { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", self.0) - } -} - -#[tokio::main] -async fn main() { - // Create configuration - let my_address = MyAddress("validator_1".to_string()); - let config = Config::new(my_address.clone()); - - // Create consensus engine - let mut consensus = Consensus::new(config); - - // Start consensus at height 1 - let validator_set = ValidatorSet::new(vec![ - Validator::new(my_address.clone(), PublicKey::from_bytes([0; 32])) - ]); - - consensus.handle_command(ConsensusCommand::StartHeight(1, validator_set)); - - // Poll for events - while let Some(event) = consensus.next_event().await { +// Main loop +loop { + if let Some(event) = consensus.next_event().await { match event { ConsensusEvent::RequestProposal { height, round } => { - println!("Need to propose at height {}, round {}", height, round); + // Build and submit proposal + consensus.handle_command(ConsensusCommand::Propose(proposal)); } - ConsensusEvent::Decision { height, value } => { - println!("Consensus reached at height {}: {:?}", height, value); + ConsensusEvent::Decision { height, round, value } => { + // Commit the decided value } - ConsensusEvent::Gossip(message) => { - println!("Need to gossip: {:?}", message); + ConsensusEvent::Gossip(msg) => { + // Broadcast to peers } - ConsensusEvent::Error(error) => { - eprintln!("Consensus error: {}", error); + ConsensusEvent::Error(e) => { + // Handle error } } } } ``` -## Core Concepts +## API Overview -### ValidatorAddress Trait +### Commands (input via `handle_command`) -Your validator address type must implement the `ValidatorAddress` trait: +| Command | Description | +|---------|-------------| +| `StartHeight(height, validator_set)` | Begin consensus at a new height | +| `Propose(proposal)` | Submit your proposal (when you're the proposer) | +| `Proposal(signed_proposal)` | Inject a proposal received from the network | +| `Vote(signed_vote)` | Inject a vote received from the network | -```rust -pub trait ValidatorAddress: - Sync + Send + Ord + Display + Debug + Default + Clone + Into> + Serialize + DeserializeOwned -{ -} -``` +For detailed information about commands, refer to the [API documentation](https://docs.rs/pathfinder-consensus/latest/pathfinder_consensus/enum.ConsensusCommand.html). -### ValuePayload Trait +### Events (output via `next_event`) -Your consensus value type must implement the `ValuePayload` trait: +| Event | Description | +|-------|-------------| +| `RequestProposal { height, round }` | You're requested to build a proposal | +| `Decision { height, round, value }` | Consensus reached | +| `Gossip(NetworkMessage)` | Broadcast this message to peers | +| `Error(ConsensusError)` | Internal error occurred | -```rust -pub trait ValuePayload: - Sync + Send + Ord + Display + Debug + Default + Clone + Serialize + DeserializeOwned -{ -} -``` - -### Consensus Engine +For detailed information about events, refer to the [API documentation](https://docs.rs/pathfinder-consensus/latest/pathfinder_consensus/enum.ConsensusEvent.html). -The main `Consensus` struct is generic over: -- `V`: Your consensus value type (must implement `ValuePayload`) -- `A`: Your validator address type (must implement `ValidatorAddress`) - -### Commands and Events +## Configuration -The consensus engine operates on a command/event model: +```rust +let config = Config::new(my_address) + .with_wal_dir("/path/to/wal") + .with_history_depth(10) + .with_timeouts(TimeoutValues { + propose_timeout: Duration::from_secs(3), + prevote_timeout: Duration::from_secs(1), + precommit_timeout: Duration::from_secs(1), + commit_timeout: Duration::from_secs(1), + }); +``` -- **Commands**: Send commands to the consensus engine via `handle_command()` -- **Events**: Poll for events from the consensus engine via `next_event().await` +## Custom Proposer Selection -## Configuration +Implement [`ProposerSelector`](https://docs.rs/pathfinder-consensus/latest/pathfinder_consensus/trait.ProposerSelector.html) to override round-robin selection: -The `Config` struct allows you to customize: +```rust +#[derive(Clone)] +struct WeightedSelector; + +impl ProposerSelector for WeightedSelector { + fn select_proposer<'a>( + &self, + validator_set: &'a ValidatorSet, + height: u64, + round: u32, + ) -> &'a Validator { + // Custom selection logic + &validator_set.validators[round as usize % validator_set.count()] + } +} -- **History Depth**: How many completed heights to keep in memory -- **WAL Directory**: Where to store write-ahead logs for crash recovery -- **Timeouts**: Customize consensus round timeouts +let consensus = Consensus::with_proposer_selector(config, WeightedSelector); +``` ## Crash Recovery -The consensus engine supports crash recovery through write-ahead logging: +Recover state from write-ahead log after restart: ```rust -// Recover from a previous crash let validator_sets = Arc::new(StaticValidatorSetProvider::new(validator_set)); -let mut consensus = Consensus::recover(config, validator_sets); +let highest_committed = storage.get_highest_block()?; // Your storage layer +let consensus = Consensus::recover(config, validator_sets, highest_committed)?; ``` + +## Type Requirements + +Your address type must implement [`ValidatorAddress`](https://docs.rs/pathfinder-consensus/latest/pathfinder_consensus/trait.ValidatorAddress.html) (auto-implemented for types with `Sync + Send + Ord + Display + Debug + Default + Clone + Into> + Serialize + DeserializeOwned`). + +Your value type must implement [`ValuePayload`](https://docs.rs/pathfinder-consensus/latest/pathfinder_consensus/trait.ValuePayload.html) (auto-implemented for types with `Sync + Send + Ord + Display + Debug + Default + Clone + Serialize + DeserializeOwned`). diff --git a/crates/consensus/src/error.rs b/crates/consensus/src/error.rs new file mode 100644 index 0000000000..c0a5bebc7d --- /dev/null +++ b/crates/consensus/src/error.rs @@ -0,0 +1,73 @@ +//! Error types for the consensus engine. + +use std::fmt; + +/// An error that occurred in the consensus engine. +/// +/// This error type wraps internal errors and provides information about +/// whether the error is recoverable or fatal. +#[derive(Debug)] +pub struct ConsensusError { + inner: anyhow::Error, + kind: ErrorKind, +} + +// Note: We don't expose malachite error types in the public API. +// The error is converted to anyhow::Error internally. + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum ErrorKind { + /// Error occurred during WAL recovery (e.g., corrupted entry) + WalRecovery, + /// Error from the consensus engine internals (e.g., malachite errors) + Internal, +} + +impl ConsensusError { + /// Create a WAL recovery error (recoverable). + pub fn wal_recovery(error: anyhow::Error) -> Self { + Self { + inner: error, + kind: ErrorKind::WalRecovery, + } + } + + /// Create an internal consensus engine error from a malachite error. + /// + /// All malachite errors are treated as fatal and classified as internal + /// errors, but we could potentially identify recoverable ones in the + /// future. + pub(crate) fn malachite(error: malachite_consensus::Error) -> Self + where + Ctx: malachite_types::Context, + { + // Convert to anyhow::Error for storage (we don't leak malachite types) + let anyhow_err: anyhow::Error = error.into(); + + Self { + inner: anyhow_err, + kind: ErrorKind::Internal, + } + } + + /// Check if this error is recoverable. + /// + /// Recoverable errors are those that don't indicate state corruption or + /// bugs, and the consensus engine can continue operating after handling + /// them. + pub fn is_recoverable(&self) -> bool { + matches!(self.kind, ErrorKind::WalRecovery) + } +} + +impl fmt::Display for ConsensusError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", self.inner) + } +} + +impl std::error::Error for ConsensusError { + fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { + self.inner.source() + } +} diff --git a/crates/consensus/src/internal.rs b/crates/consensus/src/internal.rs index f7c2e14444..5b8dc98de3 100644 --- a/crates/consensus/src/internal.rs +++ b/crates/consensus/src/internal.rs @@ -17,11 +17,19 @@ use malachite_consensus::{ State, }; use malachite_signing_ed25519::Signature; -use malachite_types::{Height as _, SignedMessage, ThresholdParams, Timeout, ValuePayload}; +use malachite_types::{ + Height as _, + SignedMessage, + ThresholdParams, + Timeout, + TimeoutKind, + ValuePayload, +}; use tokio::time::Instant; use wal::*; use crate::config::TimeoutValues; +use crate::error::ConsensusError; use crate::wal::{WalEntry, WalSink}; use crate::{ ConsensusCommand, @@ -29,6 +37,7 @@ use crate::{ NetworkMessage, Proposal, ProposerSelector, + Round, SignedProposal, SignedVote, ValidatorSet, @@ -98,23 +107,46 @@ impl< } /// Recover the consensus from a list of write-ahead log entries. - pub fn recover_from_wal(&mut self, entries: Vec>) { + pub fn recover_from_wal(&mut self, entries: Vec>) -> Option { tracing::debug!( validator = %self.state.address(), entry_count = entries.len(), "Recovering consensus from WAL entries" ); + // Check if any entry is a Decision, which indicates this height is finalized. + let has_decision = entries + .iter() + .any(|e| matches!(e, WalEntry::Decision { .. })); + + // Mark the WAL as finalized if we're recovering from a Decision entry. + if has_decision { + self.wal.mark_as_finalized(); + } + + // Now process the entries. + let mut max_round: Option = None; for (i, entry) in entries.into_iter().enumerate() { + // We skip Decision entries as they're just markers. + if matches!(entry, WalEntry::Decision { .. }) { + continue; + } + + // Find the last round with votes + max_round = max_round.max(Self::get_vote_round(&entry)); + let input = convert_wal_entry_to_input(entry); if let Err(e) = self.process_input(input) { - tracing::error!( + tracing::warn!( validator = %self.state.address(), entry_index = i, error = %e, - "Failed to process WAL entry during recovery" + "Failed to process WAL entry during recovery - skipping corrupted entry" ); - self.output_queue.push_back(ConsensusEvent::Error(e.into())); + self.output_queue + .push_back(ConsensusEvent::Error(ConsensusError::wal_recovery( + e.into(), + ))); } } @@ -122,6 +154,16 @@ impl< validator = %self.state.address(), "Completed WAL recovery" ); + + max_round.map(Round::from) + } + + /// Schedule rebroadcast timeout. + pub fn schedule_rebroadcast(&mut self, round: Round) { + self.timeout_manager.schedule_timeout(Timeout { + kind: TimeoutKind::Rebroadcast, + round: round.into(), + }); } /// Check if this consensus engine has been finalized (i.e., a decision has @@ -155,7 +197,8 @@ impl< "Timeout elapsed" ); if let Err(e) = self.process_input(input) { - self.output_queue.push_back(ConsensusEvent::Error(e.into())); + self.output_queue + .push_back(ConsensusEvent::Error(ConsensusError::malachite(e))); } } @@ -214,13 +257,22 @@ impl< }; if let Err(e) = self.process_input(input) { - self.output_queue.push_back(ConsensusEvent::Error(e.into())); + self.output_queue + .push_back(ConsensusEvent::Error(ConsensusError::malachite(e))); } } self.output_queue.pop_front() } + fn get_vote_round(entry: &WalEntry) -> Option { + if let WalEntry::SignedVote(signed) = entry { + signed.vote.round.0 + } else { + None + } + } + #[allow(clippy::result_large_err)] fn process_input( &mut self, diff --git a/crates/consensus/src/internal/wal.rs b/crates/consensus/src/internal/wal.rs index becf1b1d82..b2f94491cc 100644 --- a/crates/consensus/src/internal/wal.rs +++ b/crates/consensus/src/internal/wal.rs @@ -150,7 +150,7 @@ pub(crate) fn convert_wal_entry_to_input< }, }; // TODO Differentiate between consensus and sync proposed values once catch up - // using sync protocol is implemented, related issue https://github.com/eqlabs/pathfinder/issues/2934 + // using sync protocol is implemented, related issue https://github.com/equilibriumco/pathfinder/issues/2934 Input::ProposedValue(proposed_value, malachite_types::ValueOrigin::Consensus) } _ => unreachable!(), diff --git a/crates/consensus/src/lib.rs b/crates/consensus/src/lib.rs index 3d1340020b..03873aedac 100644 --- a/crates/consensus/src/lib.rs +++ b/crates/consensus/src/lib.rs @@ -169,10 +169,12 @@ use serde::{Deserialize, Serialize}; // Re-export consensus types needed by the public API pub use crate::config::{Config, TimeoutValues}; +pub use crate::error::ConsensusError; use crate::internal::{InternalConsensus, InternalParams}; -use crate::wal::{FileWalSink, NoopWal, WalSink}; +use crate::wal::{delete_wal_file, FileWalSink, NoopWal, WalSink}; mod config; +mod error; mod internal; mod wal; @@ -327,6 +329,7 @@ pub struct Consensus< config: Config, proposer_selector: P, min_kept_height: Option, + last_decided_height: Option, } impl< @@ -355,6 +358,7 @@ impl< config, proposer_selector: RoundRobinProposerSelector, min_kept_height: None, + last_decided_height: None, } } @@ -384,6 +388,7 @@ impl< config, proposer_selector, min_kept_height: None, + last_decided_height: None, } } @@ -397,6 +402,7 @@ impl< /// /// - `config`: The consensus configuration /// - `validator_sets`: A provider for validator sets at different heights + /// - `highest_committed`: The highest committed block in main storage /// /// ## Example /// @@ -407,13 +413,13 @@ impl< pub fn recover + 'static>( config: Config, validator_sets: Arc, - highest_finalized: Option, + highest_committed: Option, ) -> anyhow::Result> { Self::recover_inner( Self::new(config.clone()), config, validator_sets, - highest_finalized, + highest_committed, ) } @@ -443,13 +449,13 @@ impl< config: Config, validator_sets: Arc, proposer_selector: PS, - highest_finalized: Option, + highest_committed: Option, ) -> anyhow::Result> { Self::recover_inner( Self::with_proposer_selector(config.clone(), proposer_selector), config, validator_sets, - highest_finalized, + highest_committed, ) } @@ -460,7 +466,7 @@ impl< mut consensus: Consensus, config: Config, validator_sets: Arc, - highest_finalized: Option, + highest_committed: Option, ) -> anyhow::Result> { use crate::wal::recovery; @@ -471,15 +477,19 @@ impl< ); // Read the write-ahead log and recover all incomplete heights. - let incomplete_heights = - match recovery::recover_incomplete_heights(&config.wal_dir, highest_finalized) { - Ok(heights) => { + // This also returns finalized heights and the highest Decision height found + // (even in finalized heights). + let (incomplete_heights, finalized_heights, highest_decision) = + match recovery::recover_incomplete_heights(&config.wal_dir, highest_committed) { + Ok((incomplete, finalized, decision_height)) => { tracing::info!( validator = ?config.address, - incomplete_heights = heights.len(), - "Found incomplete heights to recover" + incomplete_heights = incomplete.len(), + finalized_heights = finalized.len(), + highest_decision = ?decision_height, + "Found incomplete and finalized heights in WAL" ); - heights + (incomplete, finalized, decision_height) } Err(e) => { tracing::error!( @@ -488,29 +498,108 @@ impl< error = %e, "Failed to recover incomplete heights from WAL" ); - Vec::new() + (Vec::new(), Vec::new(), None) } }; + // Set last_decided_height from the highest Decision found during recovery. + consensus.last_decided_height = highest_decision; + if let Some(h) = highest_decision { + tracing::info!( + validator = ?consensus.config.address, + last_decided_height = %h, + "Set last_decided_height from WAL recovery" + ); + } + + // Determine the maximum height we're recovering (incomplete or finalized). + let max_height = incomplete_heights + .iter() + .chain(finalized_heights.iter()) + .map(|(height, _)| *height) + .max() + .or(highest_decision); + + // Calculate the minimum height to keep based on history_depth. + // This matches the pruning logic used during normal operation. + let min_height_to_restore = + max_height.and_then(|max| max.checked_sub(config.history_depth)); + + // Restore finalized heights that are within history_depth. + // This ensures we can accept votes for these heights, matching the behavior + // during normal operation where finalized heights remain in memory until + // pruned. + for (height, entries) in finalized_heights { + // Only restore finalized heights that are within history_depth. + // (if max_height < history_depth, restore all finalized heights) + let should_restore = min_height_to_restore + .map(|min| height >= min) + .unwrap_or(true); + + if should_restore { + tracing::info!( + validator = ?consensus.config.address, + height = %height, + "Restoring finalized height within history_depth" + ); + + let validator_set = validator_sets.get_validator_set(height)?; + let mut internal_consensus = consensus.create_consensus(height, &validator_set); + + // Recover from WAL first to restore the engine state. + let vote_round = internal_consensus.recover_from_wal(entries); + if let Some(round) = vote_round { + // Schedule rebroadcast timeout. + // See https://github.com/equilibriumco/pathfinder/issues/3286 for motivation. + internal_consensus.schedule_rebroadcast(round); + } + + // Only call StartHeight if the height is not already finalized. + if !internal_consensus.is_finalized() { + internal_consensus + .handle_command(ConsensusCommand::StartHeight(height, validator_set)); + } + + consensus.internal.insert(height, internal_consensus); + } else { + tracing::debug!( + validator = ?consensus.config.address, + height = %height, + min_height = ?min_height_to_restore, + "Skipping finalized height outside history_depth" + ); + } + } + // Manually recover all incomplete heights. for (height, entries) in incomplete_heights { tracing::info!( validator = ?consensus.config.address, height = %height, entry_count = entries.len(), - "Recovering height from WAL" + "Recovering incomplete height from WAL" ); let validator_set = validator_sets.get_validator_set(height)?; let mut internal_consensus = consensus.create_consensus(height, &validator_set); internal_consensus.handle_command(ConsensusCommand::StartHeight(height, validator_set)); - internal_consensus.recover_from_wal(entries); + let vote_round = internal_consensus.recover_from_wal(entries); + if let Some(round) = vote_round { + // Schedule rebroadcast timeout. + internal_consensus.schedule_rebroadcast(round); + } consensus.internal.insert(height, internal_consensus); } + // Set min_kept_height to match what we've restored, so that is_height_finalized + // correctly identifies finalized heights that were pruned. + consensus.min_kept_height = min_height_to_restore; + tracing::info!( validator = ?consensus.config.address, recovered_heights = consensus.internal.len(), + last_decided_height = ?consensus.last_decided_height, + min_kept_height = ?consensus.min_kept_height, "Completed consensus recovery" ); @@ -647,9 +736,15 @@ impl< event = ?event, "Engine returned event" ); - // Track finished heights. + // Track finished heights and update last_decided_height. if let ConsensusEvent::Decision { height, .. } = &event { finished_heights.push(*height); + // Update last_decided_height to track the highest decided height. + self.last_decided_height = Some( + self.last_decided_height + .map(|h| h.max(*height)) + .unwrap_or(*height), + ); } // Push the event to the queue. self.event_queue.push_back(event); @@ -672,14 +767,38 @@ impl< let new_min_height = max_height.checked_sub(self.config.history_depth); if let Some(new_min) = new_min_height { + // Collect heights that will be pruned (before we remove them from the map). + let pruned_heights: Vec = self + .internal + .keys() + .filter(|height| **height < new_min) + .copied() + .collect(); + + // Prune the internal map and set the new min_kept_height. self.min_kept_height = Some(new_min); self.internal.retain(|height, _| *height >= new_min); + // Delete WAL files for pruned heights. + for height in &pruned_heights { + if let Err(e) = + delete_wal_file(&self.config.address, *height, &self.config.wal_dir) + { + tracing::warn!( + validator = ?self.config.address, + height = %height, + error = %e, + "Failed to delete WAL file for pruned height" + ); + } + } + tracing::debug!( validator = ?self.config.address, min_height = %new_min, max_height = %max_height, - "Pruned old consensus engines" + pruned_count = pruned_heights.len(), + "Pruned old consensus engines and deleted WAL files" ); } } @@ -718,10 +837,38 @@ impl< } } - /// Get the current maximum height being tracked by the consensus engine. - pub fn current_height(&self) -> Option { + /// Check if a specific height is actively tracked by the consensus engine. + /// + /// ## Arguments + /// + /// - `height`: The height to check + /// + /// ## Returns + /// + /// Returns `true` if the height is active, `false` otherwise. + pub fn is_height_active(&self, height: u64) -> bool { + self.internal.contains_key(&height) + } + + /// Get the maximum height actively being tracked by the consensus engine. + /// + /// This returns the highest height that consensus is currently working on, + /// which includes incomplete heights that haven't reached a decision yet. + /// Returns `None` if there are no actively tracked heights. + pub fn max_active_height(&self) -> Option { self.internal.keys().max().copied() } + + /// Get the highest height that consensus has decided on. + /// + /// This returns the highest height that has a Decision entry, even if that + /// height is no longer actively tracked (e.g., after recovery when it was + /// skipped). + /// + /// Returns `None` if no decisions have been made yet. + pub fn last_decided_height(&self) -> Option { + self.last_decided_height + } } /// A round number (or `None` if the round is nil). @@ -1073,7 +1220,7 @@ pub enum ConsensusEvent { /// /// The application should handle this error appropriately, possibly by /// logging it or taking corrective action. - Error(anyhow::Error), + Error(ConsensusError), } impl std::fmt::Debug for ConsensusEvent { diff --git a/crates/consensus/src/wal.rs b/crates/consensus/src/wal.rs index bf50b580db..77d621fdec 100644 --- a/crates/consensus/src/wal.rs +++ b/crates/consensus/src/wal.rs @@ -20,6 +20,31 @@ pub(crate) fn filename(address: &impl ToString, height: u64) -> String { format!("{WAL_FILE_PREFIX}{address}-{height}.{WAL_FILE_EXTENSION}") } +/// Delete the WAL file for a given validator and height. +pub(crate) fn delete_wal_file( + address: &impl ToString, + height: u64, + wal_dir: &Path, +) -> Result<(), std::io::Error> { + let filename = filename(address, height); + let path = wal_dir.join(&filename); + + if path.exists() { + fs::remove_file(&path).map_err(|e| { + std::io::Error::other(format!( + "Failed to delete WAL file {}: {}", + path.display(), + e + )) + })?; + tracing::debug!( + path = %path.display(), + "Deleted WAL file for pruned height" + ); + } + Ok(()) +} + /// A trait for types that can append to a write-ahead log. pub(crate) trait WalSink: Send { /// Append an entry to the write-ahead log. @@ -29,6 +54,12 @@ pub(crate) trait WalSink: Send { fn is_finalized(&self) -> bool { false // Default impl. for WALs that don't track finalization } + + /// Mark this WAL as finalized. Used during recovery when we detect a + /// Decision entry. + fn mark_as_finalized(&mut self) { + // Default impl does nothing + } } /// A write-ahead log entry. @@ -78,7 +109,7 @@ impl FileWalSink { impl Drop for FileWalSink { fn drop(&mut self) { - // Ensure all data is flushed to disk before we potentially delete the file + // Ensure all data is flushed to disk before drop if let Err(e) = self.file.flush() { tracing::error!( path = %self.path.display(), @@ -87,27 +118,14 @@ impl Drop for FileWalSink { ); } - if self.has_decision { - // Only delete the WAL file if we've reached a decision - if let Err(e) = fs::remove_file(&self.path) { - tracing::error!( - path = %self.path.display(), - error = %e, - "Failed to delete WAL file after decision" - ); - } else { - tracing::debug!( - path = %self.path.display(), - "Successfully deleted WAL file after decision" - ); - } - } else { - // Keep the WAL file if no decision was reached - tracing::debug!( - path = %self.path.display(), - "Keeping WAL file as no decision was reached" - ); - } + // Note: We no longer delete WAL files here - we keep them for recovery + // in case they're still within `history_depth`. WAL files for finalized + // heights will be deleted during pruning (in `prune_old_engines`) when + // they're actually removed from memory. + tracing::debug!( + path = %self.path.display(), + "Keeping WAL file for potential recovery (will be deleted during pruning if outside `history_depth`)" + ); } } @@ -129,6 +147,10 @@ impl WalSink for FileWalSink { fn is_finalized(&self) -> bool { self.has_decision } + + fn mark_as_finalized(&mut self) { + self.has_decision = true; + } } /// A write-ahead log that does nothing. @@ -231,11 +253,24 @@ pub(crate) mod recovery { } /// Recover all incomplete heights from the write-ahead log. + /// + /// Returns a tuple of: + /// - Incomplete heights that need to be recovered + /// - Finalized heights (for potential restoration within history_depth) + /// - The highest Decision height found in the WAL (even if + /// finalized/skipped) #[allow(clippy::type_complexity)] pub(crate) fn recover_incomplete_heights( wal_dir: &Path, - highest_finalized: Option, - ) -> Result>)>, std::io::Error> + highest_committed: Option, + ) -> Result< + ( + Vec<(u64, Vec>)>, + Vec<(u64, Vec>)>, + Option, + ), + std::io::Error, + > where V: for<'de> Deserialize<'de>, A: for<'de> Deserialize<'de>, @@ -246,7 +281,7 @@ pub(crate) mod recovery { wal_dir = %wal_dir.display(), "WAL directory does not exist, no recovery needed" ); - return Ok(Vec::new()); + return Ok((Vec::new(), Vec::new(), None)); } let files = collect_wal_files(wal_dir)?; @@ -254,44 +289,64 @@ pub(crate) mod recovery { files = ?files, "Recovering incomplete heights from WAL", ); - let mut result = Vec::new(); - // For each file, read the entries and add them to the result if the height is - // not finalized. + let mut incomplete = Vec::new(); + let mut finalized = Vec::new(); + let mut highest_decision: Option = None; + + // For each file, read the entries and categorize them as incomplete or + // finalized. Also track the highest Decision height encountered. for (height, path) in files { - let entries = read_entries(&path)?; + let entries: Vec> = read_entries(&path)?; + + // Track the highest Decision height we encounter (even for finalized heights). + for entry in &entries { + if let WalEntry::Decision { + height: decision_height, + .. + } = entry + { + let decision_height: u64 = *decision_height; + highest_decision = match highest_decision { + Some(current_max) => Some(std::cmp::max(current_max, decision_height)), + None => Some(decision_height), + }; + } + } + // `WalEntry::Decision` indicates that a decision has been reached at this // height by the consensus engine. But it's probable that the proposal itself - // hasn't fully been executed and committed to the DB locally yet, or it has - // been executed but it just hasn't been committed to the DB yet. Any of these - // scenarios means that the consensus engine for this height is not started but - // some work with the persisted proposal is still required, outside of the WAL - // framework itself. + // hasn't fully been executed and committed to the main storage locally yet, or + // it has been executed but it just hasn't been committed to the main storage + // yet. Any of these scenarios means that the consensus engine for + // this height is not started but some work with the persisted + // proposal is still required, outside of the WAL framework itself. // // The latter condition indicates that the executed proposal for this height has - // indeed been executed, finalized, and committed to the DB locally, so there - // will be no additional work required for this height outside of the WAL - // framework. + // indeed been executed, finalized, and committed to the main storage locally, + // so there will be no additional work required for this height + // outside of the WAL framework. let is_finalized = entries.iter().any(|e| { matches!(e, WalEntry::Decision { .. }) - || highest_finalized - .is_some_and(|highest_finalized| height <= highest_finalized) + || highest_committed + .is_some_and(|highest_committed| height <= highest_committed) }); if is_finalized { tracing::debug!( height = %height, path = %path.display(), - "Skipping finalized height" + "\"Recovering\" finalized height (may be restored if within history_depth)" ); - continue; + finalized.push((height, entries)); + } else { + tracing::debug!( + height = %height, + path = %path.display(), + entry_count = entries.len(), + "Recovering incomplete height" + ); + incomplete.push((height, entries)); } - tracing::debug!( - height = %height, - path = %path.display(), - entry_count = entries.len(), - "Recovering incomplete height" - ); - result.push((height, entries)); } - Ok(result) + Ok((incomplete, finalized, highest_decision)) } } diff --git a/crates/consensus/tests/common.rs b/crates/consensus/tests/common/mod.rs similarity index 99% rename from crates/consensus/tests/common.rs rename to crates/consensus/tests/common/mod.rs index cbbd861b58..212f84ef8e 100644 --- a/crates/consensus/tests/common.rs +++ b/crates/consensus/tests/common/mod.rs @@ -30,6 +30,7 @@ impl From for Vec { /// A simple consensus value type. #[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[allow(dead_code)] pub struct ConsensusValue(pub String); impl Display for ConsensusValue { diff --git a/crates/consensus/tests/wal.rs b/crates/consensus/tests/wal.rs index 5612f8d486..1f13778221 100644 --- a/crates/consensus/tests/wal.rs +++ b/crates/consensus/tests/wal.rs @@ -1,14 +1,112 @@ use std::collections::HashMap; +use std::path::{Path, PathBuf}; use std::sync::{Arc, Mutex}; use pathfinder_consensus::{DefaultConsensus, *}; use tokio::sync::mpsc; -use tokio::time::{pause, sleep, Duration}; +use tokio::time::{pause, Duration}; use tracing::{debug, error, info}; mod common; use common::{drive_until, ConsensusValue, NodeAddress}; +/// A static validator set provider for tests. +/// Returns the same validator set regardless of height. +#[derive(Clone)] +pub struct StaticSet(pub ValidatorSet); + +impl ValidatorSetProvider for StaticSet { + fn get_validator_set(&self, _height: u64) -> Result, anyhow::Error> { + Ok(self.0.clone()) + } +} + +/// Creates a single validator with the given address. +pub fn create_validator(addr: NodeAddress) -> Validator { + use pathfinder_consensus::{PublicKey, SigningKey}; + use rand::rngs::OsRng; + + let sk = SigningKey::new(OsRng); + let pk = sk.verification_key(); + let pubkey = PublicKey::from_bytes(pk.to_bytes()); + + Validator { + address: addr.clone(), + public_key: pubkey, + voting_power: 1, + } +} + +/// Creates a validator set with a single validator. +pub fn create_single_validator_set(addr: NodeAddress) -> ValidatorSet { + ValidatorSet::new(vec![create_validator(addr)]) +} + +/// Handles WAL file backup and recovery operations in tests to avoid code +/// duplication. +pub struct WalTestHelper<'a> { + wal_dir: &'a Path, + addr: &'a NodeAddress, +} + +impl<'a> WalTestHelper<'a> { + /// Creates a new `WalTestHelper` with the given WAL directory and validator + /// address. + pub fn new(wal_dir: &'a Path, addr: &'a NodeAddress) -> Self { + Self { wal_dir, addr } + } + + /// Backs up a WAL file before it gets deleted. + /// Returns the backup path if the WAL file existed. + pub fn backup(&self, height: u64) -> Option { + let wal_filename = format!("wal-{}-{height}.json", self.addr); + let wal_path = self.wal_dir.join(&wal_filename); + let wal_path_backup = self.wal_dir.join(format!("{wal_filename}.backup")); + + if wal_path.exists() { + std::fs::copy(&wal_path, &wal_path_backup) + .expect("Failed to copy WAL file for recovery test"); + Some(wal_path_backup) + } else { + None + } + } + + /// Restores a WAL file from backup and cleans up the backup file. + pub fn restore_from_backup(&self, height: u64) { + let wal_filename = format!("wal-{}-{height}.json", self.addr); + let wal_path = self.wal_dir.join(&wal_filename); + let wal_path_backup = self.wal_dir.join(format!("{wal_filename}.backup")); + + if wal_path_backup.exists() { + std::fs::copy(&wal_path_backup, &wal_path) + .expect("Failed to restore WAL file for recovery test"); + // Clean up the backup file + let _ = std::fs::remove_file(&wal_path_backup); + } + } + + /// Verifies that a WAL file exists for the given height. + pub fn verify_exists(&self, height: u64) { + let wal_filename = format!("wal-{}-{height}.json", self.addr); + let wal_path = self.wal_dir.join(&wal_filename); + assert!( + wal_path.exists(), + "WAL file for height {height} should exist", + ); + } + + /// Verifies that a WAL file does NOT exist for the given height. + pub fn verify_not_exists(&self, height: u64) { + let wal_filename = format!("wal-{}-{height}.json", self.addr); + let wal_path = self.wal_dir.join(&wal_filename); + assert!( + !wal_path.exists(), + "WAL file for height {height} should NOT exist", + ); + } +} + #[tokio::test] async fn wal_concurrent_heights_retention_test() { //common::setup_tracing_full(); @@ -74,8 +172,6 @@ async fn wal_concurrent_heights_retention_test() { .handle_command(ConsensusCommand::StartHeight(height, validator_set.clone())); } - sleep(Duration::from_millis(100)).await; - // Now process events for all heights loop { while let Some(event) = consensus.next_event().await { @@ -144,15 +240,19 @@ async fn wal_concurrent_heights_retention_test() { if decisions.lock().unwrap().len() == (NUM_HEIGHTS as usize * NUM_VALIDATORS) { break; } - sleep(Duration::from_millis(5)).await; + // Small yield to avoid busy-waiting and allow other tasks to run + tokio::task::yield_now().await; } }); handles.push(handle); } - // Instead of waiting for all to finish, just sleep for a while - tokio::time::sleep(Duration::from_secs(2)).await; + // Wait for validator tasks to make progress and create WAL files + // This test checks WAL file retention, not consensus correctness, so we don't + // need to wait for all decisions. A short sleep allows tasks to run and create + // files. + tokio::time::sleep(Duration::from_millis(500)).await; // Check that at least config.history_depth WAL files exist let files = std::fs::read_dir(wal_dir) @@ -177,14 +277,7 @@ fn pretty_addr(addr: &NodeAddress) -> String { async fn recover_from_wal_restores_and_continues() { use std::sync::Arc; - use pathfinder_consensus::{ - Config, - ConsensusCommand, - ConsensusEvent, - Proposal, - Round, - ValidatorSetProvider, - }; + use pathfinder_consensus::{Config, ConsensusCommand, ConsensusEvent, Proposal, Round}; //common::setup_tracing_full(); pause(); @@ -195,15 +288,7 @@ async fn recover_from_wal_restores_and_continues() { // Static validator let addr = NodeAddress("0x1".to_string()); - let sk = SigningKey::new(rand::rngs::OsRng); - let pk = sk.verification_key(); - let pubkey = PublicKey::from_bytes(pk.to_bytes()); - let validator = Validator { - address: addr.clone(), - public_key: pubkey, - voting_power: 1, - }; - let validators = ValidatorSet::new(vec![validator.clone()]); + let validators = create_single_validator_set(addr.clone()); // Config with temporary WAL directory let config = Config::new(addr.clone()).with_wal_dir(wal_dir.to_path_buf()); @@ -241,18 +326,6 @@ async fn recover_from_wal_restores_and_continues() { consensus.handle_command(ConsensusCommand::Proposal(signed)); } - // Create a validator set provider - #[derive(Clone)] - struct StaticSet(ValidatorSet); - impl ValidatorSetProvider for StaticSet { - fn get_validator_set( - &self, - _height: u64, - ) -> Result, anyhow::Error> { - Ok(self.0.clone()) - } - } - debug!("---------------------- Recovering from WAL ----------------------"); // Now recover from WAL @@ -274,4 +347,615 @@ async fn recover_from_wal_restores_and_continues() { event.is_some(), "Recovered consensus should continue to operate and advance rounds" ); + + // Verify last_decided_height is None since no decision was reached + assert_eq!( + consensus.last_decided_height(), + None, + "last_decided_height should be None when no decisions were made" + ); +} + +#[tokio::test] +async fn recover_from_wal_tracks_last_decided_height() { + use std::sync::Arc; + + use pathfinder_consensus::{Config, ConsensusCommand, ConsensusEvent, Proposal, Round}; + + //common::setup_tracing_full(); + pause(); + + // Create a temporary directory for WAL files + let temp_dir = tempfile::tempdir().expect("Failed to create temp directory"); + let wal_dir = temp_dir.path(); + + // Static validator + let addr = NodeAddress("0x1".to_string()); + let validators = create_single_validator_set(addr.clone()); + + // WAL helper for managing WAL files + let wal_helper = WalTestHelper::new(wal_dir, &addr); + + // Config with temporary WAL directory + let config = Config::new(addr.clone()).with_wal_dir(wal_dir.to_path_buf()); + + // This is the height we'll reach a Decision at and thus the one we'll be + // checking for + let height = 100; + + // Create and run consensus to reach a Decision + { + let mut consensus: DefaultConsensus = + DefaultConsensus::new(config.clone()); + consensus.handle_command(ConsensusCommand::StartHeight(height, validators.clone())); + + // Verify last_decided_height is None to start with + assert_eq!(consensus.last_decided_height(), None); + + // Wait for RequestProposal + let _ = drive_until(&mut consensus, Duration::from_secs(1), 5, |evt| { + matches!(evt, ConsensusEvent::RequestProposal { .. }) + }) + .await; + + // Send a proposal + let value = ConsensusValue("Test decision".to_string()); + let proposal = Proposal { + height, + round: Round::new(0), + value: value.clone(), + pol_round: Round::nil(), + proposer: addr.clone(), + }; + let signed = SignedProposal { + proposal, + signature: Signature::from_bytes([0u8; 64]), + }; + consensus.handle_command(ConsensusCommand::Proposal(signed)); + + // Wait for Decision event + let decision_event = drive_until(&mut consensus, Duration::from_secs(1), 10, |evt| { + matches!(evt, ConsensusEvent::Decision { .. }) + }) + .await; + + assert!( + decision_event.is_some(), + "Consensus should reach a Decision" + ); + + // Verify last_decided_height is set during normal operation + assert_eq!( + consensus.last_decided_height(), + Some(height), + "last_decided_height should be set after Decision" + ); + + // Copy the WAL file before consensus is dropped (which will delete it) + // This allows us to test recovery from a WAL file with a Decision entry + wal_helper.backup(height); + } + + // At this point, the consensus is dropped and the original WAL file is deleted. + // But we have a backup copy that we can use for recovery testing. + + // Restore the WAL file from backup so we can test recovery + wal_helper.restore_from_backup(height); + + debug!("---------------------- Recovering from WAL ----------------------"); + + // Now recover from WAL (using the restored WAL file with Decision entry) + let consensus: DefaultConsensus = + DefaultConsensus::recover(config.clone(), Arc::new(StaticSet(validators)), None).unwrap(); + + // Verify last_decided_height is correctly recovered from WAL Decision entry + assert_eq!( + consensus.last_decided_height(), + Some(height), + "last_decided_height should be recovered from WAL Decision entry" + ); +} + +#[tokio::test] +async fn recover_restores_finalized_heights_within_history_depth() { + use std::sync::Arc; + + use pathfinder_consensus::{ + Config, + ConsensusCommand, + ConsensusEvent, + Proposal, + Round, + SignedVote, + Vote, + VoteType, + }; + + //common::setup_tracing_full(); + pause(); + + // Create a temporary directory for WAL files + let temp_dir = tempfile::tempdir().expect("Failed to create temp directory"); + let wal_dir = temp_dir.path(); + + // Static validator + let addr = NodeAddress("0x1".to_string()); + let validators = create_single_validator_set(addr.clone()); + + // WAL helper for managing WAL files + let wal_helper = WalTestHelper::new(wal_dir, &addr); + + // Config with temporary WAL directory and history_depth = 5 + let history_depth = 5; + let config = Config::new(addr.clone()) + .with_wal_dir(wal_dir.to_path_buf()) + .with_history_depth(history_depth); + + // Height 100: Will be finalized (Decision reached) + // Height 101: Will be incomplete (establishes max_height = 101) + // min_height_to_restore = 101 - 5 = 96 + // So height 100 should be restored (100 >= 96) + let finalized_height = 100; + let incomplete_height = 101; + + // Create and run consensus to reach a Decision at finalized_height + { + let mut consensus: DefaultConsensus = + DefaultConsensus::new(config.clone()); + consensus.handle_command(ConsensusCommand::StartHeight( + finalized_height, + validators.clone(), + )); + + // Wait for RequestProposal + let _ = drive_until(&mut consensus, Duration::from_secs(1), 5, |evt| { + matches!(evt, ConsensusEvent::RequestProposal { .. }) + }) + .await; + + // Send a proposal to reach Decision + let value = ConsensusValue("Finalized value".to_string()); + let proposal = Proposal { + height: finalized_height, + round: Round::new(0), + value: value.clone(), + pol_round: Round::nil(), + proposer: addr.clone(), + }; + let signed = SignedProposal { + proposal, + signature: Signature::from_bytes([0u8; 64]), + }; + consensus.handle_command(ConsensusCommand::Proposal(signed)); + + // Wait for Decision event + let decision_event = drive_until(&mut consensus, Duration::from_secs(1), 10, |evt| { + matches!(evt, ConsensusEvent::Decision { .. }) + }) + .await; + + assert!( + decision_event.is_some(), + "Consensus should reach a Decision at height {finalized_height}", + ); + + // Copy the WAL file before consensus is dropped (which will delete it) + wal_helper.backup(finalized_height); + } + + // Create an incomplete height to establish max_height + { + let mut consensus: DefaultConsensus = + DefaultConsensus::new(config.clone()); + consensus.handle_command(ConsensusCommand::StartHeight( + incomplete_height, + validators.clone(), + )); + + // Wait for RequestProposal but don't complete the height + let _ = drive_until(&mut consensus, Duration::from_secs(1), 5, |evt| { + matches!(evt, ConsensusEvent::RequestProposal { .. }) + }) + .await; + + // Verify the incomplete height WAL file exists for recovery + wal_helper.verify_exists(incomplete_height); + } + + // Restore the finalized height WAL file from backup + wal_helper.restore_from_backup(finalized_height); + + debug!("---------------------- Recovering from WAL ----------------------"); + + // Now recover from WAL + let mut consensus: DefaultConsensus = + DefaultConsensus::recover(config.clone(), Arc::new(StaticSet(validators)), None).unwrap(); + + // Verify the finalized height is restored (within history_depth) + assert!( + consensus.is_height_active(finalized_height), + "Finalized height {finalized_height} should be restored (within history_depth)", + ); + + assert!( + consensus.is_height_finalized(finalized_height), + "Height {finalized_height} should be marked as finalized", + ); + + // Verify the incomplete height is also restored + assert!( + consensus.is_height_active(incomplete_height), + "Incomplete height {incomplete_height} should be restored", + ); + + // Verify that votes for the restored finalized height are accepted (not + // ignored) This is the key test - before the fix, this would trigger a + // warning + let vote = Vote { + r#type: VoteType::Prevote, + height: finalized_height, + round: Round::new(0), + value: Some(ConsensusValue("Finalized value".to_string())), + validator_address: addr.clone(), + }; + let signed_vote = SignedVote { + vote, + signature: Signature::from_bytes([0u8; 64]), + }; + + // This should NOT trigger the "Received command for unknown height" warning + // because the height is now in the internal map + consensus.handle_command(ConsensusCommand::Vote(signed_vote)); + + // Verify that heights below the expected minimum are considered finalized + // (this indirectly verifies min_kept_height is set correctly) + let expected_min = incomplete_height.checked_sub(history_depth); + if let Some(min_height) = expected_min { + // Heights below min_kept_height should be considered finalized + // even if not in the internal map + assert!( + consensus.is_height_finalized(min_height - 1), + "Height below min_kept_height should be considered finalized" + ); + } +} + +#[tokio::test] +async fn recover_skips_finalized_heights_outside_history_depth() { + use std::sync::Arc; + + use pathfinder_consensus::{Config, ConsensusCommand, ConsensusEvent, Proposal, Round}; + + //common::setup_tracing_full(); + pause(); + + // Create a temporary directory for WAL files + let temp_dir = tempfile::tempdir().expect("Failed to create temp directory"); + let wal_dir = temp_dir.path(); + + // Static validator + let addr = NodeAddress("0x1".to_string()); + let validators = create_single_validator_set(addr.clone()); + + // WAL helper for managing WAL files + let wal_helper = WalTestHelper::new(wal_dir, &addr); + + // Config with temporary WAL directory and history_depth = 5 + let history_depth = 5; + let config = Config::new(addr.clone()) + .with_wal_dir(wal_dir.to_path_buf()) + .with_history_depth(history_depth); + + // Height 90: Will be finalized (Decision reached) + // Height 101: Will be incomplete (establishes max_height = 101) + // min_height_to_restore = 101 - 5 = 96 + // So height 90 should NOT be restored (90 < 96) + let finalized_height = 90; + let incomplete_height = 101; + + // Create and run consensus to reach a Decision at finalized_height + { + let mut consensus: DefaultConsensus = + DefaultConsensus::new(config.clone()); + consensus.handle_command(ConsensusCommand::StartHeight( + finalized_height, + validators.clone(), + )); + + // Wait for RequestProposal + let _ = drive_until(&mut consensus, Duration::from_secs(1), 5, |evt| { + matches!(evt, ConsensusEvent::RequestProposal { .. }) + }) + .await; + + // Send a proposal to reach Decision + let value = ConsensusValue("Finalized value".to_string()); + let proposal = Proposal { + height: finalized_height, + round: Round::new(0), + value: value.clone(), + pol_round: Round::nil(), + proposer: addr.clone(), + }; + let signed = SignedProposal { + proposal, + signature: Signature::from_bytes([0u8; 64]), + }; + consensus.handle_command(ConsensusCommand::Proposal(signed)); + + // Wait for Decision event + let decision_event = drive_until(&mut consensus, Duration::from_secs(1), 10, |evt| { + matches!(evt, ConsensusEvent::Decision { .. }) + }) + .await; + + assert!( + decision_event.is_some(), + "Consensus should reach a Decision at height {finalized_height}", + ); + + // Copy the WAL file before consensus is dropped (which will delete it) + wal_helper.backup(finalized_height); + } + + // Create an incomplete height to establish max_height + { + let mut consensus: DefaultConsensus = + DefaultConsensus::new(config.clone()); + consensus.handle_command(ConsensusCommand::StartHeight( + incomplete_height, + validators.clone(), + )); + + // Wait for RequestProposal but don't complete the height + let _ = drive_until(&mut consensus, Duration::from_secs(1), 5, |evt| { + matches!(evt, ConsensusEvent::RequestProposal { .. }) + }) + .await; + + // Verify the incomplete height WAL file exists for recovery + wal_helper.verify_exists(incomplete_height); + } + + // Restore the finalized height WAL file from backup + wal_helper.restore_from_backup(finalized_height); + + debug!("---------------------- Recovering from WAL ----------------------"); + + // Now recover from WAL + let mut consensus: DefaultConsensus = + DefaultConsensus::recover(config.clone(), Arc::new(StaticSet(validators)), None).unwrap(); + + // Verify the finalized height is NOT restored (outside history_depth) + assert!( + !consensus.is_height_active(finalized_height), + "Finalized height {finalized_height} should NOT be restored (outside history_depth)", + ); + + // But it should still be considered finalized (because it's below + // min_kept_height) + assert!( + consensus.is_height_finalized(finalized_height), + "Height {finalized_height} should still be considered finalized even if not restored", + ); + + // Verify the incomplete height is restored + assert!( + consensus.is_height_active(incomplete_height), + "Incomplete height {incomplete_height} should be restored", + ); + + // Verify that finalized_height is below the expected minimum + // (this indirectly verifies min_kept_height is set correctly) + let expected_min = incomplete_height.checked_sub(history_depth); + if let Some(min_height) = expected_min { + assert!( + finalized_height < min_height, + "Finalized height {finalized_height} should be below min_kept_height {min_height}", + ); + // Verify that heights below min_kept_height are considered finalized + assert!( + consensus.is_height_finalized(min_height - 1), + "Height below min_kept_height should be considered finalized" + ); + } + + // Verify that votes for non-restored finalized heights are handled correctly. + // Since the height is finalized but not in the internal map (outside + // history_depth), votes should be properly handled (either accepted if the + // system allows it, or properly ignored without causing errors). + let vote = Vote { + r#type: VoteType::Prevote, + height: finalized_height, + round: Round::new(0), + value: Some(ConsensusValue("Finalized value".to_string())), + validator_address: addr.clone(), + }; + let signed_vote = SignedVote { + vote, + signature: Signature::from_bytes([0u8; 64]), + }; + + // This should not cause errors even though the height is not in the internal + // map. The system should handle votes for finalized heights gracefully. + consensus.handle_command(ConsensusCommand::Vote(signed_vote)); +} + +#[tokio::test] +async fn finalized_wal_files_kept_within_history_depth() { + use std::sync::Arc; + + use pathfinder_consensus::{ + Config, + ConsensusCommand, + ConsensusEvent, + Proposal, + Round, + SignedProposal, + }; + + pause(); + + // Create a temporary directory for WAL files + let temp_dir = tempfile::tempdir().expect("Failed to create temp directory"); + let wal_dir = temp_dir.path(); + + // Static validator + let addr = NodeAddress("0x1".to_string()); + let validators = create_single_validator_set(addr.clone()); + + // Config with history_depth = 5 + let history_depth = 5; + let config = Config::new(addr.clone()) + .with_wal_dir(wal_dir.to_path_buf()) + .with_history_depth(history_depth); + + let wal_helper = WalTestHelper::new(wal_dir, &addr); + + // Height 100: Will be finalized and within history_depth + // Height 101: Will be incomplete (establishes max_height = 101) + // min_height_to_restore = 101 - 5 = 96 + // So height 100 should be kept (100 >= 96) + let finalized_height = 100; + let incomplete_height = 101; + + // Step 1: Create a finalized height within history_depth + { + let mut consensus: DefaultConsensus = + DefaultConsensus::new(config.clone()); + consensus.handle_command(ConsensusCommand::StartHeight( + finalized_height, + validators.clone(), + )); + + // Wait for RequestProposal + let _ = drive_until(&mut consensus, Duration::from_secs(1), 5, |evt| { + matches!(evt, ConsensusEvent::RequestProposal { .. }) + }) + .await; + + // Send a proposal to reach Decision + let value = ConsensusValue("Finalized value".to_string()); + let proposal = Proposal { + height: finalized_height, + round: Round::new(0), + value: value.clone(), + pol_round: Round::nil(), + proposer: addr.clone(), + }; + let signed = SignedProposal { + proposal, + signature: Signature::from_bytes([0u8; 64]), + }; + consensus.handle_command(ConsensusCommand::Proposal(signed)); + + // Wait for Decision event + let decision_event = drive_until(&mut consensus, Duration::from_secs(1), 10, |evt| { + matches!(evt, ConsensusEvent::Decision { .. }) + }) + .await; + + assert!( + decision_event.is_some(), + "Consensus should reach a Decision at height {finalized_height}", + ); + + // Verify WAL file exists before dropping consensus + wal_helper.verify_exists(finalized_height); + } + + // Step 2: After dropping consensus, verify WAL file is STILL there + wal_helper.verify_exists(finalized_height); + + // Step 3: Create an incomplete height to establish max_height + { + let mut consensus: DefaultConsensus = + DefaultConsensus::new(config.clone()); + consensus.handle_command(ConsensusCommand::StartHeight( + incomplete_height, + validators.clone(), + )); + + // Wait for RequestProposal but don't complete the height + let _ = drive_until(&mut consensus, Duration::from_secs(1), 5, |evt| { + matches!(evt, ConsensusEvent::RequestProposal { .. }) + }) + .await; + + // Verify the incomplete height WAL file exists + wal_helper.verify_exists(incomplete_height); + } + + // Step 4: Recover from WAL - the finalized height should be restored + debug!("---------------------- Recovering from WAL ----------------------"); + + // Clone validators before recover since StaticSet takes ownership + let validators_for_recovery = validators.clone(); + let mut consensus: DefaultConsensus = DefaultConsensus::recover( + config.clone(), + Arc::new(StaticSet(validators_for_recovery)), + None, + ) + .unwrap(); + + // Verify the finalized height is restored (within history_depth) + assert!( + consensus.is_height_active(finalized_height), + "Finalized height {finalized_height} should be restored (within history_depth)", + ); + + assert!( + consensus.is_height_finalized(finalized_height), + "Height {finalized_height} should be marked as finalized", + ); + + // Step 5: Create more heights to push finalized_height outside history_depth + // and verify WAL file is deleted during pruning + let heights_to_create = history_depth + 2; // Push it well outside history_depth + for h in incomplete_height + 1..=incomplete_height + heights_to_create { + consensus.handle_command(ConsensusCommand::StartHeight(h, validators.clone())); + + // Wait for RequestProposal + let _ = drive_until(&mut consensus, Duration::from_secs(1), 5, |evt| { + matches!(evt, ConsensusEvent::RequestProposal { .. }) + }) + .await; + + // Send a proposal to reach Decision (this triggers pruning) + let value = ConsensusValue(format!("Value for height {h}")); + let proposal = Proposal { + height: h, + round: Round::new(0), + value: value.clone(), + pol_round: Round::nil(), + proposer: addr.clone(), + }; + let signed = SignedProposal { + proposal, + signature: Signature::from_bytes([0u8; 64]), + }; + consensus.handle_command(ConsensusCommand::Proposal(signed)); + + // Wait for Decision event (this triggers pruning) + let _ = drive_until(&mut consensus, Duration::from_secs(1), 10, |evt| { + matches!(evt, ConsensusEvent::Decision { .. }) + }) + .await; + } + + // Step 6: Verify finalized_height WAL file is now deleted (pruned) + // The height should be outside history_depth now + wal_helper.verify_not_exists(finalized_height); + + // Verify the height is no longer active + assert!( + !consensus.is_height_active(finalized_height), + "Finalized height {finalized_height} should NOT be active (pruned)", + ); + + // But it should still be considered finalized + assert!( + consensus.is_height_finalized(finalized_height), + "Height {finalized_height} should still be considered finalized even if pruned", + ); } diff --git a/crates/crypto/Cargo.toml b/crates/crypto/Cargo.toml index b37b913d60..a30794107e 100644 --- a/crates/crypto/Cargo.toml +++ b/crates/crypto/Cargo.toml @@ -6,7 +6,7 @@ edition = { workspace = true } license = { workspace = true } rust-version = { workspace = true } description = "Cryptographic primitives used by Pathfinder" -repository = "https://github.com/eqlabs/pathfinder" +repository = "https://github.com/equilibriumco/pathfinder" keywords = ["starknet", "cryptography", "pedersen", "poseidon", "ecdsa"] categories = [ "cryptography", diff --git a/crates/ethereum/Cargo.toml b/crates/ethereum/Cargo.toml index 9c3bfb7308..11c01834b4 100644 --- a/crates/ethereum/Cargo.toml +++ b/crates/ethereum/Cargo.toml @@ -7,12 +7,7 @@ license = { workspace = true } rust-version = { workspace = true } [dependencies] -alloy = { version = "1.0.9", default-features = false, features = [ - "contract", - "rpc-types", - "provider-ws", - "reqwest-rustls-tls", -] } +alloy = { version = "1.8", default-features = false, features = ["contract", "eips", "rpc-types", "provider-ws", "reqwest-rustls-tls"] } anyhow = { workspace = true } async-trait = { workspace = true } const-decoder = { workspace = true } diff --git a/crates/ethereum/src/lib.rs b/crates/ethereum/src/lib.rs index 9ed1a6d554..6c2d3a778c 100644 --- a/crates/ethereum/src/lib.rs +++ b/crates/ethereum/src/lib.rs @@ -1,15 +1,25 @@ use std::collections::BTreeMap; use std::future::Future; +use std::sync::{Arc, RwLock}; use std::time::Duration; use alloy::eips::{BlockId, BlockNumberOrTag}; +use alloy::network::Ethereum; use alloy::primitives::{Address, TxHash}; -use alloy::providers::{Provider, ProviderBuilder, WsConnect}; +use alloy::providers::fillers::{ + BlobGasFiller, + ChainIdFiller, + FillProvider, + GasFiller, + JoinFill, + NonceFiller, +}; +use alloy::providers::{Identity, Provider, ProviderBuilder, RootProvider, WsConnect}; use alloy::rpc::types::{FilteredParams, Log}; use anyhow::Context; use pathfinder_common::prelude::*; use pathfinder_common::transaction::L1HandlerTransaction; -use pathfinder_common::{EthereumChain, L1BlockNumber, L1TransactionHash}; +use pathfinder_common::{EthereumChain, L1BlockHash, L1BlockNumber, L1TransactionHash}; use pathfinder_crypto::Felt; use primitive_types::{H160, U256}; use reqwest::{IntoUrl, Url}; @@ -22,6 +32,16 @@ use crate::utils::*; mod starknet; mod utils; +/// Type alias for the WebSocket provider returned by alloy when calling +/// `ProviderBuilder::new().connect_ws()` +type WsProvider = FillProvider< + JoinFill< + Identity, + JoinFill>>, + >, + RootProvider, +>; + /// Starknet core contract addresses pub mod core_addr { use const_decoder::Decoder; @@ -47,41 +67,62 @@ pub struct EthereumStateUpdate { pub block_hash: BlockHash, } -/// Ethereum API trait -pub trait EthereumApi { - fn get_starknet_state( - &self, - address: &H160, - ) -> impl Future>; - fn get_chain(&self) -> impl Future>; - fn get_l1_handler_txs( - &self, - address: &H160, - tx_hash: &L1TransactionHash, - ) -> impl Future>>; - fn sync_and_listen( - &mut self, - address: &H160, - poll_interval: Duration, - callback: F, - ) -> impl Future> - where - F: Fn(EthereumStateUpdate) -> Fut + Send + 'static, - Fut: Future + Send + 'static; +/// Gas price data extracted from an L1 block header. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct L1GasPriceData { + /// The L1 block number + pub block_number: L1BlockNumber, + /// The block's own hash + pub block_hash: L1BlockHash, + /// The parent block's hash (used for reorg detection) + pub parent_hash: L1BlockHash, + /// Unix timestamp of the block + pub timestamp: u64, + /// EIP-1559 base fee per gas (wei) + pub base_fee_per_gas: u128, + /// EIP-4844 blob fee per gas (wei) + pub blob_fee: u128, +} + +/// Computes the blob fee from excess_blob_gas +fn compute_blob_fee(excess_blob_gas: Option) -> u128 { + excess_blob_gas + .map(alloy::eips::eip4844::calc_blob_gasprice) + .unwrap_or(alloy::eips::eip4844::BLOB_TX_MIN_BLOB_GASPRICE) } +/// Delay between reconnection attempts to the Ethereum WebSocket provider. +/// Alloy already retries internally (~30s with exponential backoff) before +/// reporting a failure, so a short fixed delay here is sufficient. +const RECONNECT_DELAY: Duration = Duration::from_secs(5); + /// Ethereum client -#[derive(Clone, Debug)] +#[derive(Clone)] pub struct EthereumClient { url: Url, + /// Lazily initialized WebSocket connection for query methods (get_chain, + /// get_starknet_state, etc.). Note: `sync_and_listen` uses its own + /// dedicated connection for subscriptions. + provider: Arc>>, pending_state_updates: BTreeMap, } +impl std::fmt::Debug for EthereumClient { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("EthereumClient") + .field("url", &self.url) + .field("provider", &"") + .field("pending_state_updates", &self.pending_state_updates) + .finish() + } +} + impl EthereumClient { /// Creates a new [EthereumClient] pub fn new(url: U) -> anyhow::Result { Ok(Self { url: url.into_url()?, + provider: Arc::new(RwLock::new(None)), pending_state_updates: BTreeMap::new(), }) } @@ -94,25 +135,167 @@ impl EthereumClient { Self::new(url) } - /// Returns the block number of the last finalized block - async fn get_finalized_block_number(&self) -> anyhow::Result { - // Create a WebSocket connection + /// Gets or creates the shared WebSocket provider for query methods. + async fn provider(&self) -> anyhow::Result { + { + let lock = self.provider.read().unwrap(); + // If a provider exists, return it + if let Some(provider) = lock.as_ref() { + return Ok(provider.clone()); + } + } + + // Create a new WebSocket provider let ws = WsConnect::new(self.url.clone()); - let provider = ProviderBuilder::new().connect_ws(ws).await?; - // Fetch the finalized block number + let new_provider = ProviderBuilder::new() + .connect_ws(ws) + .await + .context("Failed to establish WebSocket connection to Ethereum node")?; + + let mut lock = self.provider.write().unwrap(); + *lock = Some(new_provider.clone()); + Ok(new_provider) + } + + /// Returns the block number of the last finalized block + pub async fn get_finalized_block_number(&self) -> anyhow::Result { + let provider = self.provider().await?; provider .get_block_by_number(BlockNumberOrTag::Finalized) .await? .map(|block| L1BlockNumber::new_or_panic(block.header.number)) .context("Failed to fetch finalized block hash") } + + /// Returns the block number of the latest block + pub async fn get_latest_block_number(&self) -> anyhow::Result { + let provider = self.provider().await?; + provider + .get_block_by_number(BlockNumberOrTag::Latest) + .await? + .map(|block| L1BlockNumber::new_or_panic(block.header.number)) + .context("Failed to fetch latest block") + } + + /// Fetches gas price data from a specific L1 block header. + pub async fn get_gas_price_data( + &self, + block_number: L1BlockNumber, + ) -> anyhow::Result { + let provider = self.provider().await?; + let block = provider + .get_block_by_number(BlockNumberOrTag::Number(block_number.get())) + .await? + .context("Block not found")?; + + let block_hash = L1BlockHash::from(block.header.hash.0); + let parent_hash = L1BlockHash::from(block.header.parent_hash.0); + let base_fee_per_gas = block.header.base_fee_per_gas.unwrap_or(0) as u128; + let blob_fee = compute_blob_fee(block.header.excess_blob_gas); + + Ok(L1GasPriceData { + block_number, + block_hash, + parent_hash, + timestamp: block.header.timestamp, + base_fee_per_gas, + blob_fee, + }) + } + + /// Fetches gas price data for a range of blocks (inclusive). + /// + /// We use this to initialize our gas price buffer. After initialization we + /// subscribe to latest updates via subscribe_block_headers. + pub async fn get_gas_price_data_range( + &self, + start: L1BlockNumber, + end: L1BlockNumber, + ) -> anyhow::Result> { + let mut results = Vec::with_capacity((end.get() - start.get() + 1) as usize); + + for block_num in start.get()..=end.get() { + let block_number = L1BlockNumber::new_or_panic(block_num); + let data = self + .get_gas_price_data(block_number) + .await + .with_context(|| format!("Fetching gas price data for block {block_num}"))?; + results.push(data); + } + + Ok(results) + } + + /// Subscribes to new block headers and sends gas price data to the + /// provided channel for each block as it arrives. + /// + /// This uses a dedicated WebSocket connection for the subscription stream. + /// Re-subscribes automatically if the stream ends due to errors. + /// If the underlying provider dies, creates a fresh connection and + /// re-subscribes. + /// Returns `Ok(())` if the receiver is dropped (clean shutdown). + pub async fn subscribe_block_headers( + &self, + tx: tokio::sync::mpsc::Sender, + ) -> anyhow::Result<()> { + loop { + // Create a dedicated WebSocket connection for subscriptions + let ws = WsConnect::new(self.url.clone()); + let provider = match ProviderBuilder::new().connect_ws(ws).await { + Ok(provider) => provider, + Err(e) => { + tracing::warn!(error=%e, "Failed to connect to Ethereum node for block header subscription, retrying in {RECONNECT_DELAY:?}"); + tokio::time::sleep(RECONNECT_DELAY).await; + continue; + } + }; + + // Subscribe to new block headers + let mut block_stream = match provider.subscribe_blocks().await { + Ok(sub) => sub, + Err(e) => { + tracing::warn!(error=%e, "Failed to subscribe to block headers, retrying in {RECONNECT_DELAY:?}"); + tokio::time::sleep(RECONNECT_DELAY).await; + continue; + } + }; + + let error: anyhow::Error = loop { + match block_stream.recv().await { + Ok(header) => { + let data = L1GasPriceData { + block_number: L1BlockNumber::new_or_panic(header.number), + block_hash: L1BlockHash::from(header.hash.0), + parent_hash: L1BlockHash::from(header.parent_hash.0), + timestamp: header.timestamp, + base_fee_per_gas: header.base_fee_per_gas.unwrap_or(0) as u128, + blob_fee: compute_blob_fee(header.excess_blob_gas), + }; + if tx.send(data).await.is_err() { + return Ok(()); + } + } + Err(e) => { + tracing::debug!(error=%e, "Block subscription ended, re-subscribing"); + match provider.subscribe_blocks().await { + Ok(sub) => block_stream = sub, + Err(e) => break e.into(), + } + } + } + }; + + tracing::warn!(error=%error, "Block header subscription connection lost, reconnecting in {RECONNECT_DELAY:?}"); + tokio::time::sleep(RECONNECT_DELAY).await; + } + } } -impl EthereumApi for EthereumClient { +impl EthereumClient { /// Listens for Ethereum events and notifies the caller using the provided /// callback. State updates will only be emitted once they belong to a /// finalized block. - async fn sync_and_listen( + pub async fn sync_and_listen( &mut self, address: &H160, poll_interval: Duration, @@ -122,124 +305,143 @@ impl EthereumApi for EthereumClient { F: Fn(EthereumStateUpdate) -> Fut + Send + 'static, Fut: Future + Send + 'static, { - // Create a WebSocket connection - let ws = WsConnect::new(self.url.clone()); - let provider = ProviderBuilder::new().connect_ws(ws).await?; - // Fetch the current Starknet state from Ethereum let state_update = self.get_starknet_state(address).await?; let _ = callback(state_update).await; - // Create the StarknetCoreContract instance let core_address = Address::new((*address).into()); - let core_contract = StarknetCoreContract::new(core_address, provider.clone()); - - // Listen for state update events - let filter = core_contract.LogStateUpdate_filter().filter; - let mut state_updates = provider.subscribe_logs(&filter).await?; - - // Poll regularly for finalized block number - let provider_clone = provider.clone(); - let (finalized_block_tx, mut finalized_block_rx) = - tokio::sync::mpsc::channel::(1); - - util::task::spawn(async move { - let mut interval = tokio::time::interval(poll_interval); - interval.set_missed_tick_behavior(MissedTickBehavior::Skip); - loop { - interval.tick().await; - - match provider_clone - .get_block_by_number(BlockNumberOrTag::Finalized) - .await - { - Ok(Some(finalized_block)) => { - let block_number = - L1BlockNumber::new_or_panic(finalized_block.header.number); - if finalized_block_tx.send(block_number).await.is_err() { - tracing::debug!("L1 finalized block channel closed"); - return; - } - } - Ok(None) => { - tracing::error!("No L1 finalized block found"); - } - Err(e) => { - tracing::error!(error=%e, "Error fetching L1 finalized block"); - return; - } - } - } - }); - // Process incoming events loop { - select! { - maybe_state_update = state_updates.recv() => { - match maybe_state_update { - Ok(state_update) => { - tracing::trace!(?state_update, "Processing LogStateUpdate event"); - // one would expect this to always be true, but in fact it isn't... - if filter.address.matches(&state_update.inner.address) { - // Decode the state update - let eth_block = L1BlockNumber::new_or_panic( - state_update.block_number.expect("missing eth block number") - ); - let state_update: Log = state_update.log_decode()?; - let block_number = get_block_number(state_update.inner.blockNumber); - // Add or remove to/from pending state updates accordingly - if !state_update.removed { - let state_update = EthereumStateUpdate { - block_number, - block_hash: get_block_hash(state_update.inner.blockHash), - state_root: get_state_root(state_update.inner.globalRoot), - }; - self.pending_state_updates.insert(eth_block, state_update); - } else { - self.pending_state_updates.remove(ð_block); - } + let ws = WsConnect::new(self.url.clone()); + let provider = match ProviderBuilder::new().connect_ws(ws).await { + Ok(provider) => provider, + Err(e) => { + tracing::warn!(error=%e, "Failed to connect to Ethereum node, retrying in {RECONNECT_DELAY:?}"); + tokio::time::sleep(RECONNECT_DELAY).await; + continue; + } + }; + + let core_contract = StarknetCoreContract::new(core_address, provider.clone()); + + // Listen for state update events + let filter = core_contract.LogStateUpdate_filter().filter; + let mut state_updates = match provider.subscribe_logs(&filter).await { + Ok(sub) => sub, + Err(e) => { + tracing::warn!(error=%e, "Failed to subscribe to state update events, retrying in {RECONNECT_DELAY:?}"); + tokio::time::sleep(RECONNECT_DELAY).await; + continue; + } + }; + + // Poll regularly for finalized block number + let provider_clone = provider.clone(); + let (finalized_block_tx, mut finalized_block_rx) = + tokio::sync::mpsc::channel::(1); + + util::task::spawn(async move { + let mut interval = tokio::time::interval(poll_interval); + // Don't fire missed ticks if a poll takes longer than the interval. We want to + // avoid rapid "catch up" bursts if for whatever reason there's a slow down. + interval.set_missed_tick_behavior(MissedTickBehavior::Skip); + loop { + interval.tick().await; + + match provider_clone + .get_block_by_number(BlockNumberOrTag::Finalized) + .await + { + Ok(Some(finalized_block)) => { + let block_number = + L1BlockNumber::new_or_panic(finalized_block.header.number); + if finalized_block_tx.send(block_number).await.is_err() { + tracing::debug!("L1 finalized block channel closed"); + return; } } + Ok(None) => { + tracing::error!("No L1 finalized block found"); + } Err(e) => { - tracing::debug!(error=%e, "LogStateUpdate stream ended, re-subscribing"); - state_updates = provider.subscribe_logs(&filter).await?; + tracing::warn!(error=%e, "Error fetching L1 finalized block, will retry"); } } } - maybe_block_number = finalized_block_rx.recv() => { - match maybe_block_number { - Some(block_number) => { - tracing::trace!(%block_number, "Processing L1 finalized block"); - // Collect all state updates up to (and including) the finalized block - let pending_state_updates: Vec = self.pending_state_updates - .range(..=block_number) - .map(|(_, &update)| update) - .collect(); - // Remove emitted updates from the map - self.pending_state_updates.retain(|&k, _| k > block_number); - // Emit the state updates - for state_update in pending_state_updates { - let _ = callback(state_update).await; + }); + + // Process incoming events until the connection is lost + let error: anyhow::Error = loop { + select! { + maybe_state_update = state_updates.recv() => { + match maybe_state_update { + Ok(state_update) => { + tracing::trace!(?state_update, "Processing LogStateUpdate event"); + // One would expect this to always be true, but in fact it isn't... + if filter.address.matches(&state_update.inner.address) { + // Decode the state update + let eth_block = L1BlockNumber::new_or_panic( + state_update.block_number.expect("missing eth block number") + ); + let state_update: Log = state_update.log_decode()?; + let block_number = get_block_number(state_update.inner.blockNumber); + // Add or remove to/from pending state updates accordingly + if !state_update.removed { + let state_update = EthereumStateUpdate { + block_number, + block_hash: get_block_hash(state_update.inner.blockHash), + state_root: get_state_root(state_update.inner.globalRoot), + }; + self.pending_state_updates.insert(eth_block, state_update); + } else { + self.pending_state_updates.remove(ð_block); + } + } + } + Err(e) => { + tracing::debug!(error=%e, "LogStateUpdate stream ended, re-subscribing"); + match provider.subscribe_logs(&filter).await { + Ok(sub) => state_updates = sub, + Err(e) => break e.into(), + } } } - None => { - tracing::debug!("L1 finalized block channel closed"); - anyhow::bail!("L1 finalized block channel closed"); + } + maybe_block_number = finalized_block_rx.recv() => { + match maybe_block_number { + Some(block_number) => { + tracing::trace!(%block_number, "Processing L1 finalized block"); + // Collect all state updates up to (and including) the finalized block + let pending_state_updates: Vec = self.pending_state_updates + .range(..=block_number) + .map(|(_, &update)| update) + .collect(); + // Remove emitted updates from the map + self.pending_state_updates.retain(|&k, _| k > block_number); + // Emit the state updates + for state_update in pending_state_updates { + let _ = callback(state_update).await; + } + } + None => { + break anyhow::anyhow!("L1 finalized block channel closed"); + } } } } - } + }; + + tracing::warn!(error=%error, "L1 sync connection lost, reconnecting in {RECONNECT_DELAY:?}"); + tokio::time::sleep(RECONNECT_DELAY).await; } } - async fn get_l1_handler_txs( + pub async fn get_l1_handler_txs( &self, address: &H160, tx_hash: &L1TransactionHash, ) -> anyhow::Result> { - // Create a WebSocket connection - let ws = WsConnect::new(self.url.clone()); - let provider = ProviderBuilder::new().connect_ws(ws).await?; + let provider = self.provider().await?; let core_address = Address::new((*address).into()); let core_contract = StarknetCoreContract::new(core_address, provider.clone()); @@ -301,10 +503,8 @@ impl EthereumApi for EthereumClient { } /// Get the Starknet state - async fn get_starknet_state(&self, address: &H160) -> anyhow::Result { - // Create a WebSocket connection - let ws = WsConnect::new(self.url.clone()); - let provider = ProviderBuilder::new().connect_ws(ws).await?; + pub async fn get_starknet_state(&self, address: &H160) -> anyhow::Result { + let provider = self.provider().await?; // Create the StarknetCoreContract instance let address = Address::new((*address).into()); @@ -328,12 +528,8 @@ impl EthereumApi for EthereumClient { } /// Get the Ethereum chain - async fn get_chain(&self) -> anyhow::Result { - // Create a WebSocket connection - let ws = WsConnect::new(self.url.clone()); - let provider = ProviderBuilder::new().connect_ws(ws).await?; - - // Get the chain ID + pub async fn get_chain(&self) -> anyhow::Result { + let provider = self.provider().await?; let chain_id = provider.get_chain_id().await?; let chain_id = U256::from(chain_id); diff --git a/crates/ethereum/src/utils.rs b/crates/ethereum/src/utils.rs index 79261d0407..8b361cfd5e 100644 --- a/crates/ethereum/src/utils.rs +++ b/crates/ethereum/src/utils.rs @@ -2,9 +2,13 @@ use pathfinder_common::prelude::*; use pathfinder_crypto::Felt; /// Converts a `Signed<256, 4>` integer to a `BlockNumber` +/// +/// Returns `BlockNumber::GENESIS` (0) if the value is negative or exceeds u64::MAX. pub(crate) fn get_block_number(block_number: alloy::primitives::Signed<256, 4>) -> BlockNumber { - let block_number = block_number.as_u64(); - BlockNumber::new_or_panic(block_number) + block_number + .try_into() + .map(BlockNumber::new_or_panic) + .unwrap_or(BlockNumber::GENESIS) } /// Converts an `alloy` block hash to a `pathfinder` block hash diff --git a/crates/executor/src/block.rs b/crates/executor/src/block.rs deleted file mode 100644 index 83ce814f05..0000000000 --- a/crates/executor/src/block.rs +++ /dev/null @@ -1,1103 +0,0 @@ -use anyhow::Context; -use blockifier::blockifier::transaction_executor::BLOCK_STATE_ACCESS_ERR; -use blockifier::state::cached_state::StateChanges; -use blockifier::transaction::objects::TransactionExecutionInfo; -use pathfinder_common::{ChainId, ClassHash, ContractAddress, TransactionIndex}; - -use crate::error::TransactionExecutorError; -use crate::execution_state::{create_executor, PathfinderExecutionState, PathfinderExecutor}; -use crate::state_reader::ConcurrentStorageAdapter; -use crate::types::{ - to_receipt_and_events, - to_state_diff, - transaction_declared_deprecated_class, - transaction_type, - BlockInfo, - Receipt, - StateDiff, -}; -use crate::{ExecutionState, Transaction, TransactionExecutionError}; - -/// Executes transactions from a single block. Produces transactions receipts, -/// events, and the final state diff for the entire block. -pub struct BlockExecutor { - executor: PathfinderExecutor, - initial_state: PathfinderExecutionState, - declared_deprecated_classes: Vec, - next_txn_idx: usize, -} - -type ReceiptAndEvents = (Receipt, Vec); - -impl BlockExecutor { - pub fn new( - chain_id: ChainId, - block_info: BlockInfo, - eth_fee_address: ContractAddress, - strk_fee_address: ContractAddress, - db_conn: pathfinder_storage::Connection, - ) -> anyhow::Result { - let execution_state = ExecutionState::validation( - chain_id, - block_info, - None, - Default::default(), - eth_fee_address, - strk_fee_address, - None, - ); - let storage_adapter = ConcurrentStorageAdapter::new(db_conn); - let executor = create_executor(storage_adapter, execution_state)?; - let initial_state = executor - .block_state - .as_ref() - .expect(BLOCK_STATE_ACCESS_ERR) - .clone(); - - Ok(Self { - executor, - initial_state, - declared_deprecated_classes: Vec::new(), - next_txn_idx: 0, - }) - } - - /// Create a new BlockExecutor with a pre-existing initial state - /// This allows for executor chaining where the new executor starts with - /// the final state of a previous executor - pub fn new_with_initial_state( - chain_id: ChainId, - block_info: BlockInfo, - eth_fee_address: ContractAddress, - strk_fee_address: ContractAddress, - db_conn: pathfinder_storage::Connection, - initial_state: PathfinderExecutionState, - ) -> anyhow::Result { - let execution_state = ExecutionState::validation( - chain_id, - block_info, - None, - Default::default(), - eth_fee_address, - strk_fee_address, - None, - ); - let storage_adapter = ConcurrentStorageAdapter::new(db_conn); - let mut executor = create_executor(storage_adapter, execution_state)?; - - // Set the initial state - if let Some(block_state) = executor.block_state.as_mut() { - *block_state = initial_state.clone(); - } - - Ok(Self { - executor, - initial_state, - declared_deprecated_classes: Vec::new(), - next_txn_idx: 0, - }) - } - - /// Create a new BlockExecutor from a StateUpdate - /// This allows reconstructing an executor from a stored state diff - /// checkpoint - pub fn new_with_pending_state( - chain_id: ChainId, - block_info: BlockInfo, - eth_fee_address: ContractAddress, - strk_fee_address: ContractAddress, - db_conn: pathfinder_storage::Connection, - pending_state: std::sync::Arc, - ) -> anyhow::Result { - let execution_state = ExecutionState::validation( - chain_id, - block_info, - Some(pending_state), - Default::default(), - eth_fee_address, - strk_fee_address, - None, - ); - let storage_adapter = ConcurrentStorageAdapter::new(db_conn); - let executor = create_executor(storage_adapter, execution_state)?; - let initial_state = executor - .block_state - .as_ref() - .expect(BLOCK_STATE_ACCESS_ERR) - .clone(); - - Ok(Self { - executor, - initial_state, - declared_deprecated_classes: Vec::new(), - next_txn_idx: 0, - }) - } - - /// Evecute a batch of transactions in the current block. - pub fn execute( - &mut self, - txns: Vec, - ) -> Result, TransactionExecutionError> { - if txns.is_empty() { - return Ok(vec![]); - } - - let start_tx_index = self.next_txn_idx; - self.next_txn_idx += txns.len(); - let block_number = self.executor.block_context.block_info().block_number; - - let _span = tracing::debug_span!( - "BlockExecutor::execute", - block_number = %block_number, - from_tx_index = %start_tx_index, - to_tx_index = %(self.next_txn_idx - 1), - ) - .entered(); - - // TODO(validator) specify execution_deadline as an additional safeguard - let results = self - .executor - .execute_txs(&txns, None) - .into_iter() - .enumerate() - .map(|(i, result)| { - let tx_index = start_tx_index + i; - match result { - Ok((tx_info, _)) => Ok((tx_index, tx_info)), - Err(error) => Err(TransactionExecutorError::new(tx_index, error)), - } - }) - .collect::, TransactionExecutorError>>( - )?; - let receipts_events = results - .into_iter() - .zip(txns.into_iter()) - .map(|((tx_index, tx_info), tx)| { - let tx_type = transaction_type(&tx); - if let Some(class) = transaction_declared_deprecated_class(&tx) { - self.declared_deprecated_classes.push(class) - } - let gas_vector_computation_mode = - crate::transaction::gas_vector_computation_mode(&tx); - - to_receipt_and_events( - tx_type, - TransactionIndex::new(tx_index.try_into().expect("ptr size is 64bits")) - .context("tx_index < i64::MAX")?, - tx_info, - self.executor.block_context.versioned_constants(), - &gas_vector_computation_mode, - ) - .map_err(TransactionExecutionError::Custom) - }) - .collect::, TransactionExecutionError>>()?; - Ok(receipts_events) - } - - /// Finalizes block execution and returns the state diff for the block. - pub fn finalize(self) -> anyhow::Result { - let Self { - mut executor, - initial_state, - declared_deprecated_classes, - .. - } = self; - - executor.finalize()?; - - let mut state = executor.block_state.expect(BLOCK_STATE_ACCESS_ERR); - let StateChanges { state_maps, .. } = state.to_state_diff()?; - let diff = to_state_diff( - state_maps, - initial_state, - declared_deprecated_classes.into_iter(), - )?; - Ok(diff) - } - - /// Get the final state of the executor - /// This allows for state extraction before finalizing - pub fn get_final_state( - &self, - ) -> anyhow::Result> { - let final_state = self - .executor - .block_state - .as_ref() - .expect(BLOCK_STATE_ACCESS_ERR) - .clone(); - Ok(final_state) - } - - /// Get the current transaction index - /// This allows for tracking transaction indices across chained executors - pub fn get_transaction_index(&self) -> usize { - self.next_txn_idx - } - - /// Set the transaction index - /// This allows for setting the correct starting index for chained executors - pub fn set_transaction_index(&mut self, index: usize) { - self.next_txn_idx = index; - } - - /// Extract state diff without consuming the executor - /// This allows extracting the diff for rollback scenarios without losing - /// the executor - /// - /// Note: This method does NOT call `executor.finalize()`, which means it - /// doesn't include stateful compression changes (system contract 0x2 - /// updates). These changes are only needed when finalizing the proposal - /// for commitment computation, not for intermediate diff extraction - /// during batch execution. - pub fn extract_state_diff(&self) -> anyhow::Result { - let current_state = self - .executor - .block_state - .as_ref() - .expect(BLOCK_STATE_ACCESS_ERR); - - let mut cloned_state = current_state.clone(); - let StateChanges { state_maps, .. } = cloned_state.to_state_diff()?; - - let diff = to_state_diff( - state_maps, - self.initial_state.clone(), - self.declared_deprecated_classes.iter().copied(), - )?; - Ok(diff) - } -} - -#[cfg(test)] -mod tests { - - use pathfinder_common::state_update::StateUpdateData; - use pathfinder_common::transaction::{L1HandlerTransaction, TransactionVariant}; - use pathfinder_common::{ - contract_address, - CallParam, - ChainId, - ContractAddress, - EntryPoint, - TransactionHash, - TransactionNonce, - }; - use pathfinder_crypto::Felt; - use pathfinder_storage::StorageBuilder; - - use crate::execution_state::create_executor; - use crate::BlockExecutor; - - // Fee token addresses (same as in pathfinder_rpc::context) - const ETH_FEE_TOKEN_ADDRESS: ContractAddress = - contract_address!("0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7"); - const STRK_FEE_TOKEN_ADDRESS: ContractAddress = - contract_address!("0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d"); - - /// Creates a simple L1Handler transaction for testing - fn create_simple_l1_handler_transaction( - index: usize, - chain_id: ChainId, - ) -> pathfinder_common::transaction::Transaction { - let nonce = Felt::from_hex_str(&format!("0x{index}")).unwrap(); - let address = Felt::from_hex_str(&format!("0x{index:x}")).unwrap(); - let entry_point_selector = Felt::from_hex_str(&format!("0x{index}")).unwrap(); - let calldata = [Felt::from_hex_str(&format!("0x{index}")).unwrap()]; - - let l1_handler = L1HandlerTransaction { - nonce: TransactionNonce(nonce), - contract_address: ContractAddress::new_or_panic(address), - entry_point_selector: EntryPoint(entry_point_selector), - calldata: calldata.iter().map(|c| CallParam(*c)).collect(), - }; - - let hash = l1_handler.calculate_hash(chain_id); - - pathfinder_common::transaction::Transaction { - hash: TransactionHash(hash.0), - variant: TransactionVariant::L1Handler(l1_handler), - } - } - - /// Converts common transaction to executor transaction - fn convert_to_executor_transaction( - transaction: pathfinder_common::transaction::Transaction, - ) -> anyhow::Result { - use pathfinder_common::transaction::TransactionVariant; - use starknet_api::core::{ - ContractAddress as StarknetContractAddress, - EntryPointSelector, - Nonce, - PatriciaKey, - }; - use starknet_api::transaction::fields::Calldata; - use starknet_api::transaction::{ - L1HandlerTransaction as StarknetL1HandlerTransaction, - Transaction as StarknetApiTransaction, - TransactionVersion, - }; - - use crate::felt::IntoStarkFelt; - use crate::AccountTransactionExecutionFlags; - - match transaction.variant { - TransactionVariant::L1Handler(l1_handler) => { - // Convert to Starknet API transaction - let starknet_txn = - StarknetApiTransaction::L1Handler(StarknetL1HandlerTransaction { - version: TransactionVersion::ZERO, - nonce: Nonce(l1_handler.nonce.0.into_starkfelt()), - contract_address: StarknetContractAddress( - PatriciaKey::try_from( - l1_handler.contract_address.get().into_starkfelt(), - ) - .expect("No contract address overflow expected"), - ), - entry_point_selector: EntryPointSelector( - l1_handler.entry_point_selector.0.into_starkfelt(), - ), - calldata: Calldata(std::sync::Arc::new( - l1_handler - .calldata - .iter() - .map(|c| c.0.into_starkfelt()) - .collect(), - )), - }); - - // Convert to executor transaction - let tx_hash = - starknet_api::transaction::TransactionHash(transaction.hash.0.into_starkfelt()); - let executor_txn = crate::Transaction::from_api( - starknet_txn, - tx_hash, - None, - Some(starknet_api::transaction::fields::Fee(1_000_000_000_000)), - None, - AccountTransactionExecutionFlags::default(), - )?; - - Ok(executor_txn) - } - _ => anyhow::bail!("Unsupported transaction type for testing"), - } - } - - /// Detailed validation of state diff content - fn validate_state_diff_content( - single_state_diff: &crate::types::StateDiff, - chained_state_diff: &crate::types::StateDiff, - ) { - // Storage diffs content validation - assert_eq!( - single_state_diff.storage_diffs.len(), - chained_state_diff.storage_diffs.len(), - "Storage diffs count mismatch" - ); - - // Compare storage diffs by contract address - for (contract_addr, single_diffs) in &single_state_diff.storage_diffs { - let chained_diffs = chained_state_diff - .storage_diffs - .get(contract_addr) - .expect("Contract address missing in chained storage diffs"); - - assert_eq!( - single_diffs.len(), - chained_diffs.len(), - "Storage diffs count mismatch for contract {contract_addr:?}" - ); - - // Sort storage entries by key for comparison - let mut single_entries = single_diffs.clone(); - let mut chained_entries = chained_diffs.clone(); - single_entries.sort_by_key(|entry| entry.key); - chained_entries.sort_by_key(|entry| entry.key); - - for (j, (single_entry, chained_entry)) in single_entries - .iter() - .zip(chained_entries.iter()) - .enumerate() - { - assert_eq!( - single_entry.key, chained_entry.key, - "Storage key mismatch for contract {contract_addr:?} entry {j}" - ); - assert_eq!( - single_entry.value, chained_entry.value, - "Storage value mismatch for contract {contract_addr:?} entry {j}" - ); - } - } - - // Deployed contracts content validation - assert_eq!( - single_state_diff.deployed_contracts.len(), - chained_state_diff.deployed_contracts.len(), - "Deployed contracts count mismatch" - ); - - let mut single_deployed = single_state_diff.deployed_contracts.clone(); - let mut chained_deployed = chained_state_diff.deployed_contracts.clone(); - single_deployed.sort_by_key(|contract| contract.address); - chained_deployed.sort_by_key(|contract| contract.address); - - for (i, (single_contract, chained_contract)) in single_deployed - .iter() - .zip(chained_deployed.iter()) - .enumerate() - { - assert_eq!( - single_contract.address, chained_contract.address, - "Deployed contract address mismatch {i}" - ); - assert_eq!( - single_contract.class_hash, chained_contract.class_hash, - "Deployed contract class hash mismatch {i}" - ); - } - - // Declared classes content validation - assert_eq!( - single_state_diff.declared_classes.len(), - chained_state_diff.declared_classes.len(), - "Declared classes count mismatch" - ); - - let mut single_declared = single_state_diff.declared_classes.clone(); - let mut chained_declared = chained_state_diff.declared_classes.clone(); - single_declared.sort_by_key(|class| class.class_hash); - chained_declared.sort_by_key(|class| class.class_hash); - - for (i, (single_class, chained_class)) in single_declared - .iter() - .zip(chained_declared.iter()) - .enumerate() - { - assert_eq!( - single_class.class_hash, chained_class.class_hash, - "Declared class hash mismatch {i}" - ); - assert_eq!( - single_class.compiled_class_hash, chained_class.compiled_class_hash, - "Declared compiled class hash mismatch {i}" - ); - } - - // Nonces content validation - assert_eq!( - single_state_diff.nonces.len(), - chained_state_diff.nonces.len(), - "Nonces count mismatch" - ); - - for (contract_addr, single_nonce) in &single_state_diff.nonces { - let chained_nonce = chained_state_diff - .nonces - .get(contract_addr) - .expect("Contract address missing in chained nonces"); - - assert_eq!( - single_nonce, chained_nonce, - "Nonce mismatch for contract {contract_addr:?}" - ); - } - - // Replaced classes content validation - assert_eq!( - single_state_diff.replaced_classes.len(), - chained_state_diff.replaced_classes.len(), - "Replaced classes count mismatch" - ); - - let mut single_replaced = single_state_diff.replaced_classes.clone(); - let mut chained_replaced = chained_state_diff.replaced_classes.clone(); - single_replaced.sort_by_key(|replaced| replaced.contract_address); - chained_replaced.sort_by_key(|replaced| replaced.contract_address); - - for (i, (single_replaced, chained_replaced)) in single_replaced - .iter() - .zip(chained_replaced.iter()) - .enumerate() - { - assert_eq!( - single_replaced.contract_address, chained_replaced.contract_address, - "Replaced class contract address mismatch {i}" - ); - assert_eq!( - single_replaced.class_hash, chained_replaced.class_hash, - "Replaced class hash mismatch {i}" - ); - } - } - - #[test] - fn test_detailed_state_content_validation() { - // Create test storage - let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); - let chain_id = ChainId::SEPOLIA_TESTNET; - - let block_info = crate::types::BlockInfo { - number: pathfinder_common::BlockNumber::new_or_panic(1), - timestamp: pathfinder_common::BlockTimestamp::new_or_panic(1000), - sequencer_address: pathfinder_common::SequencerAddress::ZERO, - l1_da_mode: pathfinder_common::L1DataAvailabilityMode::Calldata, - eth_l1_gas_price: pathfinder_common::GasPrice::ZERO, - strk_l1_gas_price: pathfinder_common::GasPrice::ZERO, - eth_l1_data_gas_price: pathfinder_common::GasPrice::ZERO, - strk_l1_data_gas_price: pathfinder_common::GasPrice::ZERO, - eth_l2_gas_price: pathfinder_common::GasPrice::ZERO, - strk_l2_gas_price: pathfinder_common::GasPrice::ZERO, - starknet_version: pathfinder_common::StarknetVersion::new(0, 14, 0, 0), - }; - - // Create "real" transactions - let common_transactions = vec![ - create_simple_l1_handler_transaction(1, chain_id), - create_simple_l1_handler_transaction(2, chain_id), - create_simple_l1_handler_transaction(3, chain_id), - ]; - - // Convert to executor transactions - let executor_transactions: Vec = common_transactions - .into_iter() - .map(convert_to_executor_transaction) - .collect::>>() - .expect("Failed to convert transactions"); - - // Execute them all in a single executor - let mut single_executor = BlockExecutor::new( - chain_id, - block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - storage.connection().expect("Failed to get connection"), - ) - .expect("Failed to create single executor"); - - let single_receipts = single_executor - .execute(executor_transactions.clone()) - .expect("Failed to execute in single executor"); - let single_state_diff = single_executor - .finalize() - .expect("Failed to finalize single executor"); - - // Now execute them in a chained fashion, simulating 3 batches of 1 tx each - let batch1 = vec![executor_transactions[0].clone()]; - let batch2 = vec![executor_transactions[1].clone()]; - let batch3 = vec![executor_transactions[2].clone()]; - - // Execute batch 1 - let mut executor1 = BlockExecutor::new( - chain_id, - block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - storage.connection().expect("Failed to get connection"), - ) - .expect("Failed to create executor1"); - - let receipts1 = executor1.execute(batch1).expect("Failed to execute batch1"); - let state1 = executor1 - .get_final_state() - .expect("Failed to get state from executor1"); - - // Execute batch 2 with state from batch 1 - let mut executor2 = BlockExecutor::new_with_initial_state( - chain_id, - block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - storage.connection().expect("Failed to get connection"), - state1, - ) - .expect("Failed to create executor2"); - - let receipts2 = executor2.execute(batch2).expect("Failed to execute batch2"); - let state2 = executor2 - .get_final_state() - .expect("Failed to get state from executor2"); - - // Execute batch 3 with state from batch 2 - let mut executor3 = BlockExecutor::new_with_initial_state( - chain_id, - block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - storage.connection().expect("Failed to get connection"), - state2, - ) - .expect("Failed to create executor3"); - - let receipts3 = executor3.execute(batch3).expect("Failed to execute batch3"); - let state_diff3 = executor3.finalize().expect("Failed to finalize executor3"); - - // Basic count validation first - let total_chained_receipts = receipts1.len() + receipts2.len() + receipts3.len(); - assert_eq!( - single_receipts.len(), - total_chained_receipts, - "Receipt count mismatch" - ); - - // Detailed state diff content validation - validate_state_diff_content(&single_state_diff, &state_diff3); - } - - /// Test with different batch sizes - #[test] - fn test_different_batch_sizes_consistency() { - // Create test storage - let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); - let chain_id = ChainId::SEPOLIA_TESTNET; - - let block_info = crate::types::BlockInfo { - number: pathfinder_common::BlockNumber::new_or_panic(1), - timestamp: pathfinder_common::BlockTimestamp::new_or_panic(1000), - sequencer_address: pathfinder_common::SequencerAddress::ZERO, - l1_da_mode: pathfinder_common::L1DataAvailabilityMode::Calldata, - eth_l1_gas_price: pathfinder_common::GasPrice::ZERO, - strk_l1_gas_price: pathfinder_common::GasPrice::ZERO, - eth_l1_data_gas_price: pathfinder_common::GasPrice::ZERO, - strk_l1_data_gas_price: pathfinder_common::GasPrice::ZERO, - eth_l2_gas_price: pathfinder_common::GasPrice::ZERO, - strk_l2_gas_price: pathfinder_common::GasPrice::ZERO, - starknet_version: pathfinder_common::StarknetVersion::new(0, 14, 0, 0), - }; - - // Create 5 transactions - let common_transactions = (0..5) - .map(|i| create_simple_l1_handler_transaction(i, chain_id)) - .collect::>(); - - let executor_transactions: Vec = common_transactions - .into_iter() - .map(convert_to_executor_transaction) - .collect::>>() - .expect("Failed to convert transactions"); - - // Single executor execution - let mut single_executor = BlockExecutor::new( - chain_id, - block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - storage.connection().expect("Failed to get connection"), - ) - .expect("Failed to create single executor"); - - let single_receipts = single_executor - .execute(executor_transactions.clone()) - .expect("Failed to execute"); - let single_state_diff = single_executor.finalize().expect("Failed to finalize"); - - // Chained execution with different batch sizes: [2, 1, 2] - let batches = [ - vec![ - executor_transactions[0].clone(), - executor_transactions[1].clone(), - ], - vec![executor_transactions[2].clone()], - vec![ - executor_transactions[3].clone(), - executor_transactions[4].clone(), - ], - ]; - - // Execute batch 1 - let mut executor1 = BlockExecutor::new( - chain_id, - block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - storage.connection().expect("Failed to get connection"), - ) - .expect("Failed to create executor1"); - - let receipts1 = executor1 - .execute(batches[0].clone()) - .expect("Failed to execute batch1"); - let state1 = executor1 - .get_final_state() - .expect("Failed to get state from executor1"); - - // Execute batch 2 with state from batch 1 - let mut executor2 = BlockExecutor::new_with_initial_state( - chain_id, - block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - storage.connection().expect("Failed to get connection"), - state1, - ) - .expect("Failed to create executor2"); - - executor2.set_transaction_index(2); - let receipts2 = executor2 - .execute(batches[1].clone()) - .expect("Failed to execute batch2"); - let state2 = executor2 - .get_final_state() - .expect("Failed to get state from executor2"); - - // Execute batch 3 with state from batch 2 - let mut executor3 = BlockExecutor::new_with_initial_state( - chain_id, - block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - storage.connection().expect("Failed to get connection"), - state2, - ) - .expect("Failed to create executor3"); - - executor3.set_transaction_index(3); - let receipts3 = executor3 - .execute(batches[2].clone()) - .expect("Failed to execute batch3"); - - let total_receipts = receipts1.len() + receipts2.len() + receipts3.len(); - let final_state_diff = executor3.finalize().expect("Failed to finalize"); - - // Check receipt count as a first sanity check - assert_eq!( - single_receipts.len(), - total_receipts, - "Receipt count mismatch" - ); - - // Detailed content validation - validate_state_diff_content(&single_state_diff, &final_state_diff); - } - - /// Test extracting state diff without consuming the executor - #[test] - fn test_extract_state_diff_without_consuming() { - let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); - let chain_id = ChainId::SEPOLIA_TESTNET; - - let block_info = crate::types::BlockInfo { - number: pathfinder_common::BlockNumber::new_or_panic(1), - timestamp: pathfinder_common::BlockTimestamp::new_or_panic(1000), - sequencer_address: pathfinder_common::SequencerAddress::ZERO, - l1_da_mode: pathfinder_common::L1DataAvailabilityMode::Calldata, - eth_l1_gas_price: pathfinder_common::GasPrice::ZERO, - strk_l1_gas_price: pathfinder_common::GasPrice::ZERO, - eth_l1_data_gas_price: pathfinder_common::GasPrice::ZERO, - strk_l1_data_gas_price: pathfinder_common::GasPrice::ZERO, - eth_l2_gas_price: pathfinder_common::GasPrice::ZERO, - strk_l2_gas_price: pathfinder_common::GasPrice::ZERO, - starknet_version: pathfinder_common::StarknetVersion::new(0, 14, 0, 0), - }; - - let transactions = vec![ - create_simple_l1_handler_transaction(1, chain_id), - create_simple_l1_handler_transaction(2, chain_id), - ]; - - let executor_transactions: Vec = transactions - .into_iter() - .map(convert_to_executor_transaction) - .collect::>>() - .expect("Failed to convert transactions"); - - // Create executor and execute - let mut executor = BlockExecutor::new( - chain_id, - block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - storage.connection().expect("Failed to get connection"), - ) - .expect("Failed to create executor"); - - executor - .execute(executor_transactions) - .expect("Failed to execute"); - - // Extract state diff without consuming executor - let _extracted_diff = executor - .extract_state_diff() - .expect("Failed to extract state diff"); - - // Verify executor is still usable after extraction - let tx_index = executor.get_transaction_index(); - assert_eq!(tx_index, 2, "Transaction index should be 2"); - } - - /// Test full workflow: extract diffs, merge, and reconstruct executor - #[test] - fn test_single_executor_with_state_diff_reconstruction() { - let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); - let chain_id = ChainId::SEPOLIA_TESTNET; - - let block_info = crate::types::BlockInfo { - number: pathfinder_common::BlockNumber::new_or_panic(1), - timestamp: pathfinder_common::BlockTimestamp::new_or_panic(1000), - sequencer_address: pathfinder_common::SequencerAddress::ZERO, - l1_da_mode: pathfinder_common::L1DataAvailabilityMode::Calldata, - eth_l1_gas_price: pathfinder_common::GasPrice::ZERO, - strk_l1_gas_price: pathfinder_common::GasPrice::ZERO, - eth_l1_data_gas_price: pathfinder_common::GasPrice::ZERO, - strk_l1_data_gas_price: pathfinder_common::GasPrice::ZERO, - eth_l2_gas_price: pathfinder_common::GasPrice::ZERO, - strk_l2_gas_price: pathfinder_common::GasPrice::ZERO, - starknet_version: pathfinder_common::StarknetVersion::new(0, 14, 0, 0), - }; - - // Create transactions for 3 batches - let all_tx = vec![ - create_simple_l1_handler_transaction(1, chain_id), - create_simple_l1_handler_transaction(2, chain_id), - create_simple_l1_handler_transaction(3, chain_id), - ]; - - let executor_tx: Vec = all_tx - .into_iter() - .map(convert_to_executor_transaction) - .collect::>>() - .expect("Failed to convert transactions"); - - let batches = [ - vec![executor_tx[0].clone()], - vec![executor_tx[1].clone()], - vec![executor_tx[2].clone()], - ]; - - // Execute all batches in single executor (simulating optimized approach) - let mut single_executor = BlockExecutor::new( - chain_id, - block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - storage.connection().expect("Failed to get connection"), - ) - .expect("Failed to create executor"); - - let mut cumulative_state_updates = Vec::new(); - - // Execute batch 1 - single_executor.set_transaction_index(0); - single_executor - .execute(batches[0].clone()) - .expect("Failed to execute batch 1"); - let diff_1 = single_executor - .extract_state_diff() - .expect("Failed to extract diff 1"); - let state_update_data_1: StateUpdateData = diff_1.into(); - // Store cumulative state after batch 1 - cumulative_state_updates.push(state_update_data_1.clone()); - - // Execute batch 2 - single_executor.set_transaction_index(1); - single_executor - .execute(batches[1].clone()) - .expect("Failed to execute batch 2"); - let diff_2 = single_executor - .extract_state_diff() - .expect("Failed to extract diff 2"); - let diff_2_clone = diff_2.clone(); // Clone for validation later - let state_update_data_2: StateUpdateData = diff_2.into(); - // Store cumulative state after batch 2 (diff_2 already includes batch 1) - cumulative_state_updates.push(state_update_data_2.clone()); - - // Execute batch 3 - single_executor.set_transaction_index(2); - single_executor - .execute(batches[2].clone()) - .expect("Failed to execute batch 3"); - let final_diff = single_executor.finalize().expect("Failed to finalize"); - - // Now create a reference executor using chained approach - // Execute batches 1+2 in chained executors to get reference state - let mut ref_executor_1 = BlockExecutor::new( - chain_id, - block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - storage.connection().expect("Failed to get connection"), - ) - .expect("Failed to create reference executor 1"); - - ref_executor_1 - .execute(batches[0].clone()) - .expect("Failed to execute batch 1 in reference executor"); - let ref_state_1 = ref_executor_1 - .get_final_state() - .expect("Failed to get state from reference executor 1"); - - let mut ref_executor_2 = BlockExecutor::new_with_initial_state( - chain_id, - block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - storage.connection().expect("Failed to get connection"), - ref_state_1, - ) - .expect("Failed to create reference executor 2"); - - ref_executor_2 - .execute(batches[1].clone()) - .expect("Failed to execute batch 2 in reference executor"); - - // Extract reference diff after batch 2 (this is our ground truth) - let ref_diff_after_batch_2 = ref_executor_2 - .extract_state_diff() - .expect("Failed to extract reference diff"); - - // TEST 1: Validate that extracted diff matches reference - // Note: L1Handler transactions may produce empty diffs, which is fine - // What matters is that the diffs match between single and chained executors - - // Extracted diff from single executor should match reference - assert_eq!( - diff_2_clone.storage_diffs.len(), - ref_diff_after_batch_2.storage_diffs.len(), - "Storage diffs count: extracted vs reference after batch 2" - ); - assert_eq!( - diff_2_clone.deployed_contracts.len(), - ref_diff_after_batch_2.deployed_contracts.len(), - "Deployed contracts count: extracted vs reference after batch 2" - ); - assert_eq!( - diff_2_clone.nonces.len(), - ref_diff_after_batch_2.nonces.len(), - "Nonces count: extracted vs reference after batch 2" - ); - - // Use detailed validation to compare full diff content (validates actual - // keys/values, not just lengths) - validate_state_diff_content(&diff_2_clone, &ref_diff_after_batch_2); - - // Verify we can reconstruct executor from cumulative state after batch 2 - // Note: diff_2 is already cumulative (includes batch 1 + batch 2), so we use it - // directly - let state_update_from_batch_2 = pathfinder_common::StateUpdate { - block_hash: pathfinder_common::BlockHash::ZERO, - parent_state_commitment: pathfinder_common::StateCommitment::ZERO, - state_commitment: pathfinder_common::StateCommitment::ZERO, - contract_updates: state_update_data_2.contract_updates, - system_contract_updates: state_update_data_2.system_contract_updates, - declared_cairo_classes: state_update_data_2.declared_cairo_classes, - declared_sierra_classes: state_update_data_2.declared_sierra_classes, - migrated_compiled_classes: state_update_data_2.migrated_compiled_classes, - }; - - // Create executor from cumulative state update (batch 2 state) - use std::sync::Arc; - let execution_state = crate::ExecutionState::validation( - chain_id, - block_info, - Some(Arc::new(state_update_from_batch_2)), - Default::default(), - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - None, - ); - - let storage_adapter = crate::state_reader::ConcurrentStorageAdapter::new( - storage.connection().expect("Failed to get connection"), - ); - - // Create BlockExecutor wrapper around the reconstructed executor - let mut reconstructed_executor_wrapper = BlockExecutor::new_with_initial_state( - chain_id, - block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - storage.connection().expect("Failed to get connection"), - create_executor(storage_adapter, execution_state) - .expect("Failed to reconstruct executor") - .block_state - .expect("Block state should exist") - .clone(), - ) - .expect("Failed to create BlockExecutor wrapper"); - - reconstructed_executor_wrapper.set_transaction_index(2); - - // TEST 2: Reconstructed executor should have correct state - // Execute batch 3 in reconstructed executor - let reconstructed_batch_3_receipts = reconstructed_executor_wrapper - .execute(batches[2].clone()) - .expect("Failed to execute batch 3 in reconstructed executor"); - - // Execute batch 3 in reference executor for comparison - let mut ref_executor_3 = BlockExecutor::new_with_initial_state( - chain_id, - block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - storage.connection().expect("Failed to get connection"), - ref_executor_2 - .get_final_state() - .expect("Failed to get state from reference executor 2"), - ) - .expect("Failed to create reference executor 3"); - - ref_executor_3.set_transaction_index(2); - - let ref_batch_3_receipts = ref_executor_3 - .execute(batches[2].clone()) - .expect("Failed to execute batch 3 in reference executor"); - - // TEST 3: Results should be identical - assert_eq!( - reconstructed_batch_3_receipts.len(), - ref_batch_3_receipts.len(), - "Receipt count mismatch: reconstructed vs reference for batch 3" - ); - - // Compare receipts - validate critical fields match - for (i, (recon_receipt, ref_receipt)) in reconstructed_batch_3_receipts - .iter() - .zip(ref_batch_3_receipts.iter()) - .enumerate() - { - assert_eq!( - recon_receipt.0.transaction_index, ref_receipt.0.transaction_index, - "Transaction index mismatch at position {i}" - ); - assert_eq!( - recon_receipt.0.execution_status, ref_receipt.0.execution_status, - "Execution status mismatch at position {i}" - ); - assert_eq!( - recon_receipt.0.actual_fee, ref_receipt.0.actual_fee, - "Actual fee mismatch at position {i}" - ); - assert_eq!( - recon_receipt.0.l2_to_l1_messages.len(), - ref_receipt.0.l2_to_l1_messages.len(), - "L2 to L1 messages count mismatch at position {i}" - ); - assert_eq!( - recon_receipt.1.len(), - ref_receipt.1.len(), - "Events count mismatch at position {i}" - ); - } - - // TEST 4: Final state diffs should match - let reconstructed_final_diff = reconstructed_executor_wrapper - .finalize() - .expect("Failed to finalize reconstructed executor"); - let ref_final_diff = ref_executor_3 - .finalize() - .expect("Failed to finalize reference executor"); - - // Use existing validation function - validate_state_diff_content(&reconstructed_final_diff, &ref_final_diff); - - // Verify final diff from single executor has expected structure - assert!( - !final_diff.storage_diffs.is_empty() - || !final_diff.deployed_contracts.is_empty() - || !final_diff.nonces.is_empty(), - "Final state diff should have some changes" - ); - } -} diff --git a/crates/executor/src/call.rs b/crates/executor/src/call.rs index 34974bb876..e80acbebad 100644 --- a/crates/executor/src/call.rs +++ b/crates/executor/src/call.rs @@ -16,6 +16,7 @@ use blockifier::transaction::objects::{DeprecatedTransactionInfo, TransactionInf use pathfinder_common::{felt, CallParam, CallResultValue, ContractAddress, EntryPoint}; use starknet_api::contract_class::EntryPointType; use starknet_api::core::PatriciaKey; +use starknet_api::versioned_constants_logic::VersionedConstantsTrait; use super::error::CallError; use super::execution_state::ExecutionState; diff --git a/crates/executor/src/class.rs b/crates/executor/src/class.rs index ec39d4ebb8..eed4e254c8 100644 --- a/crates/executor/src/class.rs +++ b/crates/executor/src/class.rs @@ -1,23 +1,23 @@ use cairo_lang_starknet_classes::casm_contract_class::CasmContractClass; +use pathfinder_common::class_definition::{ + SerializedCasmDefinition, + SerializedOpaqueClassDefinition, +}; pub fn parse_deprecated_class_definition( - definition: Vec, + definition: SerializedOpaqueClassDefinition, ) -> anyhow::Result { - let definition = String::from_utf8(definition)?; - let class: starknet_api::deprecated_contract_class::ContractClass = - serde_json::from_str(&definition)?; + serde_json::from_slice(definition.as_bytes())?; Ok(starknet_api::contract_class::ContractClass::V0(class)) } pub fn parse_casm_definition( - casm_definition: Vec, + casm_definition: SerializedCasmDefinition, sierra_version: starknet_api::contract_class::SierraVersion, ) -> anyhow::Result { - let casm_definition = String::from_utf8(casm_definition)?; - - let class: CasmContractClass = serde_json::from_str(&casm_definition)?; + let class: CasmContractClass = serde_json::from_slice(casm_definition.as_bytes())?; Ok(starknet_api::contract_class::ContractClass::V1(( class, diff --git a/crates/executor/src/concurrent_block.rs b/crates/executor/src/concurrent_block.rs new file mode 100644 index 0000000000..b063c44cd9 --- /dev/null +++ b/crates/executor/src/concurrent_block.rs @@ -0,0 +1,461 @@ +use std::sync::Arc; +use std::time::Instant; + +use anyhow::Context; +use blockifier::blockifier::concurrent_transaction_executor::ConcurrentTransactionExecutor; +use blockifier::bouncer::BouncerConfig; +use blockifier::concurrency::worker_pool::WorkerPool; +use blockifier::context::BlockContext; +use blockifier::state::cached_state::CachedState; +use pathfinder_common::{ChainId, ClassHash, ContractAddress, DecidedBlocks, TransactionIndex}; +use starknet_api::block::BlockHashAndNumber; + +use crate::execution_state::{ExecutionState, VersionedConstantsMap}; +use crate::pending::PendingStateReader; +use crate::state_reader::{ConcurrentStorageAdapter, PathfinderStateReader, StorageAdapter}; +use crate::types::{ + to_receipt_and_events, + transaction_declared_deprecated_class, + transaction_type, + BlockInfo, + ReceiptAndEvents, + StateDiff, +}; +use crate::{IntoStarkFelt, Transaction, TransactionExecutionError}; + +/// Type alias for the concurrent executor's state reader. +pub type ConcurrentStateReader = + PendingStateReader>; + +/// A block executor that uses blockifier's ConcurrentTransactionExecutor for +/// concurrent transaction execution with natural rollback support via +/// `close_block(n)`. +/// +/// Note: When the executor is dropped without calling `close_block()` or +/// `abort_block()`, the Drop impl ensures the worker pool's scheduler is +/// halted, preventing deadlocks if the pool is reused. +pub struct ConcurrentBlockExecutor { + executor: Option>, + block_context: Arc, + declared_deprecated_classes: Vec, + results: Vec, + total_executed: usize, +} + +impl ConcurrentBlockExecutor { + /// Creates a new ConcurrentBlockExecutor for a block. + /// + /// This calls `pre_process_block` exactly once during initialization. + /// The worker pool should be shared across multiple blocks for efficiency. + #[allow(clippy::too_many_arguments)] + pub fn new( + chain_id: ChainId, + block_info: BlockInfo, + eth_fee_address: ContractAddress, + strk_fee_address: ContractAddress, + db_conn: pathfinder_storage::Connection, + decided_blocks: DecidedBlocks, + worker_pool: Arc>>, + block_deadline: Option, + ) -> anyhow::Result { + Self::new_with_l3( + chain_id, + false, + block_info, + eth_fee_address, + strk_fee_address, + db_conn, + decided_blocks, + worker_pool, + block_deadline, + ) + } + + #[allow(clippy::too_many_arguments)] + pub fn new_with_l3( + chain_id: ChainId, + is_l3: bool, + block_info: BlockInfo, + eth_fee_address: ContractAddress, + strk_fee_address: ContractAddress, + db_conn: pathfinder_storage::Connection, + decided_blocks: DecidedBlocks, + worker_pool: Arc>>, + block_deadline: Option, + ) -> anyhow::Result { + Self::new_with_config( + chain_id, + is_l3, + block_info, + eth_fee_address, + strk_fee_address, + db_conn, + decided_blocks, + worker_pool, + block_deadline, + VersionedConstantsMap::default(), + ) + } + + /// Creates a new ConcurrentBlockExecutor with custom versioned constants. + #[allow(clippy::too_many_arguments)] + pub fn new_with_config( + chain_id: ChainId, + is_l3: bool, + block_info: BlockInfo, + eth_fee_address: ContractAddress, + strk_fee_address: ContractAddress, + db_conn: pathfinder_storage::Connection, + decided_blocks: DecidedBlocks, + worker_pool: Arc>>, + block_deadline: Option, + versioned_constants_map: VersionedConstantsMap, + ) -> anyhow::Result { + let storage_adapter = ConcurrentStorageAdapter::new(db_conn, decided_blocks); + + let execution_state = ExecutionState::validation( + chain_id, + is_l3, + block_info, + None, + versioned_constants_map.clone(), + eth_fee_address, + strk_fee_address, + None, + ); + + // Get block context and old block hash + let (block_context, pending_state_reader, old_block_number_and_hash) = + create_state_reader_components( + &execution_state, + storage_adapter, + &block_info, + &versioned_constants_map, + )?; + + let block_context = Arc::new(block_context); + + // start_block calls pre_process_block exactly once + let executor = ConcurrentTransactionExecutor::start_block( + pending_state_reader, + (*block_context).clone(), + old_block_number_and_hash, + worker_pool, + block_deadline, + ) + .context("Failed to start concurrent block executor")?; + + Ok(Self { + executor: Some(executor), + block_context, + declared_deprecated_classes: Vec::new(), + results: Vec::new(), + total_executed: 0, + }) + } + + /// Executes a batch of transactions concurrently. + /// + /// Results are accumulated internally and can be retrieved after execution + /// or via `close_block()`. + pub fn execute( + &mut self, + txns: Vec, + ) -> Result, TransactionExecutionError> { + if txns.is_empty() { + return Ok(vec![]); + } + + let start_tx_index = self.total_executed; + let block_number = self.block_context.block_info().block_number; + + let _span = tracing::debug_span!( + "ConcurrentBlockExecutor::execute", + block_number = %block_number, + from_tx_index = %start_tx_index, + to_tx_index = %(start_tx_index + txns.len() - 1), + ) + .entered(); + + // Track deprecated classes + for tx in &txns { + if let Some(class) = transaction_declared_deprecated_class(tx) { + self.declared_deprecated_classes.push(class); + } + } + + // Add transactions and wait for results + let executor = self + .executor + .as_mut() + .expect("executor should exist during execute"); + let execution_results = executor.add_txs_and_wait(&txns); + + let mut batch_results = Vec::with_capacity(execution_results.len()); + + for (i, result) in execution_results.into_iter().enumerate() { + let tx_index = start_tx_index + i; + let tx = &txns[i]; + + match result { + Ok((tx_info, _state_maps)) => { + let tx_type = transaction_type(tx); + let gas_vector_computation_mode = + crate::transaction::gas_vector_computation_mode(tx); + + let receipt_and_events = to_receipt_and_events( + tx_type, + TransactionIndex::new(tx_index.try_into().expect("ptr size is 64bits")) + .context("tx_index < i64::MAX")?, + tx_info, + self.block_context.versioned_constants(), + &gas_vector_computation_mode, + ) + .map_err(TransactionExecutionError::Custom)?; + + batch_results.push(receipt_and_events.clone()); + self.results.push(receipt_and_events); + } + Err(error) => { + return Err(crate::error::TransactionExecutorError::new(tx_index, error).into()); + } + } + } + + self.total_executed += txns.len(); + + Ok(batch_results) + } + + /// Returns the total number of transactions executed so far. + pub fn total_executed(&self) -> usize { + self.total_executed + } + + /// Returns all accumulated execution results. + pub fn results(&self) -> &[ReceiptAndEvents] { + &self.results + } + + /// Closes the block and returns the final state diff. + /// + /// This commits only the first `n` transactions' state changes. + /// Transactions after position `n` are discarded. This provides natural + /// rollback support. + /// + /// `n` should be the number of transactions to include in the final block. + /// If `n` equals `total_executed()`, all transactions are committed. + /// If `n` is less than `total_executed()`, the later transactions are + /// rolled back. + /// + /// After calling this method, the executor is consumed and cannot be used + /// again. The Drop impl will not attempt to abort since the executor has + /// been properly closed. + pub fn close_block(&mut self, n: usize) -> anyhow::Result { + let mut executor = self.executor.take().context("executor already consumed")?; + let summary = executor + .close_block(n) + .context("Failed to close concurrent block")?; + + // Convert the state diff from blockifier format + let state_diff = convert_commitment_state_diff( + summary.state_diff, + &self.declared_deprecated_classes, + &summary.compiled_class_hashes_for_migration, + )?; + + // Truncate results and update count to match committed transactions + self.results.truncate(n); + self.total_executed = n; + + Ok(state_diff) + } + + /// Aborts the block execution without committing any state changes. + /// + /// Use this when you need to abandon the current block entirely. + /// After calling this, the executor is consumed. + pub fn abort_block(&mut self) { + if let Some(mut executor) = self.executor.take() { + executor.abort_block(); + } + } + + /// Returns true if the executor has been halted (block is full or deadline + /// reached), or if the executor has already been consumed. + pub fn is_done(&self) -> bool { + self.executor.as_ref().map(|e| e.is_done()).unwrap_or(true) + } +} + +impl Drop for ConcurrentBlockExecutor { + fn drop(&mut self) { + // If the executor hasn't been consumed by close_block() or abort_block(), + // we must abort it to halt the scheduler. Otherwise, worker threads will + // remain blocked waiting for this executor's scheduler to signal completion, + // which would cause deadlocks if the worker pool is reused for another block. + if let Some(mut executor) = self.executor.take() { + tracing::debug!( + "ConcurrentBlockExecutor dropped without close_block/abort_block - aborting" + ); + executor.abort_block(); + } + } +} + +/// Creates the state reader components needed for the concurrent executor. +fn create_state_reader_components( + execution_state: &ExecutionState, + storage_adapter: S, + block_info: &BlockInfo, + versioned_constants_map: &VersionedConstantsMap, +) -> anyhow::Result<( + BlockContext, + PendingStateReader>, + Option, +)> { + // Execute on parent state (N-1) + let block_number = block_info.number.parent(); + + let chain_info = execution_state.chain_info()?; + let starknet_block_info = execution_state.starknet_block_info()?; + + // Get old block hash for pre_process_block + let old_block_number_and_hash = if block_info.number.get() >= 10 { + let block_number_whose_hash_becomes_available = + pathfinder_common::BlockNumber::new_or_panic(block_info.number.get() - 10); + + let block_hash = storage_adapter + .block_hash(block_number_whose_hash_becomes_available.into())? + .context(format!( + "Getting hash of historical block {block_number_whose_hash_becomes_available}" + ))?; + + Some(BlockHashAndNumber { + number: starknet_api::block::BlockNumber( + block_number_whose_hash_becomes_available.get(), + ), + hash: starknet_api::block::BlockHash(block_hash.0.into_starkfelt()), + }) + } else { + None + }; + + let versioned_constants = versioned_constants_map.for_version(&block_info.starknet_version); + + let raw_reader = PathfinderStateReader::new( + storage_adapter, + block_number, + false, // No pending state for concurrent executor + None, // No native class cache + false, // No force native execution + ); + let pending_state_reader = PendingStateReader::new(raw_reader, None); + + let block_context = BlockContext::new( + starknet_block_info, + chain_info, + versioned_constants.into_owned(), + BouncerConfig::max(), + ); + + Ok(( + block_context, + pending_state_reader, + old_block_number_and_hash, + )) +} + +/// Converts blockifier's CommitmentStateDiff to our StateDiff format. +fn convert_commitment_state_diff( + commitment_diff: blockifier::state::cached_state::CommitmentStateDiff, + deprecated_declared_classes: &[ClassHash], + compiled_class_hashes_for_migration: &blockifier::blockifier::transaction_executor::CompiledClassHashesForMigration, +) -> anyhow::Result { + use std::collections::BTreeMap; + + use pathfinder_common::{CasmHash, ContractNonce, SierraHash, StorageAddress, StorageValue}; + + use crate::felt::IntoFelt; + use crate::types::{DeclaredSierraClass, DeployedContract, MigratedCompiledClass, StorageDiff}; + + let mut deployed_contracts = Vec::new(); + + // Process address to class hash mappings + // In CommitmentStateDiff, these are all the contracts that changed their class + // hash + for (address, class_hash) in commitment_diff.address_to_class_hash { + // For simplicity, we treat all entries as deployed contracts. + // The close_block() mechanism ensures we get the correct state diff + // as computed by blockifier's finalize. + deployed_contracts.push(DeployedContract { + address: ContractAddress::new_or_panic(address.0.key().into_felt()), + class_hash: ClassHash(class_hash.0.into_felt()), + }); + } + + // Process storage diffs + let mut storage_diffs: BTreeMap> = BTreeMap::new(); + for (address, storage_map) in commitment_diff.storage_updates { + let addr = ContractAddress::new_or_panic(address.0.key().into_felt()); + let diffs: Vec = storage_map + .into_iter() + .map(|(key, value)| StorageDiff { + key: StorageAddress::new_or_panic(key.0.key().into_felt()), + value: StorageValue(value.into_felt()), + }) + .collect(); + storage_diffs.insert(addr, diffs); + } + + // Process nonces + let nonces: BTreeMap = commitment_diff + .address_to_nonce + .into_iter() + .map(|(address, nonce)| { + ( + ContractAddress::new_or_panic(address.0.key().into_felt()), + ContractNonce(nonce.0.into_felt()), + ) + }) + .collect(); + + // Process declared classes + let declared_classes: Vec = commitment_diff + .class_hash_to_compiled_class_hash + .into_iter() + .map(|(class_hash, compiled_class_hash)| DeclaredSierraClass { + class_hash: SierraHash(class_hash.0.into_felt()), + compiled_class_hash: CasmHash(compiled_class_hash.0.into_felt()), + }) + .collect(); + + // Process migrated compiled classes from stateful compression + // Each entry is (CompiledClassHash, CompiledClassHash) - v2 to v1 migration + let migrated_compiled_classes: Vec = compiled_class_hashes_for_migration + .iter() + .map( + |(compiled_class_hash_v2, compiled_class_hash_v1)| MigratedCompiledClass { + // The first element is the sierra/v2 compiled class hash + class_hash: SierraHash(compiled_class_hash_v2.0.into_felt()), + // The second element is the casm/v1 compiled class hash + compiled_class_hash: CasmHash(compiled_class_hash_v1.0.into_felt()), + }, + ) + .collect(); + + Ok(StateDiff { + storage_diffs, + deployed_contracts, + deprecated_declared_classes: deprecated_declared_classes.iter().copied().collect(), + declared_classes, + nonces, + replaced_classes: Vec::new(), + migrated_compiled_classes, + }) +} + +#[cfg(test)] +mod tests { + // Integration tests would need a database setup +} diff --git a/crates/executor/src/execution_state.rs b/crates/executor/src/execution_state.rs index bcfbd3a544..d3df29e7b1 100644 --- a/crates/executor/src/execution_state.rs +++ b/crates/executor/src/execution_state.rs @@ -13,6 +13,7 @@ use pathfinder_common::prelude::*; use pathfinder_common::L1DataAvailabilityMode; use starknet_api::block::{BlockHashAndNumber, GasPrice, NonzeroGasPrice}; use starknet_api::core::PatriciaKey; +use starknet_api::versioned_constants_logic::VersionedConstantsTrait; use super::pending::PendingStateReader; use super::state_reader::PathfinderStateReader; @@ -40,6 +41,8 @@ mod versions { pub(super) const STARKNET_VERSION_0_14_0: StarknetVersion = StarknetVersion::new(0, 14, 0, 0); pub(super) const STARKNET_VERSION_0_14_1: StarknetVersion = StarknetVersion::new(0, 14, 1, 0); + + pub(super) const STARKNET_VERSION_0_14_2: StarknetVersion = StarknetVersion::new(0, 14, 2, 0); } #[derive(Clone, Debug)] @@ -60,7 +63,7 @@ impl VersionedConstantsMap { } pub fn latest_version() -> StarknetVersion { - versions::STARKNET_VERSION_0_14_0 + versions::STARKNET_VERSION_0_14_2 } fn fill_default(data: &mut BTreeMap>) { @@ -120,6 +123,12 @@ impl VersionedConstantsMap { VersionedConstants::get(&starknet_api::block::StarknetVersion::V0_14_1) .expect("Failed to get versioned constants for 0.14.1"), ); + Self::insert_default( + data, + &STARKNET_VERSION_0_14_2, + VersionedConstants::get(&starknet_api::block::StarknetVersion::V0_14_2) + .expect("Failed to get versioned constants for 0.14.2"), + ); } fn insert_default( @@ -166,6 +175,8 @@ pub struct ExecutionState { eth_fee_address: ContractAddress, strk_fee_address: ContractAddress, native_class_cache: Option, + native_execution_force_use_for_incompatible_classes: bool, + is_l3: bool, } pub fn create_executor( @@ -235,7 +246,7 @@ impl ExecutionState { }; let chain_info = self.chain_info()?; - let block_info = self.block_info()?; + let block_info = self.starknet_block_info()?; // Perform system contract updates if we are executing on top of a parent block. // Currently this is only the block hash from 10 blocks ago. @@ -270,6 +281,7 @@ impl ExecutionState { block_number, self.pending_state.is_some(), self.native_class_cache, + self.native_execution_force_use_for_incompatible_classes, ); let pending_state_reader = PendingStateReader::new(raw_reader, self.pending_state.clone()); @@ -289,7 +301,7 @@ impl ExecutionState { }) } - fn chain_info(&self) -> anyhow::Result { + pub(crate) fn chain_info(&self) -> anyhow::Result { let eth_fee_token_address = starknet_api::core::ContractAddress( PatriciaKey::try_from(self.eth_fee_address.0.into_starkfelt()) .expect("ETH fee token address overflow"), @@ -320,11 +332,11 @@ impl ExecutionState { strk_fee_token_address, eth_fee_token_address, }, - is_l3: false, + is_l3: self.is_l3, }) } - fn block_info(&self) -> anyhow::Result { + pub(crate) fn starknet_block_info(&self) -> anyhow::Result { let eth_l1_gas_price = NonzeroGasPrice::new(GasPrice(if self.block_info.eth_l1_gas_price.0 == 0 { // Bad API design - the genesis block has 0 gas price, but @@ -395,18 +407,26 @@ impl ExecutionState { }, use_kzg_da: self.allow_use_kzg_data && self.block_info.l1_da_mode == L1DataAvailabilityMode::Blob, + starknet_version: self + .block_info + .starknet_version + .to_string() + .try_into() + .unwrap_or(starknet_api::block::StarknetVersion::PreV0_9_1), }) } #[allow(clippy::too_many_arguments)] pub fn trace( chain_id: ChainId, + is_l3: bool, header: BlockHeader, pending_state: Option>, versioned_constants_map: VersionedConstantsMap, eth_fee_address: ContractAddress, strk_fee_address: ContractAddress, native_class_cache: Option, + native_execution_force_use_for_incompatible_classes: bool, ) -> Self { Self { chain_id, @@ -418,12 +438,15 @@ impl ExecutionState { eth_fee_address, strk_fee_address, native_class_cache, + native_execution_force_use_for_incompatible_classes, + is_l3, } } #[allow(clippy::too_many_arguments)] pub fn simulation( chain_id: ChainId, + is_l3: bool, header: BlockHeader, pending_state: Option>, l1_blob_data_availability: L1BlobDataAvailability, @@ -431,6 +454,7 @@ impl ExecutionState { eth_fee_address: ContractAddress, strk_fee_address: ContractAddress, native_class_cache: Option, + native_execution_force_use_for_incompatible_classes: bool, ) -> Self { Self { chain_id, @@ -442,12 +466,15 @@ impl ExecutionState { eth_fee_address, strk_fee_address, native_class_cache, + native_execution_force_use_for_incompatible_classes, + is_l3, } } #[allow(clippy::too_many_arguments)] pub fn validation( chain_id: ChainId, + is_l3: bool, block_info: BlockInfo, pending_state: Option>, versioned_constants_map: VersionedConstantsMap, @@ -465,6 +492,8 @@ impl ExecutionState { eth_fee_address, strk_fee_address, native_class_cache, + native_execution_force_use_for_incompatible_classes: false, + is_l3, } } } diff --git a/crates/executor/src/lib.rs b/crates/executor/src/lib.rs index 836d6b3c3d..23cceb40f3 100644 --- a/crates/executor/src/lib.rs +++ b/crates/executor/src/lib.rs @@ -1,6 +1,6 @@ -pub(crate) mod block; pub(crate) mod call; pub(crate) mod class; +pub(crate) mod concurrent_block; pub(crate) mod error; pub(crate) mod error_stack; pub(crate) mod estimate; @@ -12,8 +12,8 @@ pub(crate) mod simulate; pub(crate) mod state_reader; pub(crate) mod transaction; pub mod types; +pub mod worker_pool; -pub use block::BlockExecutor; // re-export blockifier transaction type since it's exposed on our API pub use blockifier::blockifier_versioned_constants::{VersionedConstants, VersionedConstantsError}; pub use blockifier::transaction::account_transaction::{ @@ -23,6 +23,7 @@ pub use blockifier::transaction::account_transaction::{ pub use blockifier::transaction::transaction_execution::Transaction; pub use call::call; pub use class::{parse_casm_definition, parse_deprecated_class_definition}; +pub use concurrent_block::{ConcurrentBlockExecutor, ConcurrentStateReader}; pub use error::{CallError, TransactionExecutionError}; pub use error_stack::{CallFrame, ErrorStack, Frame}; pub use estimate::estimate; @@ -33,6 +34,13 @@ pub use execution_state::{ VersionedConstantsMap, }; pub use felt::{IntoFelt, IntoStarkFelt}; -pub use simulate::{simulate, trace, TraceCache}; +pub use simulate::{simulate, trace, BlockTraces, TraceCache, TransactionTraces}; pub use starknet_api::contract_class::ClassInfo; pub use state_reader::{ConcurrentStorageAdapter, NativeClassCache}; +pub use worker_pool::{ExecutorWorkerPool, DEFAULT_STACK_SIZE}; + +// Re-export blockifier types needed for the concurrent executor +pub mod blockifier_reexports { + pub use blockifier::concurrency::worker_pool::WorkerPool; + pub use blockifier::state::cached_state::CachedState; +} diff --git a/crates/executor/src/simulate.rs b/crates/executor/src/simulate.rs index af11454061..1e7f124dd5 100644 --- a/crates/executor/src/simulate.rs +++ b/crates/executor/src/simulate.rs @@ -1,3 +1,5 @@ +use std::fmt; +use std::num::NonZeroUsize; use std::sync::{Arc, Mutex}; use anyhow::Context; @@ -35,15 +37,32 @@ use crate::types::{ InvokeTransactionTrace, L1HandlerTransactionTrace, StateDiff, + StateMaps, TransactionExecutionInfo, TransactionType, }; use crate::IntoFelt; +#[derive(Debug, Clone, Hash, Eq, PartialEq)] +struct CacheKey { + block_hash: BlockHash, + return_initial_reads: bool, +} + +impl fmt::Display for CacheKey { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "{{ block_hash: {}, return_initial_reads: {} }}", + self.block_hash, self.return_initial_reads + ) + } +} + #[derive(Debug)] enum CacheItem { - Inflight(tokio::sync::broadcast::Receiver>), - CachedOk(Traces), + Inflight(tokio::sync::broadcast::Receiver>), + CachedOk(BlockTraces), CachedErr(TraceError), } @@ -84,9 +103,18 @@ struct InternalError { } #[derive(Debug, Clone)] -pub struct TraceCache(Arc>>); +pub struct TraceCache(Arc>>); -type Traces = Vec<(TransactionHash, TransactionTrace)>; +#[derive(Debug, Clone)] +pub enum BlockTraces { + TracesOnly(TransactionTraces), + TracesWithInitialReads { + traces: TransactionTraces, + initial_reads: StateMaps, + }, +} + +pub type TransactionTraces = Vec<(TransactionHash, TransactionTrace)>; impl Default for TraceCache { fn default() -> Self { @@ -94,16 +122,23 @@ impl Default for TraceCache { } } +impl TraceCache { + pub fn with_size(size: NonZeroUsize) -> Self { + Self(Arc::new(Mutex::new(SizedCache::with_size(size.get())))) + } +} + pub fn simulate( db_tx: pathfinder_storage::Transaction<'_>, execution_state: ExecutionState, transactions: Vec, epsilon: Percentage, -) -> Result, TransactionExecutionError> { + return_initial_reads: bool, +) -> Result<(Vec, Option), TransactionExecutionError> { let block_number = execution_state.block_info.number; let mut tx_executor = create_executor(RcStorageAdapter::new(db_tx), execution_state)?; - transactions + let sims = transactions .into_iter() .enumerate() .map(|(tx_index, mut tx)| { @@ -157,10 +192,26 @@ pub fn simulate( state_diff, tx_executor.block_context.versioned_constants(), &gas_vector_computation_mode, - ), + ) }) }) - .collect() + .collect::>()?; + + // Since `CachedState::get_initial_reads` will always return an aggregate + // of all initial reads up to that point, we can just call it once after + // all transactions are simulated. + let initial_reads = return_initial_reads + .then(|| { + tx_executor + .block_state + .as_ref() + .expect(BLOCK_STATE_ACCESS_ERR) + .get_initial_reads() + .map(StateMaps::from) + }) + .transpose()?; + + Ok((sims, initial_reads)) } pub fn trace( @@ -169,22 +220,28 @@ pub fn trace( cache: TraceCache, block_hash: BlockHash, transactions: Vec, -) -> Result, TransactionExecutionError> { + return_initial_reads: bool, +) -> Result { let mut tx_executor = create_executor(RcStorageAdapter::new(db_tx), execution_state)?; + let cache_key = CacheKey { + block_hash, + return_initial_reads, + }; + let sender = { let mut cache = cache.0.lock().unwrap(); - match cache.cache_get(&block_hash) { + match cache.cache_get(&cache_key) { Some(CacheItem::CachedOk(cached)) => { - tracing::trace!(block=%block_hash, "trace cache hit: ok"); + tracing::trace!(key=%cache_key, "trace cache hit: ok"); return Ok(cached.clone()); } Some(CacheItem::CachedErr(e)) => { - tracing::trace!(block=%block_hash, "trace cache hit: err"); + tracing::trace!(key=%cache_key, "trace cache hit: err"); return Err(e.to_owned().into()); } Some(CacheItem::Inflight(receiver)) => { - tracing::trace!(block=%block_hash, "trace already inflight"); + tracing::trace!(key=%cache_key, "trace already inflight"); let mut receiver = receiver.resubscribe(); drop(cache); @@ -192,9 +249,9 @@ pub fn trace( return trace.map_err(Into::into); } None => { - tracing::trace!(block=%block_hash, "trace cache miss"); + tracing::trace!(key=%cache_key, "trace cache miss"); let (sender, receiver) = tokio::sync::broadcast::channel(1); - cache.cache_set(block_hash, CacheItem::Inflight(receiver)); + cache.cache_set(cache_key.clone(), CacheItem::Inflight(receiver)); sender } } @@ -235,7 +292,7 @@ pub fn trace( // race conditions between senders and receivers. let mut cache = cache.0.lock().unwrap(); let _ = sender.send(Err(error.clone())); - cache.cache_set(block_hash, CacheItem::CachedErr(error.clone())); + cache.cache_set(cache_key, CacheItem::CachedErr(error.clone())); return Err(error.into()); } @@ -248,7 +305,7 @@ pub fn trace( .inspect_err(|_| { // Remove the cache entry so it's no longer inflight. let mut cache = cache.0.lock().unwrap(); - cache.cache_remove(&block_hash); + cache.cache_remove(&cache_key); })?; tracing::trace!("Transaction tracing finished"); @@ -263,12 +320,30 @@ pub fn trace( traces.push((hash, trace)); } + // Since `CachedState::get_initial_reads` will always return an aggregate + // of all initial reads up to that point, we can just call it once after + // all transactions are traced. + let block_traces = if return_initial_reads { + let initial_reads = tx_executor + .block_state + .as_ref() + .expect(BLOCK_STATE_ACCESS_ERR) + .get_initial_reads() + .map(StateMaps::from)?; + BlockTraces::TracesWithInitialReads { + traces, + initial_reads, + } + } else { + BlockTraces::TracesOnly(traces) + }; + // Lock the cache before sending to avoid race conditions between senders and // receivers. let mut cache = cache.0.lock().unwrap(); - let _ = sender.send(Ok(traces.clone())); - cache.cache_set(block_hash, CacheItem::CachedOk(traces.clone())); - Ok(traces) + let _ = sender.send(Ok(block_traces.clone())); + cache.cache_set(cache_key, CacheItem::CachedOk(block_traces.clone())); + Ok(block_traces) } pub(crate) fn to_trace( diff --git a/crates/executor/src/state_reader.rs b/crates/executor/src/state_reader.rs index 1d909549f2..a327cd643b 100644 --- a/crates/executor/src/state_reader.rs +++ b/crates/executor/src/state_reader.rs @@ -4,8 +4,14 @@ use blockifier::execution::contract_class::RunnableCompiledClass; use blockifier::state::errors::StateError; use blockifier::state::state_api::StateReader; use cached::Cached; +use pathfinder_common::class_definition::{ + SerializedCasmDefinition, + SerializedOpaqueClassDefinition, + Sierra, +}; use pathfinder_common::{BlockNumber, ClassHash, StorageAddress, StorageValue}; use pathfinder_crypto::Felt; +use starknet_api::contract_class::compiled_class_hash::{HashVersion, HashableCompiledClass}; use starknet_api::contract_class::SierraVersion; use starknet_api::StarknetApiError; use starknet_types_core::felt::Felt as CoreFelt; @@ -29,7 +35,7 @@ pub struct NativeClassCache; #[cfg(not(feature = "cairo-native"))] impl NativeClassCache { - pub fn spawn(_cache_size: std::num::NonZeroUsize) -> Self { + pub fn spawn(_cache_size: std::num::NonZeroUsize, _compiler_optimization_level: u8) -> Self { Self {} } } @@ -44,6 +50,8 @@ pub struct PathfinderStateReader { ignore_block_number_for_classes: bool, #[allow(unused)] native_class_cache: Option, + #[allow(unused)] + native_execution_force_use_for_incompatible_classes: bool, casm_hash_v2_cache: Arc>>, } @@ -54,12 +62,14 @@ impl PathfinderStateReader { block_number: Option, ignore_block_number_for_classes: bool, native_class_cache: Option, + native_execution_force_use_for_incompatible_classes: bool, ) -> Self { Self { storage_adapter, block_number, ignore_block_number_for_classes, native_class_cache, + native_execution_force_use_for_incompatible_classes, casm_hash_v2_cache: Arc::new(Mutex::new(cached::SizedCache::with_size(1024))), } } @@ -119,7 +129,9 @@ impl PathfinderStateReader { let sierra_version = self.sierra_version_from_class(&class_definition)?; #[cfg(feature = "cairo-native")] - let runnable_class = if sierra_version >= SierraVersion::new(1, 7, 0) { + let runnable_class = if self.native_execution_force_use_for_incompatible_classes + || sierra_version >= SierraVersion::new(1, 7, 0) + { if let Some(native_class_cache) = &self.native_class_cache { match native_class_cache.get( pathfinder_class_hash, @@ -153,15 +165,16 @@ impl PathfinderStateReader { } None => { // No CASM definition means this is a legacy Cairo 0 class. - let class_definition = String::from_utf8(class_definition).map_err(|error| { - StateError::StateReadError(format!( - "Class definition is not valid UTF-8: {error}" - )) - })?; + let class_definition = + std::str::from_utf8(class_definition.as_bytes()).map_err(|error| { + StateError::StateReadError(format!( + "Class definition is not valid UTF-8: {error}" + )) + })?; let class = blockifier::execution::contract_class::CompiledClassV0::try_from_json_string( - &class_definition, + class_definition, ) .map_err(StateError::ProgramError)?; @@ -172,26 +185,25 @@ impl PathfinderStateReader { fn sierra_version_from_class( &self, - class_definition: &[u8], + class_definition: &SerializedOpaqueClassDefinition, ) -> Result { use cairo_vm::types::errors::program_errors::ProgramError; - let sierra_class: pathfinder_common::class_definition::Sierra<'_> = - serde_json::from_slice(class_definition) - .map_err(|error| StateError::ProgramError(ProgramError::Parse(error)))?; + let sierra_class: Sierra<'_> = serde_json::from_slice(class_definition.as_bytes()) + .map_err(|error| StateError::ProgramError(ProgramError::Parse(error)))?; SierraVersion::extract_from_program(&sierra_class.sierra_program).map_err(Into::into) } } fn sierra_class_as_casm( sierra_version: SierraVersion, - casm_definition: Vec, + casm_definition: SerializedCasmDefinition, ) -> Result { - let casm_definition = String::from_utf8(casm_definition).map_err(|error| { + let casm_definition = std::str::from_utf8(casm_definition.as_bytes()).map_err(|error| { StateError::StateReadError(format!("CASM definition is not valid UTF-8: {error}")) })?; let casm_class = blockifier::execution::contract_class::CompiledClassV1::try_from_json_string( - &casm_definition, + casm_definition, sierra_version, ) .map_err(StateError::ProgramError)?; @@ -341,9 +353,7 @@ impl StateReader for PathfinderStateReader { self.storage_adapter.casm_hash_at(block_id, class_hash) }; - let casm_hash = casm_hash?.ok_or_else(|| { - StateError::StateReadError("Error getting compiled class hash".to_owned()) - })?; + let casm_hash = casm_hash?.unwrap_or_default(); Ok(starknet_api::core::CompiledClassHash( casm_hash.0.into_starkfelt(), @@ -378,11 +388,17 @@ impl StateReader for PathfinderStateReader { casm_hash.0.into_starkfelt(), )), None => { - let casm_hash = blockifier::state::utils::get_compiled_class_hash_v2( - self, - class_hash, - compiled_class, - ); + tracing::trace!("CASM hash v2 not found in storage, computing from compiled class"); + + let casm_hash = match compiled_class { + RunnableCompiledClass::V0(_) => { + Err(StateError::MissingCompiledClassHashV2(class_hash)) + } + RunnableCompiledClass::V1(class) => Ok(class.hash(&HashVersion::V2)), + #[cfg(feature = "cairo-native")] + RunnableCompiledClass::V1Native(class) => Ok(class.hash(&HashVersion::V2)), + }; + if let Ok(compiled_class_hash) = casm_hash { self.casm_hash_v2_cache .lock() diff --git a/crates/executor/src/state_reader/native.rs b/crates/executor/src/state_reader/native.rs index 77d69f08cc..91f16f4296 100644 --- a/crates/executor/src/state_reader/native.rs +++ b/crates/executor/src/state_reader/native.rs @@ -6,6 +6,10 @@ use blockifier::state::errors::StateError; use cached::{Cached, SizedCache}; use cairo_native::executor::AotContractExecutor; use cairo_vm::types::errors::program_errors::ProgramError; +use pathfinder_common::class_definition::{ + SerializedCasmDefinition, + SerializedOpaqueClassDefinition, +}; use pathfinder_common::ClassHash; use starknet_api::contract_class::SierraVersion; use tokio_util::sync::CancellationToken; @@ -13,8 +17,8 @@ use tokio_util::sync::CancellationToken; struct CompilerInput { class_hash: ClassHash, sierra_version: SierraVersion, - class_definition: Vec, - casm_definition: Vec, + class_definition: SerializedOpaqueClassDefinition, + casm_definition: SerializedCasmDefinition, } enum CacheItem { @@ -31,14 +35,16 @@ pub struct NativeClassCache { } impl NativeClassCache { - pub fn spawn(cache_size: NonZeroUsize) -> Self { + pub fn spawn(cache_size: NonZeroUsize, optimization_level: u8) -> Self { let (tx, rx) = std::sync::mpsc::channel(); let cache = Arc::new(Mutex::new(SizedCache::with_size(cache_size.get()))); util::task::spawn_std({ let cache = Arc::clone(&cache); - move |cancellation_token| compiler_thread(cache, rx, cancellation_token) + move |cancellation_token| { + compiler_thread(cache, rx, cancellation_token, optimization_level.into()) + } }); NativeClassCache { @@ -51,22 +57,25 @@ impl NativeClassCache { &self, class_hash: ClassHash, sierra_version: SierraVersion, - class_definition: Vec, - casm_definition: Vec, + class_definition: SerializedOpaqueClassDefinition, + casm_definition: SerializedCasmDefinition, ) -> Option { let mut locked = self.cache.lock().unwrap(); match locked.cache_get(&class_hash) { Some(CacheItem::CompiledClass(cached_class)) => { tracing::trace!(%class_hash, "Native class cache hit"); + metrics::counter!("native_class_cache_hit_total").increment(1); Some(cached_class.clone()) } Some(CacheItem::CompilationPending) => { tracing::trace!(%class_hash, "Native class cache miss (pending)"); + metrics::counter!("native_class_cache_miss_compilation_pending_total").increment(1); None } None => { tracing::trace!(%class_hash, "Native class cache miss (compiling)"); + metrics::counter!("native_class_cache_miss_total").increment(1); locked.cache_set(class_hash, CacheItem::CompilationPending); let _ = self.compiler_tx.send(CompilerInput { class_hash, @@ -74,16 +83,21 @@ impl NativeClassCache { class_definition, casm_definition, }); + metrics::gauge!(NATIVE_CLASS_COMPILATION_QUEUED_TOTAL_METRIC_NAME).increment(1.0); None } } } } +const NATIVE_CLASS_COMPILATION_QUEUED_TOTAL_METRIC_NAME: &str = + "native_class_compilation_queued_total"; + fn compiler_thread( cache: Arc, rx: std::sync::mpsc::Receiver, cancellation_token: CancellationToken, + optimization_level: cairo_native::OptLevel, ) { loop { if cancellation_token.is_cancelled() { @@ -101,9 +115,13 @@ fn compiler_thread( tracing::debug!("Compiling native class"); let started_at = std::time::Instant::now(); - match sierra_class_as_native(input) { + match sierra_class_as_native(input, optimization_level) { Ok(compiled_class) => { - tracing::debug!(elapsed=?started_at.elapsed(), "Compilation finished"); + let elapsed = started_at.elapsed(); + tracing::debug!(?elapsed, "Compilation finished"); + metrics::histogram!("native_class_compilation_duration_seconds",) + .record(elapsed.as_secs_f64()); + metrics::counter!("native_class_compiled_total").increment(1); cache .lock() .unwrap() @@ -111,14 +129,21 @@ fn compiler_thread( } Err(error) => { tracing::error!(elapsed=?started_at.elapsed(), %error, "Error compiling native class"); + metrics::counter!("native_class_compilation_errors_total").increment(1); } } + + metrics::gauge!(NATIVE_CLASS_COMPILATION_QUEUED_TOTAL_METRIC_NAME).decrement(1.0); } } -fn sierra_class_as_native(input: CompilerInput) -> Result { - let mut sierra_definition: serde_json::Value = serde_json::from_slice(&input.class_definition) - .map_err(|e| StateError::ProgramError(ProgramError::Parse(e)))?; +fn sierra_class_as_native( + input: CompilerInput, + optimization_level: cairo_native::OptLevel, +) -> Result { + let mut sierra_definition: serde_json::Value = + serde_json::from_slice(input.class_definition.as_bytes()) + .map_err(|e| StateError::ProgramError(ProgramError::Parse(e)))?; let sierra_abi_str = sierra_definition .get("abi") .ok_or_else(|| StateError::StateReadError("Sierra ABI is missing".to_owned()))? @@ -131,7 +156,7 @@ fn sierra_class_as_native(input: CompilerInput) -> Result Result Result)>; -type ClassDefinitionWithBlockNumber = Option<(Option, Vec)>; +type ClassDefinitionAtWithBlockNumber = Option<(BlockNumber, SerializedOpaqueClassDefinition)>; +type ClassDefinitionWithBlockNumber = + Option<(Option, SerializedOpaqueClassDefinition)>; pub trait StorageAdapter { fn transaction_executor_config(&self) -> TransactionExecutorConfig; fn block_hash(&self, block: BlockId) -> anyhow::Result>; - fn casm_definition(&self, class_hash: ClassHash) -> Result>, StateError>; + fn casm_definition( + &self, + class_hash: ClassHash, + ) -> Result, StateError>; fn class_definition_with_block_number( &self, @@ -35,13 +43,13 @@ pub trait StorageAdapter { &self, block_id: BlockId, class_hash: ClassHash, - ) -> Result>, StateError>; + ) -> Result, StateError>; fn class_definition_at_with_block_number( &self, block_id: BlockId, class_hash: ClassHash, - ) -> Result)>, StateError>; + ) -> Result; fn storage_value( &self, diff --git a/crates/executor/src/state_reader/storage_adapter/concurrent.rs b/crates/executor/src/state_reader/storage_adapter/concurrent.rs index f43a8f8130..d9321d442f 100644 --- a/crates/executor/src/state_reader/storage_adapter/concurrent.rs +++ b/crates/executor/src/state_reader/storage_adapter/concurrent.rs @@ -2,14 +2,15 @@ use std::sync::mpsc::{self, Receiver, Sender, SyncSender}; use blockifier::blockifier::config::{ConcurrencyConfig, TransactionExecutorConfig}; use blockifier::state::errors::StateError; +use pathfinder_common::class_definition::SerializedCasmDefinition; use pathfinder_common::{ BlockHash, BlockId, - BlockNumber, CasmHash, ClassHash, ContractAddress, ContractNonce, + DecidedBlocks, StorageAddress, StorageValue, }; @@ -26,11 +27,15 @@ use crate::state_reader::storage_adapter::{ #[derive(Clone)] pub struct ConcurrentStorageAdapter { tx: Sender, + decided_blocks: DecidedBlocks, } enum Command { BlockHash(BlockId, SyncSender>>), - CasmDefinition(ClassHash, SyncSender>, StateError>>), + CasmDefinition( + ClassHash, + SyncSender, StateError>>, + ), ClassDefinitionWithBlockNumber( ClassHash, SyncSender>, @@ -38,7 +43,7 @@ enum Command { CasmDefinitionAt( BlockId, ClassHash, - SyncSender>, StateError>>, + SyncSender, StateError>>, ), ClassDefinitionAtWithBlockNumber( BlockId, @@ -71,12 +76,12 @@ enum Command { } impl ConcurrentStorageAdapter { - pub fn new(db_conn: Connection) -> Self { + pub fn new(db_conn: Connection, decided_blocks: DecidedBlocks) -> Self { let (tx, rx) = mpsc::channel(); util::task::spawn_std(move |cancellation_token| db_thread(db_conn, rx, cancellation_token)); - Self { tx } + Self { tx, decided_blocks } } } @@ -124,7 +129,15 @@ impl StorageAdapter for ConcurrentStorageAdapter { rx.recv().expect("Channel not to be closed") } - fn casm_definition(&self, class_hash: ClassHash) -> Result>, StateError> { + fn casm_definition( + &self, + class_hash: ClassHash, + ) -> Result, StateError> { + if let Some(casm_def) = decided::casm_definition(&self.decided_blocks, class_hash) { + return Ok(Some(casm_def)); + } + // Otherwise fetch from the database + let (tx, rx) = mpsc::sync_channel(1); self.tx .send(Command::CasmDefinition(class_hash, tx)) @@ -135,7 +148,14 @@ impl StorageAdapter for ConcurrentStorageAdapter { fn class_definition_with_block_number( &self, class_hash: ClassHash, - ) -> Result, Vec)>, StateError> { + ) -> Result { + if let Some(block_number_and_class_def) = + decided::class_definition_with_block_number(&self.decided_blocks, class_hash) + { + return Ok(Some(block_number_and_class_def)); + } + // Otherwise fetch from the database + let (tx, rx) = mpsc::sync_channel(1); self.tx .send(Command::ClassDefinitionWithBlockNumber(class_hash, tx)) @@ -147,7 +167,14 @@ impl StorageAdapter for ConcurrentStorageAdapter { &self, block_id: BlockId, class_hash: ClassHash, - ) -> Result>, StateError> { + ) -> Result, StateError> { + if let Some(casm_def) = + decided::casm_definition_at(&self.decided_blocks, block_id, class_hash) + { + return Ok(Some(casm_def)); + } + // Otherwise fetch from the database + let (tx, rx) = mpsc::sync_channel(1); self.tx .send(Command::CasmDefinitionAt(block_id, class_hash, tx)) @@ -159,7 +186,16 @@ impl StorageAdapter for ConcurrentStorageAdapter { &self, block_id: BlockId, class_hash: ClassHash, - ) -> Result)>, StateError> { + ) -> Result { + if let Some(result) = decided::class_definition_at_with_block_number( + &self.decided_blocks, + block_id, + class_hash, + ) { + return Ok(Some(result)); + } + // Otherwise fetch from the database + let (tx, rx) = mpsc::sync_channel(1); self.tx .send(Command::ClassDefinitionAtWithBlockNumber( @@ -175,6 +211,16 @@ impl StorageAdapter for ConcurrentStorageAdapter { contract_address: ContractAddress, storage_address: StorageAddress, ) -> Result, StateError> { + if let Some(value) = decided::storage_value( + &self.decided_blocks, + block_id, + contract_address, + storage_address, + ) { + return Ok(Some(value)); + } + // Otherwise fetch from the database + let (tx, rx) = mpsc::sync_channel(1); self.tx .send(Command::StorageValue( @@ -192,6 +238,13 @@ impl StorageAdapter for ConcurrentStorageAdapter { contract_address: ContractAddress, block_id: BlockId, ) -> Result, StateError> { + if let Some(nonce) = + decided::contract_nonce(&self.decided_blocks, contract_address, block_id) + { + return Ok(Some(nonce)); + } + // Otherwise fetch from the database + let (tx, rx) = mpsc::sync_channel(1); self.tx .send(Command::ContractNonce(contract_address, block_id, tx)) @@ -204,6 +257,13 @@ impl StorageAdapter for ConcurrentStorageAdapter { block_id: BlockId, contract_address: ContractAddress, ) -> Result, StateError> { + if let Some(class_hash) = + decided::contract_class_hash(&self.decided_blocks, block_id, contract_address) + { + return Ok(Some(class_hash)); + } + // Otherwise fetch from the database + let (tx, rx) = mpsc::sync_channel(1); self.tx .send(Command::ContractClassHash(block_id, contract_address, tx)) @@ -212,6 +272,7 @@ impl StorageAdapter for ConcurrentStorageAdapter { } fn casm_hash(&self, class_hash: ClassHash) -> Result, StateError> { + // Note: Decided blocks don't store legacy casm hash let (tx, rx) = mpsc::sync_channel(1); self.tx .send(Command::CasmHash(class_hash, tx)) @@ -220,6 +281,11 @@ impl StorageAdapter for ConcurrentStorageAdapter { } fn casm_hash_v2(&self, class_hash: ClassHash) -> Result, StateError> { + if let Some(casm_hash) = decided::casm_hash_v2(&self.decided_blocks, class_hash) { + return Ok(Some(casm_hash)); + } + // Otherwise fetch from the database + let (tx, rx) = mpsc::sync_channel(1); self.tx .send(Command::CasmHashV2(class_hash, tx)) @@ -232,6 +298,11 @@ impl StorageAdapter for ConcurrentStorageAdapter { block_id: BlockId, class_hash: ClassHash, ) -> Result, StateError> { + if let Some(casm_hash) = decided::casm_hash_at(&self.decided_blocks, block_id, class_hash) { + return Ok(Some(casm_hash)); + } + // Otherwise fetch from the database + let (tx, rx) = mpsc::sync_channel(1); self.tx .send(Command::CasmHashAt(block_id, class_hash, tx)) @@ -335,3 +406,884 @@ fn db_thread( } } } + +mod decided { + use std::collections::BTreeMap; + use std::sync::RwLockReadGuard; + + use pathfinder_common::class_definition::{ + SerializedCasmDefinition, + SerializedOpaqueClassDefinition, + }; + use pathfinder_common::state_update::ContractUpdate; + use pathfinder_common::{ + BlockId, + BlockNumber, + CasmHash, + ClassHash, + ContractAddress, + ContractNonce, + DecidedBlock, + DecidedBlocks, + DeclaredClass, + SierraHash, + StorageAddress, + StorageValue, + }; + + use crate::state_reader::storage_adapter::ClassDefinitionAtWithBlockNumber; + + fn rev_blocks_by_id<'a>( + decided_blocks: &'a RwLockReadGuard<'a, BTreeMap>, + block_id: BlockId, + ) -> impl Iterator + 'a { + match block_id { + BlockId::Number(block_number) => { + Box::new(decided_blocks.range(..=block_number).rev().map(|(_, b)| b)) + } + BlockId::Hash(_) => { + // Decided blocks don't have a hash yet + Box::new(std::iter::empty()) as Box> + } + BlockId::Latest => Box::new(decided_blocks.values().rev()), + } + } + + fn find_class<'a>( + mut blocks_it: impl Iterator + 'a, + class_hash: ClassHash, + ) -> Option<(BlockNumber, &'a DeclaredClass)> { + blocks_it.find_map(|b| { + b.block.declared_classes.iter().find_map(|c| { + (c.sierra_hash == SierraHash(class_hash.0)).then_some((b.block.header.number, c)) + }) + }) + } + + fn find_contract_update<'a>( + mut blocks_it: impl Iterator + 'a, + contract_address: ContractAddress, + ) -> Option<&'a ContractUpdate> { + blocks_it.find_map(|b| b.block.state_update.contract_updates.get(&contract_address)) + } + + pub fn casm_definition( + decided_blocks: &DecidedBlocks, + class_hash: ClassHash, + ) -> Option { + let decided_blocks = decided_blocks.read().unwrap(); + find_class(decided_blocks.values(), class_hash).map(|(_, c)| c.casm_def.clone()) + } + + pub fn class_definition_with_block_number( + decided_blocks: &DecidedBlocks, + class_hash: ClassHash, + ) -> Option<(Option, SerializedOpaqueClassDefinition)> { + let decided_blocks = decided_blocks.read().unwrap(); + find_class(decided_blocks.values(), class_hash) + .map(|(b, c)| (Some(b), c.sierra_def.clone().into())) + } + + pub fn casm_definition_at( + decided_blocks: &DecidedBlocks, + block_id: BlockId, + class_hash: ClassHash, + ) -> Option { + let guard = decided_blocks.read().unwrap(); + let it = rev_blocks_by_id(&guard, block_id); + find_class(it, class_hash).map(|(_, c)| c.casm_def.clone()) + } + + pub fn class_definition_at_with_block_number( + decided_blocks: &DecidedBlocks, + block_id: BlockId, + class_hash: ClassHash, + ) -> ClassDefinitionAtWithBlockNumber { + let guard = decided_blocks.read().unwrap(); + let it = rev_blocks_by_id(&guard, block_id); + find_class(it, class_hash).map(|(b, c)| (b, c.sierra_def.clone().into())) + } + + pub fn storage_value( + decided_blocks: &DecidedBlocks, + block_id: BlockId, + contract_address: ContractAddress, + storage_address: StorageAddress, + ) -> Option { + let guard = decided_blocks.read().unwrap(); + let mut it = rev_blocks_by_id(&guard, block_id); + it.find_map(|b| { + b.block + .state_update + .contract_updates + .iter() + .map(|(address, update)| (address, &update.storage)) + .chain( + b.block + .state_update + .system_contract_updates + .iter() + .map(|(address, update)| (address, &update.storage)), + ) + .find_map(|(address, storage)| { + (*address == contract_address).then_some(storage.get(&storage_address).copied()) + }) + .flatten() + }) + } + + pub fn contract_nonce( + decided_blocks: &DecidedBlocks, + contract_address: ContractAddress, + block_id: BlockId, + ) -> Option { + let guard = decided_blocks.read().unwrap(); + let it = rev_blocks_by_id(&guard, block_id); + find_contract_update(it, contract_address).and_then(|update| update.nonce) + } + + pub fn contract_class_hash( + decided_blocks: &DecidedBlocks, + block_id: BlockId, + contract_address: ContractAddress, + ) -> Option { + let guard = decided_blocks.read().unwrap(); + let it = rev_blocks_by_id(&guard, block_id); + find_contract_update(it, contract_address) + .and_then(|update| update.class.map(|c| c.class_hash())) + } + + pub fn casm_hash_v2(decided_blocks: &DecidedBlocks, class_hash: ClassHash) -> Option { + let decided_blocks = decided_blocks.read().unwrap(); + find_class(decided_blocks.values(), class_hash).map(|(_, c)| c.casm_hash_v2) + } + + pub fn casm_hash_at( + decided_blocks: &DecidedBlocks, + block_id: BlockId, + class_hash: ClassHash, + ) -> Option { + let guard = decided_blocks.read().unwrap(); + let it = rev_blocks_by_id(&guard, block_id); + find_class(it, class_hash).map(|(_, c)| c.casm_hash_v2) + } + + #[cfg(test)] + mod tests { + use std::collections::{BTreeMap, HashMap}; + use std::sync::{Arc, RwLock}; + + use pathfinder_common::class_definition::{ + SerializedCasmDefinition, + SerializedSierraDefinition, + }; + use pathfinder_common::state_update::{ + ContractClassUpdate, + ContractUpdate, + StateUpdateData, + SystemContractUpdate, + }; + use pathfinder_common::{ + BlockHash, + BlockNumber, + CasmHash, + ClassHash, + ConsensusFinalizedL2Block, + ContractAddress, + ContractNonce, + DecidedBlock, + DecidedBlocks, + DeclaredClass, + SierraHash, + StorageAddress, + StorageValue, + }; + use pathfinder_crypto::Felt; + + fn matching_genesis() -> (BlockNumber, DecidedBlock) { + let block = ConsensusFinalizedL2Block { + declared_classes: vec![DeclaredClass { + sierra_hash: SierraHash::ZERO, + casm_hash_v2: CasmHash::ZERO, + sierra_def: SerializedSierraDefinition::from_slice(&[0]), + casm_def: SerializedCasmDefinition::from_slice(&[1]), + }], + state_update: StateUpdateData { + contract_updates: HashMap::from([ + ( + ContractAddress::ZERO, + ContractUpdate { + storage: HashMap::from([( + StorageAddress::ZERO, + StorageValue::ZERO, + )]), + nonce: Some(ContractNonce::ZERO), + class: Some(ContractClassUpdate::Deploy(ClassHash::ZERO)), + }, + ), + ( + ContractAddress::ONE, + ContractUpdate { + class: Some(ContractClassUpdate::Replace(ClassHash::ZERO)), + ..Default::default() + }, + ), + ]), + system_contract_updates: HashMap::from([( + ContractAddress::TWO, + SystemContractUpdate { + storage: HashMap::from([( + StorageAddress(Felt::ONE), + StorageValue(Felt::ONE), + )]), + }, + )]), + ..Default::default() + }, + ..Default::default() + }; + + (BlockNumber::GENESIS, DecidedBlock { round: 0, block }) + } + + fn dummy_block_one() -> (BlockNumber, DecidedBlock) { + ( + BlockNumber::GENESIS + 1, + DecidedBlock { + round: 0, + block: Default::default(), + }, + ) + } + + fn one() -> DecidedBlocks { + Arc::new(RwLock::new(BTreeMap::from([matching_genesis()]))) + } + + fn two() -> DecidedBlocks { + Arc::new(RwLock::new(BTreeMap::from([ + matching_genesis(), + dummy_block_one(), + ]))) + } + + mod casm_definition { + use super::super::*; + use super::two; + + #[test] + fn in_empty_returns_none() { + assert!(casm_definition(&DecidedBlocks::default(), ClassHash::ZERO).is_none()); + } + + #[test] + fn success() { + assert_eq!( + casm_definition(&two(), ClassHash::ZERO), + Some(SerializedCasmDefinition::from_slice(&[1])) + ); + } + } + + mod class_definition_with_block_number { + use super::super::*; + use super::two; + + #[test] + fn in_empty_returns_none() { + assert!(class_definition_with_block_number( + &DecidedBlocks::default(), + ClassHash::ZERO + ) + .is_none()); + } + + #[test] + fn success() { + assert_eq!( + class_definition_with_block_number(&two(), ClassHash::ZERO), + Some(( + Some(BlockNumber::GENESIS), + SerializedOpaqueClassDefinition::from_slice(&[0]) + )) + ); + } + } + + mod casm_definition_at { + use super::super::*; + use super::*; + + #[test] + fn by_number_in_empty_returns_none() { + assert!(casm_definition_at( + &DecidedBlocks::default(), + BlockId::Number(BlockNumber::GENESIS), + ClassHash::ZERO, + ) + .is_none()); + } + + #[test] + fn by_number_exact_match() { + assert_eq!( + casm_definition_at( + &one(), + BlockId::Number(BlockNumber::GENESIS), + ClassHash::ZERO, + ), + Some(SerializedCasmDefinition::from_slice(&[1])) + ); + } + + #[test] + fn by_number_skips_blocks_that_dont_match() { + assert_eq!( + casm_definition_at( + &two(), + // Note: it's the genesis block that contains the matching class + // definition + BlockId::Number(BlockNumber::GENESIS + 1), + ClassHash::ZERO, + ), + Some(SerializedCasmDefinition::from_slice(&[1])) + ); + } + + #[test] + fn by_hash_returns_none() { + assert!(casm_definition_at( + &DecidedBlocks::default(), + BlockId::Hash(BlockHash::ZERO), + ClassHash::ZERO, + ) + .is_none()); + } + + #[test] + fn latest_in_empty_returns_none() { + assert!(casm_definition_at( + &DecidedBlocks::default(), + BlockId::Latest, + ClassHash::ZERO, + ) + .is_none()); + } + + #[test] + fn latest_instant_match() { + assert_eq!( + casm_definition_at(&one(), BlockId::Latest, ClassHash::ZERO,), + Some(SerializedCasmDefinition::from_slice(&[1])) + ); + } + + #[test] + fn latest_skips_blocks_that_dont_match() { + assert_eq!( + casm_definition_at(&two(), BlockId::Latest, ClassHash::ZERO,), + Some(SerializedCasmDefinition::from_slice(&[1])) + ); + } + } + + mod class_definition_at_with_block_number { + use super::super::*; + use super::*; + + #[test] + fn by_number_in_empty_returns_none() { + assert!(class_definition_at_with_block_number( + &DecidedBlocks::default(), + BlockId::Number(BlockNumber::GENESIS), + ClassHash::ZERO, + ) + .is_none()); + } + + #[test] + fn by_number_exact_match() { + assert_eq!( + class_definition_at_with_block_number( + &one(), + BlockId::Number(BlockNumber::GENESIS), + ClassHash::ZERO, + ), + Some(( + BlockNumber::GENESIS, + SerializedOpaqueClassDefinition::from_slice(&[0]) + )) + ); + } + + #[test] + fn by_number_skips_blocks_that_dont_match() { + assert_eq!( + class_definition_at_with_block_number( + &two(), + // Note: it's the genesis block that contains the matching class + // definition + BlockId::Number(BlockNumber::GENESIS + 1), + ClassHash::ZERO, + ), + Some(( + BlockNumber::GENESIS, + SerializedOpaqueClassDefinition::from_slice(&[0]) + )) + ); + } + + #[test] + fn by_hash_returns_none() { + assert!(class_definition_at_with_block_number( + &DecidedBlocks::default(), + BlockId::Hash(BlockHash::ZERO), + ClassHash::ZERO, + ) + .is_none()); + } + + #[test] + fn latest_in_empty_returns_none() { + assert!(class_definition_at_with_block_number( + &DecidedBlocks::default(), + BlockId::Latest, + ClassHash::ZERO, + ) + .is_none()); + } + + #[test] + fn latest_instant_match() { + assert_eq!( + class_definition_at_with_block_number(&one(), BlockId::Latest, ClassHash::ZERO), + Some(( + BlockNumber::GENESIS, + SerializedOpaqueClassDefinition::from_slice(&[0]) + )) + ); + } + + #[test] + fn latest_skips_blocks_that_dont_match() { + assert_eq!( + class_definition_at_with_block_number(&two(), BlockId::Latest, ClassHash::ZERO), + Some(( + BlockNumber::GENESIS, + SerializedOpaqueClassDefinition::from_slice(&[0]) + )) + ); + } + } + + mod storage_value { + use super::super::*; + use super::*; + + #[test] + fn by_number_in_empty_returns_none() { + assert!(storage_value( + &DecidedBlocks::default(), + BlockId::Number(BlockNumber::GENESIS), + ContractAddress::ZERO, + StorageAddress::ZERO, + ) + .is_none()); + } + + #[test] + fn by_number_exact_match() { + // "Normal" contract + assert_eq!( + storage_value( + &one(), + BlockId::Number(BlockNumber::GENESIS), + ContractAddress::ZERO, + StorageAddress::ZERO, + ), + Some(StorageValue::ZERO) + ); + // System contract + assert_eq!( + storage_value( + &one(), + BlockId::Number(BlockNumber::GENESIS), + ContractAddress::TWO, + StorageAddress(Felt::ONE), + ), + Some(StorageValue(Felt::ONE)) + ); + } + + #[test] + fn by_number_skips_blocks_that_dont_match() { + // "Normal" contract + assert_eq!( + storage_value( + &two(), + // Note: it's the genesis block that contains the matching storage entry + BlockId::Number(BlockNumber::GENESIS + 1), + ContractAddress::ZERO, + StorageAddress::ZERO, + ), + Some(StorageValue::ZERO) + ); + // System contract + assert_eq!( + storage_value( + &two(), + // Note: it's the genesis block that contains the matching storage entry + BlockId::Number(BlockNumber::GENESIS + 1), + ContractAddress::TWO, + StorageAddress(Felt::ONE), + ), + Some(StorageValue(Felt::ONE)) + ); + } + + #[test] + fn by_hash_returns_none() { + assert!(storage_value( + &DecidedBlocks::default(), + BlockId::Hash(BlockHash::ZERO), + ContractAddress::ZERO, + StorageAddress::ZERO, + ) + .is_none()); + } + + #[test] + fn latest_in_empty_returns_none() { + assert!(storage_value( + &DecidedBlocks::default(), + BlockId::Latest, + ContractAddress::ZERO, + StorageAddress::ZERO, + ) + .is_none()); + } + + #[test] + fn latest_instant_match() { + // "Normal" contract + assert_eq!( + storage_value( + &one(), + BlockId::Latest, + ContractAddress::ZERO, + StorageAddress::ZERO + ), + Some(StorageValue::ZERO) + ); + // System contract + assert_eq!( + storage_value( + &one(), + BlockId::Latest, + ContractAddress::TWO, + StorageAddress(Felt::ONE) + ), + Some(StorageValue(Felt::ONE)) + ); + } + + #[test] + fn latest_skips_blocks_that_dont_match() { + // "Normal" contract + assert_eq!( + storage_value( + &two(), + BlockId::Latest, + ContractAddress::ZERO, + StorageAddress::ZERO + ), + Some(StorageValue::ZERO) + ); + // System contract + assert_eq!( + storage_value( + &two(), + BlockId::Latest, + ContractAddress::TWO, + StorageAddress(Felt::ONE) + ), + Some(StorageValue(Felt::ONE)) + ); + } + } + + mod contract_nonce { + use super::super::*; + use super::*; + + #[test] + fn by_number_in_empty_returns_none() { + assert!(contract_nonce( + &DecidedBlocks::default(), + ContractAddress::ZERO, + BlockId::Number(BlockNumber::GENESIS), + ) + .is_none()); + } + + #[test] + fn by_number_exact_match() { + assert_eq!( + contract_nonce( + &one(), + ContractAddress::ZERO, + BlockId::Number(BlockNumber::GENESIS), + ), + Some(ContractNonce::ZERO) + ); + } + + #[test] + fn by_number_skips_blocks_that_dont_match() { + assert_eq!( + contract_nonce( + &two(), + // Note: it's the genesis block that contains the matching nonce + ContractAddress::ZERO, + BlockId::Number(BlockNumber::GENESIS + 1), + ), + Some(ContractNonce::ZERO) + ); + } + + #[test] + fn by_hash_returns_none() { + assert!(contract_nonce( + &DecidedBlocks::default(), + ContractAddress::ZERO, + BlockId::Hash(BlockHash::ZERO), + ) + .is_none()); + } + + #[test] + fn latest_in_empty_returns_none() { + assert!(contract_nonce( + &DecidedBlocks::default(), + ContractAddress::ZERO, + BlockId::Latest, + ) + .is_none()); + } + + #[test] + fn latest_instant_match() { + assert_eq!( + contract_nonce(&one(), ContractAddress::ZERO, BlockId::Latest), + Some(ContractNonce::ZERO) + ); + } + + #[test] + fn latest_skips_blocks_that_dont_match() { + assert_eq!( + contract_nonce(&two(), ContractAddress::ZERO, BlockId::Latest), + Some(ContractNonce::ZERO) + ); + } + } + + mod contract_class_hash { + use super::super::*; + use super::*; + + #[test] + fn by_number_in_empty_returns_none() { + assert!(contract_class_hash( + &DecidedBlocks::default(), + BlockId::Number(BlockNumber::GENESIS), + ContractAddress::ZERO, + ) + .is_none()); + } + + #[test] + fn by_number_exact_match() { + // Deployed + assert_eq!( + contract_class_hash( + &one(), + BlockId::Number(BlockNumber::GENESIS), + ContractAddress::ZERO, + ), + Some(ClassHash::ZERO) + ); + // Replaced + assert_eq!( + contract_class_hash( + &one(), + BlockId::Number(BlockNumber::GENESIS), + ContractAddress::ONE, + ), + Some(ClassHash::ZERO) + ); + } + + #[test] + fn by_number_skips_blocks_that_dont_match() { + // Deployed + assert_eq!( + contract_class_hash( + &two(), + // Note: it's the genesis block that contains the matching class hash + BlockId::Number(BlockNumber::GENESIS + 1), + ContractAddress::ZERO, + ), + Some(ClassHash::ZERO) + ); + // Replaced + assert_eq!( + contract_class_hash( + &two(), + // Note: it's the genesis block that contains the matching class hash + BlockId::Number(BlockNumber::GENESIS + 1), + ContractAddress::ONE, + ), + Some(ClassHash::ZERO) + ); + } + + #[test] + fn by_hash_returns_none() { + assert!(contract_class_hash( + &DecidedBlocks::default(), + BlockId::Hash(BlockHash::ZERO), + ContractAddress::ZERO, + ) + .is_none()); + } + + #[test] + fn latest_in_empty_returns_none() { + assert!(contract_class_hash( + &DecidedBlocks::default(), + BlockId::Latest, + ContractAddress::ZERO, + ) + .is_none()); + } + + #[test] + fn latest_instant_match() { + // Deployed + assert_eq!( + contract_class_hash(&one(), BlockId::Latest, ContractAddress::ZERO), + Some(ClassHash::ZERO) + ); + // Replaced + assert_eq!( + contract_class_hash(&one(), BlockId::Latest, ContractAddress::ONE), + Some(ClassHash::ZERO) + ); + } + + #[test] + fn latest_skips_blocks_that_dont_match() { + // Deployed + assert_eq!( + contract_class_hash(&two(), BlockId::Latest, ContractAddress::ZERO), + Some(ClassHash::ZERO) + ); + // Replaced + assert_eq!( + contract_class_hash(&two(), BlockId::Latest, ContractAddress::ONE), + Some(ClassHash::ZERO) + ); + } + } + + mod casm_hash_v2 { + use super::super::*; + use super::two; + + #[test] + fn in_empty_returns_none() { + assert!(casm_hash_v2(&DecidedBlocks::default(), ClassHash::ZERO).is_none()); + } + + #[test] + fn success() { + assert_eq!(casm_hash_v2(&two(), ClassHash::ZERO), Some(CasmHash::ZERO)); + } + } + + mod casm_hash_at { + use super::super::*; + use super::*; + + #[test] + fn by_number_in_empty_returns_none() { + assert!(casm_hash_at( + &DecidedBlocks::default(), + BlockId::Number(BlockNumber::GENESIS), + ClassHash::ZERO, + ) + .is_none()); + } + + #[test] + fn by_number_exact_match() { + assert_eq!( + casm_hash_at( + &one(), + BlockId::Number(BlockNumber::GENESIS), + ClassHash::ZERO, + ), + Some(CasmHash::ZERO) + ); + } + + #[test] + fn by_number_skips_blocks_that_dont_match() { + assert_eq!( + casm_hash_at( + &two(), + // Note: it's the genesis block that contains the matching class + BlockId::Number(BlockNumber::GENESIS + 1), + ClassHash::ZERO, + ), + Some(CasmHash::ZERO) + ); + } + + #[test] + fn by_hash_returns_none() { + assert!(casm_hash_at( + &DecidedBlocks::default(), + BlockId::Hash(BlockHash::ZERO), + ClassHash::ZERO, + ) + .is_none()); + } + + #[test] + fn latest_in_empty_returns_none() { + assert!( + casm_hash_at(&DecidedBlocks::default(), BlockId::Latest, ClassHash::ZERO,) + .is_none() + ); + } + + #[test] + fn latest_instant_match() { + assert_eq!( + casm_hash_at(&one(), BlockId::Latest, ClassHash::ZERO), + Some(CasmHash::ZERO) + ); + } + + #[test] + fn latest_skips_blocks_that_dont_match() { + assert_eq!( + casm_hash_at(&two(), BlockId::Latest, ClassHash::ZERO), + Some(CasmHash::ZERO) + ); + } + } + } +} diff --git a/crates/executor/src/state_reader/storage_adapter/rc.rs b/crates/executor/src/state_reader/storage_adapter/rc.rs index fb97925c26..e929e4070f 100644 --- a/crates/executor/src/state_reader/storage_adapter/rc.rs +++ b/crates/executor/src/state_reader/storage_adapter/rc.rs @@ -2,10 +2,16 @@ use std::rc::Rc; use blockifier::blockifier::config::TransactionExecutorConfig; use blockifier::state::errors::StateError; +use pathfinder_common::class_definition::SerializedCasmDefinition; use pathfinder_common::{BlockHash, BlockId}; use pathfinder_storage::Transaction; -use crate::state_reader::storage_adapter::{map_anyhow_to_state_err, StorageAdapter}; +use crate::state_reader::storage_adapter::{ + map_anyhow_to_state_err, + ClassDefinitionAtWithBlockNumber, + ClassDefinitionWithBlockNumber, + StorageAdapter, +}; #[derive(Clone)] pub struct RcStorageAdapter<'tx> { @@ -32,7 +38,7 @@ impl<'tx> StorageAdapter for RcStorageAdapter<'tx> { fn casm_definition( &self, class_hash: pathfinder_common::ClassHash, - ) -> Result>, StateError> { + ) -> Result, StateError> { self.db_tx .casm_definition(class_hash) .map_err(map_anyhow_to_state_err) @@ -41,7 +47,7 @@ impl<'tx> StorageAdapter for RcStorageAdapter<'tx> { fn class_definition_with_block_number( &self, class_hash: pathfinder_common::ClassHash, - ) -> Result, Vec)>, StateError> { + ) -> Result { self.db_tx .class_definition_with_block_number(class_hash) .map_err(map_anyhow_to_state_err) @@ -51,7 +57,7 @@ impl<'tx> StorageAdapter for RcStorageAdapter<'tx> { &self, block_id: BlockId, class_hash: pathfinder_common::ClassHash, - ) -> Result>, StateError> { + ) -> Result, StateError> { self.db_tx .casm_definition_at(block_id, class_hash) .map_err(map_anyhow_to_state_err) @@ -61,7 +67,7 @@ impl<'tx> StorageAdapter for RcStorageAdapter<'tx> { &self, block_id: BlockId, class_hash: pathfinder_common::ClassHash, - ) -> Result)>, StateError> { + ) -> Result { self.db_tx .class_definition_at_with_block_number(block_id, class_hash) .map_err(map_anyhow_to_state_err) diff --git a/crates/executor/src/transaction.rs b/crates/executor/src/transaction.rs index 1ffb235dd9..878bb2d0e3 100644 --- a/crates/executor/src/transaction.rs +++ b/crates/executor/src/transaction.rs @@ -204,7 +204,7 @@ pub(crate) fn find_l2_gas_limit_and_execute_transaction( let (gas_limit, output, saved_state) = match simulate_transaction(tx, tx_index, tx_executor, &revert_behavior) { Ok((output, saved_state)) => { - metrics::increment_counter!("rpc_fee_estimation.without_binary_search"); + metrics::counter!("rpc_fee_estimation.without_binary_search").increment(1); // If 110% of the actual transaction gas fee is enough, we use that // as the estimate and skip the binary search. let gas_limit = GasVector { @@ -216,7 +216,7 @@ pub(crate) fn find_l2_gas_limit_and_execute_transaction( Err(TransactionSimulationError::OutOfGas(saved_state)) => { tx_executor.block_state = Some(saved_state); - metrics::increment_counter!("rpc_fee_estimation.with_binary_search"); + metrics::counter!("rpc_fee_estimation.with_binary_search").increment(1); let mut lower_bound = GasAmount(l2_gas_consumed); let mut upper_bound = max_l2_gas_limit; @@ -259,7 +259,7 @@ pub(crate) fn find_l2_gas_limit_and_execute_transaction( } }; - metrics::histogram!("rpc_fee_estimation.steps_to_converge", steps as f64); + metrics::histogram!("rpc_fee_estimation.steps_to_converge").record(steps as f64); let gas_limit = GasVector { l2_gas: current_l2_gas_limit, @@ -273,13 +273,12 @@ pub(crate) fn find_l2_gas_limit_and_execute_transaction( } }; - metrics::histogram!( - "rpc_fee_estimation.l2_gas_difference_between_limit_and_consumed", + metrics::histogram!("rpc_fee_estimation.l2_gas_difference_between_limit_and_consumed",).record( gas_limit .l2_gas .0 .checked_sub(l2_gas_consumed) - .expect("l2_gas_limit > l2_gas_consumed") as f64 + .expect("l2_gas_limit > l2_gas_consumed") as f64, ); let output = if execution_flags.charge_fee && gas_limit.l2_gas > initial_l2_gas_limit { @@ -633,12 +632,14 @@ fn get_max_l2_gas_amount_covered_by_balance( if balance > max_possible_fee_without_l2_gas.0.into() { // The maximum amount of L2 gas that can be bought with the balance. - let max_amount = (balance - max_possible_fee_without_l2_gas.0) - / initial_resource_bounds - .l2_gas - .max_price_per_unit - .0 - .max(1u64.into()); + // max_possible_fee = max_amount * (max_price + tip). + let effective_l2_price: u128 = initial_resource_bounds + .l2_gas + .max_price_per_unit + .0 + .saturating_add(get_tip(tx).0.into()) + .max(1u64.into()); + let max_amount = (balance - max_possible_fee_without_l2_gas.0) / effective_l2_price; Ok(u64::try_from(max_amount).unwrap_or(u64::MAX).into()) } else { // Balance is less than committed L1 gas and L1 data gas, tx will fail diff --git a/crates/executor/src/types.rs b/crates/executor/src/types.rs index ca131b195f..25a8b06075 100644 --- a/crates/executor/src/types.rs +++ b/crates/executor/src/types.rs @@ -4,7 +4,7 @@ use std::sync::Arc; use anyhow::Context; use blockifier::blockifier_versioned_constants::VersionedConstants; use blockifier::execution::call_info::{CallInfo, OrderedL2ToL1Message}; -use blockifier::state::cached_state::StateMaps; +use blockifier::state::cached_state::StateMaps as BlockifierStateMaps; use blockifier::state::errors::StateError; use blockifier::state::state_api::StateReader as _; use blockifier::transaction::transaction_execution::Transaction; @@ -18,7 +18,7 @@ use pathfinder_common::state_update::{ use pathfinder_common::transaction::TransactionVariant; use pathfinder_crypto::Felt; use starknet_api::block::FeeType; -use starknet_api::core::PatriciaKey; +use starknet_api::core::{CompiledClassHash, PatriciaKey}; use starknet_api::execution_resources::{GasAmount, GasVector}; use starknet_api::transaction::fields::{ AccountDeploymentData, @@ -35,8 +35,6 @@ use crate::execution_state::PathfinderExecutionState; use crate::state_reader::StorageAdapter; use crate::IntoStarkFelt as _; -pub const ETH_TO_WEI_RATE: u128 = 1_000_000_000_000_000_000; - #[derive(Clone, Debug, PartialEq, Eq)] pub struct Receipt { pub actual_fee: Fee, @@ -48,6 +46,8 @@ pub struct Receipt { pub transaction_index: TransactionIndex, } +pub type ReceiptAndEvents = (Receipt, Vec); + #[derive(Copy, Clone, Debug, PartialEq, Eq)] pub struct BlockInfo { pub number: BlockNumber, @@ -94,13 +94,10 @@ pub struct ConsensusPriceConverter { pub l2_gas_price_fri: u128, pub l1_gas_price_wei: u128, pub l1_data_gas_price_wei: u128, - pub eth_to_fri_rate: u128, + pub l1_gas_price_fri: u128, + pub l1_data_gas_price_fri: u128, } -// one eth_to_fri_rate is not suitable for current sepolia or integration data -// where there are 3 pairs of gas prices in both wei & fri and they give -// 2 different ethfri rates, often due to one of the prices in wei saturated at -// 1 pub enum BlockInfoPriceConverter { Legacy(LegacyPriceConverter), Consensus(ConsensusPriceConverter), @@ -122,45 +119,38 @@ impl LegacyPriceConverter { impl ConsensusPriceConverter { pub fn strk_l1_gas_price(&self) -> u128 { - self.wei_to_fri(self.l1_gas_price_wei) + self.l1_gas_price_fri } pub fn strk_l1_data_gas_price(&self) -> u128 { - self.wei_to_fri(self.l1_data_gas_price_wei) + self.l1_data_gas_price_fri } pub fn eth_l2_gas_price(&self) -> u128 { - self.fri_to_wei(self.l2_gas_price_fri) - } - - fn wei_to_fri(&self, wei: u128) -> u128 { - wei * self.eth_to_fri_rate / ETH_TO_WEI_RATE - } - - fn fri_to_wei(&self, fri: u128) -> u128 { - fri * ETH_TO_WEI_RATE / self.eth_to_fri_rate + // Derive WEI price from the FRI price using the L1 gas price ratio. + // l2_gas_price_wei = l2_gas_price_fri * l1_gas_price_wei / l1_gas_price_fri + if self.l1_gas_price_fri == 0 { + 0 + } else { + self.l2_gas_price_fri * self.l1_gas_price_wei / self.l1_gas_price_fri + } } } impl BlockInfoPriceConverter { pub fn consensus( l2_gas_price_fri: u128, + l1_gas_price_fri: u128, + l1_data_gas_price_fri: u128, l1_gas_price_wei: u128, l1_data_gas_price_wei: u128, - eth_to_fri_rate: u128, ) -> Self { - // TODO(validator) obviously incorrect, but better than dividing by zero... - let cooked_rate = if eth_to_fri_rate == 0 { - tracing::error!("zero ETH/FRI rate"); - 1 - } else { - eth_to_fri_rate - }; Self::Consensus(ConsensusPriceConverter { l2_gas_price_fri, l1_gas_price_wei, l1_data_gas_price_wei, - eth_to_fri_rate: cooked_rate, + l1_gas_price_fri, + l1_data_gas_price_fri, }) } @@ -562,6 +552,66 @@ pub struct InnerCallExecutionResources { pub l2_gas: u128, } +#[derive(Debug, Default, Clone, Eq, PartialEq)] +pub struct StateMaps { + pub nonces: BTreeMap, + pub class_hashes: BTreeMap, + pub storage: BTreeMap<(ContractAddress, StorageAddress), StorageValue>, + pub compiled_class_hashes: BTreeMap, + pub declared_contracts: BTreeMap, +} + +impl From for StateMaps { + fn from(value: blockifier::state::cached_state::StateMaps) -> Self { + Self { + nonces: value + .nonces + .into_iter() + .map(|(address, nonce)| { + let address = ContractAddress::new_or_panic(address.key().into_felt()); + let nonce = ContractNonce(nonce.into_felt()); + (address, nonce) + }) + .collect(), + class_hashes: value + .class_hashes + .into_iter() + .map(|(address, class_hash)| { + let address = ContractAddress::new_or_panic(address.key().into_felt()); + let class_hash = ClassHash::new_or_panic(class_hash.into_felt()); + (address, class_hash) + }) + .collect(), + storage: value + .storage + .into_iter() + .map(|((address, key), value)| { + let address = ContractAddress::new_or_panic(address.key().into_felt()); + let key = StorageAddress::new_or_panic(key.into_felt()); + let value = StorageValue(value.into_felt()); + ((address, key), value) + }) + .collect(), + compiled_class_hashes: value + .compiled_class_hashes + .into_iter() + .map(|(class_hash, compiled_class_hash)| { + let class_hash = ClassHash::new_or_panic(class_hash.into_felt()); + (class_hash, compiled_class_hash) + }) + .collect(), + declared_contracts: value + .declared_contracts + .into_iter() + .map(|(class_hash, declared)| { + let class_hash = ClassHash::new_or_panic(class_hash.into_felt()); + (class_hash, declared) + }) + .collect(), + } + } +} + #[derive(Debug, Default, Clone, Eq, PartialEq)] pub struct StateDiff { pub storage_diffs: BTreeMap>, @@ -771,7 +821,7 @@ impl FunctionInvocation { events, messages, result, - computation_resources: call_info.resources.into(), + computation_resources: call_info.resources.vm_resources.into(), execution_resources: InnerCallExecutionResources { l1_gas: gas_consumed.l1_gas.0.into(), l2_gas: gas_consumed.l2_gas.0.into(), @@ -1144,7 +1194,7 @@ pub(crate) fn transaction_declared_deprecated_class( } pub(crate) fn to_state_diff( - state_maps: StateMaps, + state_maps: BlockifierStateMaps, initial_state: PathfinderExecutionState, old_declared_contracts: impl Iterator, ) -> Result { @@ -1592,6 +1642,13 @@ pub fn to_starknet_api_transaction( .map(|a| a.0.into_starkfelt()) .collect(), ), + proof_facts: starknet_api::transaction::fields::ProofFacts( + tx.proof_facts + .iter() + .map(|p| p.0.into_starkfelt()) + .collect::>() + .into(), + ), }; Ok(starknet_api::transaction::Transaction::Invoke( diff --git a/crates/executor/src/worker_pool.rs b/crates/executor/src/worker_pool.rs new file mode 100644 index 0000000000..c829647ffd --- /dev/null +++ b/crates/executor/src/worker_pool.rs @@ -0,0 +1,61 @@ +use std::sync::Arc; + +use blockifier::blockifier::config::WorkerPoolConfig; +use blockifier::concurrency::worker_pool::WorkerPool; +use blockifier::state::cached_state::CachedState; +use blockifier::state::state_api::StateReader; + +/// Default stack size for worker threads (62 MiB). +/// This matches blockifier's default for handling deep recursion in Cairo +/// native execution. +pub const DEFAULT_STACK_SIZE: usize = 62 * 1024 * 1024; + +/// Wrapper around blockifier's WorkerPool that provides convenient construction +/// and sharing across multiple concurrent executors. +pub struct ExecutorWorkerPool { + pool: Arc>>, + config: WorkerPoolConfig, +} + +impl ExecutorWorkerPool { + /// Creates a new worker pool with the specified number of workers. + /// + /// Uses the default stack size of 62 MiB per worker thread. + pub fn new(n_workers: usize) -> Self { + Self::with_config(WorkerPoolConfig { + n_workers, + stack_size: DEFAULT_STACK_SIZE, + }) + } + + /// Creates a new worker pool with the given configuration. + pub fn with_config(config: WorkerPoolConfig) -> Self { + let pool = Arc::new(WorkerPool::start(&config)); + Self { pool, config } + } + + /// Creates a new worker pool using the number of available CPU cores. + pub fn auto() -> Self { + let n_workers = std::thread::available_parallelism() + .map(|p| p.get()) + .unwrap_or(1); + Self::new(n_workers) + } + + /// Returns an Arc reference to the underlying worker pool. + /// + /// This is used by ConcurrentTransactionExecutor::start_block(). + pub fn get(&self) -> Arc>> { + self.pool.clone() + } + + /// Returns the configuration used to create this worker pool. + pub fn config(&self) -> &WorkerPoolConfig { + &self.config + } + + /// Returns the number of workers in this pool. + pub fn n_workers(&self) -> usize { + self.config.n_workers + } +} diff --git a/crates/feeder-gateway/Cargo.toml b/crates/feeder-gateway/Cargo.toml index 77a9c4b720..2c8c212f7e 100644 --- a/crates/feeder-gateway/Cargo.toml +++ b/crates/feeder-gateway/Cargo.toml @@ -6,25 +6,23 @@ edition = { workspace = true } license = { workspace = true } rust-version = { workspace = true } +[features] +small_aggregate_filters = ["pathfinder-storage/small_aggregate_filters"] + [dependencies] anyhow = { workspace = true } clap = { workspace = true, features = ["derive", "env", "wrap_help"] } const-decoder = { workspace = true } +futures = { workspace = true } pathfinder = { path = "../pathfinder" } +pathfinder-block-commitments = { path = "../block-commitments" } pathfinder-common = { path = "../common", features = ["full-serde"] } pathfinder-storage = { path = "../storage" } primitive-types = { workspace = true } serde = { workspace = true } -serde_json = { workspace = true, features = [ - "arbitrary_precision", - "raw_value", -] } +serde_json = { workspace = true, features = ["arbitrary_precision", "raw_value"] } starknet-gateway-types = { path = "../gateway-types" } tokio = { workspace = true, features = ["rt-multi-thread"] } tracing = { workspace = true } -tracing-subscriber = { workspace = true, features = [ - "env-filter", - "time", - "ansi", -] } +tracing-subscriber = { workspace = true, features = ["env-filter", "time", "ansi"] } warp = { workspace = true } diff --git a/crates/feeder-gateway/src/main.rs b/crates/feeder-gateway/src/main.rs index 4524c4a88f..8e8aa9255c 100644 --- a/crates/feeder-gateway/src/main.rs +++ b/crates/feeder-gateway/src/main.rs @@ -21,21 +21,31 @@ /// ./testnet-sepolia.sqlite --reorg-at-block 50 --reorg-to-block 40` use std::collections::HashMap; use std::convert::Infallible; +use std::future::Future; use std::num::NonZeroU32; use std::path::PathBuf; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; +use std::time::Duration; use anyhow::Context; -use clap::{Args, Parser}; -use pathfinder_common::prelude::*; -use pathfinder_common::state_update::ContractClassUpdate; -use pathfinder_common::{BlockId, Chain}; -use pathfinder_lib::state::block_hash::{ +use clap::{ArgAction, Args, Parser}; +use futures::future::BoxFuture; +use futures::FutureExt; +use pathfinder_block_commitments::{ calculate_event_commitment, calculate_receipt_commitment, calculate_transaction_commitment, }; +use pathfinder_common::class_definition::{ + SerializedCasmDefinition, + SerializedOpaqueClassDefinition, +}; +use pathfinder_common::integration_testing::debug_create_port_marker_file; +use pathfinder_common::prelude::*; +use pathfinder_common::state_update::ContractClassUpdate; +use pathfinder_common::{BlockId, Chain}; +use pathfinder_storage::Storage; use primitive_types::H160; use serde::{Deserialize, Serialize}; use starknet_gateway_types::reply::state_update::{ @@ -46,6 +56,8 @@ use starknet_gateway_types::reply::state_update::{ StorageDiff, }; use starknet_gateway_types::reply::{GasPrices, Status}; +use tokio::sync::watch::{Receiver, Sender}; +use tracing::Instrument; use tracing_subscriber::prelude::*; use tracing_subscriber::{fmt, EnvFilter}; use warp::Filter; @@ -53,8 +65,23 @@ use warp::Filter; #[derive(Parser)] #[command(version)] struct Cli { - #[arg(long_help = "Database path")] + #[arg(long_help = "Database path.")] pub database_path: PathBuf, + #[arg( + long, + long_help = "Port to listen on, 0 means random OS assigned value", + default_value = "8080" + )] + pub port: u16, + #[arg( + long, + long_help = "If set, the process will wait for the marker file to become available. \ + If the marker file is not immediately available, the feeder gateway \ + will keep retrying until a timeout occurs.", + value_name = "MARKER_FILE_PATH", + action=ArgAction::Set + )] + pub wait_for_marker_file: Option, #[command(flatten)] pub reorg: ReorgCli, } @@ -77,12 +104,45 @@ fn parse_block_number(s: &str) -> Result { #[tokio::main] async fn main() -> anyhow::Result<()> { let cli = Cli::parse(); + let (storage_tx, storage_rx) = tokio::sync::watch::channel(None); tracing_subscriber::registry() .with(fmt::layer()) .with(EnvFilter::from_default_env()) .init(); - serve(cli).await + + if cli.wait_for_marker_file.is_none() { + let storage = pathfinder_storage::StorageBuilder::file(cli.database_path.clone()) + .readonly()? + .create_read_only_pool(NonZeroU32::new(10).unwrap())?; + + let chain = { + let mut connection = storage.connection()?; + let tx = connection.transaction()?; + get_chain(&tx)? + }; + storage_tx.send(Some((storage, chain)))?; + } + + tokio::select! { + // We wait for a marker file, because in a test scenario where the FGw opens an existing DB before Pathfinder, + // wal and shm files will be created. Sqlite3 engine in Pathfinder will attempt to perform recovery + // using those files, which requires locking the DB and will fail with `SQLITE_BUSY` (DB locked) + // because there already are open RO connections from the FGw's pool and recovery requires no locks, + // even if they are RO. + storage_err = wait_for_marker_file( + cli.wait_for_marker_file.clone(), + cli.database_path.clone(), + storage_tx, + Duration::from_millis(500), + Duration::from_secs(30), + ) => { + Err(storage_err) + }, + res = serve(cli, storage_rx) => { + res + } + } } #[derive(Debug, Clone)] @@ -91,19 +151,105 @@ struct ReorgConfig { pub reorg_to_block: BlockNumber, } -async fn serve(cli: Cli) -> anyhow::Result<()> { - let database_path = std::env::args().nth(1).unwrap(); - let storage = pathfinder_storage::StorageBuilder::file(database_path.into()) - .migrate()? - .create_pool(NonZeroU32::new(10).unwrap()) - .unwrap(); - - let chain = { - let mut connection = storage.connection()?; - let tx = connection.transaction()?; - get_chain(&tx)? +/// Waits for the marker file to become available and then attempts to create a +/// read-only connection pool to the database. The task **does not join** if the +/// marker file becomes available or the `enable` flag is `false`, it just +/// returns **a pending future**. The task only returns if an error is +/// encountered, including a timeout. +fn wait_for_marker_file( + marker_file: Option, + db_file: PathBuf, + storage_tx: Sender>, + poll_interval: Duration, + timeout: Duration, +) -> impl Future { + let Some(marker_file) = marker_file else { + return futures::future::pending().boxed(); }; + let jh = tokio::task::spawn_blocking(move || { + let stopwatch = std::time::Instant::now(); + loop { + match std::fs::exists(marker_file.clone()) { + Ok(true) => { + let Ok(storage_manager) = + pathfinder_storage::StorageBuilder::file(db_file.clone()).readonly() + else { + tracing::info!( + "Creating read only storage manager failed, database is not ready, \ + retrying..." + ); + std::thread::sleep(poll_interval); + continue; + }; + + let Ok(storage) = + storage_manager.create_read_only_pool(NonZeroU32::new(10).unwrap()) + else { + tracing::info!( + "Creating read only connection pool failed, database is not ready, \ + retrying..." + ); + std::thread::sleep(poll_interval); + continue; + }; + + let chain = { + if !storage.is_migrated()? { + tracing::info!("Database not yet migrated, retrying..."); + std::thread::sleep(poll_interval); + continue; + } + + Chain::Custom + }; + tracing::info!("Database is now available"); + return anyhow::Ok((storage, chain)); + } + Ok(false) => { + tracing::info!("Marker file not yet available, retrying..."); + std::thread::sleep(poll_interval); + } + Err(_) => { + tracing::info!("Could not check if marker file exists, retrying..."); + std::thread::sleep(poll_interval); + } + } + + if stopwatch.elapsed() > timeout { + return Err(anyhow::anyhow!( + "Timed out waiting for the DB to become available." + )); + } + } + }); + + fn err(e: anyhow::Error) -> BoxFuture<'static, anyhow::Error> { + std::future::ready(e).boxed() + } + + let storage_tx = storage_tx.clone(); + jh.then( + move |join_result| match join_result.context("Joining blocking task") { + Ok(task_result) => match task_result { + Ok(storage_n_chain) => { + match storage_tx + .send(Some(storage_n_chain)) + .context("Sending storage instance") + { + Ok(_) => std::future::pending().boxed(), + Err(e) => err(e), + } + } + Err(e) => err(e), + }, + Err(e) => err(e), + }, + ) + .boxed() +} + +async fn serve(cli: Cli, storage_rx: Receiver>) -> anyhow::Result<()> { let reorg_config = cli.reorg.reorg_at_block.and_then(|reorg_at_block| { cli.reorg.reorg_to_block.map(|reorg_to_block| ReorgConfig { reorg_at_block, @@ -112,7 +258,32 @@ async fn serve(cli: Cli) -> anyhow::Result<()> { }); let reorged = Arc::new(AtomicBool::new(false)); + fn maybe_chain(storage_rx: Receiver>) -> Option { + storage_rx.borrow().clone().map(|(_, chain)| chain) + } + + fn maybe_storage(storage_rx: Receiver>) -> Option { + storage_rx.borrow().clone().map(|(storage, _)| storage) + } + + fn storage_unavailable_response() -> warp::http::Response> { + warp::http::Response::builder() + .status(500) + .body(r"Storage unavailable".as_bytes().to_owned()) + .unwrap() + } + + #[derive(Debug)] + struct StorageUnavailable; + impl warp::reject::Reject for StorageUnavailable {} + + fn storage_unavailable_rejection() -> warp::reject::Rejection { + warp::reject::custom(StorageUnavailable) + } + + let storage_rx_clone = storage_rx.clone(); let get_contract_addresses = warp::path("get_contract_addresses").map(move || { + let chain = maybe_chain(storage_rx_clone.clone()).unwrap_or(Chain::Custom); let addresses = contract_addresses(chain).unwrap(); let reply = serde_json::json!({"GpsStatementVerifier": addresses.gps, "Starknet": addresses.core}); @@ -154,12 +325,12 @@ async fn serve(cli: Cli) -> anyhow::Result<()> { let get_block = warp::path("get_block") .and(warp::query::()) .and_then({ - let storage = storage.clone(); + let storage_rx = storage_rx.clone(); let reorg_config = reorg_config.clone(); let reorged = reorged.clone(); move |block_id: BlockIdParam| { - let storage = storage.clone(); + let storage_rx = storage_rx.clone(); let reorg_config = reorg_config.clone(); let reorged = reorged.clone(); @@ -168,12 +339,16 @@ async fn serve(cli: Cli) -> anyhow::Result<()> { match block_id.try_into() { Ok(block_id) => { + let Some(storage) = maybe_storage(storage_rx) else { + return Err(storage_unavailable_rejection()); + }; + let block = tokio::task::spawn_blocking(move || { let mut connection = storage.connection().unwrap(); let tx = connection.transaction().unwrap(); resolve_block(&tx, block_id, &reorg_config, reorged) - }).await.unwrap(); + }).await.context("Joining blocking task").and_then(|res| res); match block { Ok(block) => { @@ -189,15 +364,15 @@ async fn serve(cli: Cli) -> anyhow::Result<()> { block_number: block.block_number, }; - Ok(warp::reply::json(&reply)) + Ok(warp::reply::with_status(warp::reply::json(&reply), warp::http::StatusCode::OK)) } else { - Ok(warp::reply::json(&block)) + Ok(warp::reply::with_status(warp::reply::json(&block), warp::http::StatusCode::OK)) } }, Err(e) => { tracing::error!("Error fetching block: {:?}", e); let error = serde_json::json!({"code": "StarknetErrorCode.BLOCK_NOT_FOUND", "message": "Block number not found"}); - Ok(warp::reply::json(&error)) + Ok(warp::reply::with_status(warp::reply::json(&error), warp::http::StatusCode::BAD_REQUEST)) } } }, @@ -210,27 +385,31 @@ async fn serve(cli: Cli) -> anyhow::Result<()> { let get_signature = warp::path("get_signature") .and(warp::query::()) .and_then({ - let storage = storage.clone(); + let storage_rx = storage_rx.clone(); move |block_id: BlockIdParam| { - let storage = storage.clone(); + let storage_rx = storage_rx.clone(); async move { match block_id.try_into() { Ok(block_id) => { + let Some(storage) = maybe_storage(storage_rx) else { + return Err(storage_unavailable_rejection()); + }; + let signature = tokio::task::spawn_blocking(move || { let mut connection = storage.connection().unwrap(); let tx = connection.transaction().unwrap(); resolve_signature(&tx, block_id) - }).await.unwrap(); + }).await.context("Joining blocking task").and_then(|res| res); match signature { Ok(signature) => { - Ok(warp::reply::json(&signature)) + Ok(warp::reply::with_status(warp::reply::json(&signature), warp::http::StatusCode::OK)) }, Err(e) => { tracing::error!("Error fetching signature: {:?}", e); let error = serde_json::json!({"code": "StarknetErrorCode.BLOCK_NOT_FOUND", "message": "Block number not found"}); - Ok(warp::reply::json(&error)) + Ok(warp::reply::with_status(warp::reply::json(&error), warp::http::StatusCode::BAD_REQUEST)) } } }, @@ -243,12 +422,12 @@ async fn serve(cli: Cli) -> anyhow::Result<()> { let get_state_update = warp::path("get_state_update") .and(warp::query::()) .and_then({ - let storage = storage.clone(); + let storage_rx = storage_rx.clone(); let reorg_config = reorg_config.clone(); let reorged = reorged.clone(); move |block_id: BlockIdParam| { - let storage = storage.clone(); + let storage_rx = storage_rx.clone(); let reorg_config = reorg_config.clone(); let reorged = reorged.clone(); async move { @@ -256,12 +435,16 @@ async fn serve(cli: Cli) -> anyhow::Result<()> { match block_id.try_into() { Ok(block_id) => { + let Some(storage) = maybe_storage(storage_rx) else { + return Err(storage_unavailable_rejection()); + }; + let block_and_state_update = tokio::task::spawn_blocking(move || { let mut connection = storage.connection().unwrap(); let tx = connection.transaction().unwrap(); resolve_state_update(&tx, block_id, &reorg_config, reorged.clone()).and_then(|state_update| resolve_block(&tx, block_id, &reorg_config, reorged).map(|block| (block, state_update))) - }).await.unwrap(); + }).await.context("Joining blocking task").and_then(|res| res); match block_and_state_update { Ok((block, state_update)) => { @@ -309,25 +492,70 @@ async fn serve(cli: Cli) -> anyhow::Result<()> { let get_class_by_hash = warp::path("get_class_by_hash") .and(warp::query::()) .then({ - let storage = storage.clone(); + let storage_rx = storage_rx.clone(); move |class_hash: ClassHashParam| { - let storage = storage.clone(); + let storage_rx = storage_rx.clone(); async move { + let Some(storage) = maybe_storage(storage_rx) else { + return Ok(storage_unavailable_response()); + }; + let class = tokio::task::spawn_blocking(move || { let mut connection = storage.connection().unwrap(); let tx = connection.transaction().unwrap(); resolve_class(&tx, class_hash.class_hash) - }).await.unwrap(); + }).await.context("Joining blocking task").and_then(|res| res); match class { Ok(class) => { - let response = warp::http::Response::builder().header("content-type", "application/json").body(class).unwrap(); + let response = warp::http::Response::builder().header("content-type", "application/json").body(class.into_bytes()).unwrap(); Result::<_, Infallible>::Ok(response) }, Err(_) => { let error = r#"{"code": "StarknetErrorCode.UNDECLARED_CLASS", "message": "Class not found"}"#; - let response = warp::http::Response::builder().status(500).body(error.as_bytes().to_owned()).unwrap(); + let response = warp::http::Response::builder().status(warp::http::StatusCode::BAD_REQUEST).body(error.as_bytes().to_owned()).unwrap(); + Ok(response) + } + } + } + } + }); + + #[derive(Debug, Deserialize)] + struct CompiledClassHashParam { + #[serde(rename = "classHash")] + class_hash: ClassHash, + } + + let get_compiled_class_by_hash = warp::path("get_compiled_class_by_class_hash") + .and(warp::query::()) + .then({ + let storage_rx = storage_rx.clone(); + + move |compiled_class_hash: CompiledClassHashParam| { + let storage_rx = storage_rx.clone(); + + async move { + let Some(storage) = maybe_storage(storage_rx) else { + return Ok(storage_unavailable_response()); + }; + + let compiled_class = tokio::task::spawn_blocking(move || { + let mut connection = storage.connection().unwrap(); + let tx = connection.transaction().unwrap(); + + resolve_compiled_class(&tx, compiled_class_hash.class_hash) + }).await.context("Joining blocking task").and_then(|res| res); + + match compiled_class { + Ok(compiled_class) => { + let response = warp::http::Response::builder().header("content-type", "application/json").body(compiled_class.into_bytes()).unwrap(); + Result::<_, Infallible>::Ok(response) + }, + Err(_) => { + let error = r#"{"code": "StarknetErrorCode.UNDECLARED_CLASS", "message": "Class not found"}"#; + let response = warp::http::Response::builder().status(warp::http::StatusCode::BAD_REQUEST).body(error.as_bytes().to_owned()).unwrap(); Ok(response) } } @@ -342,12 +570,24 @@ async fn serve(cli: Cli) -> anyhow::Result<()> { .or(get_state_update) .or(get_contract_addresses) .or(get_class_by_hash) + .or(get_compiled_class_by_hash) .or(get_signature) .or(get_public_key), ) .with(warp::filters::trace::request()); - warp::serve(handler).run(([127, 0, 0, 1], 8080)).await; + let (socket_addr, server_fut) = warp::serve(handler).bind_ephemeral(([127, 0, 0, 1], cli.port)); + let span = tracing::info_span!("Server::run", ?socket_addr); + tracing::info!(parent: &span, "listening on http://{}", socket_addr); + + let data_directory = cli + .database_path + .parent() + .context("Getting database parent directory")?; + + debug_create_port_marker_file("feeder_gateway", socket_addr.port(), data_directory); + + server_fut.instrument(span).await; Ok(()) } @@ -385,12 +625,7 @@ fn contract_addresses(chain: Chain) -> anyhow::Result { core: parse("c662c410C0ECf747543f5bA90660f6ABeBD9C8c4"), gps: parse("47312450B3Ac8b5b8e247a6bB6d523e7605bDb60"), }, - Chain::Custom => ContractAddresses { - // Formerly also Goerli integration - core: parse("d5c325D183C592C94998000C5e0EED9e6655c020"), - gps: parse("8f97970aC5a9aa8D130d35146F5b59c4aef57963"), - }, - Chain::SepoliaTestnet => ContractAddresses { + Chain::SepoliaTestnet | Chain::Custom => ContractAddresses { core: parse("E2Bb56ee936fd6433DC0F6e7e3b8365C906AA057"), gps: parse("07ec0D28e50322Eb0C159B9090ecF3aeA8346DFe"), }, @@ -592,7 +827,7 @@ fn resolve_state_update( fn resolve_class( tx: &pathfinder_storage::Transaction<'_>, class_hash: ClassHash, -) -> anyhow::Result> { +) -> anyhow::Result { let definition = tx .class_definition(class_hash) .context("Reading class definition from database")? @@ -601,6 +836,19 @@ fn resolve_class( Ok(definition) } +#[tracing::instrument(level = "trace", skip(tx))] +fn resolve_compiled_class( + tx: &pathfinder_storage::Transaction<'_>, + compiled_class_hash: ClassHash, +) -> anyhow::Result { + let definition = tx + .casm_definition(compiled_class_hash) + .context("Reading compiled class definition from database")? + .context("No such class found")?; + + Ok(definition) +} + fn storage_to_gateway( state_update: pathfinder_common::StateUpdate, ) -> starknet_gateway_types::reply::StateUpdate { diff --git a/crates/gas-price/Cargo.toml b/crates/gas-price/Cargo.toml new file mode 100644 index 0000000000..86e7561f24 --- /dev/null +++ b/crates/gas-price/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "pathfinder-gas-price" +version = { workspace = true } +authors = { workspace = true } +edition = { workspace = true } +license = { workspace = true } +rust-version = { workspace = true } + +[dependencies] +pathfinder-common = { path = "../common" } +pathfinder-ethereum = { path = "../ethereum" } +thiserror = { workspace = true } +tracing = { workspace = true } + +[dev-dependencies] +anyhow = { workspace = true } +cargo_toml = "0.22.3" +mockall = { workspace = true } +pathfinder-common = { path = "../common" } +pathfinder-ethereum = { path = "../ethereum" } +reqwest = { workspace = true } +rstest = { workspace = true } +serde = { workspace = true, features = ["derive"] } +starknet_api = { workspace = true } +tokio = { workspace = true, features = ["rt-multi-thread", "macros"] } diff --git a/crates/gas-price/src/l1.rs b/crates/gas-price/src/l1.rs new file mode 100644 index 0000000000..f699b74130 --- /dev/null +++ b/crates/gas-price/src/l1.rs @@ -0,0 +1,509 @@ +//! L1 Gas Price Provider +//! +//! Maintains a rolling buffer of L1 gas prices and computes rolling averages +//! for validating consensus proposals. + +use std::collections::VecDeque; +use std::sync::{Arc, RwLock}; + +use pathfinder_common::{L1BlockHash, L1BlockNumber}; +use pathfinder_ethereum::L1GasPriceData; + +use super::deviation_pct; + +/// Configuration for L1 gas price validation. +#[derive(Debug, Clone)] +pub struct L1GasPriceConfig { + /// Maximum number of samples to store in the ring buffer. + /// Default: 1000 (~3.5 hours of blocks at 12s/block) + pub storage_limit: usize, + + /// Number of blocks to use for computing the rolling average. + /// Default: 100 (~20 minutes of blocks) + pub blocks_for_mean: usize, + + /// Lag margin in seconds. When computing the rolling average for a given + /// timestamp, we look back by this amount to account for network delays. + /// Default: 300 (5 minutes) + pub lag_margin_seconds: u64, + + /// Maximum allowed time gap between the requested timestamp and the latest + /// sample. If exceeded, the data is considered stale. + /// Default: 600 (10 minutes) + pub max_time_gap_seconds: u64, + + /// Tolerance for price deviation (as a fraction, e.g., 0.20 for 20%). + /// Default: 0.20 (20%) + pub tolerance: f64, +} + +impl Default for L1GasPriceConfig { + fn default() -> Self { + Self { + storage_limit: 1000, + blocks_for_mean: 100, + lag_margin_seconds: 300, + max_time_gap_seconds: 600, + tolerance: 0.20, + } + } +} + +/// Error type for L1 gas price validation failures. +#[derive(Debug, thiserror::Error)] +pub enum L1GasPriceValidationError { + #[error( + "Base fee {proposed} deviates from expected {expected} by {deviation_pct:.2}% (max \ + allowed: {tolerance_pct:.2}%)" + )] + BaseFeeDeviation { + proposed: u128, + expected: u128, + deviation_pct: f64, + tolerance_pct: f64, + }, + + #[error( + "Blob fee {proposed} deviates from expected {expected} by {deviation_pct:.2}% (max \ + allowed: {tolerance_pct:.2}%)" + )] + BlobFeeDeviation { + proposed: u128, + expected: u128, + deviation_pct: f64, + tolerance_pct: f64, + }, + + #[error( + "L1 gas price data is stale: latest timestamp {latest_timestamp}, requested \ + {requested_timestamp} (max gap: {max_gap}s)" + )] + StaleData { + latest_timestamp: u64, + requested_timestamp: u64, + max_gap: u64, + }, + + #[error("No gas price data available for timestamp {timestamp} with lag {lag_seconds}s")] + NoDataAvailable { timestamp: u64, lag_seconds: u64 }, +} + +/// Result of validating L1 gas prices in a proposal. +#[derive(Debug)] +pub enum L1GasPriceValidationResult { + /// The proposed gas prices are within acceptable tolerance. + Valid, + /// The proposed gas prices are invalid. + Invalid(L1GasPriceValidationError), + /// Insufficient data to perform validation. + InsufficientData, +} + +/// Error returned when adding a sample to the gas price buffer fails. +#[derive(Debug, thiserror::Error)] +pub enum AddSampleError { + #[error("Gap in L1 block sequence: expected {expected}, got {actual}")] + Gap { + expected: L1BlockNumber, + actual: L1BlockNumber, + }, + #[error("L1 reorg detected at block {block_number}: parent hash mismatch")] + Reorg { + block_number: L1BlockNumber, + expected_parent: L1BlockHash, + actual_parent: L1BlockHash, + }, +} + +/// Provides L1 gas price data and validation for consensus proposals. +/// +/// Uses ring buffer to store historical gas price samples and computes rolling +/// averages for validation. +#[derive(Clone)] +pub struct L1GasPriceProvider { + inner: Arc, +} + +struct L1GasPriceProviderInner { + buffer: RwLock>, + config: L1GasPriceConfig, +} + +impl std::fmt::Debug for L1GasPriceProvider { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let buffer = self.inner.buffer.read().unwrap(); + f.debug_struct("L1GasPriceProvider") + .field("sample_count", &buffer.len()) + .field("config", &self.inner.config) + .finish() + } +} + +impl L1GasPriceProvider { + /// Creates a new L1 gas price provider with the given configuration. + pub fn new(config: L1GasPriceConfig) -> Self { + Self { + inner: Arc::new(L1GasPriceProviderInner { + buffer: RwLock::new(VecDeque::with_capacity(config.storage_limit)), + config, + }), + } + } + + /// Returns the number of samples currently stored. + pub fn sample_count(&self) -> usize { + self.inner.buffer.read().unwrap().len() + } + + /// Returns whether there is enough data to perform validation. + pub fn is_ready(&self) -> bool { + self.sample_count() > 0 + } + + /// Returns the latest block number stored, if any. + pub fn latest_block_number(&self) -> Option { + self.inner + .buffer + .read() + .unwrap() + .back() + .map(|d| d.block_number) + } + + /// Adds a new gas price sample to the buffer. + /// + /// Samples must be added in sequential block order. Returns + /// [`AddSampleError::Gap`] if block numbers are non-sequential, or + /// [`AddSampleError::Reorg`] if the parent hash doesn't match the + /// previous block's hash (indicating a chain reorganization). + pub fn add_sample(&self, data: L1GasPriceData) -> Result<(), AddSampleError> { + let mut buffer = self.inner.buffer.write().unwrap(); + + if let Some(last) = buffer.back() { + let expected = L1BlockNumber::new_or_panic(last.block_number.get() + 1); + + if data.block_number != expected { + return Err(AddSampleError::Gap { + expected, + actual: data.block_number, + }); + } + + if data.parent_hash != last.block_hash { + return Err(AddSampleError::Reorg { + block_number: data.block_number, + expected_parent: last.block_hash, + actual_parent: data.parent_hash, + }); + } + } + + if buffer.len() >= self.inner.config.storage_limit { + buffer.pop_front(); + } + + buffer.push_back(data); + Ok(()) + } + + /// Adds multiple samples in bulk (used in initialization). + pub fn add_samples(&self, samples: Vec) -> Result<(), AddSampleError> { + for sample in samples { + self.add_sample(sample)?; + } + Ok(()) + } + + /// Clears all stored samples. Used during recovery after a reorg or + /// connection failure. + pub fn clear(&self) { + self.inner.buffer.write().unwrap().clear(); + } + + /// Computes the rolling average of gas prices for the given timestamp. + /// + /// Returns (avg_base_fee, avg_blob_fee). + pub fn get_average_prices( + &self, + timestamp: u64, + ) -> Result<(u128, u128), L1GasPriceValidationError> { + let buffer = self.inner.buffer.read().unwrap(); + + if buffer.is_empty() { + return Err(L1GasPriceValidationError::NoDataAvailable { + timestamp, + lag_seconds: self.inner.config.lag_margin_seconds, + }); + } + + let latest = buffer.back().unwrap(); + + if timestamp > latest.timestamp + self.inner.config.max_time_gap_seconds { + return Err(L1GasPriceValidationError::StaleData { + latest_timestamp: latest.timestamp, + requested_timestamp: timestamp, + max_gap: self.inner.config.max_time_gap_seconds, + }); + } + + let target_timestamp = timestamp.saturating_sub(self.inner.config.lag_margin_seconds); + + let last_index = buffer + .iter() + .rposition(|data| data.timestamp <= target_timestamp); + + let last_index = match last_index { + Some(idx) => idx + 1, + None => { + return Err(L1GasPriceValidationError::NoDataAvailable { + timestamp, + lag_seconds: self.inner.config.lag_margin_seconds, + }); + } + }; + + let first_index = last_index.saturating_sub(self.inner.config.blocks_for_mean); + let actual_count = last_index - first_index; + + if actual_count == 0 { + return Err(L1GasPriceValidationError::NoDataAvailable { + timestamp, + lag_seconds: self.inner.config.lag_margin_seconds, + }); + } + + if actual_count < self.inner.config.blocks_for_mean { + tracing::debug!( + "Using {} blocks for average (configured: {})", + actual_count, + self.inner.config.blocks_for_mean + ); + } + + let mut base_fee_sum: u128 = 0; + let mut blob_fee_sum: u128 = 0; + + for data in buffer.range(first_index..last_index) { + base_fee_sum = base_fee_sum.saturating_add(data.base_fee_per_gas); + blob_fee_sum = blob_fee_sum.saturating_add(data.blob_fee); + } + + let avg_base_fee = base_fee_sum / actual_count as u128; + let avg_blob_fee = blob_fee_sum / actual_count as u128; + + Ok((avg_base_fee, avg_blob_fee)) + } + + /// Validates proposed gas prices against the rolling average. + pub fn validate( + &self, + timestamp: u64, + proposed_base_fee: u128, + proposed_blob_fee: u128, + ) -> L1GasPriceValidationResult { + if !self.is_ready() { + return L1GasPriceValidationResult::InsufficientData; + } + + let (avg_base_fee, avg_blob_fee) = match self.get_average_prices(timestamp) { + Ok(prices) => prices, + // NoDataAvailable and StaleData mean we can't compute an average for + // this timestamp, not that the proposal is wrong. Treat as insufficient data. + Err(e) => { + tracing::debug!(error = %e, "L1 gas price data unavailable for validation"); + return L1GasPriceValidationResult::InsufficientData; + } + }; + + let base_fee_deviation = deviation_pct(proposed_base_fee, avg_base_fee); + if base_fee_deviation > self.inner.config.tolerance { + return L1GasPriceValidationResult::Invalid( + L1GasPriceValidationError::BaseFeeDeviation { + proposed: proposed_base_fee, + expected: avg_base_fee, + deviation_pct: base_fee_deviation * 100.0, + tolerance_pct: self.inner.config.tolerance * 100.0, + }, + ); + } + + let blob_fee_deviation = deviation_pct(proposed_blob_fee, avg_blob_fee); + if blob_fee_deviation > self.inner.config.tolerance { + return L1GasPriceValidationResult::Invalid( + L1GasPriceValidationError::BlobFeeDeviation { + proposed: proposed_blob_fee, + expected: avg_blob_fee, + deviation_pct: blob_fee_deviation * 100.0, + tolerance_pct: self.inner.config.tolerance * 100.0, + }, + ); + } + + L1GasPriceValidationResult::Valid + } +} + +#[cfg(test)] +mod tests { + use super::*; + + /// Generates a deterministic block hash from a block number. + fn hash_for(n: u64) -> L1BlockHash { + let mut bytes = [0u8; 32]; + bytes[24..32].copy_from_slice(&n.to_be_bytes()); + L1BlockHash::from(bytes) + } + + /// Creates a test sample with deterministic hashes that form a valid chain. + fn sample(block_num: u64, timestamp: u64, base_fee: u128, blob_fee: u128) -> L1GasPriceData { + L1GasPriceData { + block_number: L1BlockNumber::new_or_panic(block_num), + block_hash: hash_for(block_num), + parent_hash: hash_for(block_num.wrapping_sub(1)), + timestamp, + base_fee_per_gas: base_fee, + blob_fee, + } + } + + #[test] + fn test_provider_sample_management() { + let provider = L1GasPriceProvider::new(L1GasPriceConfig::default()); + assert!(!provider.is_ready()); + assert!(matches!( + provider.validate(1000, 100, 100), + L1GasPriceValidationResult::InsufficientData + )); + + provider.add_sample(sample(100, 1000, 100, 10)).unwrap(); + provider.add_sample(sample(101, 1012, 110, 11)).unwrap(); + assert_eq!(provider.sample_count(), 2); + + assert!(matches!( + provider.add_sample(sample(105, 1060, 150, 15)), + Err(AddSampleError::Gap { .. }) + )); + + let small_provider = L1GasPriceProvider::new(L1GasPriceConfig { + storage_limit: 3, + ..Default::default() + }); + for i in 0..5 { + small_provider + .add_sample(sample(i, i * 12, 100, 10)) + .unwrap(); + } + assert_eq!(small_provider.sample_count(), 3); + assert_eq!( + small_provider.latest_block_number(), + Some(L1BlockNumber::new_or_panic(4)) + ); + } + + #[test] + fn test_gap_detection() { + let provider = L1GasPriceProvider::new(L1GasPriceConfig::default()); + + // Add block 10 first + provider.add_sample(sample(10, 100, 100, 10)).unwrap(); + + // Now add block 15 and expect the error + let err = provider.add_sample(sample(15, 160, 100, 10)).unwrap_err(); + match err { + AddSampleError::Gap { expected, actual } => { + assert_eq!(expected, L1BlockNumber::new_or_panic(11)); + assert_eq!(actual, L1BlockNumber::new_or_panic(15)); + } + other => panic!("Expected Gap, got {other:?}"), + } + } + + #[test] + fn test_reorg_detection() { + let provider = L1GasPriceProvider::new(L1GasPriceConfig::default()); + + // Add block 10 first + provider.add_sample(sample(10, 100, 100, 10)).unwrap(); + + // Now add block 11 with a parent hash that doesn't match block 10's hash + let mut bad_block = sample(11, 112, 100, 10); + bad_block.parent_hash = L1BlockHash::from([0xFFu8; 32]); + + assert!(matches!( + provider.add_sample(bad_block), + Err(AddSampleError::Reorg { .. }) + )); + } + + #[test] + fn test_clear() { + let provider = L1GasPriceProvider::new(L1GasPriceConfig::default()); + provider.add_sample(sample(10, 100, 100, 10)).unwrap(); + provider.add_sample(sample(11, 112, 100, 10)).unwrap(); + assert_eq!(provider.sample_count(), 2); + + provider.clear(); + assert_eq!(provider.sample_count(), 0); + assert!(!provider.is_ready()); + + // Can add from a completely different block number after clear + provider.add_sample(sample(500, 6000, 200, 20)).unwrap(); + assert_eq!(provider.sample_count(), 1); + } + + #[test] + fn test_rolling_average_with_lag() { + let config = L1GasPriceConfig { + storage_limit: 100, + blocks_for_mean: 2, + lag_margin_seconds: 24, + max_time_gap_seconds: 1000, + tolerance: 0.20, + }; + let provider = L1GasPriceProvider::new(config); + + provider.add_sample(sample(0, 100, 100, 10)).unwrap(); + provider.add_sample(sample(1, 112, 200, 20)).unwrap(); + provider.add_sample(sample(2, 124, 300, 30)).unwrap(); + provider.add_sample(sample(3, 136, 400, 40)).unwrap(); + + let (avg_base, avg_blob) = provider.get_average_prices(136).unwrap(); + assert_eq!(avg_base, 150); + assert_eq!(avg_blob, 15); + } + + #[test] + fn test_validation() { + let config = L1GasPriceConfig { + storage_limit: 100, + blocks_for_mean: 3, + lag_margin_seconds: 0, + max_time_gap_seconds: 100, + tolerance: 0.20, + }; + let provider = L1GasPriceProvider::new(config); + + provider.add_sample(sample(0, 100, 100, 10)).unwrap(); + provider.add_sample(sample(1, 112, 100, 10)).unwrap(); + provider.add_sample(sample(2, 124, 100, 10)).unwrap(); + + assert!(matches!( + provider.validate(124, 100, 10), + L1GasPriceValidationResult::Valid + )); + assert!(matches!( + provider.validate(124, 115, 11), + L1GasPriceValidationResult::Valid + )); + + assert!(matches!( + provider.validate(124, 130, 10), + L1GasPriceValidationResult::Invalid(L1GasPriceValidationError::BaseFeeDeviation { .. }) + )); + + assert!(matches!( + provider.validate(300, 100, 10), + L1GasPriceValidationResult::InsufficientData + )); + } +} diff --git a/crates/gas-price/src/l1_to_fri.rs b/crates/gas-price/src/l1_to_fri.rs new file mode 100644 index 0000000000..349540fb0d --- /dev/null +++ b/crates/gas-price/src/l1_to_fri.rs @@ -0,0 +1,224 @@ +//! L1 to FRI Conversion Validation +//! +//! Validates that L1 gas prices converted to FRI are consistent between +//! proposer and validator. + +use std::sync::Arc; + +use super::deviation_pct; +use super::l1::L1GasPriceProvider; +use super::oracle::EthToFriOracle; + +/// Configuration for L1-to-FRI price validation. +#[derive(Debug, Clone)] +pub struct L1ToFriValidationConfig { + /// Maximum allowed deviation between validator's and proposer's FRI prices. + /// Default: 0.10 (10%) + pub max_fri_deviation: f64, +} + +impl Default for L1ToFriValidationConfig { + fn default() -> Self { + Self { + max_fri_deviation: 0.10, + } + } +} + +/// Result of L1-to-FRI price validation. +#[derive(Debug)] +pub enum L1ToFriValidationResult { + /// Prices are within acceptable margin. + Valid, + /// FRI price deviation exceeds tolerance. + InvalidFriDeviation { + proposed_fri: u128, + expected_fri: u128, + deviation_pct: f64, + }, + /// Insufficient data to perform validation. + InsufficientData, +} + +/// Validates L1 gas prices converted to FRI. +/// +/// Compares proposer's FRI prices against validator's independently computed +/// FRI prices. Allows up to 10% deviation to account for timing differences +/// in rate fetching. +pub struct L1ToFriValidator { + oracle: Arc, + l1_gas_provider: L1GasPriceProvider, + config: L1ToFriValidationConfig, +} + +impl L1ToFriValidator { + pub fn new( + oracle: Arc, + l1_gas_provider: L1GasPriceProvider, + config: L1ToFriValidationConfig, + ) -> Self { + Self { + oracle, + l1_gas_provider, + config, + } + } + + /// Validates L1 gas prices in FRI terms. + /// + /// Proposer provides their FRI prices directly. Validator independently + /// fetches Wei prices and uses oracle for conversion. If the resulting + /// FRI prices differ by more than 10%, validation fails. + pub fn validate( + &self, + timestamp: u64, + proposed_l1_gas_price_fri: u128, + proposed_l1_data_gas_price_fri: u128, + ) -> L1ToFriValidationResult { + let (validator_base_fee_wei, validator_blob_fee_wei) = + match self.l1_gas_provider.get_average_prices(timestamp) { + Ok(prices) => prices, + Err(e) => { + tracing::debug!(timestamp, error = %e, "L1-to-FRI: no L1 gas price data"); + return L1ToFriValidationResult::InsufficientData; + } + }; + + let validator_base_fee_fri = match self.oracle.wei_to_fri(validator_base_fee_wei, timestamp) + { + Ok(fri) => fri, + Err(e) => { + tracing::debug!(timestamp, error = %e, "L1-to-FRI: oracle unavailable"); + return L1ToFriValidationResult::InsufficientData; + } + }; + let validator_blob_fee_fri = match self.oracle.wei_to_fri(validator_blob_fee_wei, timestamp) + { + Ok(fri) => fri, + Err(e) => { + tracing::debug!(timestamp, error = %e, "L1-to-FRI: oracle unavailable"); + return L1ToFriValidationResult::InsufficientData; + } + }; + + let base_deviation = deviation_pct(proposed_l1_gas_price_fri, validator_base_fee_fri); + if base_deviation > self.config.max_fri_deviation { + tracing::debug!( + proposed_l1_gas_price_fri, + validator_base_fee_fri, + deviation_pct = base_deviation * 100.0, + "L1-to-FRI base fee deviation exceeds tolerance" + ); + return L1ToFriValidationResult::InvalidFriDeviation { + proposed_fri: proposed_l1_gas_price_fri, + expected_fri: validator_base_fee_fri, + deviation_pct: base_deviation * 100.0, + }; + } + + let blob_deviation = deviation_pct(proposed_l1_data_gas_price_fri, validator_blob_fee_fri); + if blob_deviation > self.config.max_fri_deviation { + tracing::debug!( + proposed_l1_data_gas_price_fri, + validator_blob_fee_fri, + deviation_pct = blob_deviation * 100.0, + "L1-to-FRI blob fee deviation exceeds tolerance" + ); + return L1ToFriValidationResult::InvalidFriDeviation { + proposed_fri: proposed_l1_data_gas_price_fri, + expected_fri: validator_blob_fee_fri, + deviation_pct: blob_deviation * 100.0, + }; + } + + L1ToFriValidationResult::Valid + } +} + +#[cfg(test)] +mod tests { + use pathfinder_common::{L1BlockHash, L1BlockNumber}; + use pathfinder_ethereum::L1GasPriceData; + + use super::*; + use crate::l1::L1GasPriceConfig; + use crate::oracle::MockEthToFriOracle; + + fn sample(block_num: u64, timestamp: u64, base_fee: u128, blob_fee: u128) -> L1GasPriceData { + let mut hash_bytes = [0u8; 32]; + hash_bytes[24..32].copy_from_slice(&block_num.to_be_bytes()); + let mut parent_bytes = [0u8; 32]; + parent_bytes[24..32].copy_from_slice(&block_num.wrapping_sub(1).to_be_bytes()); + L1GasPriceData { + block_number: L1BlockNumber::new_or_panic(block_num), + block_hash: L1BlockHash::from(hash_bytes), + parent_hash: L1BlockHash::from(parent_bytes), + timestamp, + base_fee_per_gas: base_fee, + blob_fee, + } + } + + fn make_provider_with_samples() -> L1GasPriceProvider { + let config = L1GasPriceConfig { + storage_limit: 100, + blocks_for_mean: 3, + lag_margin_seconds: 0, + max_time_gap_seconds: 1000, + tolerance: 0.20, + }; + let provider = L1GasPriceProvider::new(config); + provider.add_sample(sample(0, 100, 1000, 100)).unwrap(); + provider.add_sample(sample(1, 112, 1000, 100)).unwrap(); + provider.add_sample(sample(2, 124, 1000, 100)).unwrap(); + provider + } + + #[test] + fn test_fri_validation_valid_cases() { + let mut mock = MockEthToFriOracle::new(); + mock.expect_wei_to_fri().returning(|wei, _| Ok(wei * 2)); + let v = L1ToFriValidator::new( + Arc::new(mock), + make_provider_with_samples(), + L1ToFriValidationConfig::default(), + ); + + // Proposer's FRI prices: 1000 wei * 2 = 2000 fri, 100 wei * 2 = 200 fri + assert!(matches!( + v.validate(124, 2000, 200), + L1ToFriValidationResult::Valid + )); + } + + #[test] + fn test_fri_validation_error_cases() { + let mut mock = MockEthToFriOracle::new(); + mock.expect_wei_to_fri().returning(|wei, _| Ok(wei * 2)); + let v = L1ToFriValidator::new( + Arc::new(mock), + make_provider_with_samples(), + L1ToFriValidationConfig::default(), + ); + + // Proposer's FRI prices are 50% higher than expected (3000 vs 2000) + assert!(matches!( + v.validate(124, 3000, 300), + L1ToFriValidationResult::InvalidFriDeviation { .. } + )); + + let mut mock = MockEthToFriOracle::new(); + mock.expect_wei_to_fri().returning(|_, ts| { + Err(crate::oracle::EthToFriOracleError::Unavailable { timestamp: ts }) + }); + let v = L1ToFriValidator::new( + Arc::new(mock), + make_provider_with_samples(), + L1ToFriValidationConfig::default(), + ); + assert!(matches!( + v.validate(124, 2000, 200), + L1ToFriValidationResult::InsufficientData + )); + } +} diff --git a/crates/gas-price/src/l2.rs b/crates/gas-price/src/l2.rs new file mode 100644 index 0000000000..e808daf2bd --- /dev/null +++ b/crates/gas-price/src/l2.rs @@ -0,0 +1,397 @@ +//! L2 Gas Price Validation +//! +//! Implements Starknet's L2 gas price adjustment formula, which is inspired by +//! EIP-1559 but includes Starknet-specific behavior. The formula is ported +//! from Apollo's `fee_market` module. + +use std::cmp::{max, min}; +use std::sync::{Arc, RwLock}; + +use pathfinder_common::StarknetVersion; + +/// Protocol constants for the L2 gas price adjustment formula. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct L2GasPriceConstants { + pub gas_price_max_change_denominator: u128, + pub gas_target: u128, + pub max_block_size: u128, + pub min_gas_price: u128, +} + +impl L2GasPriceConstants { + /// L2 gas price constants for Starknet versions before v0.14.1. + const PRE_0_14_1: Self = Self { + gas_price_max_change_denominator: 48, + gas_target: 3_200_000_000, + max_block_size: 4_000_000_000, + min_gas_price: 3_000_000_000, + }; + + /// L2 gas price constants for Starknet v0.14.1 and later. + const POST_0_14_1: Self = Self { + gas_price_max_change_denominator: 48, + gas_target: 4_000_000_000, + max_block_size: 5_000_000_000, + min_gas_price: 8_000_000_000, + }; + + /// Returns the L2 gas price constants for the given Starknet version. + pub fn for_version(version: StarknetVersion) -> Self { + if version >= StarknetVersion::V_0_14_1 { + Self::POST_0_14_1 + } else { + Self::PRE_0_14_1 + } + } +} + +/// Denominator for the maximum gas price increase per block when price is below +/// the minimum. Each block can increase by at most 1/333 (~0.3%) of the current +/// price. +const MIN_GAS_PRICE_INCREASE_DENOMINATOR: u128 = 333; + +/// Calculate the base gas price for the next block using Starknet's +/// EIP-1559-inspired adjustment formula. +/// +/// The `min_gas_price` parameter is separate from `constants` because Apollo +/// supports height-based min price overrides. For now we use the versioned +/// constant, but the signature allows future extension. +pub fn calculate_next_base_gas_price( + price: u128, + gas_used: u128, + min_gas_price: u128, + constants: &L2GasPriceConstants, +) -> u128 { + // If the current price is below the minimum, apply a gradual adjustment. + // Increases by at most 1/333 per block, capped at min_gas_price. + if price < min_gas_price { + let max_increase = price / MIN_GAS_PRICE_INCREASE_DENOMINATOR; + let adjusted = price + max_increase; + return min(adjusted, min_gas_price); + } + + let gas_target = constants.gas_target; + let gas_delta = gas_used.abs_diff(gas_target); + + // price * gas_delta fits in u128 for realistic values + // (price ~10^10, gas_delta ~5*10^9, product ~5*10^19). + let numerator = match price.checked_mul(gas_delta) { + Some(n) => n, + None => { + // Fallback for extreme values: apply maximum possible change. + // Note: Apollo uses U256 to avoid this entirely; for u128 this + // will only trigger with super large prices (>~10^28). + if gas_used > gas_target { + return price.saturating_add(price / constants.gas_price_max_change_denominator); + } else { + let max_decrease = price / constants.gas_price_max_change_denominator; + return max(price.saturating_sub(max_decrease), min_gas_price); + } + } + }; + + let denominator = gas_target * constants.gas_price_max_change_denominator; + let price_change = numerator / denominator; + + let adjusted = if gas_used > gas_target { + price + price_change + } else { + price - price_change + }; + + max(adjusted, min_gas_price) +} + +/// Result of validating an L2 gas price proposal. +#[derive(Debug, PartialEq, Eq)] +pub enum L2GasPriceValidationResult { + Valid, + Invalid { proposed: u128, expected: u128 }, + InsufficientData, +} + +/// Tracks the expected L2 gas price for the next block. +#[derive(Clone, Debug)] +pub struct L2GasPriceProvider { + inner: Arc>>, +} + +impl Default for L2GasPriceProvider { + fn default() -> Self { + Self { + inner: Arc::new(RwLock::new(None)), + } + } +} + +impl L2GasPriceProvider { + pub fn new() -> Self { + Self::default() + } + + /// Compute and store the expected L2 gas price for the next block, given + /// the current block's price and gas consumption. + pub fn update_after_block( + &self, + l2_gas_price_fri: u128, + l2_gas_consumed: u128, + constants: &L2GasPriceConstants, + ) { + let next_price = calculate_next_base_gas_price( + l2_gas_price_fri, + l2_gas_consumed, + constants.min_gas_price, + constants, + ); + let mut state = self.inner.write().unwrap(); + *state = Some(next_price); + } + + /// Validate a proposed L2 gas price against the expected value. + pub fn validate(&self, proposed: u128) -> L2GasPriceValidationResult { + let state = self.inner.read().unwrap(); + match *state { + None => L2GasPriceValidationResult::InsufficientData, + Some(expected) if proposed == expected => L2GasPriceValidationResult::Valid, + Some(expected) => L2GasPriceValidationResult::Invalid { proposed, expected }, + } + } +} + +#[cfg(test)] +mod tests { + use std::path::PathBuf; + use std::time::Duration; + + use anyhow::Context; + use rstest::rstest; + use serde::Deserialize; + + use super::*; + + const TEST_PRICE: u128 = 30_000_000_000; + + /// Apollo versioned constants as they are defined in the + /// `apollo_consensus_orchestrator` crate. + #[derive(Debug, Deserialize)] + struct ApolloVersionedConstants { + gas_price_max_change_denominator: u128, + gas_target: starknet_api::execution_resources::GasAmount, + max_block_size: starknet_api::execution_resources::GasAmount, + min_gas_price: starknet_api::block::GasPrice, + } + + #[rstest] + #[case::v0_13_2(StarknetVersion::V_0_13_2)] + #[case::v0_13_4(StarknetVersion::V_0_13_4)] + #[case::v0_14_0(StarknetVersion::V_0_14_0)] + #[case::v0_14_1(StarknetVersion::V_0_14_1)] + #[tokio::test] + async fn l2_gas_constants_match_with_apollo(#[case] version: StarknetVersion) { + let pathfinder_c = L2GasPriceConstants::for_version(version); + let blockifier_tag = blockifier_tag_from_manifest().unwrap(); + let apollo_c = fetch_apollo_constants_for(version, blockifier_tag) + .await + .unwrap(); + + assert_eq!( + pathfinder_c.gas_price_max_change_denominator, + apollo_c.gas_price_max_change_denominator + ); + assert_eq!(pathfinder_c.gas_target, apollo_c.gas_target.0 as u128); + assert_eq!( + pathfinder_c.max_block_size, + apollo_c.max_block_size.0 as u128 + ); + assert_eq!(pathfinder_c.min_gas_price, apollo_c.min_gas_price.0); + } + + // Parses the workspace Cargo.toml to find the version of blockifier, which is + // then used to construct the blockier tag in the form of + // `blockifier-v{version-from-workspace-Cargo-toml}`. + fn blockifier_tag_from_manifest() -> anyhow::Result { + let manifest_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("..") + .join("..") + .join("Cargo.toml"); + let manifest = cargo_toml::Manifest::from_path(manifest_path) + .context("loading workspace Cargo.toml")?; + let workspace = manifest + .workspace + .context("getting workspace dependencies")?; + let blockifier_version = workspace + .dependencies + .get("blockifier") + .and_then(|dep| dep.try_req().ok()) + .context("parsing blockifier version from Cargo.toml")?; + let blockifier_tag = format!("blockifier-v{blockifier_version}"); + Ok(blockifier_tag) + } + + async fn fetch_apollo_constants_for( + version: StarknetVersion, + blockifier_tag: impl AsRef, + ) -> anyhow::Result { + // Apollo's constants are only versioned starting from v0.14.0, so for older + // versions (which are expected to be same as v0.14.0) we fetch the v0.14.0 + // constants. + let version = if version < StarknetVersion::V_0_14_0 { + StarknetVersion::V_0_14_0 + } else { + version + }; + + let url = format!( + "https://raw.githubusercontent.com/starkware-libs/sequencer/\ + refs/tags/{}/\ + crates/apollo_consensus_orchestrator/resources/orchestrator_versioned_constants_{}_{}_{}.json", + blockifier_tag.as_ref(), + version.major(), + version.minor(), + version.patch() + ); + let client = reqwest::Client::builder() + .timeout(Duration::from_secs(30)) + .build() + .context("building http client")?; + let resp = client + .get(url) + .send() + .await + .context("fetching apollo constants")?; + resp.error_for_status() + .context("http get failed")? + .json() + .await + .context("parsing apollo constants") + } + + // Apollo test vectors (from fee_market/test.rs) + + #[test] + fn high_congestion() { + let c = L2GasPriceConstants::POST_0_14_1; + let gas_used = c.max_block_size * 3 / 4; + let gas_target = c.max_block_size / 2; + let constants = L2GasPriceConstants { gas_target, ..c }; + let result = + calculate_next_base_gas_price(TEST_PRICE, gas_used, c.min_gas_price, &constants); + assert_eq!(result, 30_312_500_000); + } + + #[test] + fn low_congestion() { + let c = L2GasPriceConstants::POST_0_14_1; + let gas_used = c.max_block_size / 4; + let gas_target = c.max_block_size / 2; + let constants = L2GasPriceConstants { gas_target, ..c }; + let result = + calculate_next_base_gas_price(TEST_PRICE, gas_used, c.min_gas_price, &constants); + assert_eq!(result, 29_687_500_000); + } + + #[test] + fn gas_used_zero_max_decrease() { + let c = L2GasPriceConstants::POST_0_14_1; + let result = calculate_next_base_gas_price(TEST_PRICE, 0, c.min_gas_price, &c); + let expected = TEST_PRICE - TEST_PRICE / 48; + assert_eq!(result, expected); + } + + #[test] + fn floor_clamping() { + let c = L2GasPriceConstants::POST_0_14_1; + let price = c.min_gas_price + 1; + let result = calculate_next_base_gas_price(price, 0, c.min_gas_price, &c); + assert_eq!(result, c.min_gas_price); + } + + #[test] + fn overflow_does_not_panic() { + let c = L2GasPriceConstants::POST_0_14_1; + let gas_target = c.max_block_size / 2; + let constants = L2GasPriceConstants { gas_target, ..c }; + let price = u64::MAX as u128; + let _ = calculate_next_base_gas_price(price, 0, c.min_gas_price, &constants); + } + + #[test] + fn below_minimum_gradual_increase() { + let min_gas_price = 20_000_000_000u128; + let price = 10_000_000_000u128; + let constants = L2GasPriceConstants { + min_gas_price, + ..L2GasPriceConstants::POST_0_14_1 + }; + let result = calculate_next_base_gas_price(price, 1000, min_gas_price, &constants); + + let max_increase = price / MIN_GAS_PRICE_INCREASE_DENOMINATOR; + let expected = price + max_increase; + assert_eq!(result, expected); + assert!(result > price); + assert!(result < min_gas_price); + } + + #[test] + fn below_minimum_caps_near_threshold() { + let min_gas_price = 10_000_000_000u128; + let price = 9_971_000_000u128; + let constants = L2GasPriceConstants { + min_gas_price, + ..L2GasPriceConstants::POST_0_14_1 + }; + let result = calculate_next_base_gas_price(price, 1000, min_gas_price, &constants); + assert_eq!(result, min_gas_price); + } + + // After a block is finalized, the provider uses its price and gas + // consumption to compute the expected price for the next block. + // Validating a proposal with that exact price succeeds. + #[test] + fn provider_accepts_correct_price() { + let provider = L2GasPriceProvider::new(); + let c = L2GasPriceConstants::POST_0_14_1; + + let block_gas_price = TEST_PRICE; + let block_gas_consumed = c.gas_target; // at target → no change + provider.update_after_block(block_gas_price, block_gas_consumed, &c); + + let next_block_proposed_price = TEST_PRICE; + assert_eq!( + provider.validate(next_block_proposed_price), + L2GasPriceValidationResult::Valid + ); + } + + // A proposal whose price doesn't match the expected value is rejected. + #[test] + fn provider_rejects_wrong_price() { + let provider = L2GasPriceProvider::new(); + let c = L2GasPriceConstants::POST_0_14_1; + + let block_price = TEST_PRICE; + let block_gas_consumed = c.gas_target; + provider.update_after_block(block_price, block_gas_consumed, &c); + + let wrong_price = 999; + assert_eq!( + provider.validate(wrong_price), + L2GasPriceValidationResult::Invalid { + proposed: wrong_price, + expected: TEST_PRICE, + } + ); + } + + // Before any block is processed the provider has no expected price, so + // validation returns InsufficientData (allows proposals through during + // cold start). + #[test] + fn provider_without_data_does_not_reject() { + let provider = L2GasPriceProvider::new(); + assert_eq!( + provider.validate(100), + L2GasPriceValidationResult::InsufficientData + ); + } +} diff --git a/crates/gas-price/src/lib.rs b/crates/gas-price/src/lib.rs new file mode 100644 index 0000000000..b943ce2f88 --- /dev/null +++ b/crates/gas-price/src/lib.rs @@ -0,0 +1,29 @@ +//! Gas Price Validation +//! +//! This module provides gas price validation for consensus proposals + +mod l1; +mod l1_to_fri; +mod l2; +mod oracle; + +pub use l1::{ + AddSampleError, + L1GasPriceConfig, + L1GasPriceProvider, + L1GasPriceValidationError, + L1GasPriceValidationResult, +}; +pub use l1_to_fri::{L1ToFriValidationConfig, L1ToFriValidationResult, L1ToFriValidator}; +pub use l2::{L2GasPriceConstants, L2GasPriceProvider, L2GasPriceValidationResult}; +pub use oracle::{EthToFriOracle, EthToFriOracleError}; + +/// Calculates the percentage deviation between two values. +/// Returns 0.0 for equal values, 0.10 for 10% deviation, etc. +pub(crate) fn deviation_pct(proposed: u128, expected: u128) -> f64 { + match (expected, proposed) { + (0, 0) => 0.0, + (0, _) => f64::INFINITY, + _ => (proposed as f64 - expected as f64).abs() / expected as f64, + } +} diff --git a/crates/gas-price/src/oracle.rs b/crates/gas-price/src/oracle.rs new file mode 100644 index 0000000000..086be91b81 --- /dev/null +++ b/crates/gas-price/src/oracle.rs @@ -0,0 +1,30 @@ +//! ETH to FRI (STRK) Oracle +//! +//! Converts L1 gas prices from Wei to FRI for consensus validation. +//! +//! - **Wei**: Smallest ETH unit (1 ETH = 10^18 Wei) +//! - **FRI**: Smallest STRK unit (1 STRK = 10^18 FRI) + +use std::sync::Arc; + +/// Error types for oracle operations. +#[derive(Debug, thiserror::Error)] +pub enum EthToFriOracleError { + #[error("Conversion unavailable for timestamp {timestamp}")] + Unavailable { timestamp: u64 }, + + #[error("Oracle query failed: {0}")] + QueryFailed(String), +} + +/// Converts Wei amounts to FRI using current ETH/STRK exchange rate. +#[cfg_attr(test, mockall::automock)] +pub trait EthToFriOracle: Send + Sync { + fn wei_to_fri(&self, wei: u128, timestamp: u64) -> Result; +} + +impl EthToFriOracle for Arc { + fn wei_to_fri(&self, wei: u128, timestamp: u64) -> Result { + self.as_ref().wei_to_fri(wei, timestamp) + } +} diff --git a/crates/gateway-client/Cargo.toml b/crates/gateway-client/Cargo.toml index 8dd88b70d9..d854f1472c 100644 --- a/crates/gateway-client/Cargo.toml +++ b/crates/gateway-client/Cargo.toml @@ -10,6 +10,7 @@ rust-version = { workspace = true } anyhow = { workspace = true } async-trait = { workspace = true } bytes = { workspace = true } +flate2 = { workspace = true } futures = { workspace = true } metrics = { workspace = true } mockall = { workspace = true } @@ -26,20 +27,19 @@ serde_json = { workspace = true, features = [ starknet-gateway-types = { path = "../gateway-types" } tokio = { workspace = true, features = ["macros", "test-util"] } tracing = { workspace = true } + [dev-dependencies] assert_matches = { workspace = true } base64 = { workspace = true } fake = { workspace = true } -flate2 = { workspace = true } -gateway-test-utils = { path = "../gateway-test-utils" } -httpmock = { workspace = true } pathfinder-crypto = { path = "../crypto" } pretty_assertions_sorted = { workspace = true } reqwest = { workspace = true, features = ["json"] } starknet-gateway-test-fixtures = { path = "../gateway-test-fixtures" } test-log = { workspace = true, features = ["trace"] } tracing-subscriber = { workspace = true } -warp = { workspace = true } +warp = { workspace = true, features = ["compression-gzip"] } +wiremock = { workspace = true } [[test]] name = "integration-metrics" diff --git a/crates/gateway-client/src/builder.rs b/crates/gateway-client/src/builder.rs index 98f33327a6..231fec98af 100644 --- a/crates/gateway-client/src/builder.rs +++ b/crates/gateway-client/src/builder.rs @@ -12,7 +12,10 @@ //! 3. [Params](stage::Params) where you select the retry behavior. //! 4. [Final](stage::Final) where you select the REST operation type, which //! is then executed. +use std::io::Write as _; + use pathfinder_common::{ClassHash, TransactionHash}; +use reqwest::header::CONTENT_ENCODING; use starknet_gateway_types::error::SequencerError; use crate::metrics::{with_metrics, BlockTag, RequestMetadata}; @@ -21,11 +24,11 @@ use crate::BlockId; const X_THROTTLING_BYPASS: &str = "X-Throttling-Bypass"; /// A Sequencer Request builder. -pub struct Request<'a, S: RequestState> { +pub struct Request { state: S, url: reqwest::Url, api_key: Option, - client: &'a reqwest::Client, + client: reqwest::Client, } pub mod stage { @@ -66,6 +69,7 @@ pub mod stage { pub struct Final { pub meta: RequestMetadata, pub retry: bool, + pub compress: bool, } impl super::RequestState for Init {} @@ -74,13 +78,13 @@ pub mod stage { impl super::RequestState for Final {} } -impl<'a> Request<'a, stage::Init> { +impl Request { /// Initialize a [Request] builder. pub fn builder( - client: &'a reqwest::Client, + client: reqwest::Client, url: reqwest::Url, api_key: Option, - ) -> Request<'a, stage::Method> { + ) -> Request { Request { url, client, @@ -116,7 +120,7 @@ mod request_macros { /// The generated method delegates the call to `method`. macro_rules! method { ($name:ident) => { - pub fn $name(self) -> Request<'a, stage::Params> { + pub fn $name(self) -> Request { self.method(stringify!($name)) } }; @@ -134,10 +138,13 @@ mod request_macros { }; } - pub(super) use {method, method_defs, method_names, methods}; + pub(super) use method; + pub(super) use method_defs; + pub(super) use method_names; + pub(super) use methods; } -impl<'a> Request<'a, stage::Method> { +impl Request { request_macros::methods!( add_transaction, get_block, @@ -154,7 +161,7 @@ impl<'a> Request<'a, stage::Method> { ); /// Appends the given method to the request url. - fn method(mut self, method: &'static str) -> Request<'a, stage::Params> { + fn method(mut self, method: &'static str) -> Request { self.url .path_segments_mut() .expect("Base URL is valid") @@ -171,7 +178,7 @@ impl<'a> Request<'a, stage::Method> { } } -impl<'a> Request<'a, stage::Params> { +impl Request { pub fn block>(self, block: B) -> Self { use std::borrow::Cow; @@ -217,20 +224,33 @@ impl<'a> Request<'a, stage::Params> { } /// Sets the request retry behavior. - pub fn retry(self, retry: bool) -> Request<'a, stage::Final> { + pub fn retry(self, retry: bool) -> Request { + let Self { + state, + url, + api_key, + client, + } = self; + Request { - url: self.url, - client: self.client, - api_key: self.api_key, + url, + client, + api_key, state: stage::Final { - meta: self.state.meta, + meta: state.meta, retry, + compress: false, }, } } } -impl Request<'_, stage::Final> { +impl Request { + pub fn compress(mut self, compress: bool) -> Self { + self.state.compress = compress; + self + } + /// Sends the Sequencer request as a REST `GET` operation and parses the /// response into `T`. pub async fn get(self) -> Result @@ -240,7 +260,7 @@ impl Request<'_, stage::Final> { async fn send_request( url: reqwest::Url, api_key: Option, - client: &reqwest::Client, + client: reqwest::Client, meta: RequestMetadata, ) -> Result { with_metrics(meta, async move { @@ -263,7 +283,7 @@ impl Request<'_, stage::Final> { || async { let url = self.url.clone(); let api_key = self.api_key.clone(); - send_request(url, api_key, self.client, self.state.meta).await + send_request(url, api_key, self.client.clone(), self.state.meta).await }, retry_condition, ) @@ -278,7 +298,7 @@ impl Request<'_, stage::Final> { async fn get_as_bytes_inner( url: reqwest::Url, api_key: Option, - client: &reqwest::Client, + client: reqwest::Client, meta: RequestMetadata, ) -> Result { with_metrics(meta, async { @@ -303,7 +323,7 @@ impl Request<'_, stage::Final> { || async { let url = self.url.clone(); let api_key = self.api_key.clone(); - get_as_bytes_inner(url, api_key, self.client, self.state.meta).await + get_as_bytes_inner(url, api_key, self.client.clone(), self.state.meta).await }, retry_condition, ) @@ -312,11 +332,12 @@ impl Request<'_, stage::Final> { } } - /// Sends the Sequencer request as a REST `POST` operation, in addition to - /// the specified JSON body. The response is parsed as type `T`. + /// Sends a POST request to a Starknet gateway with a given JSON body. + /// Compresses body with gzip if the `compress` flag was set. + /// Finally, the response is parsed as type `T`. /// - /// Can specify an optional timeout which will override the client's - /// timeout. + /// The caller can specify an optional timeout which will override the + /// client's timeout. pub async fn post_with_json( self, json: &J, @@ -329,9 +350,10 @@ impl Request<'_, stage::Final> { async fn post_with_json_inner( url: reqwest::Url, api_key: Option, - client: &reqwest::Client, + client: reqwest::Client, meta: RequestMetadata, json: &J, + compress: bool, timeout: Option, ) -> Result where @@ -348,8 +370,28 @@ impl Request<'_, stage::Final> { Some(timeout) => request.timeout(timeout), None => request, }; - let response = request.json(json).send().await?; - parse::(response).await + if compress { + let body = serde_json::to_vec(json) + .map_err(|e| SequencerError::GatewayRequestCreationError(e.into()))?; + let mut encoder = flate2::write::GzEncoder::new( + Vec::with_capacity(body.len() / 2), + flate2::Compression::default(), + ); + encoder + .write_all(&body) + .map_err(|e| SequencerError::GatewayRequestCreationError(e.into()))?; + let compressed_body = encoder + .finish() + .map_err(|e| SequencerError::GatewayRequestCreationError(e.into()))?; + let request = request + .header(CONTENT_ENCODING, "gzip") + .body(compressed_body); + let response = request.send().await?; + parse::(response).await + } else { + let response = request.json(json).send().await?; + parse::(response).await + } }) .await } @@ -362,6 +404,7 @@ impl Request<'_, stage::Final> { self.client, self.state.meta, json, + self.state.compress, timeout, ) .await @@ -375,9 +418,10 @@ impl Request<'_, stage::Final> { post_with_json_inner( url, api_key, - self.client, + self.client.clone(), self.state.meta, json, + self.state.compress, timeout, ) .await @@ -483,6 +527,9 @@ fn retry_condition(e: &SequencerError) -> bool { true } SequencerError::StarknetError(_) => false, + // Failing to serialize or compress the request body is not retryable, + // because it is fully deterministic based on the input or allocated resources + SequencerError::GatewayRequestCreationError(_) => false, SequencerError::InvalidStarknetErrorVariant => { error!(reason=?e, "Request failed, retrying"); true @@ -685,31 +732,28 @@ mod tests { mod api_key_is_set_when_configured { use fake::{Fake, Faker}; - use httpmock::prelude::*; - use httpmock::Mock; use serde_json::json; + use wiremock::{matchers, Mock, MockServer, ResponseTemplate}; use crate::Client; - async fn setup_with_fake_api_key(server: &MockServer) -> (Mock<'_>, Client) { + async fn setup_with_fake_api_key(server: &MockServer) -> Client { let api_key = Faker.fake::(); - let mock = server.mock(|when, then| { - when.any_request().header("X-Throttling-Bypass", &api_key); - then.status(200).json_body(json!({})); - }); + Mock::given(matchers::header("X-Throttling-Bypass", &api_key)) + .respond_with(ResponseTemplate::new(200).set_body_json(json!({}))) + .mount(server) + .await; - let client = Client::for_test(server.base_url().parse().unwrap()) + Client::for_test(server.uri().parse().unwrap()) .unwrap() - .with_api_key(Some(api_key.clone())); - - (mock, client) + .with_api_key(Some(api_key)) } #[tokio::test] async fn get() -> anyhow::Result<()> { - let server = MockServer::start_async().await; - let (mock, client) = setup_with_fake_api_key(&server).await; + let server = MockServer::start().await; + let client = setup_with_fake_api_key(&server).await; let _: serde_json::Value = client .clone() @@ -727,15 +771,16 @@ mod tests { .get() .await?; - mock.assert_hits(2); + let requests = server.received_requests().await.unwrap(); + assert_eq!(requests.len(), 2); Ok(()) } #[tokio::test] async fn get_as_bytes() -> anyhow::Result<()> { - let server = MockServer::start_async().await; - let (mock, client) = setup_with_fake_api_key(&server).await; + let server = MockServer::start().await; + let client = setup_with_fake_api_key(&server).await; let _: bytes::Bytes = client .clone() @@ -753,15 +798,16 @@ mod tests { .get_as_bytes() .await?; - mock.assert_hits(2); + let requests = server.received_requests().await.unwrap(); + assert_eq!(requests.len(), 2); Ok(()) } #[tokio::test] async fn post_with_json() -> anyhow::Result<()> { - let server = MockServer::start_async().await; - let (mock, client) = setup_with_fake_api_key(&server).await; + let server = MockServer::start().await; + let client = setup_with_fake_api_key(&server).await; let _: serde_json::Value = client .clone() @@ -779,9 +825,123 @@ mod tests { .post_with_json(&json!({}), None) .await?; - mock.assert_hits(2); + let requests = server.received_requests().await.unwrap(); + assert_eq!(requests.len(), 2); Ok(()) } } + + mod body_is_compressed_if_and_only_if_compress_flag_is_set { + use std::io::Write as _; + + use pathfinder_common::{ContractAddress, Proof, ProofFactElem, Tip, TransactionNonce}; + use serde_json::json; + use starknet_gateway_types::reply::DataAvailabilityMode; + use starknet_gateway_types::request::add_transaction::{ + AddTransaction, + InvokeFunction, + InvokeFunctionV3, + }; + use wiremock::{matchers, Mock, MockServer, ResponseTemplate}; + + use crate::{Client, GatewayApi}; + + fn v3_empty_proof() -> InvokeFunctionV3 { + InvokeFunctionV3 { + signature: vec![], + nonce: TransactionNonce::ZERO, + nonce_data_availability_mode: DataAvailabilityMode::L1, + fee_data_availability_mode: DataAvailabilityMode::L1, + resource_bounds: Default::default(), + tip: Tip(0), + paymaster_data: vec![], + sender_address: ContractAddress::ZERO, + calldata: vec![], + account_deployment_data: vec![], + proof_facts: vec![], + proof: Proof(vec![]), + } + } + + fn v3_non_empty_proof() -> InvokeFunctionV3 { + InvokeFunctionV3 { + proof: Proof(vec![0; 100]), + proof_facts: vec![ProofFactElem::ZERO], + ..v3_empty_proof() + } + } + + fn uncompressed_body() -> String { + serde_json::to_string(&AddTransaction::Invoke( + InvokeFunction::V3(v3_empty_proof()), + )) + .unwrap() + } + + fn compressed_body() -> Vec { + let body = serde_json::to_vec(&AddTransaction::Invoke(InvokeFunction::V3( + v3_non_empty_proof(), + ))) + .unwrap(); + let mut encoder = + flate2::write::GzEncoder::new(Vec::new(), flate2::Compression::default()); + encoder.write_all(&body).unwrap(); + encoder.finish().unwrap() + } + + fn valid_response() -> serde_json::Value { + json!({ + "code": "TRANSACTION_RECEIVED", + "transaction_hash": "0x0", + }) + } + + async fn expect_compressed(server: &MockServer) -> Client { + Mock::given(matchers::method("POST")) + .and(matchers::path("/gateway/add_transaction")) + .and(matchers::header("Content-Encoding", "gzip")) + .and(matchers::body_bytes(compressed_body())) + .respond_with(ResponseTemplate::new(200).set_body_json(valid_response())) + .mount(server) + .await; + + Client::for_test(server.uri().parse().unwrap()) + .unwrap() + .with_compress_gateway_requests(true) + } + + async fn expect_uncompressed(server: &MockServer) -> Client { + Mock::given(matchers::method("POST")) + .and(matchers::path("/gateway/add_transaction")) + .and(matchers::body_string(uncompressed_body())) + .respond_with(ResponseTemplate::new(200).set_body_json(valid_response())) + .mount(server) + .await; + + Client::for_test(server.uri().parse().unwrap()) + .unwrap() + .with_compress_gateway_requests(true) + } + + #[tokio::test] + async fn add_invoke_transaction_compresses_body_if_proof_not_empty() { + let server = MockServer::start().await; + let client = expect_compressed(&server).await; + client + .add_invoke_transaction(InvokeFunction::V3(v3_non_empty_proof())) + .await + .unwrap(); + } + + #[tokio::test] + async fn add_invoke_transaction_plaintext_json_if_proof_empty() { + let server = MockServer::start().await; + let client = expect_uncompressed(&server).await; + client + .add_invoke_transaction(InvokeFunction::V3(v3_empty_proof())) + .await + .unwrap(); + } + } } diff --git a/crates/gateway-client/src/lib.rs b/crates/gateway-client/src/lib.rs index 155d751a62..fe6ec8f5d9 100644 --- a/crates/gateway-client/src/lib.rs +++ b/crates/gateway-client/src/lib.rs @@ -1,12 +1,18 @@ //! Starknet L2 sequencer client. use std::fmt::Debug; use std::result::Result; +use std::sync::{Arc, RwLock}; use std::time::Duration; +use anyhow::Context; +use pathfinder_common::class_definition::{ + SerializedCasmDefinition, + SerializedOpaqueClassDefinition, +}; use pathfinder_common::prelude::*; use reqwest::Url; use starknet_gateway_types::error::SequencerError; -use starknet_gateway_types::reply::{PendingBlock, PreConfirmedBlock}; +use starknet_gateway_types::reply::{PreConfirmedBlock, PreLatestBlock}; use starknet_gateway_types::trace::{BlockTrace, TransactionTrace}; use starknet_gateway_types::{reply, request}; @@ -48,7 +54,7 @@ impl From for BlockId { #[mockall::automock] #[async_trait::async_trait] pub trait GatewayApi: Sync { - async fn pending_block(&self) -> Result<(PendingBlock, StateUpdate), SequencerError> { + async fn pending_block(&self) -> Result<(PreLatestBlock, StateUpdate), SequencerError> { unimplemented!(); } @@ -66,17 +72,19 @@ pub trait GatewayApi: Sync { unimplemented!() } - async fn pending_class_by_hash( + async fn class_by_hash( &self, class_hash: ClassHash, - ) -> Result { + block: BlockId, + ) -> Result { unimplemented!(); } - async fn pending_casm_by_hash( + async fn casm_by_hash( &self, class_hash: ClassHash, - ) -> Result { + block: BlockId, + ) -> Result { unimplemented!(); } @@ -148,8 +156,8 @@ pub trait GatewayApi: Sync { } #[async_trait::async_trait] -impl GatewayApi for std::sync::Arc { - async fn pending_block(&self) -> Result<(PendingBlock, StateUpdate), SequencerError> { +impl GatewayApi for Arc { + async fn pending_block(&self) -> Result<(PreLatestBlock, StateUpdate), SequencerError> { self.as_ref().pending_block().await } @@ -167,18 +175,20 @@ impl GatewayApi for std::sync::Arc { self.as_ref().block_header(block).await } - async fn pending_class_by_hash( + async fn class_by_hash( &self, class_hash: ClassHash, - ) -> Result { - self.as_ref().pending_class_by_hash(class_hash).await + block: BlockId, + ) -> Result { + self.as_ref().class_by_hash(class_hash, block).await } - async fn pending_casm_by_hash( + async fn casm_by_hash( &self, class_hash: ClassHash, - ) -> Result { - self.as_ref().pending_casm_by_hash(class_hash).await + block: BlockId, + ) -> Result { + self.as_ref().casm_by_hash(class_hash, block).await } async fn transaction_status( @@ -253,20 +263,42 @@ impl GatewayApi for std::sync::Arc { /// where `N` is the consecutive retry iteration number `{1, 2, ...}`. #[derive(Debug, Clone)] pub struct Client { - /// This client is internally refcounted - inner: reqwest::Client, + /// Shared, replaceable HTTP client. All [Clone]s of this [Client] share the + /// same instance, so calling [Client::refresh] on any clone replaces the + /// underlying connection pool for every holder. + inner: Arc>, + + /// Timeout used when constructing the `reqwest` client. Stored so that + /// [Client::refresh] can re-create the client with the same settings. + timeout: Duration, + /// Starknet gateway URL. gateway: Url, + /// Starknet feeder gateway URL. feeder_gateway: Url, + /// Whether __read only__ requests should be retried, defaults to __true__ /// for production. /// Use [disable_retry_for_tests](Client::disable_retry_for_tests) to /// disable retry logic for all __read only__ requests when testing. retry: bool, + /// Api key added to each request as a value for 'X-Throttling-Bypass' /// header. api_key: Option, + + /// Compress requests to the gateway if they contain a non empty proof. + /// Otherwise do not compress. + compress_gateway_requests: bool, + + /// Resolved addresses for gateway URL. + /// Used to detect DNS changes and refresh the HTTP client accordingly. + resolved_gateway_addresses: Arc>>, + + /// Resolved addresses for feeder gateway URL. + /// Used to detect DNS changes and refresh the HTTP client accordingly. + resolved_feeder_gateway_addresses: Arc>>, } impl Client { @@ -311,18 +343,99 @@ impl Client { pub fn with_urls(gateway: Url, feeder_gateway: Url, timeout: Duration) -> anyhow::Result { metrics::register(); + let resolved_gateway_addresses = + resolve_hosts(&gateway).context("Resolving gateway URL")?; + let resolved_feeder_gateway_addresses = + resolve_hosts(&feeder_gateway).context("Resolving feeder gateway URL")?; + Ok(Self { - inner: reqwest::Client::builder() - .timeout(timeout) - .user_agent(pathfinder_version::USER_AGENT) - .build()?, + inner: std::sync::Arc::new(std::sync::RwLock::new( + reqwest::Client::builder() + .timeout(timeout) + .user_agent(pathfinder_version::USER_AGENT) + .gzip(true) + .deflate(true) + .build()?, + )), + timeout, gateway, feeder_gateway, retry: true, api_key: None, + compress_gateway_requests: true, + resolved_gateway_addresses: Arc::new(RwLock::new(resolved_gateway_addresses)), + resolved_feeder_gateway_addresses: Arc::new(RwLock::new( + resolved_feeder_gateway_addresses, + )), }) } + /// Resolve the gateway and feeder gateway URLs and refresh the HTTP client + /// if the resolved addresses have changed. + /// + /// Replaces the underlying `reqwest` HTTP client with a freshly built one, + /// using the same timeout and settings as the original. Because all + /// [Clone]s of this [Client] share the same [`std::sync::Arc`], the new + /// connection pool becomes visible to every holder immediately. + /// + /// Intended to be called periodically to enforce reconnection to the + /// gateway and feeder gateway if their IP addresses change due to DNS + /// updates, without needing to restart the entire application. + pub fn refresh(&self) -> anyhow::Result<()> { + // Resolve the gateway URLs to detect any DNS changes. If the resolved addresses + // have changed, we refresh the HTTP client to ensure that new connections are + // made to the correct addresses. + let new_resolved_gateway_addresses = + resolve_hosts(&self.gateway).context("Resolving gateway URL")?; + let new_resolved_feeder_gateway_addresses = + resolve_hosts(&self.feeder_gateway).context("Resolving feeder gateway URL")?; + + tracing::trace!( + ?new_resolved_feeder_gateway_addresses, + ?new_resolved_gateway_addresses, + "Resolved gateway addresses" + ); + + let mut resolved_addresses_changed = false; + + let mut old_resolved_gateway_addresses = self + .resolved_gateway_addresses + .write() + .expect("gateway client resolved addresses lock is not poisoned"); + if old_resolved_gateway_addresses.as_slice() != new_resolved_gateway_addresses.as_slice() { + tracing::debug!(old=?old_resolved_gateway_addresses, new=?new_resolved_gateway_addresses, "Gateway URL resolved to new addresses, refreshing HTTP client"); + *old_resolved_gateway_addresses = new_resolved_gateway_addresses; + resolved_addresses_changed = true; + } + + let mut old_resolved_feeder_gateway_addresses = self + .resolved_feeder_gateway_addresses + .write() + .expect("gateway client resolved addresses lock is not poisoned"); + if old_resolved_feeder_gateway_addresses.as_slice() + != new_resolved_feeder_gateway_addresses.as_slice() + { + tracing::debug!(old=?old_resolved_feeder_gateway_addresses, new=?new_resolved_feeder_gateway_addresses, "Feeder Gateway URL resolved to new addresses, refreshing HTTP client"); + *old_resolved_feeder_gateway_addresses = new_resolved_feeder_gateway_addresses; + resolved_addresses_changed = true; + } + + if resolved_addresses_changed { + let new_inner = reqwest::Client::builder() + .timeout(self.timeout) + .user_agent(pathfinder_version::USER_AGENT) + .gzip(true) + .deflate(true) + .build()?; + *self + .inner + .write() + .expect("gateway client inner lock is not poisoned") = new_inner; + } + + Ok(()) + } + /// Sets the api key to be used for each request as a value for /// 'X-Throttling-Bypass' header. pub fn with_api_key(mut self, api_key: Option) -> Self { @@ -330,6 +443,13 @@ impl Client { self } + /// Sets whether to compress requests to the gateway if they contain a + /// non-empty proof. + pub fn with_compress_gateway_requests(mut self, compress: bool) -> Self { + self.compress_gateway_requests = compress; + self + } + /// Use this method to disable retry logic for all __non write__ requests /// when testing. pub fn disable_retry_for_tests(self) -> Self { @@ -339,26 +459,43 @@ impl Client { } } - fn gateway_request(&self) -> builder::Request<'_, builder::stage::Method> { - builder::Request::builder(&self.inner, self.gateway.clone(), self.api_key.clone()) + fn gateway_request(&self) -> builder::Request { + let client = self + .inner + .read() + .expect("gateway client inner lock is not poisoned") + .clone(); + builder::Request::builder(client, self.gateway.clone(), self.api_key.clone()) } - fn feeder_gateway_request(&self) -> builder::Request<'_, builder::stage::Method> { - builder::Request::builder( - &self.inner, - self.feeder_gateway.clone(), - self.api_key.clone(), - ) + fn feeder_gateway_request(&self) -> builder::Request { + let client = self + .inner + .read() + .expect("gateway client inner lock is not poisoned") + .clone(); + builder::Request::builder(client, self.feeder_gateway.clone(), self.api_key.clone()) } } +/// Resolve the URL to addresses. +fn resolve_hosts(url: &Url) -> anyhow::Result> { + let addresses = url + .socket_addrs(|| None) + .context("Resolving host name in URL")? + .into_iter() + .map(|socket_addr| socket_addr.ip()) + .collect(); + Ok(addresses) +} + #[async_trait::async_trait] impl GatewayApi for Client { #[tracing::instrument(skip(self))] - async fn pending_block(&self) -> Result<(PendingBlock, StateUpdate), SequencerError> { + async fn pending_block(&self) -> Result<(PreLatestBlock, StateUpdate), SequencerError> { #[derive(Clone, Debug, serde::Deserialize)] struct Dto { - pub block: PendingBlock, + pub block: PreLatestBlock, pub state_update: starknet_gateway_types::reply::StateUpdate, } @@ -419,32 +556,38 @@ impl GatewayApi for Client { /// Gets class for a particular class hash. #[tracing::instrument(skip(self))] - async fn pending_class_by_hash( + async fn class_by_hash( &self, class_hash: ClassHash, - ) -> Result { - self.feeder_gateway_request() + block: BlockId, + ) -> Result { + let bytes = self + .feeder_gateway_request() .get_class_by_hash() .class_hash(class_hash) - .block(BlockId::Pending) + .block(block) .retry(self.retry) .get_as_bytes() - .await + .await?; + Ok(SerializedOpaqueClassDefinition::from_bytes(bytes.to_vec())) } /// Gets CASM for a particular class hash. #[tracing::instrument(skip(self))] - async fn pending_casm_by_hash( + async fn casm_by_hash( &self, class_hash: ClassHash, - ) -> Result { - self.feeder_gateway_request() + block: BlockId, + ) -> Result { + let bytes = self + .feeder_gateway_request() .get_compiled_class_by_class_hash() .class_hash(class_hash) - .block(BlockId::Pending) + .block(block) .retry(self.retry) .get_as_bytes() - .await + .await?; + Ok(SerializedCasmDefinition::from_bytes(bytes.to_vec())) } /// Gets transaction status by transaction hash. @@ -513,6 +656,9 @@ impl GatewayApi for Client { self.gateway_request() .add_transaction() .retry(false) + // We only check the proof and ignore the proof_facts field because these proof_facts + // are a summary derived from the proof itself anyway. + .compress(self.compress_gateway_requests && !invoke.is_proof_empty()) .post_with_json( &request::add_transaction::AddTransaction::Invoke(invoke), Some(Duration::MAX), @@ -608,16 +754,21 @@ impl GatewayApi for Client { #[cfg(test)] mod tests { use assert_matches::assert_matches; - use gateway_test_utils::*; use pathfinder_common::macro_prelude::*; use pathfinder_common::prelude::*; use pathfinder_crypto::Felt; use starknet_gateway_test_fixtures::testnet::*; - use starknet_gateway_types::error::KnownStarknetErrorCode; + use starknet_gateway_types::error::{test_response_from, KnownStarknetErrorCode}; use starknet_gateway_types::request::add_transaction::ContractDefinition; + use wiremock::{matchers, Mock, MockServer, ResponseTemplate}; use super::*; + fn response_body_from(code: KnownStarknetErrorCode) -> serde_json::Value { + let (s, _) = test_response_from(code); + serde_json::from_str(&s).unwrap() + } + #[test_log::test(tokio::test)] async fn client_user_agent() { use std::convert::Infallible; @@ -662,17 +813,20 @@ mod tests { #[tokio::test] async fn invalid_hash() { - let (_jh, url) = setup([( - format!( - "/feeder_gateway/get_transaction_status?transactionHash={}", - INVALID_TX_HASH.0.to_hex_str() - ), - ( - r#"{"tx_status": "NOT_RECEIVED", "finality_status": "NOT_RECEIVED", "execution_status": null}"#, - 200, - ), - )]); - let client = Client::for_test(url).unwrap(); + let server = MockServer::start().await; + Mock::given(matchers::path("/feeder_gateway/get_transaction_status")) + .and(matchers::query_param( + "transactionHash", + INVALID_TX_HASH.0.to_hex_str(), + )) + .respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({ + "tx_status": "NOT_RECEIVED", + "finality_status": "NOT_RECEIVED", + "execution_status": serde_json::Value::Null, + }))) + .mount(&server) + .await; + let client = Client::for_test(server.uri().parse().unwrap()).unwrap(); assert_eq!( client .transaction_status(INVALID_TX_HASH) @@ -686,22 +840,20 @@ mod tests { #[tokio::test] async fn eth_contract_addresses() { - let (_jh, url) = setup([( - "/feeder_gateway/get_contract_addresses", - ( - r#"{ - "FriStatementContract": "0x55d049b4C82807808E76e61a08C6764bbf2ffB55", - "GpsStatementVerifier": "0x2046B966994Adcb88D83f467a41b75d64C2a619F", - "MemoryPageFactRegistry": "0x5628E75245Cc69eCA0994F0449F4dDA9FbB5Ec6a", - "MerkleStatementContract": "0xd414f8f535D4a96cB00fFC8E85160b353cb7809c", - "Starknet": "0x4737c0c1B4D5b1A687B42610DdabEE781152359c", - "strk_l2_token_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", - "eth_l2_token_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7" - }"#, - 200, - ), - )]); - let client = Client::for_test(url).unwrap(); + let server = MockServer::start().await; + Mock::given(matchers::path("/feeder_gateway/get_contract_addresses")) + .respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({ + "FriStatementContract": "0x55d049b4C82807808E76e61a08C6764bbf2ffB55", + "GpsStatementVerifier": "0x2046B966994Adcb88D83f467a41b75d64C2a619F", + "MemoryPageFactRegistry": "0x5628E75245Cc69eCA0994F0449F4dDA9FbB5Ec6a", + "MerkleStatementContract": "0xd414f8f535D4a96cB00fFC8E85160b353cb7809c", + "Starknet": "0x4737c0c1B4D5b1A687B42610DdabEE781152359c", + "strk_l2_token_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "eth_l2_token_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7" + }))) + .mount(&server) + .await; + let client = Client::for_test(server.uri().parse().unwrap()).unwrap(); client.eth_contract_addresses().await.unwrap(); } @@ -762,11 +914,15 @@ mod tests { async fn v0_is_deprecated() { use request::add_transaction::{InvokeFunction, InvokeFunctionV0V1}; - let (_jh, url) = setup([( - "/gateway/add_transaction", - response_from(KnownStarknetErrorCode::DeprecatedTransaction), - )]); - let client = Client::for_test(url).unwrap(); + let server = MockServer::start().await; + Mock::given(matchers::method("POST")) + .and(matchers::path("/gateway/add_transaction")) + .respond_with(ResponseTemplate::new(500).set_body_json(response_body_from( + KnownStarknetErrorCode::DeprecatedTransaction, + ))) + .mount(&server) + .await; + let client = Client::for_test(server.uri().parse().unwrap()).unwrap(); let (_, fee, sig, nonce, addr, call) = inputs(); let invoke = InvokeFunction::V0(InvokeFunctionV0V1 { max_fee: fee, @@ -788,14 +944,16 @@ mod tests { async fn successful() { use request::add_transaction::{InvokeFunction, InvokeFunctionV0V1}; - let (_jh, url) = setup([( - "/gateway/add_transaction", - ( - r#"{"code":"TRANSACTION_RECEIVED","transaction_hash":"0x0389DD0629F42176CC8B6C43ACEFC0713D0064ECDFC0470E0FC179F53421A38B"}"#, - 200, - ), - )]); - let client = Client::for_test(url).unwrap(); + let server = MockServer::start().await; + Mock::given(matchers::method("POST")) + .and(matchers::path("/gateway/add_transaction")) + .respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({ + "code": "TRANSACTION_RECEIVED", + "transaction_hash": "0x0389DD0629F42176CC8B6C43ACEFC0713D0064ECDFC0470E0FC179F53421A38B" + }))) + .mount(&server) + .await; + let client = Client::for_test(server.uri().parse().unwrap()).unwrap(); // test with values dumped from `starknet invoke` for a test contract let (_, fee, sig, nonce, addr, call) = inputs(); let invoke = InvokeFunction::V1(InvokeFunctionV0V1 { @@ -820,11 +978,15 @@ mod tests { async fn v0_is_deprecated() { use request::add_transaction::{Declare, DeclareV0V1V2}; - let (_jh, url) = setup([( - "/gateway/add_transaction", - response_from(KnownStarknetErrorCode::DeprecatedTransaction), - )]); - let client = Client::for_test(url).unwrap(); + let server = MockServer::start().await; + Mock::given(matchers::method("POST")) + .and(matchers::path("/gateway/add_transaction")) + .respond_with(ResponseTemplate::new(500).set_body_json(response_body_from( + KnownStarknetErrorCode::DeprecatedTransaction, + ))) + .mount(&server) + .await; + let client = Client::for_test(server.uri().parse().unwrap()).unwrap(); let declare = Declare::V0(DeclareV0V1V2 { version: TransactionVersion::ZERO, @@ -849,16 +1011,17 @@ mod tests { async fn successful_v1() { use request::add_transaction::{Declare, DeclareV0V1V2}; - let (_jh, url) = setup([( - "/gateway/add_transaction", - ( - r#"{"code": "TRANSACTION_RECEIVED", - "transaction_hash": "0x77ccba4df42cf0f74a8eb59a96d7880fae371edca5d000ca5f9985652c8a8ed", - "class_hash": "0x711941b11a8236b8cca42b664e19342ac7300abb1dc44957763cb65877c2708"}"#, - 200, - ), - )]); - let client = Client::for_test(url).unwrap(); + let server = MockServer::start().await; + Mock::given(matchers::method("POST")) + .and(matchers::path("/gateway/add_transaction")) + .respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({ + "code": "TRANSACTION_RECEIVED", + "transaction_hash": "0x77ccba4df42cf0f74a8eb59a96d7880fae371edca5d000ca5f9985652c8a8ed", + "class_hash": "0x711941b11a8236b8cca42b664e19342ac7300abb1dc44957763cb65877c2708" + }))) + .mount(&server) + .await; + let client = Client::for_test(server.uri().parse().unwrap()).unwrap(); let declare = Declare::V1(DeclareV0V1V2 { version: TransactionVersion::ONE, @@ -926,16 +1089,17 @@ mod tests { async fn successful_v2() { use request::add_transaction::{Declare, DeclareV0V1V2}; - let (_jh, url) = setup([( - "/gateway/add_transaction", - ( - r#"{"code": "TRANSACTION_RECEIVED", - "transaction_hash": "0x77ccba4df42cf0f74a8eb59a96d7880fae371edca5d000ca5f9985652c8a8ed", - "class_hash": "0x711941b11a8236b8cca42b664e19342ac7300abb1dc44957763cb65877c2708"}"#, - 200, - ), - )]); - let client = Client::for_test(url).unwrap(); + let server = MockServer::start().await; + Mock::given(matchers::method("POST")) + .and(matchers::path("/gateway/add_transaction")) + .respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({ + "code": "TRANSACTION_RECEIVED", + "transaction_hash": "0x77ccba4df42cf0f74a8eb59a96d7880fae371edca5d000ca5f9985652c8a8ed", + "class_hash": "0x711941b11a8236b8cca42b664e19342ac7300abb1dc44957763cb65877c2708" + }))) + .mount(&server) + .await; + let client = Client::for_test(server.uri().parse().unwrap()).unwrap(); let declare = Declare::V2(DeclareV0V1V2 { version: TransactionVersion::TWO, @@ -1095,18 +1259,19 @@ mod tests { mod block_header { use super::*; - const REPLY: &str = r#"{ - "block_hash": "0x6a2755817d86ade81ed0fea2eaf23d94264e2f25aff43ecb2e5000bf3ec28b7", - "block_number": 9703 - }"#; - #[test_log::test(tokio::test)] async fn success_by_number() { - let (_jh, url) = setup([( - "/feeder_gateway/get_block?blockNumber=9703&headerOnly=true", - (REPLY.to_owned(), 200), - )]); - let client = Client::for_test(url).unwrap(); + let server = MockServer::start().await; + Mock::given(matchers::path("/feeder_gateway/get_block")) + .and(matchers::query_param("blockNumber", "9703")) + .and(matchers::query_param("headerOnly", "true")) + .respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({ + "block_hash": "0x6a2755817d86ade81ed0fea2eaf23d94264e2f25aff43ecb2e5000bf3ec28b7", + "block_number": 9703 + }))) + .mount(&server) + .await; + let client = Client::for_test(server.uri().parse().unwrap()).unwrap(); client .block_header(BlockId::Number(BlockNumber::new_or_panic(9703))) @@ -1116,13 +1281,17 @@ mod tests { #[test_log::test(tokio::test)] async fn success_by_hash() { - let (_jh, url) = setup([( - "/feeder_gateway/get_block?\ - blockHash=0x6a2755817d86ade81ed0fea2eaf23d94264e2f25aff43ecb2e5000bf3ec28b7&\ - headerOnly=true", - (REPLY.to_owned(), 200), - )]); - let client = Client::for_test(url).unwrap(); + let server = MockServer::start().await; + Mock::given(matchers::path("/feeder_gateway/get_block")) + .and(matchers::query_param("blockHash", "0x6a2755817d86ade81ed0fea2eaf23d94264e2f25aff43ecb2e5000bf3ec28b7")) + .and(matchers::query_param("headerOnly", "true")) + .respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({ + "block_hash": "0x6a2755817d86ade81ed0fea2eaf23d94264e2f25aff43ecb2e5000bf3ec28b7", + "block_number": 9703 + }))) + .mount(&server) + .await; + let client = Client::for_test(server.uri().parse().unwrap()).unwrap(); client .block_header( @@ -1138,11 +1307,20 @@ mod tests { #[test_log::test(tokio::test)] async fn block_not_found() { const BLOCK_NUMBER: u64 = 99999999; - let (_jh, url) = setup([( - format!("/feeder_gateway/get_block?blockNumber={BLOCK_NUMBER}&headerOnly=true",), - response_from(KnownStarknetErrorCode::BlockNotFound), - )]); - let client = Client::for_test(url).unwrap(); + let server = MockServer::start().await; + Mock::given(matchers::path("/feeder_gateway/get_block")) + .and(matchers::query_param( + "blockNumber", + BLOCK_NUMBER.to_string(), + )) + .and(matchers::query_param("headerOnly", "true")) + .respond_with( + ResponseTemplate::new(500) + .set_body_json(response_body_from(KnownStarknetErrorCode::BlockNotFound)), + ) + .mount(&server) + .await; + let client = Client::for_test(server.uri().parse().unwrap()).unwrap(); let error = client .block_header(BlockNumber::new_or_panic(BLOCK_NUMBER).into()) .await @@ -1159,25 +1337,32 @@ mod tests { #[test_log::test(tokio::test)] async fn success() { - let (_jh, url) = setup([( - "/feeder_gateway/get_state_update?blockNumber=pending&includeBlock=true", - ( - starknet_gateway_test_fixtures::v0_13_1::state_update_with_block::SEPOLIA_INTEGRATION_PENDING, - 200, - ), - )]); - let client = Client::for_test(url).unwrap(); + let body: serde_json::Value = serde_json::from_str(starknet_gateway_test_fixtures::v0_13_1::state_update_with_block::SEPOLIA_INTEGRATION_PENDING).unwrap(); + let server = MockServer::start().await; + Mock::given(matchers::path("/feeder_gateway/get_state_update")) + .and(matchers::query_param("blockNumber", "pending")) + .and(matchers::query_param("includeBlock", "true")) + .respond_with(ResponseTemplate::new(200).set_body_json(body)) + .mount(&server) + .await; + let client = Client::for_test(server.uri().parse().unwrap()).unwrap(); client.pending_block().await.unwrap(); } #[test_log::test(tokio::test)] async fn block_not_found() { - let (_jh, url) = setup([( - "/feeder_gateway/get_state_update?blockNumber=pending&includeBlock=true", - response_from(KnownStarknetErrorCode::BlockNotFound), - )]); - let client = Client::for_test(url).unwrap(); + let server = MockServer::start().await; + Mock::given(matchers::path("/feeder_gateway/get_state_update")) + .and(matchers::query_param("blockNumber", "pending")) + .and(matchers::query_param("includeBlock", "true")) + .respond_with( + ResponseTemplate::new(500) + .set_body_json(response_body_from(KnownStarknetErrorCode::BlockNotFound)), + ) + .mount(&server) + .await; + let client = Client::for_test(server.uri().parse().unwrap()).unwrap(); let error = client.pending_block().await.unwrap_err(); assert_matches!( error, @@ -1191,14 +1376,15 @@ mod tests { #[test_log::test(tokio::test)] async fn success() { - let (_jh, url) = setup([( - "/feeder_gateway/get_state_update?blockNumber=9703&includeBlock=true", - ( - starknet_gateway_test_fixtures::v0_13_1::state_update_with_block::SEPOLIA_INTEGRATION_NUMBER_9703, - 200, - ), - )]); - let client = Client::for_test(url).unwrap(); + let body: serde_json::Value = serde_json::from_str(starknet_gateway_test_fixtures::v0_13_1::state_update_with_block::SEPOLIA_INTEGRATION_NUMBER_9703).unwrap(); + let server = MockServer::start().await; + Mock::given(matchers::path("/feeder_gateway/get_state_update")) + .and(matchers::query_param("blockNumber", "9703")) + .and(matchers::query_param("includeBlock", "true")) + .respond_with(ResponseTemplate::new(200).set_body_json(body)) + .mount(&server) + .await; + let client = Client::for_test(server.uri().parse().unwrap()).unwrap(); client .state_update_with_block(BlockNumber::new_or_panic(9703)) @@ -1208,14 +1394,35 @@ mod tests { #[test_log::test(tokio::test)] async fn success_0_14_1_with_migrated_compiled_classes() { - let (_jh, url) = setup([( - "/feeder_gateway/get_state_update?blockNumber=3077642&includeBlock=true", - ( - starknet_gateway_test_fixtures::v0_14_1::state_update_with_block::SEPOLIA_INTEGRATION_3077642, - 200, - ), - )]); - let client = Client::for_test(url).unwrap(); + let body: serde_json::Value = serde_json::from_str(starknet_gateway_test_fixtures::v0_14_1::state_update_with_block::SEPOLIA_INTEGRATION_3077642).unwrap(); + let server = MockServer::start().await; + Mock::given(matchers::path("/feeder_gateway/get_state_update")) + .and(matchers::query_param("blockNumber", "3077642")) + .and(matchers::query_param("includeBlock", "true")) + .respond_with(ResponseTemplate::new(200).set_body_json(body)) + .mount(&server) + .await; + let client = Client::for_test(server.uri().parse().unwrap()).unwrap(); + + client + .state_update_with_block(BlockNumber::new_or_panic(3077642)) + .await + .unwrap(); + } + + // FIXME: add a proper fixture once `proof_facts` is available on a public + // chain. + #[test_log::test(tokio::test)] + async fn success_0_14_3_with_invoke_proof_facts() { + let body: serde_json::Value = serde_json::from_str(starknet_gateway_test_fixtures::v0_14_3::state_update_with_block::SEPOLIA_INTEGRATION_FAKE).unwrap(); + let server = MockServer::start().await; + Mock::given(matchers::path("/feeder_gateway/get_state_update")) + .and(matchers::query_param("blockNumber", "3077642")) + .and(matchers::query_param("includeBlock", "true")) + .respond_with(ResponseTemplate::new(200).set_body_json(body)) + .mount(&server) + .await; + let client = Client::for_test(server.uri().parse().unwrap()).unwrap(); client .state_update_with_block(BlockNumber::new_or_panic(3077642)) @@ -1226,13 +1433,20 @@ mod tests { #[test_log::test(tokio::test)] async fn block_not_found() { const BLOCK_NUMBER: u64 = 99999999; - let (_jh, url) = setup([( - format!( - "/feeder_gateway/get_state_update?blockNumber={BLOCK_NUMBER}&includeBlock=true" - ), - response_from(KnownStarknetErrorCode::BlockNotFound), - )]); - let client = Client::for_test(url).unwrap(); + let server = MockServer::start().await; + Mock::given(matchers::path("/feeder_gateway/get_state_update")) + .and(matchers::query_param( + "blockNumber", + BLOCK_NUMBER.to_string(), + )) + .and(matchers::query_param("includeBlock", "true")) + .respond_with( + ResponseTemplate::new(500) + .set_body_json(response_body_from(KnownStarknetErrorCode::BlockNotFound)), + ) + .mount(&server) + .await; + let client = Client::for_test(server.uri().parse().unwrap()).unwrap(); let error = client .state_update_with_block(BlockNumber::new_or_panic(BLOCK_NUMBER)) .await @@ -1249,14 +1463,17 @@ mod tests { #[tokio::test] async fn success() { - let (_jh, url) = setup([( - "/feeder_gateway/get_signature?blockNumber=350000", - ( - starknet_gateway_test_fixtures::v0_13_2::signature::SEPOLIA_INTEGRATION_35748, - 200, - ), - )]); - let client = Client::for_test(url).unwrap(); + let body: serde_json::Value = serde_json::from_str( + starknet_gateway_test_fixtures::v0_13_2::signature::SEPOLIA_INTEGRATION_35748, + ) + .unwrap(); + let server = MockServer::start().await; + Mock::given(matchers::path("/feeder_gateway/get_signature")) + .and(matchers::query_param("blockNumber", "350000")) + .respond_with(ResponseTemplate::new(200).set_body_json(body)) + .mount(&server) + .await; + let client = Client::for_test(server.uri().parse().unwrap()).unwrap(); client .signature(BlockId::Number(BlockNumber::new_or_panic(350000))) @@ -1264,4 +1481,63 @@ mod tests { .unwrap(); } } + + mod gzip_compression { + use warp::Filter; + + use super::*; + + #[test_log::test(tokio::test)] + async fn handles_gzip_compressed_responses() { + // Expected response values + const EXPECTED_BLOCK_NUMBER: u64 = 9703; + const EXPECTED_BLOCK_HASH: &str = + "0x6a2755817d86ade81ed0fea2eaf23d94264e2f25aff43ecb2e5000bf3ec28b7"; + + // Create the JSON response that will be gzip-compressed by the server + let response_json = serde_json::json!({ + "block_hash": EXPECTED_BLOCK_HASH, + "block_number": EXPECTED_BLOCK_NUMBER + }); + + // Create a mock server that returns gzip-compressed responses + // warp's gzip filter will automatically compress the response when the client + // sends Accept-Encoding: gzip (which reqwest does by default) + let server_filter = warp::path("feeder_gateway") + .and(warp::path("get_block")) + .and(warp::query::>()) + .map(move |_| warp::reply::json(&response_json)) + .with(warp::filters::compression::gzip()); + + let (shutdown_tx, shutdown_rx) = tokio::sync::oneshot::channel(); + let (server_addr, server_future) = warp::serve(server_filter) + .bind_with_graceful_shutdown(([127, 0, 0, 1], 0), async { + shutdown_rx.await.ok(); + }); + let server_handle = tokio::spawn(server_future); + + let server_url = Url::parse(&format!("http://{server_addr}")).unwrap(); + let client = Client::for_test(server_url) + .unwrap() + .disable_retry_for_tests(); + + // Make a request (reqwest should automatically decompress the gzip response) + let (actual_block_number, actual_block_hash) = client + .block_header(BlockId::Number(BlockNumber::new_or_panic( + EXPECTED_BLOCK_NUMBER, + ))) + .await + .unwrap(); + + // Verify the response was correctly decompressed and parsed + assert_eq!( + actual_block_number, + BlockNumber::new_or_panic(EXPECTED_BLOCK_NUMBER) + ); + assert_eq!(actual_block_hash, block_hash!(EXPECTED_BLOCK_HASH)); + + shutdown_tx.send(()).unwrap(); + server_handle.await.unwrap(); + } + } } diff --git a/crates/gateway-client/src/metrics.rs b/crates/gateway-client/src/metrics.rs index 647dadee2d..9cb4d2278f 100644 --- a/crates/gateway-client/src/metrics.rs +++ b/crates/gateway-client/src/metrics.rs @@ -30,34 +30,34 @@ pub fn register() { // Requests and failed requests METRICS.iter().for_each(|&name| { // For all methods - Request::<'_, Method>::METHODS.iter().for_each(|&method| { - metrics::register_counter!(name, "method" => method); + Request::::METHODS.iter().for_each(|&method| { + let _ = metrics::counter!(name, "method" => method); }); // For methods that support block tags in metrics methods_with_tags.clone().for_each(|method| { TAGS.iter().for_each(|&tag| { - metrics::register_counter!(name, "method" => method, "tag" => tag); + let _ = metrics::counter!(name, "method" => method, "tag" => tag); }) }) }); // Request latency for all methods - Request::<'_, Method>::METHODS.iter().for_each(|&method| { - metrics::register_histogram!(METRIC_REQUESTS_LATENCY, "method" => method); + Request::::METHODS.iter().for_each(|&method| { + let _ = metrics::histogram!(METRIC_REQUESTS_LATENCY, "method" => method); }); // Failed requests for specific failure reasons REASONS.iter().for_each(|&reason| { // For all methods - Request::<'_, Method>::METHODS.iter().for_each(|&method| { - metrics::register_counter!(METRIC_FAILED_REQUESTS, "method" => method, "reason" => reason); + Request::::METHODS.iter().for_each(|&method| { + let _ = metrics::counter!(METRIC_FAILED_REQUESTS, "method" => method, "reason" => reason); }); // For methods that support block tags in metrics methods_with_tags.clone().for_each(|method| { TAGS.iter().for_each(|&tag| { - metrics::register_counter!(METRIC_FAILED_REQUESTS, "method" => method, "tag" => tag, "reason" => reason); + let _ = metrics::counter!(METRIC_FAILED_REQUESTS, "method" => method, "tag" => tag, "reason" => reason); }) }) }); @@ -138,10 +138,10 @@ pub async fn with_metrics( fn increment(counter_name: &'static str, meta: RequestMetadata) { let method = meta.method; let tag = meta.tag; - metrics::increment_counter!(counter_name, "method" => method); + metrics::counter!(counter_name, "method" => method).increment(1); if let ("get_block" | "get_state_update", Some(tag)) = (method, tag.as_str()) { - metrics::increment_counter!(counter_name, "method" => method, "tag" => tag); + metrics::counter!(counter_name, "method" => method, "tag" => tag).increment(1); } } @@ -150,10 +150,11 @@ pub async fn with_metrics( fn increment_failed(meta: RequestMetadata, reason: &'static str) { let method = meta.method; let tag = meta.tag; - metrics::increment_counter!(METRIC_FAILED_REQUESTS, "method" => method, "reason" => reason); + metrics::counter!(METRIC_FAILED_REQUESTS, "method" => method, "reason" => reason) + .increment(1); if let ("get_block" | "get_state_update", Some(tag)) = (method, tag.as_str()) { - metrics::increment_counter!(METRIC_FAILED_REQUESTS, "method" => method, "tag" => tag, "reason" => reason); + metrics::counter!(METRIC_FAILED_REQUESTS, "method" => method, "tag" => tag, "reason" => reason).increment(1); } } @@ -163,7 +164,8 @@ pub async fn with_metrics( let result = f.await; let elapsed = started.elapsed(); - metrics::histogram!(METRIC_REQUESTS_LATENCY, elapsed, "method" => meta.method); + metrics::histogram!(METRIC_REQUESTS_LATENCY, "method" => meta.method) + .record(elapsed.as_secs_f64()); result.inspect_err(|e| { increment(METRIC_FAILED_REQUESTS, meta); @@ -189,6 +191,7 @@ pub async fn with_metrics( increment_failed(meta, REASON_TIMEOUT); } SequencerError::ReqwestError(_) => {} + SequencerError::GatewayRequestCreationError(_) => {} } }) } diff --git a/crates/gateway-client/tests/metrics.rs b/crates/gateway-client/tests/metrics.rs index ca03bc9937..a0e8bf4b13 100644 --- a/crates/gateway-client/tests/metrics.rs +++ b/crates/gateway-client/tests/metrics.rs @@ -4,49 +4,62 @@ //! cause weird test failures without any obvious clue to what might have caused //! those failures in the first place. -use std::future::Future; +use std::sync::{Arc, Mutex}; use futures::stream::StreamExt; -use gateway_test_utils::{response_from, setup_with_varied_responses}; use pathfinder_common::BlockNumber; use pretty_assertions_sorted::assert_eq; use starknet_gateway_client::{BlockId, Client, GatewayApi}; -use starknet_gateway_types::error::KnownStarknetErrorCode; +use starknet_gateway_types::error::{test_response_from, KnownStarknetErrorCode}; +use wiremock::{matchers, Mock, MockServer, Request, Respond, ResponseTemplate}; + +struct VariedResponse { + counter: Arc>, + responses: Vec<(String, u16)>, +} + +impl VariedResponse { + pub fn new(responses: Vec<(String, u16)>) -> Self { + Self { + counter: Arc::new(Mutex::new(0)), + responses, + } + } +} + +impl Respond for VariedResponse { + fn respond(&self, _request: &Request) -> ResponseTemplate { + let mut counter = self.counter.lock().unwrap(); + if *counter < self.responses.len() { + let rsp_def = &self.responses[*counter]; + *counter += 1; + ResponseTemplate::new(rsp_def.1).set_body_string(rsp_def.0.clone()) + } else { + panic!("{} responses already exhausted", self.responses.len()); + } + } +} #[tokio::test] async fn all_counter_types_including_tags() { - with_method( - "get_block", - |client, x| async move { - let _ = client.block_header(x).await; - }, - ( - r#"{"block_hash": "0x7d328a71faf48c5c3857e99f20a77b18522480956d1cd5bff1ff2df3c8b427b", "block_number": 0}"# - .to_owned(), - 200, - ), - ) - .await; -} + use pathfinder_common::test_utils::metrics::FakeRecorder; -async fn with_method(method_name: &'static str, f: F, response: (String, u16)) -where - F: Fn(Client, BlockId) -> Fut, - Fut: Future, -{ - use pathfinder_common::test_utils::metrics::{FakeRecorder, ScopedRecorderGuard}; + let method_name = "get_block"; + let method_call = |client: Client, x| async move { + let _ = client.block_header(x).await; + }; let recorder = FakeRecorder::new_for(&["get_block"]); let handle = recorder.handle(); // Automatically deregister the recorder - let _guard = ScopedRecorderGuard::new(recorder); + let _guard = metrics::set_default_local_recorder(&recorder); - let responses = [ + let responses = vec![ // Any valid fixture - response, + (r#"{"block_hash": "0x7d328a71faf48c5c3857e99f20a77b18522480956d1cd5bff1ff2df3c8b427b", "block_number": 0}"#.to_owned(), 200), // 1 Starknet error - response_from(KnownStarknetErrorCode::BlockNotFound), + test_response_from(KnownStarknetErrorCode::BlockNotFound), // 2 decode errors (r#"{"not":"valid"}"#.to_owned(), 200), (r#"{"not":"valid, again"}"#.to_owned(), 200), @@ -56,27 +69,34 @@ where ("".to_owned(), 429), ]; - let (_jh, url) = setup_with_varied_responses([ - ( - format!("/feeder_gateway/{method_name}?blockNumber=123&headerOnly=true"), - responses.clone(), - ), - ( - format!("/feeder_gateway/{method_name}?blockNumber=latest&headerOnly=true"), - responses.clone(), - ), - ( - format!("/feeder_gateway/{method_name}?blockNumber=pending&headerOnly=true"), - responses, - ), - ]); - let client = Client::for_test(url).unwrap().disable_retry_for_tests(); + let server = MockServer::start().await; + Mock::given(matchers::path("/feeder_gateway/get_block")) + .and(matchers::query_param("blockNumber", "123")) + .and(matchers::query_param("headerOnly", "true")) + .respond_with(VariedResponse::new(responses.clone())) + .mount(&server) + .await; + Mock::given(matchers::path("/feeder_gateway/get_block")) + .and(matchers::query_param("blockNumber", "latest")) + .and(matchers::query_param("headerOnly", "true")) + .respond_with(VariedResponse::new(responses.clone())) + .mount(&server) + .await; + Mock::given(matchers::path("/feeder_gateway/get_block")) + .and(matchers::query_param("blockNumber", "pending")) + .and(matchers::query_param("headerOnly", "true")) + .respond_with(VariedResponse::new(responses)) + .mount(&server) + .await; + let client = Client::for_test(server.uri().parse().unwrap()) + .unwrap() + .disable_retry_for_tests(); [BlockId::Number(BlockNumber::new_or_panic(123)); 7] .into_iter() .chain([BlockId::Latest; 7].into_iter()) .chain([BlockId::Pending; 7].into_iter()) - .map(|x| f(client.clone(), x)) + .map(|x| method_call(client.clone(), x)) .collect::>() .collect::>() .await; diff --git a/crates/gateway-test-fixtures/fixtures/0.14.3/state_update/sepolia_integration_fake.json b/crates/gateway-test-fixtures/fixtures/0.14.3/state_update/sepolia_integration_fake.json new file mode 100644 index 0000000000..1e64b3a399 --- /dev/null +++ b/crates/gateway-test-fixtures/fixtures/0.14.3/state_update/sepolia_integration_fake.json @@ -0,0 +1,16751 @@ +{ + "block": { + "block_hash": "0x7c6517ec2c503f9fc80ade2df901a1dbe067ab8cfb8c6bf8e7d04a29c1dde0b", + "parent_block_hash": "0x6e9a0066e864c7d32acd0d3e2a8ddc20898fc3677be6f1db198f731640ec37f", + "block_number": 3077642, + "state_root": "0x7e472f4392adc406f482ed52f8f85c5b1c7649d390c259b073b79f5e5adee5c", + "transaction_commitment": "0x2fac878d7a437b75b5b5689102b04d1f8bf8cfbd0bfdae28cdfa8267a7f8dab", + "event_commitment": "0x2b3927e604e09403fd89ed86bed08dd2430905e6afae267ac37dd33dee96fa4", + "receipt_commitment": "0x75741122287ea0ad0bbc28a92f7b1437ff7703f8479dd4a7da0e8a4204c8fb4", + "state_diff_commitment": "0x31dc9b20993d7256c0b407c7f36d9cb77b7d44788b40f40c770785b1ba421c9", + "state_diff_length": 48, + "status": "ACCEPTED_ON_L1", + "l1_da_mode": "BLOB", + "l1_gas_price": { + "price_in_wei": "0x3b9aca00", + "price_in_fri": "0xe8d4a51000" + }, + "l1_data_gas_price": { + "price_in_wei": "0x1", + "price_in_fri": "0x3e8" + }, + "l2_gas_price": { + "price_in_wei": "0x64", + "price_in_fri": "0x186a0" + }, + "transactions": [ + { + "transaction_hash": "0x2d5f54704fa03a419bd8206f4da767c078dfef38ab136ae4e5afcca9e23db0d", + "version": "0x3", + "signature": [ + "0x523b4a71760c79de42ed356079c20ddf1f4eb01b27d364aa60d002bcb2d6cf7", + "0x6cf91d0d70e1c121e3b437c225b647917a312a2bedee1d57987993e102d4766" + ], + "nonce": "0x4d00fa", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x241f3ff573208515225eb136d2132bb89bd593e4c844225ead202a1657cfe64", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION", + "proof_facts": [ + "0xdeadbeef", + "0xcafebabe" + ] + }, + { + "transaction_hash": "0x1bd919403248da3ed5d9f4839d3c53accabbf46824e521a1d8e449d0a5e0b79", + "version": "0x3", + "signature": [ + "0x140fa385c569e1390f6f85074aa5c785160cabd18a21fadb48bdb0c100c0504", + "0x47d7ece822c9a810b8363ad1de2806aa113b6d1e85d4b99b9f546170abf08d1" + ], + "nonce": "0x4d00fb", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x331", + "0x10bf93a08d0f1de17947dee726ba218e194826832da2eba5b00ac0b709e6cc3", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1fb1e6b962a752c7908452fb688da8fb1a10e1a7f31974937a68a0bcd083167", + "version": "0x3", + "signature": [ + "0x17eb4b38314a5b6b63803046877c842e3e084441dd1c903291aa61157e92b93", + "0x6597b204a56047a464e5651c1b90c63b9e93603fc8e333aed9318fb625925f8" + ], + "nonce": "0x4d00fc", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x18f", + "0x66343e25175c72e173765da09e9950831a9d7c31ff9dfbfe0a278aeca6274dd" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5fc4ba7708e32649f75ce8a73433211e6c7498661b859878d088a017f28bd38", + "version": "0x3", + "signature": [ + "0x3f408060cdcbcb4d0bb4de4c335c14970ba4b56ff1a9c16721620756cffd4f0", + "0x2d1f936acd4fbe3222cc6d5ba2ce457c69dbe3533c12039e5b21fe07e5afd08" + ], + "nonce": "0x4d00fd", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x2da691c6ea98b793c80ad0ea4326e30ee6980fe5806cbf07b730e9080bd239f", + "0x3", + "0x541114b6ab7d15ad94f4b926254cef4af78df6676807ded676d7b220bb2235d", + "0x78f0708246cc3c9eba6e196117d5811d43b0af8598e195f47cae9f4fcb6bbc2", + "0x11e74258f2da53cdc5106099a2d4ebb2b68118263fe031deefbabe261bd0f76", + "0x49359142acfeec3dc876fcb5464c63584cd7c905d1127d1dbb0f6e0411b49cf" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x29591c07c917ced4789035fbf42ad34e49477b2bf0167e550512252afa53c44", + "version": "0x3", + "signature": [ + "0x848d4067f4d305d2daaccbfee7228ee1a92f29dec450ed28c2492ce0c33986", + "0x73ad69f383d1b8927f8becfe1697c7b1031d9b4ab4c1185dc9e331b63d559a2" + ], + "nonce": "0x4d00fe", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xb64b2591ab50ee2d0da9ae8edd28739d", + "0xa324e4886cf324abe2d27046555d53c1" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x255be68d67cd61f631460c085dddf2d794b2513d10762902c5ff1661d1b9f26", + "version": "0x3", + "signature": [ + "0x2a7dd0e0dd4e86d8fae980d3a3538db7e17bb41eba92c2c3ee3f6409e730b6b", + "0x4fc93ceb413d74c12973766da0f51d0d5e818a54f0b52c7df278b39f12ce6b8" + ], + "nonce": "0x4d00ff", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x3d3", + "0x4baca172fca51b57f0b0117558458e8a2f91357f9630fbb08039b4ab8259b11", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x43e198ad543d0cff82e4d3f41524cc9722691d8353d298fb010db1f8cdc50fd", + "version": "0x3", + "signature": [ + "0x3c6f7b57c9f984a651ad92fd69e70ea3742ae84cffd6ad06873ca0b78913ffa", + "0x113f887d21bcae43df10e79e4d8e807f09cecbc0f31c9437e88182efa3c718d" + ], + "nonce": "0x4d0100", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x57ceb0f62e632d8e07ba5ad871c5c17b6d92628e420bd99db16fda1fc59ce81", + "0x3", + "0x78c29088e290497c4f26d1c524ab41fca6b9f83630510b79fdefc2be6808ad4", + "0x58daf38835834b28bfcff618f70a06cb6eb54fba222e893cacdfe05fb2b6faa", + "0x2d661e18cbc6550572f02c4f5c79b35e463d104d86a9c6a080d1b9841c61f84", + "0x19c3bbc39fd5cbc382a190f30138e0a779bc8c9f99ffe91368f6b83298dac1a" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4528ced42391594cac7e5febff81a6cdbf04ca6844ebe12533a247ba6dbb23a", + "version": "0x3", + "signature": [ + "0x6f2acdfe5cd52e9bcde4bbad8a3cc6c8e64ca991a7625735991f9d8aab63a32", + "0x1f18d949a59fd1ebaaf0c3de50635f2830a11e3f921b14cd64c5f96cf4b3b19" + ], + "nonce": "0x4d0101", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x39d4e72ab77d7d850e8fb107ecac16692a650718ca0f69e72424816a8cc9372", + "version": "0x3", + "signature": [ + "0x22e2ca66df9c2443532376e71c0589d02690b4dea7ce3a2c46a23e843e1d899", + "0x51c86df853433ba92f936b1a05350f1bf6442b9996a83b4168125571cb0b68b" + ], + "nonce": "0x4d0102", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x6c3f0e47ec84ec17aa57c2b79e9eeb6", + "0x14bca0d44781486ac66664d2001bd50" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x43c372fb2854fc4b7e525c39bfe41982351145417c1955193c1168ad35f47f6", + "version": "0x3", + "signature": [ + "0x6cdd58f0b46e75812d63fe806d82b7c1d5af65c5cf9d49475da7ff3422f8313", + "0x5963c1bcfd8f67ccb7035dc4771c6e8c83f91ce1043be6521e2adc77e9fdbbf" + ], + "nonce": "0x4d0103", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x169f135eddda5ab51886052d777a57f2ea9c162d713691b5e04a6d4ed71d47f", + "0x4", + "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "0x1c444f09fea2df67b2a9aa810f648d8e23902cb9149006a1546a18bcd4855b2", + "0x0", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x2c4", + "0x4ec7529541867a4c17ee33755fd6411502e5266bcf86e72f190ba18088fa564" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7c4947c54416bda234525b40d2d721219c9d1fb922124fd26e80849726c8575", + "version": "0x3", + "signature": [ + "0x32873ae2297cc766840e01d6a9ba1c090c1f19a5b95cd0f9a4a2fd13dd2fb62", + "0x6345353f57630a9d81fe96de234632c1ac0262b45f00d399cb27392239575b3" + ], + "nonce": "0x4d0104", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xf700743717f64ef07217012517db21e", + "0xe2a04dded13b59eeb062d3d8aaea7f60", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2f9433c6fddc301eaf2dc0ed683387d2f8ea2d39096f881d9f57fdfcf4fa1e4", + "version": "0x3", + "signature": [ + "0x47ea609b38f6ebc5ef1a6edd951e05f29de6b3a28dbd772983d4f8c804d8023", + "0xd40a6a761bbd73d14fc203334c32dadae92095b184feb5f1a1fd309bbe765e" + ], + "nonce": "0x4d0105", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x9a39ee16056046a421d9820da11922c4", + "0x150aef85569db2bd3220044b118f12cd", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x4b04ce5169dc3599a621c4b93e01f1c", + "0x23df58bd88a512f13dd102ece6b884c8" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x628e4c573460da14afb676821478cd23a8e13d9db2bf453046f2ebc8060c2da", + "version": "0x3", + "signature": [ + "0x2c46ce640f1d769c1e9aa26ad655adeffdc8f93dd58eb448c78653a4294c489", + "0x66c7d738f5d22ac7557ff6f5ca462abe49cc32f84fa409c67b74e82714adcb0" + ], + "nonce": "0x4d0106", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7a84eddaed207a43d6710bbfcc91b112c959eff3a4fc1280afc59be9c1f355a", + "version": "0x3", + "signature": [ + "0x6590ccdef9a0013552d125983d573e32967f18cce2befaa45b9bf3c66a004c5", + "0x5df013abe888ccb41e9a006c55ab936298a4848816398f3b0a33c23b3c2a517" + ], + "nonce": "0x4d0107", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x333" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xa3046f3f3bed24b3b9c291e9e27166fa55263a7f45b15799f839b4dae5c105", + "version": "0x3", + "signature": [ + "0x7df5e66a8952f77eb4485e4b64e0d38148e6c6af8c6070a3c56bcf767e3c004", + "0x1f4ed7d839c573d60280ffc4029b818ffede123a07a9fe80c86264745fe6161" + ], + "nonce": "0x4d0108", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x62cd9e10069734ecbcfef62cde47de6889b625260ad4016b0b1a45d7bd676a2", + "version": "0x3", + "signature": [ + "0x1e2803f1964d525b89613be9859860a8d8d3f79c8970ef73ab456bfebcbbf78", + "0x5d0a988e361eb62dd977f97847684ae86c5814967f58e72bc6f870f6a433ad6" + ], + "nonce": "0x4d0109", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xb66e547c2389e441dd51e590861c9ff5", + "0x6eb37a7075c91b008e5e49e5e770c2c7", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6be4278c3139e72fd3771aaaef10eaa5be7b6f6363aec249801035bf5581d0a", + "version": "0x3", + "signature": [ + "0x4435b38ffa5933c6391504f349a97f87246ce5ad0e9dba9f798c7f795a8fd68", + "0x54e319cc85f972688d06012036513eb226edd254223e0f3961b05618816f549" + ], + "nonce": "0x4d010a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x2b8", + "0x25c5a466e8713262b43b225c35eb1e87ae570efcc3590b443fa776d383a7ce5", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x275164c2685098b4d843fd4e22c20c947db9f8805e1e226c542757348212449", + "0x3", + "0x3ab7bf641fac93ecc111493fbe276b841514cf4e6cf290a71104526407b2b4b", + "0x40397468f898244863262181920befd444ed09a87f17ab0a6509a1bb90e9876", + "0x23659504490da0164bb499f1168b9072dac6cbb8e0664a4281dcd03129613dc", + "0xec6e881f61d464969a02fce9d0dbfa8eb6d82d896182d498151d993c6ae752" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x471066e4bccadeeb87e76e85208eb258fda728c0b4e96642a177ac61711b4b3", + "version": "0x3", + "signature": [ + "0x4410ad8ca59b1bb89a909c82598795b6bc43a0410e2adfa0016416f9c06c4fa", + "0x36bacda2ad5c074bba6c430a3d051bc1b349c922f0254bb38d27f48508e755d" + ], + "nonce": "0x4d010b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x138277138605981e1df954faa104f5a9", + "0x22dd4907cd2297d10bd1a0912f74325d" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x55f9bdbbe9ba5a3af8699cad62444f8d8b8c378c9c459876843890e06481c13", + "version": "0x3", + "signature": [ + "0x39169e65a1b6e20bc3a04adc1cfbd8d9d760b053c766fc3246a2877b8010419", + "0x25743aa75c6aaa4cef61e63714a6dbdf1e1a66714e0b50da60c537c8f17ae3e" + ], + "nonce": "0x4d010c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x3d", + "0x3a30b01aadd50092a944b38fa42c1df949b403e754576e8d0ccd7f00e9d0223" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3e55f69bab145604f50583b8fb8f28dbc5036a34d3e8ce6b1787ec87d445afd", + "version": "0x3", + "signature": [ + "0xb049f3cbbe9e0e2e281735a63ae76202865ad7a9afe4ca835ad24d90502128", + "0x6db2e7db80ea5a149cc9f6b0e4016e93ab256db66bbe8d8dff6be62fbfd164" + ], + "nonce": "0x4d010d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1266043d904be5fe67b6f31f0706c8f1929630cbe4837358eb7cfa9dd3325cd", + "version": "0x3", + "signature": [ + "0x71e9891bfa4ef5af48ac8bc22414f3785eabd952864721cbc5c00e39ca48ca3", + "0x25beaf2a8eb1033b42bec757dfdd0bdd9c6a8ce19356a45ad232ffecb27830b" + ], + "nonce": "0x4d010e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x315f82e41bea3e9f821499bc218cc71b931292c77279bfeb09e89c46da98c6f", + "version": "0x3", + "signature": [ + "0x54dc8cf7740a79f456ce6064082ca01bee146f046111c2a95e92ae87b5926d2", + "0x5fb6fef6e03984452b0dc94e142f35b245c5731271ac2374c2549a93074b6d1" + ], + "nonce": "0x4d010f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x576741ce2b6469b9850b6d7c3c9e0253", + "0x4de66e181ada76ff2f76109f52697977" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2dfcf3da412080423fed39f1c78bb02b761daf7e30d0099508ba1c8c9ee5860", + "version": "0x3", + "signature": [ + "0x43e5ad36d54e2308e26b2cab42f11f5cfbfaa62adc4805e2eb182b55a150cb", + "0x100eae323e14c92d10763562d731a6611aed9fb47953c95baa43f11de26affa" + ], + "nonce": "0x4d0110", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x41b7d3e2fb7ab639a524ab9dc87d83c477f34e9dd0d045d04ae0e0c79544d3d", + "0x3", + "0x74bf288bcbccb592b056bab596e6bfd0cc7eb9275e0415894aadf74243d6b52", + "0x49e8336ab770c86979be4d34b28df1517cb85d8f65b3f5fb08444f17bfbebd7", + "0x1a78dc60ae953c74f0639aa5b3a9e1cf06104f51654c8f9ab476c997e47ab96", + "0x21339a33ca7f250029eabbe8d68180fc6838208212cfb6945a554db1ae3f90c", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x9a706c04f097e358ecbaaeb24cfa8b14", + "0x43a94bcf7677cc4af98d6ebeaf5b9319" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x58c8c359256d500ee6cb1bdaa7c4d02ba25c227239dd8b443f810f41ff5aa9a", + "version": "0x3", + "signature": [ + "0xcdbf208ce4b18eeedbbda60a70110756b455578656d0690367d58b6b09546f", + "0x651cb1623507135d568e3fca171066074d7af3349f7547352912f741d718a72" + ], + "nonce": "0x4d0111", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x50c8999ced80ef12486df6ffa7f81db1212cdb18805b0dd9f81e4ea0a1eee43", + "version": "0x3", + "signature": [ + "0x37b03f9d00bb52f2ee24565e0305407eb4ded2b842de11908d30c84d3c5e904", + "0x7390f7e7214fdbe0bd9db262cca08472d11f83035191fa5477eab143d8a9e3e" + ], + "nonce": "0x4d0112", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x76200cc7d3cedeb38b72b01ed7e82c14f3d0187c7ee495ef88f77bcb7cfca11", + "0x3", + "0x627053af3536a8619997349d3bf81c45ed4c89341bcd60a7452dfe88ac461a", + "0x3a8fb58d54e383ebfaa5f479e79c178bdb5d99fd81966202abc59612ab63c7d", + "0x78c97ae671e5e542df9a89644bb44c712f7d7fc856ef30c1f7b4e3931a6ea01", + "0x61d098f6dc1962db89dad8450f20738ac38dec841e984bc1d504a80e125d00a" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x394b7afe03c49e5461b686d8c52b86029be783054aa7e8b6d2420b74f251676", + "version": "0x3", + "signature": [ + "0x48e240c2c9d4817b226919a318030d7964d8cb6cf3e12638a16a70d386fdbde", + "0x17eea2737cf06d176a02867fd8de5299ab53cd7f40525d896d8b038e6230833" + ], + "nonce": "0x4d0113", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x1fd5a414d80fbf1cc6804be94b1184ae4229259217432aad0ba6f4ab2982f78", + "0x3", + "0x7294bc4c47ebd4253f1576693f45e5bea3e7a7366174c3c750d1996d51ee4c4", + "0x39a8b46b09527db2ebd9a4d94def5c7a3856084325f1a0cf052cc8d0779d15c", + "0x501deb30ae663e765dd54d258378b06c0a42a126f753634b673d7ff4d0f9a35", + "0x277274dba844383612b500e07fe42cfb99e664ff46aaab1d478085f4cabc0c4" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x519a333f63ded28c9d39770b68d3196449661a9e4d5d1e9b8b75cc6269f33f9", + "version": "0x3", + "signature": [ + "0x45f8618bbd428cc511d35da8c3700b0d9f8aea34ab4105277955bf4f7288e0c", + "0x7e14e1984825a21f5c6ed276443b4e59b383e4115efcc50c7faceca71b615e5" + ], + "nonce": "0x4d0114", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xc5545707b86eda2df70e0cee4e2aa966", + "0x17a2a8a104d81a909f896e71f0d9f7cd", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x1e05a4ff42a63e9577335d3e790a7703", + "0x730e11d457d7faf3058ff807abaae47f" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x35a0ccf953c2d6805e6bfcf6d8d4f1300ffae64979171bde7a03f65ea3b97eb", + "version": "0x3", + "signature": [ + "0x1298d6470915f9394edc521f9dc1a8be807ced743bf1dd683a1b95bae2b8ee5", + "0x623d17c2a5af2952054c239e09bbf809e8f0fc284d17cd270f2d9af748d885b" + ], + "nonce": "0x4d0115", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xf1a230c11ea12a06bc0ab2150b3c838b", + "0x6ab3363cdedcb20e6101a5c2af7fdd94" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x617dc764acf0b98a79a6c32c332a25e543d3cb98cb46a293d92f4d4491ecc7b", + "version": "0x3", + "signature": [ + "0x316155ff3d618fa02aa5e5035e82aec973a08c8ea00845623b794a12e270cae", + "0x34ae6b9ed08cd7d23b9271539c45b24fdd4e82b8a3faa6e34db331435a02c5" + ], + "nonce": "0x4d0116", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x849e9708b8546965c38ed4837448b3f5", + "0xa0d608516dc2d4ae56a34aaf7e4c5e87", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x10ced6c96d1073a78ca1729f5b679837075c3a29327a2ce829e5bd80650b25c", + "version": "0x3", + "signature": [ + "0x6ca5a3a87fe19ebfedfec4c91c39dfd09081f6028f7c6ab4faeed41e26250a9", + "0x3fae8d35dffdf9368e140058a311073f69d029383190126365891c40b8c6f97" + ], + "nonce": "0x4d0117", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1bcc79d1b785ee82e90d78069e1f8c444ae1c68b197291b0431102c021ea17c", + "version": "0x3", + "signature": [ + "0x67edec8ddd7a372c4eba4c8f95a3efa22188308be59dfd0812e0c9ff6eb44cc", + "0x597982f6dc3ac8332ce5cbdd9360108ff8ea1cfe0921a1cdf31c168d558820d" + ], + "nonce": "0x4d0118", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x774e82db304fffe8fc76e655226142db", + "0xd2325fc7e7ec4261c0a68ac5de01ace7" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4e830afaed8677b20c355c02a4bb25e1477190620cf9ffdeae20884f96d634d", + "version": "0x3", + "signature": [ + "0x22aa7defa72984c903f63dfa0fc44aa55c60ec9119692750bbd87558a91bd46", + "0x162b572dd6186f7fc1cf71759dba72bbfbbabbe6165794e3a1c142b9bdc7fe5" + ], + "nonce": "0x4d0119", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x29861e592ac9f417094a1c3178a7d190e1feceb3a1df97f93c2946d435ae77c", + "version": "0x3", + "signature": [ + "0x63eb950a9f51024ad548281c1347dfa1687e4968d368885bab0d0c8727fc674", + "0x517c23bd81c6de85ee6ca612836ac3a839b656134dd046014f7d5810054e2ae" + ], + "nonce": "0x4d011a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x24a4d16026ca3a14274645bb5f2642e4833bebba74bb6223374aa89cfbbb591", + "0x3", + "0x7ed8fe3a856e99355f8fc62abb7ea52b60c04acc87bd91f2ad7691d67e9fa7", + "0x168b137ee6ad08cf97ca45eb03ede30b664b7eee35b1db359d2bf23839e412f", + "0x1a4670e4184d04e55ef8fbb38d875bbbf1bb38acd79e50af84608f8af19802d", + "0x5e08fc2e8a071b93dc5952c13e96a0fabdfcc68485e54d9537d960c1e8ea132" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x374cb830a9562c948279d570242fe6bb500adfaa353e32d4484f00a6cd59e67", + "version": "0x3", + "signature": [ + "0x7435c60efecd9aab94804ee328575cf87ca3989830fc2683e2569cb3d56fe02", + "0x527cd6088fff8d43f9dfba61d572ac0470e0c20844d0dce1230f26d02606c1a" + ], + "nonce": "0x4d011b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x17da35ce4ed77e22e3b9149fd965dba57351a6c29f588a7d245e208d073e4c1", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xb6565deb38782cb7c088b4f41aa03b", + "0xe271976f81fedd86a3868be6e5af6946" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6d3e19e0b423a6908630ad2ee90e4978d1b8eef958a32a595cbb5a9158dc81", + "version": "0x3", + "signature": [ + "0xa0c5bae858a02eb6977f378252d25c96f2bc8da8515dbf12ddbfca49bb5b06", + "0x1d0d6803d3e910d5f3b1c71ea834e9d88d907b82222055183398d069fefac95" + ], + "nonce": "0x4d011c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x3c2", + "0x6f4cdc9797523d6279f585c4fce5b8ab8a4dbba64233045697e2b84f4d25384" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x233988005928a56978e8a681261876d44634a7e07e822a443efd0ed620fdea", + "version": "0x3", + "signature": [ + "0x64342117044bd015b08a9a93553d9b6fee4b17e5d5c84fe20073f7c491dcf6", + "0x31ea7b9293e447750da7265f07bd3103740803aafe428e5b04775184ac965e7" + ], + "nonce": "0x4d011d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3604cea1cdb094a73a31144f14a3e5861613c008e1e879939ebc4827d10cd50", + "0x3", + "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x55e265645d8dbfab39be8e9b7bc1849a05abd43276d23c3fa56d60f5c3a062f", + "version": "0x3", + "signature": [ + "0x24f21d7399e426e65f06e98d72425c0a45c8946addd4572afbd81384368f02", + "0x5520982e88b76b6f4edca5dc16e713f0db5bfafdeab98723a72ded267d98187" + ], + "nonce": "0x4d011e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x652ce5e3658cb7ec8ff8105ab26e1894df398907beac85b89302d7396a4b33", + "version": "0x3", + "signature": [ + "0x67fb73aa5d5131100e9ed2d97aae3ab4189f59ac1d405fea6a42850aeaa63e0", + "0x3f4ad49165c99417bd4a26d1f384647b7b90becf5fa1b3e46e8b78a918c513d" + ], + "nonce": "0x4d011f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x335" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3ed477e8998a45c1f8244c6fd85f1c875c32903eedecbce94eb0f26de43ed63", + "version": "0x3", + "signature": [ + "0x5031211bc62fdda8a8a8732c42a3e6f14306463fa4a331e9630dedc0ffdaaa9", + "0x30c6b3f94dd81a36f1c069e76a5f9743f31011eb6a6cc4f572132351123eaf9" + ], + "nonce": "0x4d0120", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x35a890bc64a0015669903e7269c47954f4c3fc895ae20ff777a252852726172", + "0x3", + "0x3b50b5443e605818d187adc0684a9b6e990ac3c0495acb51dc195f1c93b3652", + "0x2c04530e5be9bde05cafda18a246e458f73ebd76f5f613541a8f9a8a14cf54a", + "0x2d5c9e608aa128c38b759e2e1498a49bc4a441cff51ca7c9f4e0b6b3919d1bf", + "0x20b1e032a384b4ae920f334ebb10b7f51f4a002028d4e6165a8de931eee4067", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x2af760730fbb6e60dad195de3286cab3f1be17735ef92821a9f6581a1357dc3", + "0x3", + "0x29f85ed8e76afdcead0f62203ddad6a388c5048d941598c2585fbaa6f2570d3", + "0x6329645550b34a5ebfed1fc1ad92383885528943f919e94993603945ae3db86", + "0xc4e4e3be78c1348ed3c811a57a2512da5c4d619d4230cb5761ee631421befd", + "0x4f78406c8bb3994933ecd49f2e43be1dc73c011916fa5883335b013aa9a0ebd" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7e323a597e4d3adf826d1bcff7a1172de0d5a54252e0bd5447de56477f41cbd", + "version": "0x3", + "signature": [ + "0x460474ebf01d329e00584b1952b4fafe88286b283282904723445f6d1bbffff", + "0x4060f26c808ebdeedc3d8e0ac6dffaaf7ce4c10cf13dc630c2f9a8353c347c9" + ], + "nonce": "0x4d0121", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7f2909cd116ad26c28152bfdc4af5286d5e99e8dbe363de69436a23719bc6c5", + "version": "0x3", + "signature": [ + "0x2aa77bc9630d92424628402262c03d56b6abb69944e4aa6fb14c18cba9a8414", + "0x6c866f7d98102d48432e4392d1b5211bb47da6d7d967da182c14ad2c6e198fd" + ], + "nonce": "0x4d0122", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x43bc2d5bf7eab046f6cab7f4e6eaf8c8afea959e2fabe53f09b107ead447900", + "version": "0x3", + "signature": [ + "0x4eb3914e5d84c8085d2e60da23939a5883a95e8ca7e1889a7645cc5db045c32", + "0x1da581bfe6dfa4fcf718f606c9d6be2bc53ac028c7302a8d096417040992f9f" + ], + "nonce": "0x4d0123", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0xe6f608f5bcf247a3d3d456ec17aa379779e9171cfc152d695bfa101808574e", + "0x3", + "0x2649e5274e32e5b0751b9ec437a6219f6fa962e952c879f0274984791e8a670", + "0x58ed8a68cf518ee6029ad4366927a28832c906ce2b2bb90a6cc0d3d608ef0c2", + "0x67be8d0e95078b9b4ad71be93ca150b6e6003821116e6bc99f84df8b9a17151", + "0x615723dc865211cf0e30e672fbdfd92d7900db7fcc90e22da2b05fc07ab9002" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1d338eb6af5b54d7f39841f687731f3f87d0465105d3b07af894efa80eda651", + "version": "0x3", + "signature": [ + "0x2ea5d2ff3e18d308f8e6ec34ac8af2d1830983d104845abf9e648ad925b56a3", + "0x66ec0cd871dd8a9e5fbd87cdbc8fc5c1d2c7bc52694fd8c13dcd44a5b7e58d8" + ], + "nonce": "0x4d0124", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x1d8", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x45" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7edd47f2401c6a2b3a827fcab356f6baf133ddb39356abcfc52b3675afb84ef", + "version": "0x3", + "signature": [ + "0x362b56e18061b0b87a57283bfbebc23d95dcf95695f2068a36d0aa0334021d5", + "0x1f69b4955b25810058efcf04767a2aeb0cd8b2d2a260f3f1526343b3a38bea" + ], + "nonce": "0x4d0125", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x790ea505a86b085b4d7463c5e44e1af87088b0817940cf813ebde54f954d678", + "0x3", + "0x335114f7a0c12d0cc614a634e878191a76dfa07a2c15cb208a9b0161042ca37", + "0x40d3ae85973c539bc8091a4bf860a0f2fada87fa5923b146edd1a31eb2eb680", + "0x228d5ea66e091968821fd3b76d8ac1d25a1b92bfec553f8b5801e0e93c4c7e8", + "0x1c2835e20ee32ce54b728f4cb86ec372ff488b129b25fa8aa4895bcb91f6ce6", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x2f092612eb436dd378444888f974adb3", + "0xc4f36049e5547ed84ec4294217dfbe42" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x45d6ceeacb1901b4fbd0b3db1a1c024b2f16312e7036fd5738807abfafe5d42", + "version": "0x3", + "signature": [ + "0x351d9584392f0ad91d2ce3bfa51dbab0ef0c189d09e865c0070e740fb3816b7", + "0x4b7d08b85fcd1555186025b64830da28a3e001ef22e56748bc6f8163a08a154" + ], + "nonce": "0x4d0126", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xa08d262a794d4b4088e2021b5b7c82c5", + "0xe3ba530938e7a55ac9e6100dcc09022b" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x78ecf21281939f2aac484a4678d78f6046efa75bccfe44fe50f0b984441cbaf", + "version": "0x3", + "signature": [ + "0x10db86a32695335ff21005c0c8ff86a967e5a107a4d62cbc769f963c4f04a05", + "0x428b83c1da9bdd28370cfb191f1647613fdc0a3a60c232945b508b340d25635" + ], + "nonce": "0x4d0127", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x421599990487700502101a97b1f8ac42", + "0x5809b2d10b60fb64955efdc3ab2c2b75" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xbb3ddbee7397d1b5dad2cb0c91b0bcb61f1970a0d1fc6bcedff7c37dd082ed", + "version": "0x3", + "signature": [ + "0x7b34c1099b373c320a22e67c69e37e9f736c4840576a5cca41f1e9f4fdfb90c", + "0x38f7f52d4be4a93e6760def0a60602c36c9f220781f4f2e403338ee48af255e" + ], + "nonce": "0x4d0128", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x3604cea1cdb094a73a31144f14a3e5861613c008e1e879939ebc4827d10cd50", + "0x3", + "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x57e8309d3f663b5f73a69ef50b32d843b71daf5d145fd2ce595ca25a9c882a5", + "version": "0x3", + "signature": [ + "0x1ffdc56fc6467f497fc79d4cdbc64162ff1bb317d85b1d9557cdadc4f980b02", + "0xa227a39ded0323e3bae972d6f69cb48883bbeb80e41588cbb75e86da3d6709" + ], + "nonce": "0x4d0129", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2f360e49a734ba3d245633d65726c7ed70a47cfa003c94308794514a0fe0769", + "version": "0x3", + "signature": [ + "0x3595f2bc40951aa3c4689156ad0e32c09126dde0a50e5e177cb8074c7b75202", + "0x4dc76e3edb07bdda460f89888a88437bbdd4dcb8662bd7ac093c02289cc2856" + ], + "nonce": "0x4d012a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x99" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6c03ae0b4f311945f42190cff1d5642db4b5029b257673bbf9ee227000164ab", + "version": "0x3", + "signature": [ + "0x799e47f85ff78109848cb3194b77d54bccbd1739e3bb87b760a502cd2630789", + "0x1dc710cf2b85ad223b0c2e8befd9b3e427b329cbf9ad067045a28c5bbf68997" + ], + "nonce": "0x4d012b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2d7cf5d5a324a320f9f37804b1615a533fde487400b41af80f13f7ac5581325", + "0x4", + "0xf62753241ef2185ce47eed2f967bebcb07dacb36", + "0x2", + "0x67", + "0x2f" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5840667191c7cd5453f0f08abf8c05090fda0d206a9889f03d7945fc416203d", + "version": "0x3", + "signature": [ + "0x7a0186745eb7f7bfef47bfcfb65b9450ac8f8be27c22a5d1f4499fc42d85a5c", + "0x7e488e8ce835622e8cf8974f9926c6d1a54a79b5ae199d104ca6b8a6da173b8" + ], + "nonce": "0x4d012c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1490e7e6439bf66483b54c74b96cf288c43a81b95c547ba61cbbb71ba07e1bf", + "version": "0x3", + "signature": [ + "0x7a953bdb37fd45d6de9fc9626fb212bcbe365b92c48ca07948fc49060372134", + "0x47f6f7dadad0961f03d1e93e5db3e050c7722fba0b8780171b8ad149c58c439" + ], + "nonce": "0x4d012d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xcc45777544744e1114b2873c7b57617b", + "0x22e8694fb67303aedf474a82c473d416", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x483eb8e5c08de8fc3d41be6894dd6cc512cceb0544e5c7d82826f5c5baa4a92", + "version": "0x3", + "signature": [ + "0x43618600d9d3dc8e18290ffda51ca6a05a5e9f9734dbb2e7617dbdadeefcdbc", + "0x75cbbd6500719972a8d355276adc1c75d04b093f0322356dfacdf18db85fc1d" + ], + "nonce": "0x4d012e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x50898c111be82241d1b1fab2dee71b571e9ae905dc837c8323ea345b82319ca", + "version": "0x3", + "signature": [ + "0x7e5c393597cfeff08bc246582edc46a03b868d4aac4a5ae24bb3616cb5de071", + "0x53dab50fdeed7a948db034e4205877a133273fda82352be46e3bd4f2d58c638" + ], + "nonce": "0x4d012f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x10e", + "0x5a79bef4e1fee587e3346900eafd02ead5523d57e61b5d30e56c04a131bc1e1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x323" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x30dbda93226f54f567575005e2d0de30cc42bf24d528c3ae70b27e13df32e21", + "version": "0x3", + "signature": [ + "0x6f9d60426056ddfebcb1578483b5256dd714715e02360150744773a2d622b92", + "0x369654acb7ebb73b0374b383f064fc6c4668d34c0e89db5c50eac1c3aae5b07" + ], + "nonce": "0x4d0130", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x169f135eddda5ab51886052d777a57f2ea9c162d713691b5e04a6d4ed71d47f", + "0x4", + "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "0x4088330413889ec896bd39bafb54051ff9ab3fa9e76e4ff83be23669d062281", + "0x0", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x559a3aeb577be88c912f1ad0c6cb0b31b08e66a68303443045c57a262f4e7c2", + "version": "0x3", + "signature": [ + "0x5cccbc952926a86bc7f80587d0d16fdeee5e0a22bc87e8873a6db600265d5f8", + "0x417e61bd73b865ea18337c7a79ac6b04a982d8ef040c6bb9f617b6dbbf9ef56" + ], + "nonce": "0x4d0131", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x679cdbb308dd3f335077bc45fd257fef0f8d3f9e4a5e7e2ea334269f33beffd", + "version": "0x3", + "signature": [ + "0x3aa26df36e23ee4d6b8f81ae10a781d4ef98f242cf3e8ca36e0a922c4c3303e", + "0x4bbf998f08768c1b8b75983a94b89da8bbcdff734955755e2f3fbb4adaae3bd" + ], + "nonce": "0x4d0132", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x524f191568b8396376568df443a60010", + "0x1ac9d243e2af215cd6eaf548cf0aa5cd" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2a0bca9093a5ef703c4872381cd707449769d8f43c2656e59e24bdbca1fa307", + "version": "0x3", + "signature": [ + "0x7e1050b1e873d777ef32c5799fcada67c654f355a4b79942704dd51b26a4366", + "0x2e8d0adf2a72a57256bb4d86535ce5cbff9b188561b5d8cc44f59f003c14c21" + ], + "nonce": "0x4d0133", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x8e7c662bc1c13b82d66a449bec60a071", + "0x92735ec74c385a29aec3a5898d828ca5" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x79741409ba3e0379a72e501219b56cb40afb19b46d1279039005fe037e52c12", + "version": "0x3", + "signature": [ + "0x643d9aa0cf545f28f0f39cab6067b6c30110968783e1abfe57e1d041daabf96", + "0x7ef1f6159e9916143a91aa2768d34ecfad0a5815f4d593f03146652f7a7dbcc" + ], + "nonce": "0x4d0134", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x232", + "0x53573a50029c302941b4093fba22151eaf301182dc683f8281cdf6ad97b1e6", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x78e92b1e5a4a41df9c9e5019f7d5d5f7154c159c8f1de1f679356a4aa8de1e8", + "version": "0x3", + "signature": [ + "0x52436ef5f19e4a11d287840f87c234db6e04803dec893a201dd374862f31ab6", + "0x6118fdc0d349df2c2ad7593d5417d5e16e7c0cec343356fed7f5c71f2e792b2" + ], + "nonce": "0x4d0135", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2881b3b65aed03a4a5d9aaa4adf5b877fab77c8c82f0e5a00925770adc46f79", + "version": "0x3", + "signature": [ + "0x1e7fa8611fbd1537b26f2c195ae1a8968b69afdadd13ba5435e8fd136a76d7", + "0x737f9570643b9106c31fc8f74e7782e7e7599a21134deb59a93b7a96743bcec" + ], + "nonce": "0x4d0136", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6f07beed301165403bf1c8bc57812349e8013f094c8404d1719e086662bb5d0", + "version": "0x3", + "signature": [ + "0x59b561e99cebca07d945deebbe5e0fdaabfc0997559e2e7e2b08db4b3306968", + "0x377b84598d7b503ed0c887f8d12cb51126e7c25ff91d6ce635e00cdb96f4458" + ], + "nonce": "0x4d0137", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x16f796211bdf7c39c965b6e77f6eca85", + "0x5855f025b4dec5a58797b6b99f158d5c" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x19a5af4415d374cfcc2dd7c34a09771e7f0303cb75f7ea9fbd022404f2777e2", + "version": "0x3", + "signature": [ + "0x479d957a3b1a9144b2eaa392431243f31ee555b1cd5829abcc30844d0e57e45", + "0x765eed3eecb116657e3086c5b3cc1d599fcbc4f7c702bab7e1d91efea4961df" + ], + "nonce": "0x4d0138", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x271", + "0x3342d39567deeb95aaf8039328deeb6c42a2b3aa8b97681f3920bd6638bb2cf" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6de3ad4c3dc339028265abe12108e2c5e71d56f8d5a64192f7980b156e4d161", + "version": "0x3", + "signature": [ + "0x57d75216bf41b0a6b6a7f3762fc13ad0cacac08b706fe8efba3c227178d6763", + "0x3a124ca692828c3c3e7ef62f53aef0795e0398762cd97fef0e3d028aeebc87f" + ], + "nonce": "0x4d0139", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x17da35ce4ed77e22e3b9149fd965dba57351a6c29f588a7d245e208d073e4c1", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6ab843f88f99b0d33d49003a899dd75d8fbdeb88682f600e788ec93d2623b36", + "version": "0x3", + "signature": [ + "0x11148a59033dfe1ba81bb0acc3b7761b840c5f6f8fc3b1369ddc38e49cc77fb", + "0x2e19637746eee1f767d7b55e4736de5a14ec9d5555f3f7f8519e3a2756ecb56" + ], + "nonce": "0x4d013a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xf1f4c46de523aef40991e2ff14f9d6a", + "0x83df54612e3c49f14d36e5ae1d4e6d4f" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xddbe034b7e91762e6ddda1463a367f56de1ca24dc0126ef025f0899086597b", + "version": "0x3", + "signature": [ + "0x359227274c9e570a257646957f5483ea75c3ee03ffe48c664ea6038e4cff13b", + "0x5e70d4f9b04ca39b9326ec3108bc71e85a4749588a6298f35763371d6e2c490" + ], + "nonce": "0x4d013b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0xe2bd93c7cede114f9f5c08e5e99be4ed16b347b51e9eae51a2279483eb8009", + "0x3", + "0x3560fd5478d45a380431e0d8ab96ab10f9346464f26c85ddfa81b55295eaec", + "0x791669035612bb867ebfec753cad73103c3b6c46f6438297e18cb28b780ee46", + "0x290b20e8f700dc1654864984bd086c136bf6d7b3503a9bf0e232eaa8a02757a", + "0x3e72412f0ee12c422d4c3d9b4721a4493ce78e542c5b210ca7c2dd6f752393c" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x406d59707ce09c40a0ff5faf4f10aeb3842dbc0f48eb90e3101236f7d511e0b", + "version": "0x3", + "signature": [ + "0x66a53b447dab78d00144279b80396517417f152e9a6bb47a82c23157f9fe4c1", + "0x48c45450ebd7264318451d03574092f1d80e16b77a9229622f0930b5a3d2817" + ], + "nonce": "0x4d013c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7c17c7ffbacb568783a5ac01764316485bf7f7ef9d3529e5929e60381ae17f8", + "version": "0x3", + "signature": [ + "0x7e8526b525405f2d63853a0fcf584568962c62ea25999e20076baaab49bbfe3", + "0x7d716b830e3ed9c8ce0339d1a1a6bf70f033b179e5fa3b9368e52813e1bf6f0" + ], + "nonce": "0x4d013d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1c82298c91256bff5e780f80d74bc3fadddd925d9f17f44486f63e91094b65d", + "version": "0x3", + "signature": [ + "0x39cb0e2d0f1940c36329533a79509d307be0c61bb0c276d12a3ad22fdf7d7b5", + "0x5745ffbf5621f2082bc3c61ddd79b10d4936553287b2821b255c55a85d837b6" + ], + "nonce": "0x4d013e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5b3e6f853ffbcda3cfcb2fb456d2f292300dde3f8892e5fc79b23dd01ef75ad", + "version": "0x3", + "signature": [ + "0x74e0f40d1aaa66abdc371d649a41f007058dd989b8242baff6d4d1157d614fb", + "0x7a524b3fe3f52489ae6c899baccf9beb9b6e0d952722570a3bc3dec8cc6d407" + ], + "nonce": "0x4d013f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5a1cdee2b6a2452b9bbac646fa278f10a82bf1be49fdcfe217d23e88f6a0e0e", + "version": "0x3", + "signature": [ + "0x2772f7bb83e0f4d0e10d785045245f44273c95af8e37d575491d10f424d7248", + "0x4051168c3cf73df0702b84c52b4e90d56ede48f1c5c452d7b7a562694470bbe" + ], + "nonce": "0x4d0140", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7a2db82291a15ba0be8a579f1bff71ed0f5fada1bd8bd838c43dfe167804225", + "version": "0x3", + "signature": [ + "0x2dd464dffa1f1b77f9de66d7800ebecf42e47572ec3f162c2ec1fa1b32ed95e", + "0x72fd23df2fe3f02d438852c87b8148477d33cc08cf2f3630366f6051ecc76c7" + ], + "nonce": "0x4d0141", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xf04619f47b1d7c75e402161c8261ff02", + "0x151e951b20bf4cbf99dbcc7008d7e46b", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x368c1fdaa923585ba2ae3a93b81c1c8bd370d6d4cae5a523eca0aae969b211d", + "version": "0x3", + "signature": [ + "0x656205da082e58086159ae2dbce367bdc88181afe26d8f9e5a2cd200b76c86d", + "0x3aea3613b254a2092629f80feaaa3ec1811d8fc55ae9b0f57df4e478592c348" + ], + "nonce": "0x4d0142", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27c3334165536f239cfd400ed956eabff55fc60de4fb56728b6a4f6b87db01c", + "0x5", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xda0608d95967180e13c24e51d5189ed3", + "0x6f9381aebc91e5c41ac91bcc653caeb1" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x50e27dc65f920e4bf74c57142c47ca6f9023a0ef3c757a5c8ab81055da8bc14", + "version": "0x3", + "signature": [ + "0x4198a5dd5c6801c5f0c45352cf9df80ad2283fa6408bfc874ace10f670caf7a", + "0x5dac4cbd4085ed8fa8250beed6681d4288d2d92686b822620f989566f7d6a86" + ], + "nonce": "0x4d0143", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x180", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1fa07d8b02a7fde81af8bdd8b2c5b400999bc04d3d02dbc90abd12c7d42fbce", + "version": "0x3", + "signature": [ + "0x4e21346adccd251663495633e0bc948714370b8efcc35715afee2269c8c950c", + "0x6dce9b5fe67bc96e3b5bcd7bf2d52bf2515561cdc5055f5838153f9a94f8f3f" + ], + "nonce": "0x4d0144", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x66ecb4b7b5b052f85132eb9a22a322c2", + "0x1647fb8d6333d2d44ea72a6970e65264", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x75b965e4c7b51deba1ef144dbb7c1e6939840530b1d52fdf026daa08190323b", + "version": "0x3", + "signature": [ + "0xace143e6decdc8bccfbfc067bc12571ee823dd6c518496b15758f5f2d21979", + "0x5a1ec01643682e19670e4bf00155be99f3338e66938d843ae79dd9700aaf257" + ], + "nonce": "0x4d0145", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3604cea1cdb094a73a31144f14a3e5861613c008e1e879939ebc4827d10cd50", + "0x4", + "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3379b2417050bb2c78a4e6c498a97662433f237b41849e0c7b7ea08b5f95c0c", + "version": "0x3", + "signature": [ + "0x26bc5755bfdf8d2bd7c2de15c3f7cb4c8f77745f276614333af7118434be0f0", + "0x37bfab15520514bd5f3841b5e687bf91fffd4ae4be8df105582ea6e14d51f7d" + ], + "nonce": "0x4d0146", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xf48d7037b999272ed4fb985175aa1f0d", + "0xf0f4bebc366c3e195087dcc4cab8f6f0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7b3de63a1859af6c3885a9d47b4384aada357c93ffad39b5a8432be1d748338", + "version": "0x3", + "signature": [ + "0x24344066eaf336e471a9712a9f9c9b99b87d31d992acd14b5130714f03410ca", + "0x5d57a8897de7ebf3bd21ffad6eb010ea1a8c5cf5e712628f5af168695ba326a" + ], + "nonce": "0x4d0147", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7794f102c917ee5fbf9faaa7535ceade6b942617fbfce7cc1f5bf92cf1cc816", + "version": "0x3", + "signature": [ + "0x1d0f9c57da83720f266135b6827990c5c95eba33283b1a5edc880e45bf34f2b", + "0x6d38facf6b0c9ed6d785fd24ea2ec3f4b5dea3629908a1fe150f27b365b41df" + ], + "nonce": "0x4d0148", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x47446b9c54dfd8f9a34edcbdd63d5ac1f9d03adeca950a7b8ad1db33170442d", + "version": "0x3", + "signature": [ + "0x7893decd45c8e8647262c25ca08b9d3b228dc6e9680911f0bfeb7027eedc366", + "0x20d391409d5a026c1e20e6ae642ac0d775f89669b31727588cfb48e4f168526" + ], + "nonce": "0x4d0149", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x44796343856f93ef0b27ed9a89ae0ad85294e4f8a7a7c548bfa83ba2db5bf0f", + "0x3", + "0x12f129bdec2acaae798eee4a2171561d735306d9c36fb01542103c01b312762", + "0x3b0307ddafa2de1118ab395146120d869ba3ae2a087ef52c58d2fbb8f776729", + "0x248d38a905c1251c27ae655c5e773c135578334b27163e4ef1d42607886f548", + "0x7ebc98929165b3c1b0b449f6f19653b2405cbe3a349e213c847fc0a69c152b" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x63b5f5493d8ec8404edd7ca19d3ab4f0c3ea2173da098b5830385e9d4140a85", + "version": "0x3", + "signature": [ + "0x3fd6d3311d742fad370ab398a511aeeed61f6b4ffe82d7690e2992dcab48385", + "0x16bf188ba448c8f42f52174e9b66c2caccbd0bc283bdc81d8583f72d27d8611" + ], + "nonce": "0x4d014a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x28bd8f18ee747343462d9fe2a97096a70132db0c63bf8a0e6e56874bf9fb07", + "0x3", + "0x55849057db65e5e2b01aa2a7fb7ed0fab704ce4747b4828e66c1d435c9f2b86", + "0x120c79262a7af5c1d7a93928568095f7ea189d49c2da1ad09e1eed2b78053a7", + "0x6c1076e44df71f50b64745f4876744b44409ec58521a8b86df7d4a09f7414d", + "0x1845971ac79fd6f105a99e706a645411d8a7b0d7f40d672254c6f68f692c0a7" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5f0c85d57fca71c14bdacaffa33a4300b0627ccd3bf8d837e7de204347fa48d", + "version": "0x3", + "signature": [ + "0x12cf520c71e129474c68936ed11d1fce5d85fbc69cbd9ae5eba9db23e38ca50", + "0x60e0f000b6c816252409ed71982a611fed7331f47a057ef8f5b5deeb2422ef9" + ], + "nonce": "0x4d014b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x263ea3baf9d649af9e26288b8e2f99e16431de1cb125371ce5dfd8f30c0ff7", + "version": "0x3", + "signature": [ + "0x648e9654f6687ee35a00a91703ac5ce11947479a5d89130551bbdac1f8ec65e", + "0x3cfc2c3fc1589d79f4109dc6d37f0a883f61b379600af8b7be1d5306a5b7d0d" + ], + "nonce": "0x4d014c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x9300638eb6ffd57fec05f98ef5bec6c5", + "0xb96b90bba270e2930873e05798819a10" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3690c3c1b3a59657cdd30a94bdaf344b1ee5f789134c7868ce4107f0e6ef6f2", + "version": "0x3", + "signature": [ + "0x3e9d4552bcdbc83d6d6ba4d096436b4915555123b3f8b93f7a9e322f9fbbcb2", + "0x32e1d09cbece2f5782d258385d26f4a52ecf27cbd8d1a02952f631620989a6" + ], + "nonce": "0x4d014d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3599287586559a69d1d9dded984cec4d5d73a31a320d46d49c5429e87a12b1f", + "version": "0x3", + "signature": [ + "0x5266cdbd34364b5f645a039014ddb973d5954b21e687502b1f10b33cedacd1c", + "0x364c3f60a35dcdd69e3e9e09a9e7c3ffd95d5c427cb7a50cbbc8b31e7022a3d" + ], + "nonce": "0x4d014e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x6fd88a8c702c80268ea6400aef1210b", + "0xcee4d27e45c51046d46e1dd47ccd2418" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x27723c0aaf06f65fe818cdaade5a51b724568c5c14fe35a08515cbe3357474f", + "version": "0x3", + "signature": [ + "0x6b6cfde08a2e81cd4c51322c38a9e1528bfe6b2c203f5696f0e1d594d85a0bc", + "0x581fc2553607c53d72a9476260cda94dd74912e1ea2bca34ad1587df5ff2fc4" + ], + "nonce": "0x4d014f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2d753ab60df24f92032f0701d8efa57664eb08b31e1ef8cb5f90da2e0a05f50", + "version": "0x3", + "signature": [ + "0x78eb7941774180b3bd61d5066eb8b6c82e09bdcb2c145ad3f1524c6128a848f", + "0x1cf22bdc2c223cb81f26e1e2749173f0f51d9e4309d634ea824f368f9df4186" + ], + "nonce": "0x4d0150", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x1525eb0c3a1b4f4fb804a232edb4a1d9cac97ff8cb65e096bdd67f49c0ab00f", + "0x3", + "0x72869728bdc2b1dd37f5f4a418ffb092a6d6a6a51b03af3b78e861564b80237", + "0xfb87961d4d14e243855fa11639f556dc13ef30d63551b099bba72e5a9fb5fe", + "0x37a14def8c81055d2422c68c13858fe7004ec3a4b28132f7601f59151a6a6dc", + "0x34f71c98450aabdd6044923b8a78ce46b0611e0135b2676fd5a637510dc6d38" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6b9ea588451dc23bdf40e4d931c5aa63aad4a6f28b1f213a5a1c5123fdc41c2", + "version": "0x3", + "signature": [ + "0x6402051d865d185d99e63bece812cf11c8878cfb5400267e5e90aacfd640cf8", + "0xd5c54b1c8d6fa1fd6b4a8ab9961eebbf00b3e5843fa92de89feacc5e758110" + ], + "nonce": "0x4d0151", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x49d7dfdf83f92fa1b62659083be2d1e9f253cd9026ba6f2df59cc14a70d92ab", + "0x3", + "0x6724f48b05976d6af1a5ca82ba209959aac0348a4c41fc2d36cd76591d5c62c", + "0x3c9a4cdf45641b3b943dedc9ff264ba41d51114f2ebd61f8b28b19f455303e", + "0x12d45e92d41ecbe44eea1adc697dd04788cc30bcddac54dbe8694a573edd8c7", + "0x62d5bd4cf4d6557a1a791917d14703f98cb17a4ea020c722f659d50a6bb11a0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x48aff85af163ad6be379229b0b90e79dd78dd66015034c63405449eaa7546db", + "version": "0x3", + "signature": [ + "0x6e8b612b0ee9daef636e9f6560614b5e153eeb6c3560d0079bda3fd6ade7cd4", + "0x1bebfae1a992499f23e75627350a6240c9bc6e6df5cdb16700f828d77a0dc4e" + ], + "nonce": "0x4d0152", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x40d1517ea40288599fa49983a4985777b05d68ea2537512028dc04d1a08db55", + "0x3", + "0x6d83c4b98f89f7a73c4bca6982a19d3ca849672e46314af1e6dc3afd6679951", + "0x68c9cf9111eebfb3b52fe7c9acf98fb0e6e877c1acf2ad14d8d3bda6bcc23da", + "0x785366ebf7be8bc6ef9c51c483f84b5832fce2bc6ece04508719db1f4c8a470", + "0xe13ea20eb815e0c0ae82d5f44bcacb78c0458d6698da676c4b1cc8ea264daf" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x21bb750db9268c068bd3be09151027c8a5a5c11c4db428cb369ad69d297c0f", + "version": "0x3", + "signature": [ + "0x1779234ecace06de947998cae2690b9e806b262b2b6b78f333003bb77c669b3", + "0x445ed585f213dd7de1f8adc3c7f9b838f621258eeb18eac1bdc7788f9da9a80" + ], + "nonce": "0x4d0153", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xed723be1ca3271c9310282623302a510", + "0x8ed20f55d47ec7681a312d709e07ce99", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1a41a120dfcd8c7d30f21709bd698f36e32dd3315f8e83bb62aec8cdd55f3b3", + "version": "0x3", + "signature": [ + "0x7b8e7c9dcda06c0acc4a28a6d87be210232481c70cbeb09cc89e317f8e7cf4", + "0x36ce05bd33d472bfe6bd2d426a248f79f9b99b5116b703103a029e969ee6144" + ], + "nonce": "0x4d0154", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x1ed", + "0x1d413563c6231b24d293d9a71ee542cbe50b28505f0768740c065ae8a8fbaa5" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1ad407fa40b1c51e68728e19119bb01de61a028627572703178a018a4a256c6", + "version": "0x3", + "signature": [ + "0x1ce7f1c93ef65ba5867d5a73f76621866499aecf0dfcf69c2110311a4f88745", + "0x51cfe2e557834aa40458f542887225685c4b3a0882e0cdffc8a6e1866654e9b" + ], + "nonce": "0x4d0155", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0xf7", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x56c54c6df617293c68fcd480a8d025653631d8d718443f9789c343de7a17a37", + "0x3", + "0x39cd0cfb60e3ba5c5beb979bf40f636b20d300942720659581fee6b33c93aaa", + "0x1cd37a5e72630e45805899c3911130ef19ef2fe37202e7b73ae8c7318c6d6e3", + "0x72f08ba97d46da3f16208ead9d7e49c6004fbc4eaecd56c522eed7d9b8f96cf", + "0x5ffd185ec0721054d5340742af5c65265564e3124aada121fbb60898665b98f" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5d0c53d940dd40310e3cd6e403e676abdb27ef041aef4885f48acb92ee84262", + "version": "0x3", + "signature": [ + "0x2344f9faee69dabdacc334e28122accaecf86303ed187c51985afb56de7e321", + "0x258bd985c7a2efdeb99d840f0c686be8744f95f89dab4f36c3638271e67d80c" + ], + "nonce": "0x4d0156", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xf26d509fb74b0fd01c9d97f63e3185fb", + "0xbec271c484e7b6547ac6a51655838f49", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xdc9172b0939c55055abcfca80d22508e98946628f3275b7ba39a0e5ca26371", + "version": "0x3", + "signature": [ + "0x128882ac31d584ba0bb8821326cf53e9798c70b735986edf6aca98a24e422dc", + "0x77ec46c352c546b87a195016b2bba20446fe34133850a624b2cdd8e8a4d9320" + ], + "nonce": "0x4d0157", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x18f", + "0x42d2bcdd8985d0b7797cabb2271b2e6042770594d77f3009d35a04d6c8ec5f1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x283" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2ea650c14256a321d8bfe3f4222859aa16d0d0033d576c5b489c5b886060b2a", + "version": "0x3", + "signature": [ + "0x6005ed786225e3ec7d794cc7e25403ab356b5d7ce8c2838687c8d5a7ee7763f", + "0x1c6948a5646ed95f01e0aa0bce93d0d7c054fbb7e2202ea54809ac5c607cfda" + ], + "nonce": "0x4d0158", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x5b695c85f5a6a609acf40c39d657ef67e1a8aface9fcebda88bd639a0d1a898", + "0x3", + "0x52415f22cf903f332994ebfc1595eba480961e23eb7dadf1a45a1c7c23446d1", + "0x48c6aacee21303d4fb44c4486a34bcdcf7ef9fb907aef3d6506405f0f5f179", + "0x7d66296881529c77acf7b961219359c840666540c35f7d8c977da562283e4ac", + "0x204fab40d7160aacc050c349bad5399fa96b72c26d6b91cf45891e00d8a9ceb" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3a8b70080546e1115cebe0ac8775a0bb7d0b2a5361b2a4c6189746c170a7716", + "version": "0x3", + "signature": [ + "0xc5331d315ed89cb06caefac1d317485798fc648a57aaa8c3368544240859bb", + "0x5f6330879abd27c0753f2912729a500d927f95b4bb3bf9a0204a76d9536c9bb" + ], + "nonce": "0x4d0159", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x34e49e459c9d56d2aecb8dc5bcef2579c80d0a678d69241cecfac7a38e154ca", + "version": "0x3", + "signature": [ + "0x5bf1f5ac6229c566b01d49df283e34bb7ace57525fffd1bc5d516f11443b7f8", + "0x255b786bb2bcd4230bff2e706888e96184dfc9770d4b988ea0044c184dd1d9d" + ], + "nonce": "0x4d015a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x437fe99f5ed2e91c239a2f193c6231fbe5d9e6dfe99ac5015ccd8a81d158257", + "version": "0x3", + "signature": [ + "0x3c431d8f7141383562503462b7c7d0cca491f052f984af67d8b43a96eb21f79", + "0x2bb095b06d4e7460d8a1a93eab877074480619ca164fd2518f2c2ff743bc70" + ], + "nonce": "0x4d015b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xc73020cbcdc3801a13d39a9b966cb727", + "0x8204f19ff6fee3b459f7a18557fb5b6c" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x33d3d994860b9781de37cc32474b690a43dd0033a3ee93c1a78586abaed433", + "version": "0x3", + "signature": [ + "0x35b8e69fd32b5b049b81a15c3322960c0442931b80b77f936ff824d52750ebc", + "0x22e803ff9db2444274f633125f4ec47682dbd53fa1e6c8581a332bcfef57b9f" + ], + "nonce": "0x4d015c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x3b7" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x70e59c4408a6a188ed0ab92765a279e6fb2cdb27757442f43e3d83b2f91fc13", + "version": "0x3", + "signature": [ + "0x3ef150e51ff2295edb3621396835803648c49e6977fcd1c4a36993ed4ff4cd1", + "0x40d2baea726b18355e76a7a005535cb7f154ce723b3d6670a83f04cd1186c84" + ], + "nonce": "0x4d015d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x1f2" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3d8b140f57faaac61c5db43df6b3937df36c6e85cedd5142d41d6eac7ca0673", + "version": "0x3", + "signature": [ + "0x6035a6ab4f88888f1cb35fa477e26c75ccbafeb603b6bf4505cc98bd197abb8", + "0x4bdd1b0a9ef23283d949d6c2f73d87e6aa54c7782c67f7d9a9dbe732cfdfff2" + ], + "nonce": "0x4d015e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x3c9", + "0x1bbe85cc5abacb5c162e974a5ed0b8307f9697b87f3f537665586e9ddd3833b", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x789a8df2d17e6164914af9230e4efbfa", + "0xd78c7b2b88c0c326321551a5b3d4375a" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x40c3e30d8b804488c5b38adc445b66aa18551d50fd8636a0e2a6c361a5941bd", + "version": "0x3", + "signature": [ + "0x119112e3ec92546a8df24eff39eb4505be5fd8aab5677a1762ab1d3e34ba035", + "0x294e428700e6944464289b400f663124fc181408557798104ff90a65f14d288" + ], + "nonce": "0x4d015f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x2d3" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4f4d9052d23c94ca8d57fc94452d4915501b5eb898b03c531edbd30cbe00b8c", + "version": "0x3", + "signature": [ + "0x3cd685d3b5ef43eeab7798f34c6e6c8db44a4974feb7fdbcffe24319f21f715", + "0x3c1f8926c5de71c7071bf9780465be2b493acb01d23f2ba67100c8b1be02015" + ], + "nonce": "0x4d0160", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xc230e0a01e5292ca97dbe75679cf9accb611cd9a2226a5219ce7349780a02a", + "version": "0x3", + "signature": [ + "0x12e8d778dabcc96cc2c9dd24c8364d40a07172366c348e820c099d2814c19b7", + "0x6f79e6bdc1e36dc9e380222282aa1a05ac609185b726ef92d95f360da614ec1" + ], + "nonce": "0x4d0161", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xfd04359cb351cd1affc7b165ca66245", + "0x407754ef00fb8b9ebad8d25ab54e54a2" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5717cd13714106eb52bf0db6fd0e19bb4c90461a7be87b070f16a970fc678eb", + "version": "0x3", + "signature": [ + "0x551aeea09de43e36790058dc0e738c7ccea7a3e3258d7a0a7f354bce92ddada", + "0x4adbd0e660efcd712044230e0f2718bea749d0c7c296450d2961f37c59b8b01" + ], + "nonce": "0x4d0162", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4d52785977eb0e1c201dc2a6e831447d66ac2f4d68721b30cb1dacef55d5dea", + "version": "0x3", + "signature": [ + "0x129020467571d656ba3b7ba479c70abfba7be5a6ec46192c15035eaae75bcea", + "0x2afe23ecb94edf4abf55ddeb9d4a0bc8507e0e13e521321a06ffc2ef63fe00b" + ], + "nonce": "0x4d0163", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x45a7193004281b75002f28ea9993f60608d7da687787515c6361c10d2e8d388", + "version": "0x3", + "signature": [ + "0x6ba6cb2ba7e2f68528497048000e3fb34f55653350f3c2d5b2be75b747e1973", + "0x5dec56d7a8639af0c93a71abbd32fb9f707a8e7b8fe9a380791d3ae4557b2b9" + ], + "nonce": "0x4d0164", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x2f0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1c11b145f791e96f5520d8bdac6264bd065407228bb05b5c1afdf7925cb3b40", + "version": "0x3", + "signature": [ + "0x86bfde93cc4c1c8fc05e403fa53c909e789d80c3ca0896cfcf1da04fa2c1d7", + "0x379726a5796562422165b8b4ca9c9c4f562dd957e44fc82c21becc8c4b43271" + ], + "nonce": "0x4d0165", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x169f135eddda5ab51886052d777a57f2ea9c162d713691b5e04a6d4ed71d47f", + "0x4", + "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "0x32cbd156e69132cddb230426136f8f0d6ea1acb3d84aa08c7f1ad4ff7bcc585", + "0x0", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x21a7f05588bace54bfd48efd588d3728b54ef24f51bd8f3cc9174840f64a562", + "version": "0x3", + "signature": [ + "0x70f370ef339ed493b1acebc16cdc1425d5195072dd7a5bb3162e72114295d43", + "0x4b479135b14f3558d4c0f9112d020080d0aabc44cbe503a589fef7db28fba44" + ], + "nonce": "0x4d0166", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xa2b9a741705e3aa1dc370a992c1a5972", + "0xe1b769e455cf6dbc79ab21a44fdf732a" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5585477075305d5cc6ff69020c0f6b2c301be2a8f2ffb6b54f9d53521c1d9b1", + "version": "0x3", + "signature": [ + "0x2a30f270b32839a049cad24bfd8047bb762d3f30de5aad02e2eb00cb5ade7ef", + "0x1ff6c99996ad01edd2d0fc30d93dee88de3f45763cc50c0c33fc2bea70f680" + ], + "nonce": "0x4d0167", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27c3334165536f239cfd400ed956eabff55fc60de4fb56728b6a4f6b87db01c", + "0x5", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x55c40260bb82b61518071a4d20e375da", + "0x5214015c8f762aad36aa6493554b4ee4", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x20c" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4ec4c5f2b51a0f3459a829972f9fa96724286e3c8a0836e77090e108cb70909", + "version": "0x3", + "signature": [ + "0xb827a1b54036019f6cad78849d733dd87b4b6d18a0a256b5db163e6c402c29", + "0x59ea649be54438c715f4493d783f31cf8ada3752669582502cbb956b82ba52e" + ], + "nonce": "0x4d0168", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x3092e624513c7808549ffaf38668d02cf5c88e8131d4024312bf58bc4a87241", + "0x3", + "0x27a8ed7e7a9996ca2de2be150973e2e4ab9f97d8a446d73713afc87f57e1a2c", + "0x29a1abce762e3855ef3ebf326af3583b4d9be276e37d877a0f8e6a65d5713e1", + "0x30732a4669df28200c274ee92127c51b38a176ea9d2777ea9a7966624ae17fd", + "0x6511637e5421865d6a562c47f557f4a57c32de5bda4bb79f6660e351008d4b5" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4a8b04451eed7807c6c2bf011db317fca65aecdabe9a6f7cb9a303c61706812", + "version": "0x3", + "signature": [ + "0xde21829fef7d41c15e0a4559d259142fd8c2c58e38b680b64d45377b111946", + "0xe0b1162f0f1e5baa4eb30a62631a2435651196c6cc08de5298b4cfbc04041d" + ], + "nonce": "0x4d0169", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1ae22f43fdcb5372ec25dfcec438ef605b0fbd38c40fa4d111df7b36e2111fc", + "version": "0x3", + "signature": [ + "0x964e4526f193475482d8c25fec63434236b72804d834f82eea8e3cb241ac1f", + "0x4ab04645ed03b46cfda25da9db33a134612cae3253fe6e958be1a013c9a87e6" + ], + "nonce": "0x4d016a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x675a997e343e6f730b647553b7ba3c3e155cfc5ec3052f531b9c2f6a7a140e2", + "0x3", + "0x3dcffe144429184e30eb98330fa3aedd1d9a083cd58cdf627e76a6f2f8a68c5", + "0xf1c6c33291b34522bfe022f10c059dfa751f7867074d0681f8ede28d943f59", + "0x79462f3595db91268e0366fb5ac565d49a3f2cee379e3e09a08f1e46069379a", + "0x521d90783e5e2f7e2bad59e960de2cb9a5ef3b07c7c358076315c7ef24e861d", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x361", + "0x3316f824e8163d5e4075210f50556edc99567ca4c6ead30b491917070995701" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x40815bef4280c025ff044f4aec6e67016764309a50645edb8b852db986a7cf4", + "version": "0x3", + "signature": [ + "0x3ef3b3def6f18ad0f6474b7d1d03337bcbe2bd220b5a6f265bc29b60fee1f40", + "0x18a4830006ba55272dacd3aad07b719ee8bb2c3355b934377dfab29922f32c5" + ], + "nonce": "0x4d016b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x3228ea46d26f1f549cb10e8ba7b6a5da4577c2a94c1aca25e7bd2ef80b3763e", + "0x3", + "0x110b1c3644c612c21775ca993c7f02c2849a5423833aa6c5a0305b4360c5365", + "0x20a33335c00d39229a9b0babfa2b12eeb98ca1ac4a1546eb98f4ead57f866bb", + "0x68f51ad115cd23a12ed5ea848b0455c9b86d6c3ccb94e53ed35150a10f89313", + "0x7f4b0f9b94ec142979554d558bd1a7dc3ee44ddf364b2f5fd7cf82d07611c5a" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4c39f95fb91d6425da908312f53cda2dce62c49531d4ac51e323f8021e30aa6", + "version": "0x3", + "signature": [ + "0x76b8713bb7d486c03c821fb560943a7fe086913f2fe675f0a305f6ca66300a4", + "0x16312232a727ccfebdb29f2eace53eb9c38a21400b80bb0c4725fc4f2a50b5" + ], + "nonce": "0x4d016c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7f86ad9bba5ddff1d30ed29b3c369943fa744d56e8765fa6a75e13736120358", + "version": "0x3", + "signature": [ + "0x1da384b296ee13189e70a89ba495f5b80a21ed35c647cc1ade612c877a4a419", + "0x1cbfc49d027b667499575d46c78008cb84f9e0ee964213f356e3ca1af1cf1eb" + ], + "nonce": "0x4d016d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xf0b81a362e16f7e69a58f8c7d2add865", + "0xb04ac988f19105cac225d3c8ec509778" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x34f213996fea783fae9823d68f212fcccf387b746c3b5a7e513f2bd7f21b212", + "version": "0x3", + "signature": [ + "0x3e581dfb1369da8fa87e290fa9e59f2a19a8820dd8ee7db25afb22c6e4500cd", + "0x261cd8b57fbba9c35569f2224b4b2b1b5e1ee51ebb9f03f47d7357c8c8afa76" + ], + "nonce": "0x4d016e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x337", + "0x4743d6b100caf4f48d9ec4e078b0e07f4ab51acd94fb1f461d0fff76242577" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1b3439dbbc3b2f0dcbef56639a75960309aa292c910e12f1b3334d908eaede", + "version": "0x3", + "signature": [ + "0x1079d1ec11f2149a831e7854dc28e6bd760d5daa92b8fbfd3e8285083e08b3a", + "0x52750fa1c104d011c457206d7405ea56793ccd394217ea32102a90e78550aee" + ], + "nonce": "0x4d016f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27c3334165536f239cfd400ed956eabff55fc60de4fb56728b6a4f6b87db01c", + "0x3", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6da94168c3a8a96df9d0d212e4ebd508f21adb7faf04459875783d504491c97", + "version": "0x3", + "signature": [ + "0x2a1da3484f85a13dd80cfdb5f855287ca771c84a6b85e8f1b8adc9fa970cbdc", + "0x49aee72d82a4afffe505b4335230d28320b040e28eb5e6029b1810d49c998f8" + ], + "nonce": "0x4d0170", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x52d9f6700689144e6280dcdd15f0a0548f9747f8892f7ebaca84ac30fd2f097", + "version": "0x3", + "signature": [ + "0x103a7a1dcc8c6583e0777bb9631c4701165d7518ecbca41099e58c92c3b43d3", + "0x550d1bc02ee9e6925ee649ba1ee498147cfda6af63038bfe83e67519afdd7ec" + ], + "nonce": "0x4d0171", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x272", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x53" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x60ea07dc482349c414abcd73cf54bd3fccb0a493de29c2962619110f74ce108", + "version": "0x3", + "signature": [ + "0x5df880a7497377a2b96e724703d261b2886c09381ca172767d643deef26b3d4", + "0x6d80a29c19e8172f01c74797b35c80d4069723ee4c82985eaef6a864bdebc72" + ], + "nonce": "0x4d0172", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x241f3ff573208515225eb136d2132bb89bd593e4c844225ead202a1657cfe64", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7ce2e971ca121f986a6fe34f573f32c5dd22d5fad2f1a8ac4ba25cd1937c426", + "version": "0x3", + "signature": [ + "0x1546f72d97db2f453b36126a2a3143bcd58372e78c8b5f56a8a1c7b6c2a6197", + "0x1a577cda9fc045ad01533aa5100baf1e374092b101a5b86bd11904d11ae1c04" + ], + "nonce": "0x4d0173", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x234" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6cba62e7fbe0a8a6176ddbe553cd2fedcf67cceb02ef1437d7a63a231e32e02", + "version": "0x3", + "signature": [ + "0x60d9b1da81dcc2a2f1100b44f06c46b8f1208a4afef0598c6e4d1a825baaa72", + "0x4ae676af7b61402c8e4d34f4970a14a8cac6e31d5c56cf2c40514e98056ed05" + ], + "nonce": "0x4d0174", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x367" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x241cd3f31a7960105887d71def0ec6bb85380860814c38b9c8d281f73209302", + "version": "0x3", + "signature": [ + "0x4432965f64809821e64619f52acf6d6605604476f5a49d79b71a9b275d617f", + "0x6a6d239fc07eb3232633841d9d9343c7377e31ae1186d6e1600e24f9a39301e" + ], + "nonce": "0x4d0175", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3ede37d0221dd006d88ebe64d032f24e9f8845283f187c9fd896b53f75a7b1b", + "version": "0x3", + "signature": [ + "0x3b0e7e178081d541b2ca5e0a2f139574dc24af9bbc38e0e2817fe4025764b05", + "0x5edaab82723fccce8cc0acbe7a518f90724cb7df63cbffa6b2a709f24291362" + ], + "nonce": "0x4d0176", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x1b055f792267a9f2a3a2b1885c5b6638b8232411e1e856e807a40c82037b9d6", + "0x3", + "0x32ba356b72afd10016e6cdbaf5817188045d867f25b12375c21bf6baf85f2ce", + "0x739c18b8790c10f150fc4ccb71d042a3e75be6353528b235f1af5f0e53bb1a1", + "0x57f85ad22cbada7722edd2a284a9db27ce8e3f6649348bd7e1eed396b1a4bc6", + "0x70c0eb2f9310641c89ca35d92fc09b51be69bed51f3bec3a6b8efe3fb6f6c43", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27c3334165536f239cfd400ed956eabff55fc60de4fb56728b6a4f6b87db01c", + "0x5", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xf7a2b4f8a797be191805d70009fd9dd9", + "0x52715a9f27b7ebdc9b6aa1e3da849399" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x646de6a56efaf91036a1caa30f8ea3c80b9e69314c03d1941a8c0fc14fb1ad", + "version": "0x3", + "signature": [ + "0x716ae6ab0986de5847c8a450fefca7ecba2198f875b6de34814fd475fb79875", + "0x4aef350c0f267b74bd53a8f892d9cdf478c19c7e0e9945ceb611311327149d9" + ], + "nonce": "0x4d0177", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x3c1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xb607b6a99bcc7f0a24fc58a971cc6caad949afb568401543020ac07f177d3c", + "version": "0x3", + "signature": [ + "0x9a302af9bc1eae91bc1d0530ff8d6669a0860046001048e9d8c0b5ea9e4163", + "0x5489cf74f209dac4c909229aacf87eb84b0f9e9c3d99abe2d8d76adceda77f4" + ], + "nonce": "0x4d0178", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x83912031b1cb473d9670b37f7bd2c247", + "0x411ecd0a70f78edd746e3bc6ea8b55f6" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x370f3fe56d78358bff8f4fb5c9f5e20d0aafc23decc71d0500f9077688f5529", + "version": "0x3", + "signature": [ + "0x4554acf3c6a57cf384302120ecd0190762236ffb1e2e0c844f86e5c4afe8cc2", + "0x22500baa11d4cd915995be6050d612473ac8428ce51662070fe1af1e63d7a2e" + ], + "nonce": "0x4d0179", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xc86f24f58f279cef3904fe833a605d68", + "0x75f97cc6c45ae292a32d22b4a0a4d767", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x216de594e86e6d8f5a5439c38e1c2389684e8feea5aff15f9fc7b6789da6988", + "0x3", + "0x13a2306eeac64b25abb778a4f9b9bd7649504cc4248449a707868ed3c35186", + "0x3b34b2035d24f084da72490e28e1cd4e33406323978472b739a17036d368d93", + "0x763f7b4dace138e8732b5a5f316032f5b63069e8eee718e8a423a3684e31784", + "0xdb9bdc45e6e9b4546aa09c9ac9e09946980825aa2a9261ead7620f2f853d13" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1955bd7dc79c7e810e4daa349e0b0ca3d420cc82738563b595737ca8e4b12fc", + "version": "0x3", + "signature": [ + "0x5bf7957601fe4f2850033de964615dff9e6ac2d1adac589ae5355e22966500", + "0x54f0e6445d0535c4d7c11033830aef12bc9b17eed0a49a7ae7c2ff399fe7d0e" + ], + "nonce": "0x4d017a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x169f135eddda5ab51886052d777a57f2ea9c162d713691b5e04a6d4ed71d47f", + "0x4", + "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "0x5d3d7e6f8ce44d284155b58ebbbd12481f3e2c8140b2cfb2cd934e486be3d6f", + "0x0", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2b788f511d6766ed1a3cf5bf8e50e00f29bbd7ca8bd65edc2594f7b3446673f", + "version": "0x3", + "signature": [ + "0x6f05dcbc7e5dd4a252443dbfc122921684ba507c9ae5f8c125b37a5849a4ce3", + "0x2d157fb48f18cfeac028619c487cfa42b1c4a8928a80677e7ab72a60c1a49d5" + ], + "nonce": "0x4d017b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5beaf7504c6d497908fab99170b6421e8ce4f82a36c05e81e57c68de288a538", + "version": "0x3", + "signature": [ + "0xa1ae2929971e3cb551aa390b9651b3235e02db114988f4e09aff8ed7d2c7a1", + "0x48138925e478c416555d02d6a635b560e5ad1fef231d1d27c5a6b1f5d403a09" + ], + "nonce": "0x4d017c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x15f", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x52" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x39c64217f8c6e5f78e918a0794c93bfb55a0786952bab69651f65284c6305fc", + "version": "0x3", + "signature": [ + "0x681ef355a1fe25ff0ca6ba5c9ec5c65b0f98ffe1d5e9f1452a4a944bd57f730", + "0x688235e9f3dfed680afab1758c5586e6b014b055b0892601a084293e77e9030" + ], + "nonce": "0x4d017d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xabd75faeebf43dc2ae30ec29d35500c731c15ff52fd840f199a5582346b990", + "version": "0x3", + "signature": [ + "0x36e179c9f02122f70fe710134c9d085a2190b16379c3de4c25476165fcc5f0e", + "0x6eaf1a1c336e369351a53f2c861cbe29a21db8917fee57dbbc87e42a56fc08c" + ], + "nonce": "0x4d017e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2246a2b64efecf4997825f48400ddf936c26b51dbfd88d9ad865407572d367c", + "version": "0x3", + "signature": [ + "0x2ac27a9deb1307d095a817af67a570a4d86a6840b4b2792928c4dfd6b21aa2a", + "0x6a03ecfa2e672b7286aab0d8d5dc15da32323a0fa869398dfd7d5d0155bc15a" + ], + "nonce": "0x4d017f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x7f0c19f066be8d4207d0d99b15cc1d22", + "0x498bd79dfbdd93621d95b89b2b1b9e14" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x389927bf21a3f9e09d98b6b69c08682955ed39770a8d1667e556b25e74612d0", + "version": "0x3", + "signature": [ + "0x3544d476b55057c2acb368aa56ae97a0e20c089acce91615f2611e58580d918", + "0x108de8ada06f3d34aac5db57439f2091ea9dc67b126ef845ce4186aad0f2a97" + ], + "nonce": "0x4d0180", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xda9cadfac7e378fa6a7aa8173cf9a436", + "0x3662b1c6fa3f505d6602cbda9321dd" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x34e7b36295ddc4bc4c2ac8543f32e26d6cdd96a85c4135716f9c58532db8fb9", + "version": "0x3", + "signature": [ + "0x5d347e50980b7fc681165483d92e402e37e4fd0f7c79ed546c88ea9927e92c2", + "0x7a48571ee7a049cef5010c30a85878e6cfc94356112dd249d59ed166a739327" + ], + "nonce": "0x4d0181", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x137" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x38aa094b71b02ae3191694ffcd99a4dfe0b970624d1582b62838a7c66ab04a", + "version": "0x3", + "signature": [ + "0x48423f92c9a423e65d063a96d72de9ef01b53972bafcb8b674f7bad15d38936", + "0xad2af7cceb1903e15db95adef754f6ea1276c31486ccfecb56341867fabe04" + ], + "nonce": "0x4d0182", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x330" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x643269bb0a98ad55e59d93d819d4d33b5da76a83041262bf2627437ac6f463f", + "version": "0x3", + "signature": [ + "0x6660e02885020adb9d1a6da916e025a5465557ccce1d447fd861a182dc5d0ba", + "0x49998387c3016ac8664e19c9c6dab204908a1fcd47cf53b49bdf644d220bad0" + ], + "nonce": "0x4d0183", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0xf4", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x56cfe3ac23ee2ca090c1f6244893a55c1dd90cc5cdf4b58b5a3b5f7a8b46d4c", + "version": "0x3", + "signature": [ + "0x60403ee3583a2788ffd74c0751927fb6e6534b517ffc426b17b13d246078d3f", + "0x60b06206003bd13ce6f024db3de363842a72e2dfaf96a85dd52ec2c48cf3a70" + ], + "nonce": "0x4d0184", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x8c2ea4a2733533d8868a6fa7531bbc9e", + "0xb0cf3cc328a27327294ae783c21770b3" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x43ab5b760421ac182dea5668b69f1f060c7259da0ed81ede521f209655f2bfd", + "version": "0x3", + "signature": [ + "0x757014b5de0991f56e650e37d6fafdf50ca0404ff38c47886edb7dee826a4fa", + "0x32a2d68034521108132ce3c8051caa49caa219b4d2df45a3ca7bf2c90310a5" + ], + "nonce": "0x4d0185", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6cb669e9e840176ccf47a9277b5b546c594bad2ed23bcc3bfe63f2a355c0aaa", + "version": "0x3", + "signature": [ + "0x2f9e02c2da6bd71aaf2fe8e5dc41850b4b71c5f9aeed2907982b6f80679b41f", + "0x4ff5ee0aa770990fbc01be4a37889d5e7605982d4a7791195ca47e86a5c1a7b" + ], + "nonce": "0x4d0186", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x682a1dfabc52e9389041e904503c8bb8ac00e60744943ba4a5c0b49fd695cb2", + "version": "0x3", + "signature": [ + "0x7652bdfa1c64662c2803ed15a4c1cc254327b715c9e2852c024ec6664adbce4", + "0x6445d6fc40f5d9da7f94cba0f854ae8f8af70ada33928c9be4b3f346069b680" + ], + "nonce": "0x4d0187", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x31b", + "0x5a5f15fb688e606e7b10592d820575531ff03f8b8967c11e52f4b2e59dcc20c" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4e06a9943b6d6ba718553a0d26c8970653d42e0467c88178f0e43aef3e17baf", + "version": "0x3", + "signature": [ + "0x20a4230d1fd6ec5ca52eea919f1b6c3c36e44b71fec9efeeb76ecca802d2201", + "0x65481bd5686770a79406161a4daaf5a6ad5efe72b6bc1604a73e50b2524ab94" + ], + "nonce": "0x4d0188", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x167", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x68", + "0x751201072461a296c0480292e1e56f472a2dbb069ecf219dcc0ac91061bbb26" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3be4539b702f9c0bed1d4b0e7f55695615c9a1b30bb3eea92adccf4c4c9b592", + "version": "0x3", + "signature": [ + "0x7ca961ad6b0dbc0a49ba55adbbb59e367de0379ff8801ed5762442f4d038ac7", + "0x295a876f6b4ed7697d6f107b737b034f380535db80074c476f8b2e12741bf82" + ], + "nonce": "0x4d0189", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xaa9b9e028dce00ad073a2eb2214d8d81", + "0x3e739a25b039c60df0f46da2ed791220", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x7c3025b407856e419977fac918917983", + "0xa43639678b6665ca74ab6d4dcb8d85f3" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5d882d8c4b11eaac9b90ab759d31b55db4db4a2bc2bb15dcd535d52a5d7327b", + "version": "0x3", + "signature": [ + "0x4b7e368a3cee5b92378629d2d715b955a18c61136d0584f74ea55a35212da0d", + "0x494ed7a5d040f428bc1feb1056c04940fcb4f9f88ffa73654121baea36bd5e0" + ], + "nonce": "0x4d018a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x18fe78a41a83218763a3964733074a3b1295f3f58d34f4027d25e1c861fe74e", + "version": "0x3", + "signature": [ + "0x3408bb569060b7c819336b3d0ec4b2c221db43a45e5746b65384af2ac7b3124", + "0x1465b30284cb366adbd696f640d306c4e24b391b1fb497013d6bd6d707c5013" + ], + "nonce": "0x4d018b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x17da35ce4ed77e22e3b9149fd965dba57351a6c29f588a7d245e208d073e4c1", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x3ba" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2eec5dde849a7db21d9ff42b8644047aed3be0ebad919eb2d9eae5a41d9c4ea", + "version": "0x3", + "signature": [ + "0x791adaba2fdd3f3d063e34b68c153f85be70c7182dfee6a12ae6bc829ebc25d", + "0x4dd3083d0a48a0b6a84fec91a7b25a60b0f19aca7af8f888be0ff58cc375c2f" + ], + "nonce": "0x4d018c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x3f7866b3b5a83ff31c0ab0a5c694f6b9", + "0xb7b49beaebe9c34669a779be584d6cd1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7e825afba370d536898ada535aff3c69b6568e73d99bfb4436a395cc81ec118", + "version": "0x3", + "signature": [ + "0x6587b12aaf7c7b996ab7fa6891dc44c2aa3bd9fb07e4445466f6fbeacd18d1d", + "0x2456191833a9059dec707c71829df2ff89c46415ca80fb8cdfa062bdd8a5d89" + ], + "nonce": "0x4d018d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4c7e561d814f2ead46f6213b700f5e38a4470ca3960d15019b174475385909c", + "version": "0x3", + "signature": [ + "0x5dab2c053f04ff63e496fd18bf564184cc4a551a986a22a4cccd87df478f140", + "0x31996b49c64e2b2cf2acdeba7a88c1a90f4025ed9e70a5720df2da50b84a858" + ], + "nonce": "0x4d018e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x142b6bcf36547f884b1cab10964260ba1835242b54256fbfb57eeab6b5f4d00", + "0x3", + "0x2fb05f4d8fadd53e1d6b45bd2fa78c4afc2865e5ae6db7cadc3477703d8ab43", + "0x578795f376d9ddb5cc6605a2396cc8af3df7e1fe90ab75ebdc019f20dc4b96b", + "0x426ed78e1959351c68092fe3f6490c33c79b06e0d1259c54a6e9b528064ed8c", + "0x473d988b13dd09132ef1afe3fe4efdc3ed2d901d4594911a67a38213f0c5f4a" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x70b127661839b231914a28d21cf8ccde3641c51914ebbd7775fadb317bacecd", + "version": "0x3", + "signature": [ + "0x364c58221b81308abce776ee9b5e3ad4cdf7a7e2016abab156bb1194c1f62a0", + "0x5e4dc8a8d0e7f2313ebfb00859446f66d873f9cbdc72f5ec68dbcd4a7fbce3f" + ], + "nonce": "0x4d018f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x667613acec1e05d62feea472c7bf7342f8ab76cd78956df8e129e2e92149816", + "0x3", + "0x31942b9a90338b3289898641dd53d6b5ea36beef6ed91cf31745c42be99f7b", + "0x5f9e52bbd3fb0b2a60cbfaa1e721dfb27e7deb26503e3ec25aafd7f4ad6ff13", + "0x1379955dc7ec49b67d9a4bc7eca9e9264f3dd9f401ace94bd9be1e533852f30", + "0x1b5fa1cd803a9b406aef8347387c14ed5afcb831984c231db7f1e80174c1a5d", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x2a7" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x14bafffb4ead9755982414413a7e09ef6ab4a9211d7a5d5fc5922efae9b822b", + "version": "0x3", + "signature": [ + "0x38ca60b94f75c458aee82acea7e3d20b3dd10a755be417e86b8ef8ed9ca7a99", + "0x152b09e78ce435ee7da806b4f47155f01df55d9a993ac13904feb8de9499756" + ], + "nonce": "0x4d0190", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0xb4" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xeec4d5c8d00e421e0540d4b4f7b90651e0cbe7f87201440f412ba67ea03117", + "version": "0x3", + "signature": [ + "0x4ffb9b97430f97f4c793528c74700eb72d9e6658930039e2d76f5829860bb75", + "0x54f331b883fac5aff02b6e914ec6d2b9388d1788c3acf97ec80884d2b2631a1" + ], + "nonce": "0x4d0191", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6f4f9f4df88b85af1f368c84e3e688296962556c740564dcb2d3894f8cf58c8", + "version": "0x3", + "signature": [ + "0xec3ffc5ff8af6bfd72e435c17d604f44dad55c41dd9e821a7af1582a6fd0a7", + "0x5a79b358b36a44e3895345e0fffe802ff40ddde20e74920ad2617ec03594dc4" + ], + "nonce": "0x4d0192", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x756589ba9549d394043d21c9d4aee85bf86558d5ff65bd723b5e597f4a7a92d", + "version": "0x3", + "signature": [ + "0x6e0dcdb32ef8666271060f2a079413c380da3c4c4d29f27cf836ff2f77135dc", + "0x6c7ff8b6b28770d548f95ae4516edb746d11f6fbb6ea262f9add1728a66189c" + ], + "nonce": "0x4d0193", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xb0196bc5ae24ced16d422956ff2b9a93", + "0xf956588739d1634d5135a9dce2634771", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x3785a9877d4bc218b69a84a3ed874b1", + "0x1ea49de635a5ab115043741bc5d55ceb" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6f39b750434a1a2442bf4d31819f4bb28d0e9eeab5c92231efc8fade6fb7c34", + "version": "0x3", + "signature": [ + "0x24478445f539e574f4b2f2dae2d2e0998b98363f010488da2b61befa94f35ad", + "0x771034f1c61ae99c9f0a4de3907eb0ec1e553692e87d79a996ebb45bb87fadd" + ], + "nonce": "0x4d0194", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x1f36f091f5bed9c103933eb6feaf7594389c0b6a1db02724e0429d92eb7fe90", + "0x3", + "0x63c9a23eadf48e4b2576985247b3d62a89cee1784dce0ee89eee786c7afdb54", + "0x1235a41a93d092a6db827337e30e23dfa55ae7b90a39660503a91e3ec16e491", + "0x6155321295ce63b9a593ae6c5da2719f34c72e32a56c04046e32b6136d2ac44", + "0x37ff0e2741e7c7c123e95c9f0a4a159995e63fac355a12d9ab14a97d19b0626", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x123", + "0x740c2266b76c503684363a12b484c612eff91f23918444eb37c9b6256ffcb1f" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x24681963cc8a2c1903e7897e3df06f5dd5d09b1617be4a691a1255ce5b1bc5f", + "version": "0x3", + "signature": [ + "0x41a888569eac8613be1c30a6990047daf4f104c55810b786401d975ef8881b", + "0x61dd1b22e063b728e5b86172d4e2eed6a40ef749cca1d250c91f9a955e6ac36" + ], + "nonce": "0x4d0195", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5de374b729d1f7b05f30ab01b8e31ed075dca07ae8e979e5bd0767bab2a83a1", + "version": "0x3", + "signature": [ + "0x34e54e13c367d0137aa8c517223b93b6185cb355cd66447fa63239f4eacc017", + "0x42fe1888b3e4d0797b452ba377e19a07fc55604471e127e18a2d50b02ac8225" + ], + "nonce": "0x4d0196", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1ec65a53d552e931a56a0b869f34d8e8f4e6c90a9d516c720186198ea20575b", + "version": "0x3", + "signature": [ + "0x24ec756a969c898e21d2a3d7778486de30cdb5ab597ff30f5bee645596c44eb", + "0x674a7c91e0e39e2fddbab5314da242db5bf317b6a4119fe50e5c2bb70601bc6" + ], + "nonce": "0x4d0197", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x4e67627687c99b6e71e8da2b75b68e56", + "0x7560f66b3b9181ce3998e91d9149e380", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x78dc385cfbb57c86c71402930961f5d75bada1bf7f5da9ca2a4ed2466dcf47c", + "version": "0x3", + "signature": [ + "0x5ab70fe7d8bc75ad77f60649d13295d08f8c17820cad6c7b4ebbf675725caa9", + "0x1607e1085dde85e29fe6910755c1a6c9a32838b4ee0e39ed146d843fb0bbbcf" + ], + "nonce": "0x4d0198", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x3f", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x51ca4edb15d383783fbf9a4935a019872b6f0915f9a8b91adcc6284beab4975", + "version": "0x3", + "signature": [ + "0x4c98fd588f5b4a9f3bdfaca963e07a133edb2bcd5858df34455d46226f0bb91", + "0x446740d76fea2009b5d43afd525a81cdd94f92d5e9a088b001fe737815de892" + ], + "nonce": "0x4d0199", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x241f3ff573208515225eb136d2132bb89bd593e4c844225ead202a1657cfe64", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5fd81c76f927c7ec755cbdb881c42b2996cd8edeef4baa4499ffd4930a00e1b", + "version": "0x3", + "signature": [ + "0x3552de0cbe84b1445713604c95bef5eeacdb6b44ff4e6bbf99561df2300c50b", + "0x75d972facf52480248bc86d76551f79a08fe4fdf82b6b2bf4153564f4d43788" + ], + "nonce": "0x4d019a", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x359", + "0x5faa0b48ab3283c2c1f7c5086e2a537dc3f034f2f79e0ce514ec415405443fa" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x43ecae51a7385d6740bb5212e85177e769336690c47312fd34879865a6ae128", + "version": "0x3", + "signature": [ + "0xd3cd59da26733610c4eb3903c11f593d392ba1747addba406f34914dab447", + "0x2be9f84727d7f223ff6383d8de9e0fb22b75bfbd677da79602221633ef6624f" + ], + "nonce": "0x4d019b", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x7fe45fbb877c67b4c81300c8865bb88d8320227a2982fe6d2abf5c7f1f5d9ee", + "0x3", + "0x38a043df7c821e0228f34de5e6ca9c66126a0dfc22c880bf58b858a5e15a5f4", + "0x375f356b2e8c6ab26cf2bbaa1afb21c656ee756d5df7eed5a8370cfa9a5e356", + "0x171ec4173409d7182f4725f15e028182d74dde7d5004a995056604b4c9b6ca7", + "0x5be6e36ab789a39a93bbbb183f77ebcd28a1a559264ad7bec65b931d4e8cdbd" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5cac6eabe55ce629945dfd77b50fdb2fcb0cd965a8d779af240347d4f7782b3", + "version": "0x3", + "signature": [ + "0x6779198f772f208d2737d5395569013b9950b1e4fd4b735dc60e7421fd1d24b", + "0x7009a8e714eed35fdc8af65e888eef9de82c395414955f3ec7d4b4510c46d75" + ], + "nonce": "0x4d019c", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4e065a1c2373270e06b9b75bde0af35156c61004c20b490239697bf9740e77e", + "version": "0x3", + "signature": [ + "0x5c35f29e591df1293a9cebf4c81957d61f1e620a2208b730aaafa45694e4e3b", + "0x3ef336c8a8171e30ab229b0637ef6f1e82243c10911dfaf1ab88cefd2b1588e" + ], + "nonce": "0x4d019d", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x60a765de354c0c986b2e30ef78a664295750d3c0589741d03f04c9a6c8599d7", + "version": "0x3", + "signature": [ + "0x453f95450bb4c3b54fea232d59a56f78ecc450f5e7e3e472ffd5f0ad601f83c", + "0x36debca89ca15a5e3a4590bbaddca7431c797076b2648bbb95bdad46b849f99" + ], + "nonce": "0x4d019e", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x169f135eddda5ab51886052d777a57f2ea9c162d713691b5e04a6d4ed71d47f", + "0x4", + "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "0x678e27be4a55016882eafaa3c8af3633ff4e173710ed70f661d93825e3e77a1", + "0x0", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x66a772a0d3e6c5d7c7e1b63959728795532610e4f09558423027fbd21c59072", + "version": "0x3", + "signature": [ + "0x58dcc414ae47d0f1e1b7f0823c4597d9a2d6e51c26610e771a6e651c24c6ab0", + "0x16a43a088b4e7f5ba3750c5ebb3f55e60a5c65684622272f57b656626f93238" + ], + "nonce": "0x4d019f", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6aa07622164fe65d714df71810db7023a929e4b27e84684abeb8e1c96064a85", + "version": "0x3", + "signature": [ + "0x648eed821b858cbe17861e6ea85ca6cb9acab605e6f041dbf4dd39085694a7b", + "0x2d749bc8540394d5d73ed0687dcbf9c9b7dcccc9c40d25c49c8c56a71a82677" + ], + "nonce": "0x4d01a0", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x23b8b03167b032fcc9a9940f06b2784670efbb616fc89882d9e1ff2566fd6ba", + "version": "0x3", + "signature": [ + "0x75cb85a552c468130403ab186c58e3d72f171b213fe9a940724b1cb0b534bbf", + "0x7277ab0cefd1833b39170d8976aecf3271be3203f15bfb61ecc3971ef7366a9" + ], + "nonce": "0x4d01a1", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x339", + "0x2ee4b26e6043f1856d4241fe31e9f7b00789bf00a1885a25a747eac5930e823", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2d245511ace3e7d641229804cbb48f0d0be9adbdc4b225172020311322e8f2c", + "version": "0x3", + "signature": [ + "0x69c3cd015b74a829544cb9691a40ea36b9df17ebc30bf459e8dec45f3023ec2", + "0x12cdafccdca7abfa8ef81cea944f2c202193c0699dc4d63462a9ef768af8163" + ], + "nonce": "0x4d01a2", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x58adcf2ce439caeacefdc11343ceef2d", + "0x2029c221e793da002e3fec6ac835f387", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x2f6a4dafd4b5995afd16b32591b051316ebf6acd8316b8b42b9be19e00a8485", + "0x3", + "0x38e1b271efa38e66fa0721206ed3ec58e4356f48b2beebfe056582d0e6a902a", + "0x39c62c6bec0290e171c1c07474a979bf60dbe4e66feb5a1ca8b1451f5b04c8", + "0x1a6d87fb631fe8db63d90b9dc23727de8c5d794f27a678ae5234dc10a7384c8", + "0x5946b085d009980be9bedb74f07f5fbfb74a79afc61051bd4e4365090e2d699" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x1e9428e365e5ecb40b3f3d745d985af23b79c8e803bf6f2c94c6208f4f8fb47", + "version": "0x3", + "signature": [ + "0x7fe54b84df7d544bf55b4148f181c65f834cb463b63f9e6118590f4dcd0ce67", + "0x3af034b7ae5c53f979e9afaeee2c064926551863ae5aa03e3ae43a61d1f8451" + ], + "nonce": "0x4d01a3", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4462cbfc474cdf82bdda15c125c8d7374343f9fac1936b341d4d3c99008d295", + "version": "0x3", + "signature": [ + "0x1dc60c2b624cf35944ff8864adb8700675ecb62290fc3d0a25df2b345f655aa", + "0x4c1640e39750834f0ee56fbc6ab72745fdb3e9f8c2f113a10dd59c807618f68" + ], + "nonce": "0x4d01a4", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x18f", + "0x15a509d13e2b1ebbe6cabee857db28b593267963e2744daca355e17c9c9cf12", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x564efa83d7ecc5f4249fd66b7991572405a7b3807d5090e71a30cfa841064a2", + "version": "0x3", + "signature": [ + "0x42b15f3ce43c8fec3e10cbbf3afba93d1f02b076137b656ea7800c1cbe8808f", + "0x6fbc416daf52acd3cd768cf0e9baf1affd6cb55917192becef9b6e88ffabc1f" + ], + "nonce": "0x4d01a5", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x9158ef2997f12596706e74a50cd7cca6", + "0xfcfcdcdca2c13bba5a976b76c7f8b012" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x80402dbf58af96914b672dd81487df42ac6a276efd175af1a08ff2c635f9d0", + "version": "0x3", + "signature": [ + "0x2f6b1b923e715a0a3f3e947b049592308ffd4a5388850b89291802ff89672bf", + "0x43e1375f1347077553b51223f5e9080abf93d51a7f1c4f61fb031275e73e908" + ], + "nonce": "0x4d01a6", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x7ec4336eb0a997030128bec0b10ad066", + "0xd72c6659127d0f527a5128ccec961874", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x3d3da80997f8be5d16e9ae7ee6a4b5f7191d60765a1a6c219ab74269c85cf97", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7bf4b7df521c148f06208299424f739a75f2da84b32d91f72b85a87e7ed7c77", + "version": "0x3", + "signature": [ + "0x527740ddcc3c00dd114f1ab7d7c40e2cb7be09377489e600fcb42b2db62b8f6", + "0x7e8f57bf6840512b964c52c871df2d16cc3136d182d222f756965ad77d78623" + ], + "nonce": "0x4d01a7", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xc0f34b01a9affb517f4e54d0ed3dfda0", + "0xd0bec7db0315483432b3bd158c618e1b" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6fdae1bbec976af03a6fb3b0db55c9c80b7f3cd01717fade7492cf0dc8f7cff", + "version": "0x3", + "signature": [ + "0x6219a66af0f6750d75026868dbea0384179f2fb616fa917afbb7201be10ffca", + "0x329ec2e9199ba7e955f1232921b4bb6603d20cb14630354f74f578e79c86510" + ], + "nonce": "0x4d01a8", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x61c76c61c66ac5d59cbab0af3c6d300cb3ad8ba11d1bd01b903049093748d69", + "0x3", + "0x5d492e30f6f53b57b82e522fbd1337df1f362004497ad7ac389d9f6719fa32f", + "0x37992970b26c4ad3327df6b8fe5a4cec2f15d600babdd5d9be3a83d9248b442", + "0x344cd7b9118311ee75a2676e1e6b8f7b5f38fe681f66f6807b32fc3740763d8", + "0x37bb32598800f79056c2a5ac299c1e42a7208ef683cba26ba2876b13e919bf7" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6a8972df24b1bfb6c4d422a0a38a0561fccee5d046da5e9104aff7925c92d5d", + "version": "0x3", + "signature": [ + "0x4d24849f822d97015aac3ba6feebe47adc0442bd90f41686060770020dc3c9b", + "0x6a886cf35e233b120122c225760b919f8f35e7ab8465ed255553a763f8434a0" + ], + "nonce": "0x4d01a9", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2d7cf5d5a324a320f9f37804b1615a533fde487400b41af80f13f7ac5581325", + "0x4", + "0xf38276c4c6e7c36a8daf4d3eb949d9ff99fa4cda", + "0x2", + "0xb9", + "0x19d" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x18b0b3ada53834f73041a1f73c48a75530d6ee78b07d2a6d63a9b879ed093a", + "version": "0x3", + "signature": [ + "0x66ed93a50a4e202ad26917753394ada75ddd9fda3a18f3080e0943ef9a58a51", + "0xd4013492cfffbd54a7433dae15f1e139b04efae226b6903df072c7c682f7fa" + ], + "nonce": "0x4d01aa", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4034b35bb388cff7db00e210e74ff65d2ec792675ff71916d10f11e5b59a4f7", + "version": "0x3", + "signature": [ + "0x452812698c2204bbd5f4888b98650bac6bd1b14afa966ffa8969973a1e2f05c", + "0x3267a27e7d8db6b0772780d5bf07827906a54519e0c1f712db0a6b6dd08f5e1" + ], + "nonce": "0x4d01ab", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2bd8d12f680bdcae11f46c66e1865caabbf33e009eef38e1916220e77ddabea", + "version": "0x3", + "signature": [ + "0x5651388b008d08e43fc1506eaed494e1a50b78cb973b76cb9e86f5cebb6c59d", + "0xa5bb6d942719d71beb278c2e7f41561c2bf4ea831e49d8c443c8770640e4c9" + ], + "nonce": "0x4d01ac", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x628842facd73664855cf1990a3156b7b99a572583269bdd6c2922ad4fe7162e", + "version": "0x3", + "signature": [ + "0x4cd4b5f1f0501d86bdc190ec5e20f2289d98d7e18e3905a79f8b16ed4dd45ca", + "0x53fe878ee78caba8ec94a9bfc8f04441178e2ad04c106ec73bd6af533c97962" + ], + "nonce": "0x4d01ad", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7ac13b703386c3b9457f00900f7bd02ff6cd3efee6822637663a75ee453dac3", + "version": "0x3", + "signature": [ + "0x23da26c1ecfb70052ef38e6d76c16d1d818a169ed57792baffd47eab42e5485", + "0x138353981f1da71d2ecc38c76fb7f7c7e5f2de5041f2b16dbb6df5ead5468c8" + ], + "nonce": "0x4d01ae", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x6df2719d9039c83b6288a6e32e0e4049", + "0x4bd2489103c7cd8dc49e2e97e830eb41" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7671da415f19b8ea9fecc25e3d9f6ddf80bf3776344e694e35895f6df338520", + "version": "0x3", + "signature": [ + "0x240491cf39ded89daa8b13a6baca26da0a82765f2d1e933413148da9b71117f", + "0x254632b4afc2bae1e430b2fb93693c3877ec9ad99ce3f46378b84a84610af4d" + ], + "nonce": "0x4d01af", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3d68175d9560c0fb66e3c9d46a1857c32996cd8042bcd136e4ee42ce0d44e8", + "version": "0x3", + "signature": [ + "0x274bddaa0ec1e44237b8fac5c07e90a650e5339f463dd5d29a6ab23e27aace1", + "0x3cc32f9c8a16e4313f1e70120ef1ae0611964cd72c23c2f542a249829e71e6e" + ], + "nonce": "0x4d01b0", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2726ed06aa105ec21286f7829b86383bc1dbdbf9655c2cfc404389338c459a5", + "version": "0x3", + "signature": [ + "0x3213b511d72244f61d6243c5e24e9352abe311e5630cef9bb81bb0f67162449", + "0x746514dd8b9f6d434154bbc82ff9caf0bf5ea8d208e50c65e94f9773df288d5" + ], + "nonce": "0x4d01b1", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x7dfe43ee5864bb68d2157b25bc2f18d9", + "0x3a2d79d94b7dbc6070404228f415c9fb", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x48eaf919b239d7fe0c3d365b9b3e34a9", + "0x1e295074ebbe3645dba71b105e718c96" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2cc6eec3f1948533584950ecf1b5961faa03a0697eef8806322274440953918", + "version": "0x3", + "signature": [ + "0x7bb7a6dfb94ba627aa03ef35d82abd08e4cc430591c5c1866f19348a187b8b9", + "0x2f99aa4da0f8e87a713038f505e46c2651d764a330edeaae4b34558a2638583" + ], + "nonce": "0x4d01b2", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x549a6bb1bc30cca5e4878f2a3e6cd0ce3ae25f256bd58b8ace19f9326b55941", + "version": "0x3", + "signature": [ + "0x288f6e5775bd2cfc6071171834ff7a650cd71c68a431a87f35e735a59f9aa1a", + "0x51c101f32354a5c73e2b93396fc15ef408a66343b32cc865236e79fe4b9fecf" + ], + "nonce": "0x4d01b3", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xf818e4530ec36b83dfe702489b4df537308c3b798b0cc120e32c2056d68b7d", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x24cf703f5777fba9400b9dece8a72c3c4605a4ed1a3b28667dbe7e4c363c40d", + "version": "0x3", + "signature": [ + "0x2c512fd4155580d65fa5a6b4dcb8c0b935642a4d890bfaf2fc9853752f29515", + "0xb7f0441eb2aac602bf46e66381b7ba02a4fa0863ed605998c9d21ddb274f53" + ], + "nonce": "0x4d01b4", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x2873ec1f7a8034cbbd2a309783121559959cc1a73b5eff3d803cbf35f7b9760", + "version": "0x3", + "signature": [ + "0x102f199b472e4542ab64fc20ded06044ccb24b884d889a80be99296405b1607", + "0x32c23ca2dd3aaa0ed3629837d514064d804d8ddf08bee2fa8711c94c87b8825" + ], + "nonce": "0x4d01b5", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x241f3ff573208515225eb136d2132bb89bd593e4c844225ead202a1657cfe64", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7dfa74642e260cb91bb420d426895256ee04c28e81b6a5aee48a3b93923161c", + "version": "0x3", + "signature": [ + "0x367ff7efd365e711941e41b38094f36c371596f9f5457286aa7cf9d19d315a", + "0x36163f8d80f1a2f42a3a76f7e3c6a5131880636dbd3d63a822115bcb0b30e2c" + ], + "nonce": "0x4d01b6", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x169f135eddda5ab51886052d777a57f2ea9c162d713691b5e04a6d4ed71d47f", + "0x4", + "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "0x6ac003e8ea4b49750f17f294b17be28912551f1feb15c56be04a86768280e6d", + "0x0", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5ded4f9880535fec58e68b47d5e34b33ad712c6831f1586948d99987045d55", + "version": "0x3", + "signature": [ + "0x2c528ec605d4179379a05f4d704d53f231615f8cb38596e2d222c4047f68881", + "0x5c41741cf26c5d78c9cdc83982cb5bd404252c649ffa52bc5d74ebbe88a33e5" + ], + "nonce": "0x4d01b7", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x678dd7800d8e3639c12d5bab33b3840caa43d26c28924b47b7e3f18ded665d2", + "0x3", + "0x1977beaa5aa8b4ad01386800e9992f33d3fbe68a2fd5041814276d376bd85e9", + "0x5a721a2eb73a5a67bd136637aa4e0da6fadd030964b789191dbfc629f3b8736", + "0x7265d69c224668a5aa44a21eb199de1e93e4007c31b4d67bc9476a2f87f88a", + "0x1b0994fc212e7673f5e419eccecaaa369147828cfa1017e539fe7b6165dad93" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x570208fa2538f1073401fb873078e566b367f0ac91946e62f1b96d485186fb8", + "version": "0x3", + "signature": [ + "0x111dcad906460fdd2a110d0b5312f1d9048779842ac5f55cffdd09b857e8ef4", + "0x6cc6a722f0e519ee6a79596115f63ff55e9016b9820199824032b21a394c169" + ], + "nonce": "0x4d01b8", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0xbd" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x64e014591d13662140422a96aa3195ddc76518999d70fc587c194969994f60e", + "version": "0x3", + "signature": [ + "0x3eb66cc3db76456b47ed102e0fbf83284ac977070ac044f6569b80114c3131", + "0x1a1272d2616af30390ceb724e1e3544e3524f06aabb3ab47aa17ef385fa746e" + ], + "nonce": "0x4d01b9", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xc4c7d5798e75cd7f9fb3e1d482fc3c1a", + "0x68e714300306a7eab78be2c048f89716" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x3d10f3b960faf026ad209cc47fd8a9f0f4d73a0978293676a026deda96453d3", + "version": "0x3", + "signature": [ + "0x159ba436e3225cbcc3a5c008326580a4ee087ac2458d648ce755644eab5385d", + "0x6ce6e3db67237857eb607a54bd01e3fb0dff5e937e355344d35d32c0b7023d" + ], + "nonce": "0x4d01ba", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0xc57032f255d699c50fc84d20a4b86a90", + "0x25b79a36598ab8e2f9e3ed72e909effc", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea", + "0x1", + "0x2fd9126ee011f3a837cea02e32ae4ee73342d827e216998e5616bab88d8b7ea" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x985b398d7e49f4d4690d8fb2b64005c3a0e32d88ab9cfa6664b54c1bf650e5", + "version": "0x3", + "signature": [ + "0x211db48e0a5156825739272d2546073fefcf50f945be057acd7df6bbd3ea01b", + "0x4f113b0915b1b0f7f08d7587e80fcc0e2342bbf4b5a1f2797fb31a7a09d3b7a" + ], + "nonce": "0x4d01bb", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x2c9", + "0x3dc59ef5f27dfa4b73acd9df91b8358c0d9aadb63c38b1769d5eec5d79d277f", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0xf3a86f02a2a8486a72cb858f29f36844", + "0xad2d1807500cd23f5fde1e160954706a" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0xf0da58c49365418670f920f87a6b0e71760ca0a7f75ff48d41d855eafbd051", + "version": "0x3", + "signature": [ + "0x7f907afc9c8aa556ae21b2037724a52829fd7592ac3aa07ec8c848c2b42a5c", + "0x5138d034a9752055489567d53725e7c606757aba928f11aaf211390a9215123" + ], + "nonce": "0x4d01bc", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x5df99ae77df976b4f0e5cf28c7dcfe09bd6e81aab787b19ac0c08e03d928cf", + "0x1", + "0x201", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x7b18a13104be83ea7d37c729861df5d7fe9009b6e0c1cba50132455a5847004", + "version": "0x3", + "signature": [ + "0x27ba5b6e484926a946d7cc37fb5188ac4891296ce8d501c8bd3d41503116419", + "0x5995ac08ba20e1613e822d99df9ede5d1599805995448cb6ca38232a8754a7e" + ], + "nonce": "0x4d01bd", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x1136789e1c76159d9b9eca06fcef05bdcf77f5d51bd4d9e09f2bc8d7520d8e6", + "0x2", + "0x7b9412038afc7aa5c01adb585b67aa55", + "0x1c73b4c15149027efe52503c4739d1e3", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x1a8e87e9d2008fcd3ce423ae5219c21e49be18d05d72825feb7e2bb687ba35c", + "0x2", + "0x4014cd1c73dd57a1ed7584b6117e7115", + "0xdd2d5de0bab13650c732319b84bb7fe9" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x29eca77cefd146b8f237010c7a43dfa5b852c26ce8c99288a7dc4e451829d", + "version": "0x3", + "signature": [ + "0x54fd6d62896eee49e808a46f449a478029f91d8413295b783267024463dfc66", + "0x13087f43be0ae35cb4dc868aa7401ad5890a1de07b8da6551c071251187945a" + ], + "nonce": "0x4d01be", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x5db932b3e999afb24503b9ce23a8a0c7a22bce650a3641983d1402a140ef5b4", + "version": "0x3", + "signature": [ + "0x6be671b281e0d11665bea559e350ce8b2e81b3a71fce447302420220a241993", + "0x579ba1cc0c76a6907a2217d1101417c6657c9bad736a6c8ce201940150bc635" + ], + "nonce": "0x4d01bf", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0x2468d193cd15b621b24c2a602b8dbcfa5eaa14f88416c40c09d7fd12592cb4b", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x4844ca75bc10bff86b4db4c2662fa3790abdffde2c685bd6d7f116084185bf5", + "version": "0x3", + "signature": [ + "0x690b972b3d87f48a45f35e367319ce22f238a4920c615afbc0d7dca7a469a1f", + "0x1fa03b0343d116767398b1e9f4255a1b38cc9416a89a1e8f9252346d0aa97c8" + ], + "nonce": "0x4d01c0", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x2", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x27a4a7332e590dd789019a6d125ff2aacd358e453090978cbf81f0d85e4c045", + "0x2", + "0x87", + "0x1e902316d06eb9fd1d7ab1bc085c3865b22a139776df813d26a8cb0b9569969", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x382be990ca34815134e64a9ac28f41a907c62e5ad10547f97174362ab94dc89", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x50e072d51996873eae2b020502294fb9ac001395b00869108ed2f854c8fee2", + "version": "0x3", + "signature": [ + "0x71bcfd47080149312280986a849afe3f2c89b34922aedcd293d555b3726d33", + "0x3931e75efb3d0b11ed9cd953b023fbd34f74a80cbb63835dd2ba69c3bb2d623" + ], + "nonce": "0x4d01c1", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92", + "0x6", + "0x4df105c97436d13814b5a3557e62f08c87e06ef711cd76bae9f880cc7cdcb34", + "0x3", + "0x3a8abec36b9ff192686cc6d554bc9487c99682333ceaf3b7b339160dcd1997c", + "0x5b79b5d32bf600a30ac095f6587976647a62ddfccd29b38b85979b560f91539", + "0xd94fd54f9f7d674703bba4af53f2d11daced123a6967da6386863611f133f7", + "0x673981bb1d1d04276c9992d588fb6923f2497a20fdce607b5f38a26bc58797e" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + }, + { + "transaction_hash": "0x6a9b2b698b49f21bd9b91a507714a8d14afc37b707bcec25dff433ac569ea99", + "version": "0x3", + "signature": [ + "0x5655f6e65c8a52c2de50b6850e0d9ef9cbd06e05baca538d1c69d6f5d934829", + "0x2dde3666406afe26a36bb1fba9f73055ef355bc9cab130b465f10aac1b10ad8" + ], + "nonce": "0x4d01c2", + "nonce_data_availability_mode": 0, + "fee_data_availability_mode": 0, + "resource_bounds": { + "L1_GAS": { + "max_amount": "0x11170", + "max_price_per_unit": "0x3e871b540c000" + }, + "L2_GAS": { + "max_amount": "0x5f5e100", + "max_price_per_unit": "0xba43b7400" + }, + "L1_DATA_GAS": { + "max_amount": "0x2710", + "max_price_per_unit": "0xaa87bee538000" + } + }, + "tip": "0x5f5e100", + "paymaster_data": [], + "sender_address": "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "calldata": [ + "0x1", + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8", + "0x0" + ], + "account_deployment_data": [], + "type": "INVOKE_FUNCTION" + } + ], + "timestamp": 1761654203, + "sequencer_address": "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "transaction_receipts": [ + { + "execution_status": "SUCCEEDED", + "transaction_index": 0, + "transaction_hash": "0x2d5f54704fa03a419bd8206f4da767c078dfef38ab136ae4e5afcca9e23db0d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa0148c69e1320", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 28133485 + } + }, + "actual_fee": "0xa0148c69e1320" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 1, + "transaction_hash": "0x1bd919403248da3ed5d9f4839d3c53accabbf46824e521a1d8e449d0a5e0b79", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5b5cbc44fa60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5400, + "builtin_instance_counter": { + "poseidon_builtin": 22, + "range_check_builtin": 226, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1003535 + } + }, + "actual_fee": "0x5b5cbc44fa60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 2, + "transaction_hash": "0x1fb1e6b962a752c7908452fb688da8fb1a10e1a7f31974937a68a0bcd083167", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5cfaa7f9f660", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5395, + "builtin_instance_counter": { + "poseidon_builtin": 22, + "range_check_builtin": 226, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1021295 + } + }, + "actual_fee": "0x5cfaa7f9f660" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 3, + "transaction_hash": "0x5fc4ba7708e32649f75ce8a73433211e6c7498661b859878d088a017f28bd38", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x2da691c6ea98b793c80ad0ea4326e30ee6980fe5806cbf07b730e9080bd239f", + "0x3", + "0x541114b6ab7d15ad94f4b926254cef4af78df6676807ded676d7b220bb2235d", + "0x78f0708246cc3c9eba6e196117d5811d43b0af8598e195f47cae9f4fcb6bbc2", + "0x11e74258f2da53cdc5106099a2d4ebb2b68118263fe031deefbabe261bd0f76" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 20, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 4, + "transaction_hash": "0x29591c07c917ced4789035fbf42ad34e49477b2bf0167e550512252afa53c44", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x69e89fa398e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1163315 + } + }, + "actual_fee": "0x69e89fa398e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 5, + "transaction_hash": "0x255be68d67cd61f631460c085dddf2d794b2513d10762902c5ff1661d1b9f26", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa898cab37d40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5395, + "builtin_instance_counter": { + "range_check_builtin": 226, + "poseidon_builtin": 22, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1851890 + } + }, + "actual_fee": "0xa898cab37d40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 6, + "transaction_hash": "0x43e198ad543d0cff82e4d3f41524cc9722691d8353d298fb010db1f8cdc50fd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x57ceb0f62e632d8e07ba5ad871c5c17b6d92628e420bd99db16fda1fc59ce81", + "0x3", + "0x78c29088e290497c4f26d1c524ab41fca6b9f83630510b79fdefc2be6808ad4", + "0x58daf38835834b28bfcff618f70a06cb6eb54fba222e893cacdfe05fb2b6faa", + "0x2d661e18cbc6550572f02c4f5c79b35e463d104d86a9c6a080d1b9841c61f84" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 7, + "transaction_hash": "0x4528ced42391594cac7e5febff81a6cdbf04ca6844ebe12533a247ba6dbb23a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 8, + "transaction_hash": "0x39d4e72ab77d7d850e8fb107ecac16692a650718ca0f69e72424816a8cc9372", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x76f1dc06c8a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 20, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1306505 + } + }, + "actual_fee": "0x76f1dc06c8a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 9, + "transaction_hash": "0x43c372fb2854fc4b7e525c39bfe41982351145417c1955193c1168ad35f47f6", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x6e8f1ca4e7e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5986, + "builtin_instance_counter": { + "poseidon_builtin": 26, + "range_check_builtin": 311, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 416, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 448, + "l2_gas": 1214395 + } + }, + "actual_fee": "0x6e8f1ca4e7e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 10, + "transaction_hash": "0x7c4947c54416bda234525b40d2d721219c9d1fb922124fd26e80849726c8575", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xc5a07c9d6100", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 2170760 + } + }, + "actual_fee": "0xc5a07c9d6100" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 11, + "transaction_hash": "0x2f9433c6fddc301eaf2dc0ed683387d2f8ea2d39096f881d9f57fdfcf4fa1e4", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x93510cb207a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4918, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 21 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1618145 + } + }, + "actual_fee": "0x93510cb207a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 12, + "transaction_hash": "0x628e4c573460da14afb676821478cd23a8e13d9db2bf453046f2ebc8060c2da", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 13, + "transaction_hash": "0x7a84eddaed207a43d6710bbfcc91b112c959eff3a4fc1280afc59be9c1f355a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x585e18ae05a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 970641 + } + }, + "actual_fee": "0x585e18ae05a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 14, + "transaction_hash": "0xa3046f3f3bed24b3b9c291e9e27166fa55263a7f45b15799f839b4dae5c105", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 15, + "transaction_hash": "0x62cd9e10069734ecbcfef62cde47de6889b625260ad4016b0b1a45d7bd676a2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x76534878a020", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 20, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1299701 + } + }, + "actual_fee": "0x76534878a020" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 16, + "transaction_hash": "0x6be4278c3139e72fd3771aaaef10eaa5be7b6f6363aec249801035bf5581d0a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x275164c2685098b4d843fd4e22c20c947db9f8805e1e226c542757348212449", + "0x3", + "0x3ab7bf641fac93ecc111493fbe276b841514cf4e6cf290a71104526407b2b4b", + "0x40397468f898244863262181920befd444ed09a87f17ab0a6509a1bb90e9876", + "0x23659504490da0164bb499f1168b9072dac6cbb8e0664a4281dcd03129613dc" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x62bdf2acdce0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5428, + "builtin_instance_counter": { + "range_check_builtin": 226, + "pedersen_builtin": 4, + "poseidon_builtin": 25 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1084595 + } + }, + "actual_fee": "0x62bdf2acdce0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 17, + "transaction_hash": "0x471066e4bccadeeb87e76e85208eb258fda728c0b4e96642a177ac61711b4b3", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x76534878a020", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1299701 + } + }, + "actual_fee": "0x76534878a020" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 18, + "transaction_hash": "0x55f9bdbbe9ba5a3af8699cad62444f8d8b8c378c9c459876843890e06481c13", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4ce0edb9b520", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5378, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 226, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 844445 + } + }, + "actual_fee": "0x4ce0edb9b520" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 19, + "transaction_hash": "0x3e55f69bab145604f50583b8fb8f28dbc5036a34d3e8ce6b1787ec87d445afd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5d1740c5ae40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 17, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1022522 + } + }, + "actual_fee": "0x5d1740c5ae40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 20, + "transaction_hash": "0x1266043d904be5fe67b6f31f0706c8f1929630cbe4837358eb7cfa9dd3325cd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 21, + "transaction_hash": "0x315f82e41bea3e9f821499bc218cc71b931292c77279bfeb09e89c46da98c6f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7553f051cca0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 20, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1288745 + } + }, + "actual_fee": "0x7553f051cca0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 22, + "transaction_hash": "0x2dfcf3da412080423fed39f1c78bb02b761daf7e30d0099508ba1c8c9ee5860", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x41b7d3e2fb7ab639a524ab9dc87d83c477f34e9dd0d045d04ae0e0c79544d3d", + "0x3", + "0x74bf288bcbccb592b056bab596e6bfd0cc7eb9275e0415894aadf74243d6b52", + "0x49e8336ab770c86979be4d34b28df1517cb85d8f65b3f5fb08444f17bfbebd7", + "0x1a78dc60ae953c74f0639aa5b3a9e1cf06104f51654c8f9ab476c997e47ab96" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7fc5a496c0a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4940, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 23 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1403465 + } + }, + "actual_fee": "0x7fc5a496c0a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 23, + "transaction_hash": "0x58c8c359256d500ee6cb1bdaa7c4d02ba25c227239dd8b443f810f41ff5aa9a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 24, + "transaction_hash": "0x50c8999ced80ef12486df6ffa7f81db1212cdb18805b0dd9f81e4ea0a1eee43", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x76200cc7d3cedeb38b72b01ed7e82c14f3d0187c7ee495ef88f77bcb7cfca11", + "0x3", + "0x627053af3536a8619997349d3bf81c45ed4c89341bcd60a7452dfe88ac461a", + "0x3a8fb58d54e383ebfaa5f479e79c178bdb5d99fd81966202abc59612ab63c7d", + "0x78c97ae671e5e542df9a89644bb44c712f7d7fc856ef30c1f7b4e3931a6ea01" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 25, + "transaction_hash": "0x394b7afe03c49e5461b686d8c52b86029be783054aa7e8b6d2420b74f251676", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x1fd5a414d80fbf1cc6804be94b1184ae4229259217432aad0ba6f4ab2982f78", + "0x3", + "0x7294bc4c47ebd4253f1576693f45e5bea3e7a7366174c3c750d1996d51ee4c4", + "0x39a8b46b09527db2ebd9a4d94def5c7a3856084325f1a0cf052cc8d0779d15c", + "0x501deb30ae663e765dd54d258378b06c0a42a126f753634b673d7ff4d0f9a35" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 26, + "transaction_hash": "0x519a333f63ded28c9d39770b68d3196449661a9e4d5d1e9b8b75cc6269f33f9", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x9972086c2aa0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4918, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 21 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1685465 + } + }, + "actual_fee": "0x9972086c2aa0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 27, + "transaction_hash": "0x35a0ccf953c2d6805e6bfcf6d8d4f1300ffae64979171bde7a03f65ea3b97eb", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 18, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 28, + "transaction_hash": "0x617dc764acf0b98a79a6c32c332a25e543d3cb98cb46a293d92f4d4491ecc7b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7963c655b1a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1333361 + } + }, + "actual_fee": "0x7963c655b1a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 29, + "transaction_hash": "0x10ced6c96d1073a78ca1729f5b679837075c3a29327a2ce829e5bd80650b25c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x49da5d8d1fe0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 811211 + } + }, + "actual_fee": "0x49da5d8d1fe0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 30, + "transaction_hash": "0x1bcc79d1b785ee82e90d78069e1f8c444ae1c68b197291b0431102c021ea17c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x69e89fa398e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1163315 + } + }, + "actual_fee": "0x69e89fa398e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 31, + "transaction_hash": "0x4e830afaed8677b20c355c02a4bb25e1477190620cf9ffdeae20884f96d634d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa492e2601480", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 19 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1807700 + } + }, + "actual_fee": "0xa492e2601480" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 32, + "transaction_hash": "0x29861e592ac9f417094a1c3178a7d190e1feceb3a1df97f93c2946d435ae77c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x24a4d16026ca3a14274645bb5f2642e4833bebba74bb6223374aa89cfbbb591", + "0x3", + "0x7ed8fe3a856e99355f8fc62abb7ea52b60c04acc87bd91f2ad7691d67e9fa7", + "0x168b137ee6ad08cf97ca45eb03ede30b664b7eee35b1db359d2bf23839e412f", + "0x1a4670e4184d04e55ef8fbb38d875bbbf1bb38acd79e50af84608f8af19802d" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 20, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 33, + "transaction_hash": "0x374cb830a9562c948279d570242fe6bb500adfaa353e32d4484f00a6cd59e67", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66fb88c491000", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 20, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 18098784 + } + }, + "actual_fee": "0x66fb88c491000" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 34, + "transaction_hash": "0x6d3e19e0b423a6908630ad2ee90e4978d1b8eef958a32a595cbb5a9158dc81", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4ce0edb9b520", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5378, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "pedersen_builtin": 4, + "range_check_builtin": 226 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 844445 + } + }, + "actual_fee": "0x4ce0edb9b520" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 35, + "transaction_hash": "0x233988005928a56978e8a681261876d44634a7e07e822a443efd0ed620fdea", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x64ddeb069860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1107935 + } + }, + "actual_fee": "0x64ddeb069860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 36, + "transaction_hash": "0x55e265645d8dbfab39be8e9b7bc1849a05abd43276d23c3fa56d60f5c3a062f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x961713d4cf40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1648610 + } + }, + "actual_fee": "0x961713d4cf40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 37, + "transaction_hash": "0x652ce5e3658cb7ec8ff8105ab26e1894df398907beac85b89302d7396a4b33", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x58fcac3c2e20", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 19, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 977445 + } + }, + "actual_fee": "0x58fcac3c2e20" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 38, + "transaction_hash": "0x3ed477e8998a45c1f8244c6fd85f1c875c32903eedecbce94eb0f26de43ed63", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x35a890bc64a0015669903e7269c47954f4c3fc895ae20ff777a252852726172", + "0x3", + "0x3b50b5443e605818d187adc0684a9b6e990ac3c0495acb51dc195f1c93b3652", + "0x2c04530e5be9bde05cafda18a246e458f73ebd76f5f613541a8f9a8a14cf54a", + "0x2d5c9e608aa128c38b759e2e1498a49bc4a441cff51ca7c9f4e0b6b3919d1bf" + ] + }, + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x2af760730fbb6e60dad195de3286cab3f1be17735ef92821a9f6581a1357dc3", + "0x3", + "0x29f85ed8e76afdcead0f62203ddad6a388c5048d941598c2585fbaa6f2570d3", + "0x6329645550b34a5ebfed1fc1ad92383885528943f919e94993603945ae3db86", + "0xc4e4e3be78c1348ed3c811a57a2512da5c4d619d4230cb5761ee631421befd" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x661940c156a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4962, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 25, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1121465 + } + }, + "actual_fee": "0x661940c156a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 39, + "transaction_hash": "0x7e323a597e4d3adf826d1bcff7a1172de0d5a54252e0bd5447de56477f41cbd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 17, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 40, + "transaction_hash": "0x7f2909cd116ad26c28152bfdc4af5286d5e99e8dbe363de69436a23719bc6c5", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x49da5d8d1fe0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 811211 + } + }, + "actual_fee": "0x49da5d8d1fe0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 41, + "transaction_hash": "0x43bc2d5bf7eab046f6cab7f4e6eaf8c8afea959e2fabe53f09b107ead447900", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0xe6f608f5bcf247a3d3d456ec17aa379779e9171cfc152d695bfa101808574e", + "0x3", + "0x2649e5274e32e5b0751b9ec437a6219f6fa962e952c879f0274984791e8a670", + "0x58ed8a68cf518ee6029ad4366927a28832c906ce2b2bb90a6cc0d3d608ef0c2", + "0x67be8d0e95078b9b4ad71be93ca150b6e6003821116e6bc99f84df8b9a17151" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xabf418c7f700", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4929, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 22, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1888760 + } + }, + "actual_fee": "0xabf418c7f700" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 42, + "transaction_hash": "0x1d338eb6af5b54d7f39841f687731f3f87d0465105d3b07af894efa80eda651", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5766ad1cd2a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 960025 + } + }, + "actual_fee": "0x5766ad1cd2a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 43, + "transaction_hash": "0x7edd47f2401c6a2b3a827fcab356f6baf133ddb39356abcfc52b3675afb84ef", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x790ea505a86b085b4d7463c5e44e1af87088b0817940cf813ebde54f954d678", + "0x3", + "0x335114f7a0c12d0cc614a634e878191a76dfa07a2c15cb208a9b0161042ca37", + "0x40d3ae85973c539bc8091a4bf860a0f2fada87fa5923b146edd1a31eb2eb680", + "0x228d5ea66e091968821fd3b76d8ac1d25a1b92bfec553f8b5801e0e93c4c7e8" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7fc5a496c0a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4940, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 23 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1403465 + } + }, + "actual_fee": "0x7fc5a496c0a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 44, + "transaction_hash": "0x45d6ceeacb1901b4fbd0b3db1a1c024b2f16312e7036fd5738807abfafe5d42", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x69e89fa398e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1163315 + } + }, + "actual_fee": "0x69e89fa398e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 45, + "transaction_hash": "0x78ecf21281939f2aac484a4678d78f6046efa75bccfe44fe50f0b984441cbaf", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x69e89fa398e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1163315 + } + }, + "actual_fee": "0x69e89fa398e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 46, + "transaction_hash": "0xbb3ddbee7397d1b5dad2cb0c91b0bcb61f1970a0d1fc6bcedff7c37dd082ed", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xfc43710c1e60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 20, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 2770895 + } + }, + "actual_fee": "0xfc43710c1e60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 47, + "transaction_hash": "0x57e8309d3f663b5f73a69ef50b32d843b71daf5d145fd2ce595ca25a9c882a5", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 48, + "transaction_hash": "0x2f360e49a734ba3d245633d65726c7ed70a47cfa003c94308794514a0fe0769", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x58fcac3c2e20", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 977445 + } + }, + "actual_fee": "0x58fcac3c2e20" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 49, + "transaction_hash": "0x6c03ae0b4f311945f42190cff1d5642db4b5029b257673bbf9ee227000164ab", + "l2_to_l1_messages": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "to_address": "0xF62753241Ef2185CE47eED2f967BebCB07dacB36", + "payload": [ + "0x67", + "0x2f" + ] + } + ], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x64480cf3a630e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 28144, + "l1_data_gas": 128, + "l2_gas": 826355 + } + }, + "actual_fee": "0x64480cf3a630e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 50, + "transaction_hash": "0x5840667191c7cd5453f0f08abf8c05090fda0d206a9889f03d7945fc416203d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 17, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 51, + "transaction_hash": "0x1490e7e6439bf66483b54c74b96cf288c43a81b95c547ba61cbbb71ba07e1bf", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x76534878a020", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 20, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1299701 + } + }, + "actual_fee": "0x76534878a020" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 52, + "transaction_hash": "0x483eb8e5c08de8fc3d41be6894dd6cc512cceb0544e5c7d82826f5c5baa4a92", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x961713d4cf40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1648610 + } + }, + "actual_fee": "0x961713d4cf40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 53, + "transaction_hash": "0x50898c111be82241d1b1fab2dee71b571e9ae905dc837c8323ea345b82319ca", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5b64a8da9ae0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5400, + "builtin_instance_counter": { + "poseidon_builtin": 22, + "range_check_builtin": 226, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1003875 + } + }, + "actual_fee": "0x5b64a8da9ae0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 54, + "transaction_hash": "0x30dbda93226f54f567575005e2d0de30cc42bf24d528c3ae70b27e13df32e21", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5c0d65c639e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5505, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 243, + "poseidon_builtin": 21 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 288, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 320, + "l2_gas": 1011115 + } + }, + "actual_fee": "0x5c0d65c639e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 55, + "transaction_hash": "0x559a3aeb577be88c912f1ad0c6cb0b31b08e66a68303443045c57a262f4e7c2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x961713d4cf40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1648610 + } + }, + "actual_fee": "0x961713d4cf40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 56, + "transaction_hash": "0x679cdbb308dd3f335077bc45fd257fef0f8d3f9e4a5e7e2ea334269f33beffd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 57, + "transaction_hash": "0x2a0bca9093a5ef703c4872381cd707449769d8f43c2656e59e24bdbca1fa307", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 18, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 58, + "transaction_hash": "0x79741409ba3e0379a72e501219b56cb40afb19b46d1279039005fe037e52c12", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5c5c146bcde0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5395, + "builtin_instance_counter": { + "range_check_builtin": 226, + "poseidon_builtin": 22, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1014491 + } + }, + "actual_fee": "0x5c5c146bcde0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 59, + "transaction_hash": "0x78e92b1e5a4a41df9c9e5019f7d5d5f7154c159c8f1de1f679356a4aa8de1e8", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa492e2601480", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 19, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1807700 + } + }, + "actual_fee": "0xa492e2601480" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 60, + "transaction_hash": "0x2881b3b65aed03a4a5d9aaa4adf5b877fab77c8c82f0e5a00925770adc46f79", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5d1740c5ae40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 17, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1022522 + } + }, + "actual_fee": "0x5d1740c5ae40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 61, + "transaction_hash": "0x6f07beed301165403bf1c8bc57812349e8013f094c8404d1719e086662bb5d0", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x69e89fa398e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1163315 + } + }, + "actual_fee": "0x69e89fa398e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 62, + "transaction_hash": "0x19a5af4415d374cfcc2dd7c34a09771e7f0303cb75f7ea9fbd022404f2777e2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5b5cbc44fa60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5400, + "builtin_instance_counter": { + "poseidon_builtin": 22, + "pedersen_builtin": 4, + "range_check_builtin": 226 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1003535 + } + }, + "actual_fee": "0x5b5cbc44fa60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 63, + "transaction_hash": "0x6de3ad4c3dc339028265abe12108e2c5e71d56f8d5a64192f7980b156e4d161", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x6502ff3a50860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4896, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 19, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 17752415 + } + }, + "actual_fee": "0x6502ff3a50860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 64, + "transaction_hash": "0x6ab843f88f99b0d33d49003a899dd75d8fbdeb88682f600e788ec93d2623b36", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 18, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 65, + "transaction_hash": "0xddbe034b7e91762e6ddda1463a367f56de1ca24dc0126ef025f0899086597b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0xe2bd93c7cede114f9f5c08e5e99be4ed16b347b51e9eae51a2279483eb8009", + "0x3", + "0x3560fd5478d45a380431e0d8ab96ab10f9346464f26c85ddfa81b55295eaec", + "0x791669035612bb867ebfec753cad73103c3b6c46f6438297e18cb28b780ee46", + "0x290b20e8f700dc1654864984bd086c136bf6d7b3503a9bf0e232eaa8a02757a" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xabf418c7f700", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4929, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 22, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1888760 + } + }, + "actual_fee": "0xabf418c7f700" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 66, + "transaction_hash": "0x406d59707ce09c40a0ff5faf4f10aeb3842dbc0f48eb90e3101236f7d511e0b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 67, + "transaction_hash": "0x7c17c7ffbacb568783a5ac01764316485bf7f7ef9d3529e5929e60381ae17f8", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 68, + "transaction_hash": "0x1c82298c91256bff5e780f80d74bc3fadddd925d9f17f44486f63e91094b65d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 69, + "transaction_hash": "0x5b3e6f853ffbcda3cfcb2fb456d2f292300dde3f8892e5fc79b23dd01ef75ad", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x49da5d8d1fe0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 811211 + } + }, + "actual_fee": "0x49da5d8d1fe0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 70, + "transaction_hash": "0x5a1cdee2b6a2452b9bbac646fa278f10a82bf1be49fdcfe217d23e88f6a0e0e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 71, + "transaction_hash": "0x7a2db82291a15ba0be8a579f1bff71ed0f5fada1bd8bd838c43dfe167804225", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x8ca0a98e4000", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1544672 + } + }, + "actual_fee": "0x8ca0a98e4000" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 72, + "transaction_hash": "0x368c1fdaa923585ba2ae3a93b81c1c8bd370d6d4cae5a523eca0aae969b211d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7201062517e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1252235 + } + }, + "actual_fee": "0x7201062517e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 73, + "transaction_hash": "0x50e27dc65f920e4bf74c57142c47ca6f9023a0ef3c757a5c8ab81055da8bc14", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x6b9afbe69400", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 19, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1181952 + } + }, + "actual_fee": "0x6b9afbe69400" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 74, + "transaction_hash": "0x1fa07d8b02a7fde81af8bdd8b2c5b400999bc04d3d02dbc90abd12c7d42fbce", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x8ca0a98e4000", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1544672 + } + }, + "actual_fee": "0x8ca0a98e4000" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 75, + "transaction_hash": "0x75b965e4c7b51deba1ef144dbb7c1e6939840530b1d52fdf026daa08190323b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x538dbffe9a20", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 19 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 917765 + } + }, + "actual_fee": "0x538dbffe9a20" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 76, + "transaction_hash": "0x3379b2417050bb2c78a4e6c498a97662433f237b41849e0c7b7ea08b5f95c0c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 77, + "transaction_hash": "0x7b3de63a1859af6c3885a9d47b4384aada357c93ffad39b5a8432be1d748338", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 78, + "transaction_hash": "0x7794f102c917ee5fbf9faaa7535ceade6b942617fbfce7cc1f5bf92cf1cc816", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x49da5d8d1fe0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 17, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 811211 + } + }, + "actual_fee": "0x49da5d8d1fe0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 79, + "transaction_hash": "0x47446b9c54dfd8f9a34edcbdd63d5ac1f9d03adeca950a7b8ad1db33170442d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x44796343856f93ef0b27ed9a89ae0ad85294e4f8a7a7c548bfa83ba2db5bf0f", + "0x3", + "0x12f129bdec2acaae798eee4a2171561d735306d9c36fb01542103c01b312762", + "0x3b0307ddafa2de1118ab395146120d869ba3ae2a087ef52c58d2fbb8f776729", + "0x248d38a905c1251c27ae655c5e773c135578334b27163e4ef1d42607886f548" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x6055f60e7020", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4929, + "builtin_instance_counter": { + "poseidon_builtin": 22, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1058165 + } + }, + "actual_fee": "0x6055f60e7020" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 80, + "transaction_hash": "0x63b5f5493d8ec8404edd7ca19d3ab4f0c3ea2173da098b5830385e9d4140a85", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x28bd8f18ee747343462d9fe2a97096a70132db0c63bf8a0e6e56874bf9fb07", + "0x3", + "0x55849057db65e5e2b01aa2a7fb7ed0fab704ce4747b4828e66c1d435c9f2b86", + "0x120c79262a7af5c1d7a93928568095f7ea189d49c2da1ad09e1eed2b78053a7", + "0x6c1076e44df71f50b64745f4876744b44409ec58521a8b86df7d4a09f7414d" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5eb80a597420", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4934, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 22 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1040405 + } + }, + "actual_fee": "0x5eb80a597420" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 81, + "transaction_hash": "0x5f0c85d57fca71c14bdacaffa33a4300b0627ccd3bf8d837e7de204347fa48d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x49da5d8d1fe0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 811211 + } + }, + "actual_fee": "0x49da5d8d1fe0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 82, + "transaction_hash": "0x263ea3baf9d649af9e26288b8e2f99e16431de1cb125371ce5dfd8f30c0ff7", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7963c655b1a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 20, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1333361 + } + }, + "actual_fee": "0x7963c655b1a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 83, + "transaction_hash": "0x3690c3c1b3a59657cdd30a94bdaf344b1ee5f789134c7868ce4107f0e6ef6f2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x55cb57adc500", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 942376 + } + }, + "actual_fee": "0x55cb57adc500" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 84, + "transaction_hash": "0x3599287586559a69d1d9dded984cec4d5d73a31a320d46d49c5429e87a12b1f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x69e89fa398e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1163315 + } + }, + "actual_fee": "0x69e89fa398e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 85, + "transaction_hash": "0x27723c0aaf06f65fe818cdaade5a51b724568c5c14fe35a08515cbe3357474f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5d1740c5ae40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1022522 + } + }, + "actual_fee": "0x5d1740c5ae40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 86, + "transaction_hash": "0x2d753ab60df24f92032f0701d8efa57664eb08b31e1ef8cb5f90da2e0a05f50", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x1525eb0c3a1b4f4fb804a232edb4a1d9cac97ff8cb65e096bdd67f49c0ab00f", + "0x3", + "0x72869728bdc2b1dd37f5f4a418ffb092a6d6a6a51b03af3b78e861564b80237", + "0xfb87961d4d14e243855fa11639f556dc13ef30d63551b099bba72e5a9fb5fe", + "0x37a14def8c81055d2422c68c13858fe7004ec3a4b28132f7601f59151a6a6dc" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 20, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 87, + "transaction_hash": "0x6b9ea588451dc23bdf40e4d931c5aa63aad4a6f28b1f213a5a1c5123fdc41c2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x49d7dfdf83f92fa1b62659083be2d1e9f253cd9026ba6f2df59cc14a70d92ab", + "0x3", + "0x6724f48b05976d6af1a5ca82ba209959aac0348a4c41fc2d36cd76591d5c62c", + "0x3c9a4cdf45641b3b943dedc9ff264ba41d51114f2ebd61f8b28b19f455303e", + "0x12d45e92d41ecbe44eea1adc697dd04788cc30bcddac54dbe8694a573edd8c7" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xabf418c7f700", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4929, + "builtin_instance_counter": { + "poseidon_builtin": 22, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1888760 + } + }, + "actual_fee": "0xabf418c7f700" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 88, + "transaction_hash": "0x48aff85af163ad6be379229b0b90e79dd78dd66015034c63405449eaa7546db", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x40d1517ea40288599fa49983a4985777b05d68ea2537512028dc04d1a08db55", + "0x3", + "0x6d83c4b98f89f7a73c4bca6982a19d3ca849672e46314af1e6dc3afd6679951", + "0x68c9cf9111eebfb3b52fe7c9acf98fb0e6e877c1acf2ad14d8d3bda6bcc23da", + "0x785366ebf7be8bc6ef9c51c483f84b5832fce2bc6ece04508719db1f4c8a470" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 89, + "transaction_hash": "0x21bb750db9268c068bd3be09151027c8a5a5c11c4db428cb369ad69d297c0f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xc5a07c9d6100", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 2170760 + } + }, + "actual_fee": "0xc5a07c9d6100" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 90, + "transaction_hash": "0x1a41a120dfcd8c7d30f21709bd698f36e32dd3315f8e83bb62aec8cdd55f3b3", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4ce0edb9b520", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5378, + "builtin_instance_counter": { + "range_check_builtin": 226, + "pedersen_builtin": 4, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 844445 + } + }, + "actual_fee": "0x4ce0edb9b520" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 91, + "transaction_hash": "0x1ad407fa40b1c51e68728e19119bb01de61a028627572703178a018a4a256c6", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x56c54c6df617293c68fcd480a8d025653631d8d718443f9789c343de7a17a37", + "0x3", + "0x39cd0cfb60e3ba5c5beb979bf40f636b20d300942720659581fee6b33c93aaa", + "0x1cd37a5e72630e45805899c3911130ef19ef2fe37202e7b73ae8c7318c6d6e3", + "0x72f08ba97d46da3f16208ead9d7e49c6004fbc4eaecd56c522eed7d9b8f96cf" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5ebff6ef14a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4934, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 22, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1040745 + } + }, + "actual_fee": "0x5ebff6ef14a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 92, + "transaction_hash": "0x5d0c53d940dd40310e3cd6e403e676abdb27ef041aef4885f48acb92ee84262", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x76534878a020", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1299701 + } + }, + "actual_fee": "0x76534878a020" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 93, + "transaction_hash": "0xdc9172b0939c55055abcfca80d22508e98946628f3275b7ba39a0e5ca26371", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5b64a8da9ae0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5400, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 226, + "poseidon_builtin": 22 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1003875 + } + }, + "actual_fee": "0x5b64a8da9ae0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 94, + "transaction_hash": "0x2ea650c14256a321d8bfe3f4222859aa16d0d0033d576c5b489c5b886060b2a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x5b695c85f5a6a609acf40c39d657ef67e1a8aface9fcebda88bd639a0d1a898", + "0x3", + "0x52415f22cf903f332994ebfc1595eba480961e23eb7dadf1a45a1c7c23446d1", + "0x48c6aacee21303d4fb44c4486a34bcdcf7ef9fb907aef3d6506405f0f5f179", + "0x7d66296881529c77acf7b961219359c840666540c35f7d8c977da562283e4ac" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 95, + "transaction_hash": "0x3a8b70080546e1115cebe0ac8775a0bb7d0b2a5361b2a4c6189746c170a7716", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x58f4bfa68da0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 19, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 977105 + } + }, + "actual_fee": "0x58f4bfa68da0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 96, + "transaction_hash": "0x34e49e459c9d56d2aecb8dc5bcef2579c80d0a678d69241cecfac7a38e154ca", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5a92ab5b89a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4896, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 994865 + } + }, + "actual_fee": "0x5a92ab5b89a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 97, + "transaction_hash": "0x437fe99f5ed2e91c239a2f193c6231fbe5d9e6dfe99ac5015ccd8a81d158257", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 98, + "transaction_hash": "0x33d3d994860b9781de37cc32474b690a43dd0033a3ee93c1a78586abaed433", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48e2f1fbece0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800595 + } + }, + "actual_fee": "0x48e2f1fbece0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 99, + "transaction_hash": "0x70e59c4408a6a188ed0ab92765a279e6fb2cdb27757442f43e3d83b2f91fc13", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x575ec0873220", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 959685 + } + }, + "actual_fee": "0x575ec0873220" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 100, + "transaction_hash": "0x3d8b140f57faaac61c5db43df6b3937df36c6e85cedd5142d41d6eac7ca0673", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7959d8a53560", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5406, + "builtin_instance_counter": { + "range_check_builtin": 226, + "poseidon_builtin": 23, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1332935 + } + }, + "actual_fee": "0x7959d8a53560" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 101, + "transaction_hash": "0x40c3e30d8b804488c5b38adc445b66aa18551d50fd8636a0e2a6c361a5941bd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48e2f1fbece0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800595 + } + }, + "actual_fee": "0x48e2f1fbece0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 102, + "transaction_hash": "0x4f4d9052d23c94ca8d57fc94452d4915501b5eb898b03c531edbd30cbe00b8c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5d1740c5ae40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1022522 + } + }, + "actual_fee": "0x5d1740c5ae40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 103, + "transaction_hash": "0xc230e0a01e5292ca97dbe75679cf9accb611cd9a2226a5219ce7349780a02a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x8ca0a98e4000", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1544672 + } + }, + "actual_fee": "0x8ca0a98e4000" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 104, + "transaction_hash": "0x5717cd13714106eb52bf0db6fd0e19bb4c90461a7be87b070f16a970fc678eb", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5d1740c5ae40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1022522 + } + }, + "actual_fee": "0x5d1740c5ae40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 105, + "transaction_hash": "0x4d52785977eb0e1c201dc2a6e831447d66ac2f4d68721b30cb1dacef55d5dea", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x55cb57adc500", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 19, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 942376 + } + }, + "actual_fee": "0x55cb57adc500" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 106, + "transaction_hash": "0x45a7193004281b75002f28ea9993f60608d7da687787515c6361c10d2e8d388", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x585e18ae05a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 19 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 970641 + } + }, + "actual_fee": "0x585e18ae05a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 107, + "transaction_hash": "0x1c11b145f791e96f5520d8bdac6264bd065407228bb05b5c1afdf7925cb3b40", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5c0d65c639e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5505, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 21, + "range_check_builtin": 243 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 288, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 320, + "l2_gas": 1011115 + } + }, + "actual_fee": "0x5c0d65c639e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 108, + "transaction_hash": "0x21a7f05588bace54bfd48efd588d3728b54ef24f51bd8f3cc9174840f64a562", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 109, + "transaction_hash": "0x5585477075305d5cc6ff69020c0f6b2c301be2a8f2ffb6b54f9d53521c1d9b1", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x8084c145fda0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4929, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 22, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1411665 + } + }, + "actual_fee": "0x8084c145fda0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 110, + "transaction_hash": "0x4ec4c5f2b51a0f3459a829972f9fa96724286e3c8a0836e77090e108cb70909", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x3092e624513c7808549ffaf38668d02cf5c88e8131d4024312bf58bc4a87241", + "0x3", + "0x27a8ed7e7a9996ca2de2be150973e2e4ab9f97d8a446d73713afc87f57e1a2c", + "0x29a1abce762e3855ef3ebf326af3583b4d9be276e37d877a0f8e6a65d5713e1", + "0x30732a4669df28200c274ee92127c51b38a176ea9d2777ea9a7966624ae17fd" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 111, + "transaction_hash": "0x4a8b04451eed7807c6c2bf011db317fca65aecdabe9a6f7cb9a303c61706812", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa630ce151080", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4896, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 19, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1825460 + } + }, + "actual_fee": "0xa630ce151080" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 112, + "transaction_hash": "0x1ae22f43fdcb5372ec25dfcec438ef605b0fbd38c40fa4d111df7b36e2111fc", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x675a997e343e6f730b647553b7ba3c3e155cfc5ec3052f531b9c2f6a7a140e2", + "0x3", + "0x3dcffe144429184e30eb98330fa3aedd1d9a083cd58cdf627e76a6f2f8a68c5", + "0xf1c6c33291b34522bfe022f10c059dfa751f7867074d0681f8ede28d943f59", + "0x79462f3595db91268e0366fb5ac565d49a3f2cee379e3e09a08f1e46069379a" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x62bdf2acdce0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5428, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 25, + "range_check_builtin": 226 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1084595 + } + }, + "actual_fee": "0x62bdf2acdce0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 113, + "transaction_hash": "0x40815bef4280c025ff044f4aec6e67016764309a50645edb8b852db986a7cf4", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x3228ea46d26f1f549cb10e8ba7b6a5da4577c2a94c1aca25e7bd2ef80b3763e", + "0x3", + "0x110b1c3644c612c21775ca993c7f02c2849a5423833aa6c5a0305b4360c5365", + "0x20a33335c00d39229a9b0babfa2b12eeb98ca1ac4a1546eb98f4ead57f866bb", + "0x68f51ad115cd23a12ed5ea848b0455c9b86d6c3ccb94e53ed35150a10f89313" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 114, + "transaction_hash": "0x4c39f95fb91d6425da908312f53cda2dce62c49531d4ac51e323f8021e30aa6", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x49da5d8d1fe0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 17, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 811211 + } + }, + "actual_fee": "0x49da5d8d1fe0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 115, + "transaction_hash": "0x7f86ad9bba5ddff1d30ed29b3c369943fa744d56e8765fa6a75e13736120358", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 116, + "transaction_hash": "0x34f213996fea783fae9823d68f212fcccf387b746c3b5a7e513f2bd7f21b212", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4ce0edb9b520", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5378, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 226, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 844445 + } + }, + "actual_fee": "0x4ce0edb9b520" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 117, + "transaction_hash": "0x1b3439dbbc3b2f0dcbef56639a75960309aa292c910e12f1b3334d908eaede", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa0c3837dd240", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4896, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 19, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1765850 + } + }, + "actual_fee": "0xa0c3837dd240" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 118, + "transaction_hash": "0x6da94168c3a8a96df9d0d212e4ebd508f21adb7faf04459875783d504491c97", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x58562c186520", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 970301 + } + }, + "actual_fee": "0x58562c186520" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 119, + "transaction_hash": "0x52d9f6700689144e6280dcdd15f0a0548f9747f8892f7ebaca84ac30fd2f097", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5766ad1cd2a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 960025 + } + }, + "actual_fee": "0x5766ad1cd2a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 120, + "transaction_hash": "0x60ea07dc482349c414abcd73cf54bd3fccb0a493de29c2962619110f74ce108", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa0148c69e1320", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 28133485 + } + }, + "actual_fee": "0xa0148c69e1320" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 121, + "transaction_hash": "0x7ce2e971ca121f986a6fe34f573f32c5dd22d5fad2f1a8ac4ba25cd1937c426", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x575ec0873220", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 959685 + } + }, + "actual_fee": "0x575ec0873220" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 122, + "transaction_hash": "0x6cba62e7fbe0a8a6176ddbe553cd2fedcf67cceb02ef1437d7a63a231e32e02", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48e2f1fbece0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 18, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800595 + } + }, + "actual_fee": "0x48e2f1fbece0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 123, + "transaction_hash": "0x241cd3f31a7960105887d71def0ec6bb85380860814c38b9c8d281f73209302", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5d1740c5ae40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1022522 + } + }, + "actual_fee": "0x5d1740c5ae40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 124, + "transaction_hash": "0x3ede37d0221dd006d88ebe64d032f24e9f8845283f187c9fd896b53f75a7b1b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x1b055f792267a9f2a3a2b1885c5b6638b8232411e1e856e807a40c82037b9d6", + "0x3", + "0x32ba356b72afd10016e6cdbaf5817188045d867f25b12375c21bf6baf85f2ce", + "0x739c18b8790c10f150fc4ccb71d042a3e75be6353528b235f1af5f0e53bb1a1", + "0x57f85ad22cbada7722edd2a284a9db27ce8e3f6649348bd7e1eed396b1a4bc6" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x8aee88f55120", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4956, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 24, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1526045 + } + }, + "actual_fee": "0x8aee88f55120" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 125, + "transaction_hash": "0x646de6a56efaf91036a1caa30f8ea3c80b9e69314c03d1941a8c0fc14fb1ad", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa49acef5b500", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1808040 + } + }, + "actual_fee": "0xa49acef5b500" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 126, + "transaction_hash": "0xb607b6a99bcc7f0a24fc58a971cc6caad949afb568401543020ac07f177d3c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 18, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 127, + "transaction_hash": "0x370f3fe56d78358bff8f4fb5c9f5e20d0aafc23decc71d0500f9077688f5529", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x216de594e86e6d8f5a5439c38e1c2389684e8feea5aff15f9fc7b6789da6988", + "0x3", + "0x13a2306eeac64b25abb778a4f9b9bd7649504cc4248449a707868ed3c35186", + "0x3b34b2035d24f084da72490e28e1cd4e33406323978472b739a17036d368d93", + "0x763f7b4dace138e8732b5a5f316032f5b63069e8eee718e8a423a3684e31784" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7cb526b9af20", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4940, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 23 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1369805 + } + }, + "actual_fee": "0x7cb526b9af20" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 128, + "transaction_hash": "0x1955bd7dc79c7e810e4daa349e0b0ca3d420cc82738563b595737ca8e4b12fc", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5c0d65c639e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5505, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 21, + "range_check_builtin": 243 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 288, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 320, + "l2_gas": 1011115 + } + }, + "actual_fee": "0x5c0d65c639e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 129, + "transaction_hash": "0x2b788f511d6766ed1a3cf5bf8e50e00f29bbd7ca8bd65edc2594f7b3446673f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x49da5d8d1fe0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 811211 + } + }, + "actual_fee": "0x49da5d8d1fe0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 130, + "transaction_hash": "0x5beaf7504c6d497908fab99170b6421e8ce4f82a36c05e81e57c68de288a538", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5766ad1cd2a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 960025 + } + }, + "actual_fee": "0x5766ad1cd2a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 131, + "transaction_hash": "0x39c64217f8c6e5f78e918a0794c93bfb55a0786952bab69651f65284c6305fc", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x49da5d8d1fe0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 811211 + } + }, + "actual_fee": "0x49da5d8d1fe0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 132, + "transaction_hash": "0xabd75faeebf43dc2ae30ec29d35500c731c15ff52fd840f199a5582346b990", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x59f417cd6120", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4896, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 19 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 988061 + } + }, + "actual_fee": "0x59f417cd6120" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 133, + "transaction_hash": "0x2246a2b64efecf4997825f48400ddf936c26b51dbfd88d9ad865407572d367c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x69e89fa398e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1163315 + } + }, + "actual_fee": "0x69e89fa398e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 134, + "transaction_hash": "0x389927bf21a3f9e09d98b6b69c08682955ed39770a8d1667e556b25e74612d0", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xc28ffec04f80", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 2137100 + } + }, + "actual_fee": "0xc28ffec04f80" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 135, + "transaction_hash": "0x34e7b36295ddc4bc4c2ac8543f32e26d6cdd96a85c4135716f9c58532db8fb9", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48e2f1fbece0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800595 + } + }, + "actual_fee": "0x48e2f1fbece0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 136, + "transaction_hash": "0x38aa094b71b02ae3191694ffcd99a4dfe0b970624d1582b62838a7c66ab04a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x58fcac3c2e20", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 19, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 977445 + } + }, + "actual_fee": "0x58fcac3c2e20" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 137, + "transaction_hash": "0x643269bb0a98ad55e59d93d819d4d33b5da76a83041262bf2627437ac6f463f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x575ec0873220", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 959685 + } + }, + "actual_fee": "0x575ec0873220" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 138, + "transaction_hash": "0x56cfe3ac23ee2ca090c1f6244893a55c1dd90cc5cdf4b58b5a3b5f7a8b46d4c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7553f051cca0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1288745 + } + }, + "actual_fee": "0x7553f051cca0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 139, + "transaction_hash": "0x43ab5b760421ac182dea5668b69f1f060c7259da0ed81ede521f209655f2bfd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 140, + "transaction_hash": "0x6cb669e9e840176ccf47a9277b5b546c594bad2ed23bcc3bfe63f2a355c0aaa", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5955843f38a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4896, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 19 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 981257 + } + }, + "actual_fee": "0x5955843f38a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 141, + "transaction_hash": "0x682a1dfabc52e9389041e904503c8bb8ac00e60744943ba4a5c0b49fd695cb2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5b5cbc44fa60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5400, + "builtin_instance_counter": { + "range_check_builtin": 226, + "poseidon_builtin": 22, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1003535 + } + }, + "actual_fee": "0x5b5cbc44fa60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 142, + "transaction_hash": "0x4e06a9943b6d6ba718553a0d26c8970653d42e0467c88178f0e43aef3e17baf", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5b64a8da9ae0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5400, + "builtin_instance_counter": { + "poseidon_builtin": 22, + "pedersen_builtin": 4, + "range_check_builtin": 226 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1003875 + } + }, + "actual_fee": "0x5b64a8da9ae0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 143, + "transaction_hash": "0x3be4539b702f9c0bed1d4b0e7f55695615c9a1b30bb3eea92adccf4c4c9b592", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x9972086c2aa0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4918, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 21 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1685465 + } + }, + "actual_fee": "0x9972086c2aa0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 144, + "transaction_hash": "0x5d882d8c4b11eaac9b90ab759d31b55db4db4a2bc2bb15dcd535d52a5d7327b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 145, + "transaction_hash": "0x18fe78a41a83218763a3964733074a3b1295f3f58d34f4027d25e1c861fe74e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x651c35c7e7580", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 17769724 + } + }, + "actual_fee": "0x651c35c7e7580" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 146, + "transaction_hash": "0x2eec5dde849a7db21d9ff42b8644047aed3be0ebad919eb2d9eae5a41d9c4ea", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7553f051cca0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1288745 + } + }, + "actual_fee": "0x7553f051cca0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 147, + "transaction_hash": "0x7e825afba370d536898ada535aff3c69b6568e73d99bfb4436a395cc81ec118", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x474f89227fc0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 783286 + } + }, + "actual_fee": "0x474f89227fc0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 148, + "transaction_hash": "0x4c7e561d814f2ead46f6213b700f5e38a4470ca3960d15019b174475385909c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x142b6bcf36547f884b1cab10964260ba1835242b54256fbfb57eeab6b5f4d00", + "0x3", + "0x2fb05f4d8fadd53e1d6b45bd2fa78c4afc2865e5ae6db7cadc3477703d8ab43", + "0x578795f376d9ddb5cc6605a2396cc8af3df7e1fe90ab75ebdc019f20dc4b96b", + "0x426ed78e1959351c68092fe3f6490c33c79b06e0d1259c54a6e9b528064ed8c" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xabf418c7f700", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4929, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 22 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1888760 + } + }, + "actual_fee": "0xabf418c7f700" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 149, + "transaction_hash": "0x70b127661839b231914a28d21cf8ccde3641c51914ebbd7775fadb317bacecd", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x667613acec1e05d62feea472c7bf7342f8ab76cd78956df8e129e2e92149816", + "0x3", + "0x31942b9a90338b3289898641dd53d6b5ea36beef6ed91cf31745c42be99f7b", + "0x5f9e52bbd3fb0b2a60cbfaa1e721dfb27e7deb26503e3ec25aafd7f4ad6ff13", + "0x1379955dc7ec49b67d9a4bc7eca9e9264f3dd9f401ace94bd9be1e533852f30" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5ebff6ef14a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4934, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 22 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1040745 + } + }, + "actual_fee": "0x5ebff6ef14a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 150, + "transaction_hash": "0x14bafffb4ead9755982414413a7e09ef6ab4a9211d7a5d5fc5922efae9b822b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x55d344436580", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 942716 + } + }, + "actual_fee": "0x55d344436580" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 151, + "transaction_hash": "0xeec4d5c8d00e421e0540d4b4f7b90651e0cbe7f87201440f412ba67ea03117", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x58562c186520", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 19, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 970301 + } + }, + "actual_fee": "0x58562c186520" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 152, + "transaction_hash": "0x6f4f9f4df88b85af1f368c84e3e688296962556c740564dcb2d3894f8cf58c8", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 153, + "transaction_hash": "0x756589ba9549d394043d21c9d4aee85bf86558d5ff65bd723b5e597f4a7a92d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x93510cb207a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4918, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 21, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1618145 + } + }, + "actual_fee": "0x93510cb207a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 154, + "transaction_hash": "0x6f39b750434a1a2442bf4d31819f4bb28d0e9eeab5c92231efc8fade6fb7c34", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x1f36f091f5bed9c103933eb6feaf7594389c0b6a1db02724e0429d92eb7fe90", + "0x3", + "0x63c9a23eadf48e4b2576985247b3d62a89cee1784dce0ee89eee786c7afdb54", + "0x1235a41a93d092a6db827337e30e23dfa55ae7b90a39660503a91e3ec16e491", + "0x6155321295ce63b9a593ae6c5da2719f34c72e32a56c04046e32b6136d2ac44" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x62bdf2acdce0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5428, + "builtin_instance_counter": { + "poseidon_builtin": 25, + "pedersen_builtin": 4, + "range_check_builtin": 226 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1084595 + } + }, + "actual_fee": "0x62bdf2acdce0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 155, + "transaction_hash": "0x24681963cc8a2c1903e7897e3df06f5dd5d09b1617be4a691a1255ce5b1bc5f", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 156, + "transaction_hash": "0x5de374b729d1f7b05f30ab01b8e31ed075dca07ae8e979e5bd0767bab2a83a1", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x474f89227fc0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 783286 + } + }, + "actual_fee": "0x474f89227fc0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 157, + "transaction_hash": "0x1ec65a53d552e931a56a0b869f34d8e8f4e6c90a9d516c720186198ea20575b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xc28ffec04f80", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 2137100 + } + }, + "actual_fee": "0xc28ffec04f80" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 158, + "transaction_hash": "0x78dc385cfbb57c86c71402930961f5d75bada1bf7f5da9ca2a4ed2466dcf47c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x55d344436580", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 19, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 942716 + } + }, + "actual_fee": "0x55d344436580" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 159, + "transaction_hash": "0x51ca4edb15d383783fbf9a4935a019872b6f0915f9a8b91adcc6284beab4975", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa0148c69e1320", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 28133485 + } + }, + "actual_fee": "0xa0148c69e1320" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 160, + "transaction_hash": "0x5fd81c76f927c7ec755cbdb881c42b2996cd8edeef4baa4499ffd4930a00e1b", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4ce0edb9b520", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5378, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 20, + "range_check_builtin": 226 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 844445 + } + }, + "actual_fee": "0x4ce0edb9b520" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 161, + "transaction_hash": "0x43ecae51a7385d6740bb5212e85177e769336690c47312fd34879865a6ae128", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x7fe45fbb877c67b4c81300c8865bb88d8320227a2982fe6d2abf5c7f1f5d9ee", + "0x3", + "0x38a043df7c821e0228f34de5e6ca9c66126a0dfc22c880bf58b858a5e15a5f4", + "0x375f356b2e8c6ab26cf2bbaa1afb21c656ee756d5df7eed5a8370cfa9a5e356", + "0x171ec4173409d7182f4725f15e028182d74dde7d5004a995056604b4c9b6ca7" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 162, + "transaction_hash": "0x5cac6eabe55ce629945dfd77b50fdb2fcb0cd965a8d779af240347d4f7782b3", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x961713d4cf40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1648610 + } + }, + "actual_fee": "0x961713d4cf40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 163, + "transaction_hash": "0x4e065a1c2373270e06b9b75bde0af35156c61004c20b490239697bf9740e77e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x59f417cd6120", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4896, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 19 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 988061 + } + }, + "actual_fee": "0x59f417cd6120" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 164, + "transaction_hash": "0x60a765de354c0c986b2e30ef78a664295750d3c0589741d03f04c9a6c8599d7", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xb7c542c00200", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5522, + "builtin_instance_counter": { + "poseidon_builtin": 23, + "range_check_builtin": 243, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 288, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 320, + "l2_gas": 2018560 + } + }, + "actual_fee": "0xb7c542c00200" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 165, + "transaction_hash": "0x66a772a0d3e6c5d7c7e1b63959728795532610e4f09558423027fbd21c59072", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x474f89227fc0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 783286 + } + }, + "actual_fee": "0x474f89227fc0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 166, + "transaction_hash": "0x6aa07622164fe65d714df71810db7023a929e4b27e84684abeb8e1c96064a85", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5d1740c5ae40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1022522 + } + }, + "actual_fee": "0x5d1740c5ae40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 167, + "transaction_hash": "0x23b8b03167b032fcc9a9940f06b2784670efbb616fc89882d9e1ff2566fd6ba", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa898cab37d40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5395, + "builtin_instance_counter": { + "range_check_builtin": 226, + "pedersen_builtin": 4, + "poseidon_builtin": 22 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1851890 + } + }, + "actual_fee": "0xa898cab37d40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 168, + "transaction_hash": "0x2d245511ace3e7d641229804cbb48f0d0be9adbdc4b225172020311322e8f2c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x2f6a4dafd4b5995afd16b32591b051316ebf6acd8316b8b42b9be19e00a8485", + "0x3", + "0x38e1b271efa38e66fa0721206ed3ec58e4356f48b2beebfe056582d0e6a902a", + "0x39c62c6bec0290e171c1c07474a979bf60dbe4e66feb5a1ca8b1451f5b04c8", + "0x1a6d87fb631fe8db63d90b9dc23727de8c5d794f27a678ae5234dc10a7384c8" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7fc5a496c0a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4940, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 23 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1403465 + } + }, + "actual_fee": "0x7fc5a496c0a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 169, + "transaction_hash": "0x1e9428e365e5ecb40b3f3d745d985af23b79c8e803bf6f2c94c6208f4f8fb47", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x474f89227fc0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 783286 + } + }, + "actual_fee": "0x474f89227fc0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 170, + "transaction_hash": "0x4462cbfc474cdf82bdda15c125c8d7374343f9fac1936b341d4d3c99008d295", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa898cab37d40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5395, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 226, + "poseidon_builtin": 22 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1851890 + } + }, + "actual_fee": "0xa898cab37d40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 171, + "transaction_hash": "0x564efa83d7ecc5f4249fd66b7991572405a7b3807d5090e71a30cfa841064a2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x76d8f1eb1180", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 20, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1305436 + } + }, + "actual_fee": "0x76d8f1eb1180" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 172, + "transaction_hash": "0x80402dbf58af96914b672dd81487df42ac6a276efd175af1a08ff2c635f9d0", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x76534878a020", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1299701 + } + }, + "actual_fee": "0x76534878a020" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 173, + "transaction_hash": "0x7bf4b7df521c148f06208299424f739a75f2da84b32d91f72b85a87e7ed7c77", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x69e89fa398e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "poseidon_builtin": 18, + "range_check_builtin": 158, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1163315 + } + }, + "actual_fee": "0x69e89fa398e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 174, + "transaction_hash": "0x6fdae1bbec976af03a6fb3b0db55c9c80b7f3cd01717fade7492cf0dc8f7cff", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x61c76c61c66ac5d59cbab0af3c6d300cb3ad8ba11d1bd01b903049093748d69", + "0x3", + "0x5d492e30f6f53b57b82e522fbd1337df1f362004497ad7ac389d9f6719fa32f", + "0x37992970b26c4ad3327df6b8fe5a4cec2f15d600babdd5d9be3a83d9248b442", + "0x344cd7b9118311ee75a2676e1e6b8f7b5f38fe681f66f6807b32fc3740763d8" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 175, + "transaction_hash": "0x6a8972df24b1bfb6c4d422a0a38a0561fccee5d046da5e9104aff7925c92d5d", + "l2_to_l1_messages": [ + { + "from_address": "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d", + "to_address": "0xf38276C4C6E7c36A8daF4d3EB949D9fF99FA4CdA", + "payload": [ + "0xb9", + "0x19d" + ] + } + ], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x64480cf3a630e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 28144, + "l1_data_gas": 128, + "l2_gas": 826355 + } + }, + "actual_fee": "0x64480cf3a630e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 176, + "transaction_hash": "0x18b0b3ada53834f73041a1f73c48a75530d6ee78b07d2a6d63a9b879ed093a", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa492e2601480", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 19, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1807700 + } + }, + "actual_fee": "0xa492e2601480" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 177, + "transaction_hash": "0x4034b35bb388cff7db00e210e74ff65d2ec792675ff71916d10f11e5b59a4f7", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5756d3f191a0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4907, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 959345 + } + }, + "actual_fee": "0x5756d3f191a0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 178, + "transaction_hash": "0x2bd8d12f680bdcae11f46c66e1865caabbf33e009eef38e1916220e77ddabea", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x474f89227fc0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 783286 + } + }, + "actual_fee": "0x474f89227fc0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 179, + "transaction_hash": "0x628842facd73664855cf1990a3156b7b99a572583269bdd6c2922ad4fe7162e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x6b930f50f380", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "poseidon_builtin": 19, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1181612 + } + }, + "actual_fee": "0x6b930f50f380" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 180, + "transaction_hash": "0x7ac13b703386c3b9457f00900f7bd02ff6cd3efee6822637663a75ee453dac3", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x69e89fa398e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "range_check_builtin": 158, + "pedersen_builtin": 4, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1163315 + } + }, + "actual_fee": "0x69e89fa398e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 181, + "transaction_hash": "0x7671da415f19b8ea9fecc25e3d9f6ddf80bf3776344e694e35895f6df338520", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x474f89227fc0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 783286 + } + }, + "actual_fee": "0x474f89227fc0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 182, + "transaction_hash": "0x3d68175d9560c0fb66e3c9d46a1857c32996cd8042bcd136e4ee42ce0d44e8", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48db05664c60", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 18, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800255 + } + }, + "actual_fee": "0x48db05664c60" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 183, + "transaction_hash": "0x2726ed06aa105ec21286f7829b86383bc1dbdbf9655c2cfc404389338c459a5", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x9972086c2aa0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4918, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 21 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1685465 + } + }, + "actual_fee": "0x9972086c2aa0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 184, + "transaction_hash": "0x2cc6eec3f1948533584950ecf1b5961faa03a0697eef8806322274440953918", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x961713d4cf40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1648610 + } + }, + "actual_fee": "0x961713d4cf40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 185, + "transaction_hash": "0x549a6bb1bc30cca5e4878f2a3e6cd0ce3ae25f256bd58b8ace19f9326b55941", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x6a07930d26e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4896, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 19 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1164643 + } + }, + "actual_fee": "0x6a07930d26e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 186, + "transaction_hash": "0x24cf703f5777fba9400b9dece8a72c3c4605a4ed1a3b28667dbe7e4c363c40d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x961713d4cf40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1648610 + } + }, + "actual_fee": "0x961713d4cf40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 187, + "transaction_hash": "0x2873ec1f7a8034cbbd2a309783121559959cc1a73b5eff3d803cbf35f7b9760", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa0148c69e1320", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 17, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 28133485 + } + }, + "actual_fee": "0xa0148c69e1320" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 188, + "transaction_hash": "0x7dfa74642e260cb91bb420d426895256ee04c28e81b6a5aee48a3b93923161c", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xb7c542c00200", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5522, + "builtin_instance_counter": { + "range_check_builtin": 243, + "pedersen_builtin": 4, + "poseidon_builtin": 23 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 288, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 320, + "l2_gas": 2018560 + } + }, + "actual_fee": "0xb7c542c00200" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 189, + "transaction_hash": "0x5ded4f9880535fec58e68b47d5e34b33ad712c6831f1586948d99987045d55", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x678dd7800d8e3639c12d5bab33b3840caa43d26c28924b47b7e3f18ded665d2", + "0x3", + "0x1977beaa5aa8b4ad01386800e9992f33d3fbe68a2fd5041814276d376bd85e9", + "0x5a721a2eb73a5a67bd136637aa4e0da6fadd030964b789191dbfc629f3b8736", + "0x7265d69c224668a5aa44a21eb199de1e93e4007c31b4d67bc9476a2f87f88a" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x5d2c8e15a780", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4929, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 22, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1023436 + } + }, + "actual_fee": "0x5d2c8e15a780" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 190, + "transaction_hash": "0x570208fa2538f1073401fb873078e566b367f0ac91946e62f1b96d485186fb8", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x48e2f1fbece0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4885, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 18 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 800595 + } + }, + "actual_fee": "0x48e2f1fbece0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 191, + "transaction_hash": "0x64e014591d13662140422a96aa3195ddc76518999d70fc587c194969994f60e", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x66d821c68760", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4890, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "poseidon_builtin": 18, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1129655 + } + }, + "actual_fee": "0x66d821c68760" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 192, + "transaction_hash": "0x3d10f3b960faf026ad209cc47fd8a9f0f4d73a0978293676a026deda96453d3", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7553f051cca0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "poseidon_builtin": 20, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1288745 + } + }, + "actual_fee": "0x7553f051cca0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 193, + "transaction_hash": "0x985b398d7e49f4d4690d8fb2b64005c3a0e32d88ab9cfa6664b54c1bf650e5", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x7c6a568246e0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5406, + "builtin_instance_counter": { + "range_check_builtin": 226, + "pedersen_builtin": 4, + "poseidon_builtin": 23 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1366595 + } + }, + "actual_fee": "0x7c6a568246e0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 194, + "transaction_hash": "0xf0da58c49365418670f920f87a6b0e71760ca0a7f75ff48d41d855eafbd051", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa49acef5b500", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4901, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 19, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1808040 + } + }, + "actual_fee": "0xa49acef5b500" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 195, + "transaction_hash": "0x7b18a13104be83ea7d37c729861df5d7fe9009b6e0c1cba50132455a5847004", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x96618a8f1920", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4918, + "builtin_instance_counter": { + "poseidon_builtin": 21, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 1651805 + } + }, + "actual_fee": "0x96618a8f1920" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 196, + "transaction_hash": "0x29eca77cefd146b8f237010c7a43dfa5b852c26ce8c99288a7dc4e451829d", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "poseidon_builtin": 17, + "pedersen_builtin": 4, + "range_check_builtin": 158 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 197, + "transaction_hash": "0x5db932b3e999afb24503b9ce23a8a0c7a22bce650a3641983d1402a140ef5b4", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x474f89227fc0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "range_check_builtin": 158, + "poseidon_builtin": 17, + "pedersen_builtin": 4 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 783286 + } + }, + "actual_fee": "0x474f89227fc0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 198, + "transaction_hash": "0x4844ca75bc10bff86b4db4c2662fa3790abdffde2c685bd6d7f116084185bf5", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0xa898cab37d40", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 5395, + "builtin_instance_counter": { + "range_check_builtin": 226, + "pedersen_builtin": 4, + "poseidon_builtin": 22 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 256, + "l2_gas": 1851890 + } + }, + "actual_fee": "0xa898cab37d40" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 199, + "transaction_hash": "0x50e072d51996873eae2b020502294fb9ac001395b00869108ed2f854c8fee2", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035", + "keys": [ + "0x15bd0500dc9d7e69ab9577f73a8d753e8761bed10f25ba0f124254dc4edb8b4" + ], + "data": [ + "0x4df105c97436d13814b5a3557e62f08c87e06ef711cd76bae9f880cc7cdcb34", + "0x3", + "0x3a8abec36b9ff192686cc6d554bc9487c99682333ceaf3b7b339160dcd1997c", + "0x5b79b5d32bf600a30ac095f6587976647a62ddfccd29b38b85979b560f91539", + "0xd94fd54f9f7d674703bba4af53f2d11daced123a6967da6386863611f133f7" + ] + }, + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x503c3bce2ee0", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4912, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 20 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 881315 + } + }, + "actual_fee": "0x503c3bce2ee0" + }, + { + "execution_status": "SUCCEEDED", + "transaction_index": 200, + "transaction_hash": "0x6a9b2b698b49f21bd9b91a507714a8d14afc37b707bcec25dff433ac569ea99", + "l2_to_l1_messages": [], + "events": [ + { + "from_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8" + ], + "data": [ + "0x4a78f11b4860", + "0x0" + ] + } + ], + "execution_resources": { + "n_steps": 4879, + "builtin_instance_counter": { + "pedersen_builtin": 4, + "range_check_builtin": 158, + "poseidon_builtin": 17 + }, + "n_memory_holes": 0, + "data_availability": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 0 + }, + "total_gas_consumed": { + "l1_gas": 0, + "l1_data_gas": 128, + "l2_gas": 818015 + } + }, + "actual_fee": "0x4a78f11b4860" + } + ], + "starknet_version": "0.14.1" + }, + "state_update": { + "block_hash": "0x7c6517ec2c503f9fc80ade2df901a1dbe067ab8cfb8c6bf8e7d04a29c1dde0b", + "new_root": "0x7e472f4392adc406f482ed52f8f85c5b1c7649d390c259b073b79f5e5adee5c", + "old_root": "0x495229662ee48716b4933b8ce3482fcb9286049ce50e4afff66072c0faed268", + "state_diff": { + "storage_diffs": { + "0x21d980d405158f62464649ce2c8a433e1c61096d7ca045d70a9b70c8923700d": [ + { + "key": "0x3d", + "value": "0x3a30b01aadd50092a944b38fa42c1df949b403e754576e8d0ccd7f00e9d0223" + }, + { + "key": "0x68", + "value": "0x751201072461a296c0480292e1e56f472a2dbb069ecf219dcc0ac91061bbb26" + }, + { + "key": "0x10e", + "value": "0x5a79bef4e1fee587e3346900eafd02ead5523d57e61b5d30e56c04a131bc1e1" + }, + { + "key": "0x18f", + "value": "0x15a509d13e2b1ebbe6cabee857db28b593267963e2744daca355e17c9c9cf12" + }, + { + "key": "0x1ed", + "value": "0x1d413563c6231b24d293d9a71ee542cbe50b28505f0768740c065ae8a8fbaa5" + }, + { + "key": "0x232", + "value": "0x53573a50029c302941b4093fba22151eaf301182dc683f8281cdf6ad97b1e6" + }, + { + "key": "0x2c9", + "value": "0x3dc59ef5f27dfa4b73acd9df91b8358c0d9aadb63c38b1769d5eec5d79d277f" + }, + { + "key": "0x31b", + "value": "0x5a5f15fb688e606e7b10592d820575531ff03f8b8967c11e52f4b2e59dcc20c" + }, + { + "key": "0x339", + "value": "0x2ee4b26e6043f1856d4241fe31e9f7b00789bf00a1885a25a747eac5930e823" + }, + { + "key": "0x3c2", + "value": "0x6f4cdc9797523d6279f585c4fce5b8ab8a4dbba64233045697e2b84f4d25384" + }, + { + "key": "0x3c9", + "value": "0x1bbe85cc5abacb5c162e974a5ed0b8307f9697b87f3f537665586e9ddd3833b" + }, + { + "key": "0x3d3", + "value": "0x4baca172fca51b57f0b0117558458e8a2f91357f9630fbb08039b4ab8259b11" + } + ], + "0x3931a5320d0a21477c444afdd762d02d0bdaa4cb2008e5d8a7697b8cfe99000": [ + { + "key": "0x3b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a4", + "value": "0x7075626c69635f6b6579" + } + ], + "0x2": [ + { + "key": "0x0", + "value": "0x7c869" + }, + { + "key": "0x1a9b0ac200ec8c04c8b531bcf02f706e65d52ccc14e608ea3d556440f6955fe", + "value": "0x7c863" + }, + { + "key": "0x3163b7daeb9027199cbfe3739e272ac31c050437f339c7de1093d2eae9c0834", + "value": "0x7c864" + }, + { + "key": "0x3931a5320d0a21477c444afdd762d02d0bdaa4cb2008e5d8a7697b8cfe99000", + "value": "0x7c865" + }, + { + "key": "0x5923c1e1b47ec15ab8c588711ca385bb7879a8324e5373ff284232c394315be", + "value": "0x7c866" + }, + { + "key": "0x6717e629d7bc11bcd7f2692a57bb3b81bb16290fb55fc71bc68770973cae410", + "value": "0x7c867" + }, + { + "key": "0x78450a876febd027a35db491dcd473eb65bd9e628782f9d36d25e28bdc01a56", + "value": "0x7c868" + } + ], + "0x5923c1e1b47ec15ab8c588711ca385bb7879a8324e5373ff284232c394315be": [ + { + "key": "0x3b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a4", + "value": "0x7075626c69635f6b6579" + } + ], + "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d": [ + { + "key": "0x1bc06e01c8edbc022b2a63178e2e2f2bc1bc498a6b2fa743a0e99ec2be6ac16", + "value": "0x33bea1cb80d563589877300" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x49d5343ba97db9bf2451" + } + ], + "0x78450a876febd027a35db491dcd473eb65bd9e628782f9d36d25e28bdc01a56": [ + { + "key": "0x3b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a4", + "value": "0x7075626c69635f6b6579" + } + ], + "0x4ac7a6253a8bc069bda7ad6a0aca58bbe51191b2e7e282d17c78d976a7ea035": [ + { + "key": "0x87", + "value": "0x1e902316d06eb9fd1d7ab1bc085c3865b22a139776df813d26a8cb0b9569969" + }, + { + "key": "0x123", + "value": "0x740c2266b76c503684363a12b484c612eff91f23918444eb37c9b6256ffcb1f" + }, + { + "key": "0x18f", + "value": "0x42d2bcdd8985d0b7797cabb2271b2e6042770594d77f3009d35a04d6c8ec5f1" + }, + { + "key": "0x271", + "value": "0x3342d39567deeb95aaf8039328deeb6c42a2b3aa8b97681f3920bd6638bb2cf" + }, + { + "key": "0x2b8", + "value": "0x25c5a466e8713262b43b225c35eb1e87ae570efcc3590b443fa776d383a7ce5" + }, + { + "key": "0x2c4", + "value": "0x4ec7529541867a4c17ee33755fd6411502e5266bcf86e72f190ba18088fa564" + }, + { + "key": "0x331", + "value": "0x10bf93a08d0f1de17947dee726ba218e194826832da2eba5b00ac0b709e6cc3" + }, + { + "key": "0x337", + "value": "0x4743d6b100caf4f48d9ec4e078b0e07f4ab51acd94fb1f461d0fff76242577" + }, + { + "key": "0x359", + "value": "0x5faa0b48ab3283c2c1f7c5086e2a537dc3f034f2f79e0ce514ec415405443fa" + }, + { + "key": "0x361", + "value": "0x3316f824e8163d5e4075210f50556edc99567ca4c6ead30b491917070995701" + } + ], + "0x6717e629d7bc11bcd7f2692a57bb3b81bb16290fb55fc71bc68770973cae410": [ + { + "key": "0x3b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a4", + "value": "0x7075626c69635f6b6579" + } + ], + "0x1a9b0ac200ec8c04c8b531bcf02f706e65d52ccc14e608ea3d556440f6955fe": [ + { + "key": "0x3b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a4", + "value": "0x7075626c69635f6b6579" + } + ], + "0x3163b7daeb9027199cbfe3739e272ac31c050437f339c7de1093d2eae9c0834": [ + { + "key": "0x3b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a4", + "value": "0x7075626c69635f6b6579" + } + ], + "0x1": [ + { + "key": "0x2ef600", + "value": "0xf1ff3e098d8d5a5ca715ad226dc9938029eb9ac58db99f30142d7f8d0e5dce" + } + ] + }, + "nonces": { + "0x395a96a5b6343fc0f543692fd36e7034b54c2a276cd1a021e8c0b02aee1f43": "0x4d01c3" + }, + "deployed_contracts": [ + { + "address": "0x1a9b0ac200ec8c04c8b531bcf02f706e65d52ccc14e608ea3d556440f6955fe", + "class_hash": "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069" + }, + { + "address": "0x3163b7daeb9027199cbfe3739e272ac31c050437f339c7de1093d2eae9c0834", + "class_hash": "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069" + }, + { + "address": "0x3931a5320d0a21477c444afdd762d02d0bdaa4cb2008e5d8a7697b8cfe99000", + "class_hash": "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069" + }, + { + "address": "0x5923c1e1b47ec15ab8c588711ca385bb7879a8324e5373ff284232c394315be", + "class_hash": "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069" + }, + { + "address": "0x6717e629d7bc11bcd7f2692a57bb3b81bb16290fb55fc71bc68770973cae410", + "class_hash": "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069" + }, + { + "address": "0x78450a876febd027a35db491dcd473eb65bd9e628782f9d36d25e28bdc01a56", + "class_hash": "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069" + } + ], + "old_declared_contracts": [], + "declared_classes": [], + "migrated_compiled_classes": [ + { + "class_hash": "0x941a2dc3ab607819fdc929bea95831a2e0c1aab2f2f34b3a23c55cebc8a040", + "compiled_class_hash": "0x6c1f99f23865abe822bd9690f8d6cd181d43b1ff5535842aa973363aa7c7bb3" + }, + { + "class_hash": "0x345354e2d801833068de73d1a2028e2f619f71045dd5229e79469fa7f598038", + "compiled_class_hash": "0x4ba630be0cd6cdb8d4407bf7c4715b0780e63f890b26b032e8eccaf9c7338e2" + }, + { + "class_hash": "0xe824b9f2aa225812cf230d276784b99f182ec95066d84be90cd1682e4ad069", + "compiled_class_hash": "0x292e005a8cd53053cdf4667d74e96da648a5fdac00bfb2616a2051631cc62b6" + } + ], + "replaced_classes": [] + } + } +} diff --git a/crates/gateway-test-fixtures/src/lib.rs b/crates/gateway-test-fixtures/src/lib.rs index d160c67946..70b5f132b1 100644 --- a/crates/gateway-test-fixtures/src/lib.rs +++ b/crates/gateway-test-fixtures/src/lib.rs @@ -107,6 +107,13 @@ pub mod v0_14_1 { } } +pub mod v0_14_3 { + pub mod state_update_with_block { + pub const SEPOLIA_INTEGRATION_FAKE: &str = + str_fixture!("0.14.3/state_update/sepolia_integration_fake.json"); + } +} + pub mod add_transaction { pub const INVOKE_CONTRACT_WITH_SIGNATURE: &str = str_fixture!("add-transaction/invoke-contract-with-signature.json"); diff --git a/crates/gateway-test-utils/Cargo.toml b/crates/gateway-test-utils/Cargo.toml deleted file mode 100644 index bf45b9a73e..0000000000 --- a/crates/gateway-test-utils/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "gateway-test-utils" -version = { workspace = true } -authors = { workspace = true } -edition = { workspace = true } -license = { workspace = true } -rust-version = { workspace = true } - -[dependencies] -reqwest = { workspace = true } -serde_json = { workspace = true } -starknet-gateway-types = { path = "../gateway-types" } -tokio = { workspace = true } -warp = "0.3" diff --git a/crates/gateway-test-utils/src/lib.rs b/crates/gateway-test-utils/src/lib.rs deleted file mode 100644 index 35a0852537..0000000000 --- a/crates/gateway-test-utils/src/lib.rs +++ /dev/null @@ -1,151 +0,0 @@ -use starknet_gateway_types::error::KnownStarknetErrorCode; - -/// Helper function which allows for easy creation of a response tuple -/// that contains a -/// [StarknetError](starknet_gateway_types::error::StarknetError) for a -/// given [KnownStarknetErrorCode]. -/// -/// The response tuple can then be used by the [setup] function. -/// -/// The `message` field is always an empty string. -/// The HTTP status code for this response is always `500` (`Internal Server -/// Error`). -pub fn response_from(code: KnownStarknetErrorCode) -> (String, u16) { - use starknet_gateway_types::error::StarknetError; - - let e = StarknetError { - code: code.into(), - message: "".to_string(), - }; - (serde_json::to_string(&e).unwrap(), 500) -} - -/// # Usage -/// -/// Use to initialize a server that the gateway client can connect to. -pub fn setup( - url_paths_queries_and_response_fixtures: [(S1, (S2, u16)); N], -) -> (Option>, reqwest::Url) -where - S1: std::convert::AsRef - + std::fmt::Display - + std::fmt::Debug - + std::cmp::PartialEq - + Send - + Sync - + Clone - + 'static, - S2: std::string::ToString + Send + Sync + Clone + 'static, -{ - use warp::Filter; - let opt_query_raw = warp::query::raw() - .map(Some) - .or_else(|_| async { Ok::<(Option,), std::convert::Infallible>((None,)) }); - let path = warp::any().and(warp::path::full()).and(opt_query_raw).map( - move |full_path: warp::path::FullPath, raw_query: Option| { - let actual_full_path_and_query = match raw_query { - Some(some_raw_query) => { - format!("{}?{}", full_path.as_str(), some_raw_query.as_str()) - } - None => full_path.as_str().to_owned(), - }; - - match url_paths_queries_and_response_fixtures - .iter() - .find(|x| x.0.as_ref() == actual_full_path_and_query) - { - Some((_, (body, status))) => warp::http::response::Builder::new() - .status(*status) - .body(body.to_string()), - None => panic!( - "Actual url path and query {} not found in the expected {:?}", - actual_full_path_and_query, - url_paths_queries_and_response_fixtures - .iter() - .map(|(expected_path, _)| expected_path) - .collect::>() - ), - } - }, - ); - - let (addr, serve_fut) = warp::serve(path).bind_ephemeral(([127, 0, 0, 1], 0)); - let server_handle = tokio::spawn(serve_fut); - let url = reqwest::Url::parse(&format!("http://{addr}")).unwrap(); - (Some(server_handle), url) -} - -/// # Usage -/// -/// Use to initialize a server that the gateway client can connect to. The -/// function does one of the following things: -/// - initializes a local mock server instance with the given expected url paths -/// & queries and respective fixtures for replies -/// - replies for a particular path & query are consumed one at a time until -/// exhausted -/// -/// # Panics -/// -/// Panics if replies for a particular path & query have been exhausted and -/// the client still attempts to query the very same path. -pub fn setup_with_varied_responses( - url_paths_queries_and_response_fixtures: [(String, [(String, u16); M]); N], -) -> (Option>, reqwest::Url) { - let url_paths_queries_and_response_fixtures = url_paths_queries_and_response_fixtures - .into_iter() - .map(|x| { - ( - x.0.clone(), - x.1.into_iter().collect::>(), - ) - }) - .collect::>(); - use std::sync::{Arc, Mutex}; - - let url_paths_queries_and_response_fixtures = - Arc::new(Mutex::new(url_paths_queries_and_response_fixtures)); - - use warp::Filter; - let opt_query_raw = warp::query::raw() - .map(Some) - .or_else(|_| async { Ok::<(Option,), std::convert::Infallible>((None,)) }); - let path = warp::any().and(warp::path::full()).and(opt_query_raw).map( - move |full_path: warp::path::FullPath, raw_query: Option| { - let actual_full_path_and_query = match raw_query { - Some(some_raw_query) => { - format!("{}?{}", full_path.as_str(), some_raw_query.as_str()) - } - None => full_path.as_str().to_owned(), - }; - - let mut url_paths_queries_and_response_fixtures = - url_paths_queries_and_response_fixtures.lock().unwrap(); - - match url_paths_queries_and_response_fixtures - .iter_mut() - .find(|x| x.0 == actual_full_path_and_query) - { - Some((_, responses)) => { - let (body, status) = - responses.pop_front().expect("more responses for this path"); - warp::http::response::Builder::new() - .status(status) - .body(body) - } - None => panic!( - "Actual url path and query {} not found in the expected {:?}", - actual_full_path_and_query, - url_paths_queries_and_response_fixtures - .iter() - .map(|(expected_path, _)| expected_path) - .collect::>() - ), - } - }, - ); - - let (addr, serve_fut) = warp::serve(path).bind_ephemeral(([127, 0, 0, 1], 0)); - let server_handle = tokio::spawn(serve_fut); - let url = reqwest::Url::parse(&format!("http://{addr}")).unwrap(); - (Some(server_handle), url) -} diff --git a/crates/gateway-types/Cargo.toml b/crates/gateway-types/Cargo.toml index 2ed79beba0..04c3b98972 100644 --- a/crates/gateway-types/Cargo.toml +++ b/crates/gateway-types/Cargo.toml @@ -16,10 +16,7 @@ primitive-types = { workspace = true } rand = { workspace = true } reqwest = { workspace = true } serde = { workspace = true, features = ["derive"] } -serde_json = { workspace = true, features = [ - "arbitrary_precision", - "raw_value", -] } +serde_json = { workspace = true, features = ["arbitrary_precision", "raw_value"] } serde_with = { workspace = true } sha3 = { workspace = true } thiserror = { workspace = true } diff --git a/crates/gateway-types/src/error.rs b/crates/gateway-types/src/error.rs index 7e6a9d5a01..424aed5046 100644 --- a/crates/gateway-types/src/error.rs +++ b/crates/gateway-types/src/error.rs @@ -10,12 +10,26 @@ pub enum SequencerError { /// Errors directly coming from reqwest #[error(transparent)] ReqwestError(#[from] reqwest::Error), + /// Gateway request construction related errors + #[error("error constructing gateway request: {0}")] + GatewayRequestCreationError(#[from] GatewayRequestCreationError), /// Custom errors that we fiddled with because the original error was either /// not informative enough or bloated #[error("error decoding response body: invalid error variant")] InvalidStarknetErrorVariant, } +/// Errors related to constructing a request to the gateway. +#[derive(Debug, thiserror::Error)] +pub enum GatewayRequestCreationError { + /// Error when serializing the request body. + #[error(transparent)] + SerializationError(#[from] serde_json::Error), + /// Error when compressing the request body. + #[error(transparent)] + CompressionError(#[from] std::io::Error), +} + /// Used for deserializing specific Starknet sequencer error data. #[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] pub struct StarknetError { @@ -117,6 +131,23 @@ pub enum KnownStarknetErrorCode { DuplicatedTransaction, #[serde(rename = "StarknetErrorCode.INVALID_CONTRACT_CLASS_VERSION")] InvalidContractClassVersion, + #[serde(rename = "StarknetErrorCode.INVALID_PROOF")] + InvalidProof, +} + +/// Helper function which allows for easy creation of a response tuple +/// that contains a [StarknetError] for a given +/// [KnownStarknetErrorCode]. +/// +/// The `message` field is always an empty string. +/// The HTTP status code for this response is always `500` (`Internal Server +/// Error`). +pub fn test_response_from(code: KnownStarknetErrorCode) -> (String, u16) { + let e = StarknetError { + code: code.into(), + message: "".to_string(), + }; + (serde_json::to_string(&e).unwrap(), 500) } #[cfg(test)] diff --git a/crates/gateway-types/src/reply.rs b/crates/gateway-types/src/reply.rs index 81fd266a8e..80856ae746 100644 --- a/crates/gateway-types/src/reply.rs +++ b/crates/gateway-types/src/reply.rs @@ -1,7 +1,7 @@ //! Structures used for deserializing replies from Starkware's sequencer REST //! API. -use pathfinder_common::prelude::*; -use pathfinder_serde::{EthereumAddressAsHexStr, GasPriceAsHexStr}; +use pathfinder_common::{SettlementLayerAddress, prelude::*}; +use pathfinder_serde::{GasPriceAsHexStr, SettlementLayerAddressAsHexStr}; use serde::{Deserialize, Serialize}; use serde_with::{serde_as, DisplayFromStr}; pub use transaction::DataAvailabilityMode; @@ -55,10 +55,16 @@ pub struct Block { pub state_diff_length: Option, } +/// Represents the "pre-latest" block in Starknet, which is a block that has +/// been closed in consensus but is still awaiting commitment calculations +/// before being finalized. +/// +/// Obtained by querying the gateway for the pending block on Starknet > +/// v0.14.0. #[serde_as] #[derive(Clone, Default, Debug, Deserialize, PartialEq, Eq)] #[cfg_attr(test, derive(serde::Serialize))] -pub struct PendingBlock { +pub struct PreLatestBlock { pub l1_gas_price: GasPrices, pub l1_data_gas_price: GasPrices, #[serde(default)] // TODO: Needed until the gateway provides the l2 gas price @@ -84,14 +90,6 @@ pub struct PendingBlock { pub l1_da_mode: L1DataAvailabilityMode, } -/// Represents the "pre-latest" block in Starknet, which is a block that has -/// been closed in consensus but is still awaiting commitment calculations -/// before being finalized. -/// -/// Obtained by querying the gateway for the pending block on Starknet > -/// v0.14.0. -pub type PreLatestBlock = PendingBlock; - #[serde_as] #[derive(Clone, Default, Debug, Deserialize, PartialEq, Eq)] #[cfg_attr(test, derive(serde::Serialize))] @@ -269,12 +267,12 @@ pub mod transaction_status { /// Types used when deserializing L2 transaction related data. pub mod transaction { use fake::{Dummy, Fake, Faker}; - use pathfinder_common::prelude::*; + use pathfinder_common::{prelude::*, ProofFactElem, SettlementLayerAddress}; use pathfinder_crypto::Felt; use pathfinder_serde::{ CallParamAsDecimalStr, ConstructorParamAsDecimalStr, - EthereumAddressAsHexStr, + SettlementLayerAddressAsHexStr, L1ToL2MessagePayloadElemAsDecimalStr, L2ToL1MessagePayloadElemAsDecimalStr, ResourceAmountAsHexStr, @@ -535,8 +533,8 @@ pub mod transaction { #[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] #[serde(deny_unknown_fields)] pub struct L1ToL2Message { - #[serde_as(as = "EthereumAddressAsHexStr")] - pub from_address: EthereumAddress, + #[serde_as(as = "SettlementLayerAddressAsHexStr")] + pub from_address: SettlementLayerAddress, #[serde_as(as = "Vec")] pub payload: Vec, pub selector: EntryPoint, @@ -1130,6 +1128,7 @@ pub mod transaction { account_deployment_data, calldata, sender_address, + proof_facts, }) => Self::Invoke(InvokeTransaction::V3(self::InvokeTransactionV3 { nonce, nonce_data_availability_mode: nonce_data_availability_mode.into(), @@ -1142,6 +1141,7 @@ pub mod transaction { transaction_hash, calldata, account_deployment_data, + proof_facts, })), L1Handler(L1HandlerTransaction { contract_address, @@ -1383,6 +1383,7 @@ pub mod transaction { transaction_hash: _, calldata, account_deployment_data, + proof_facts, })) => TransactionVariant::InvokeV3( pathfinder_common::transaction::InvokeTransactionV3 { signature, @@ -1395,6 +1396,7 @@ pub mod transaction { account_deployment_data, calldata, sender_address, + proof_facts, }, ), Transaction::L1Handler(L1HandlerTransaction { @@ -1922,6 +1924,9 @@ pub mod transaction { pub calldata: Vec, pub account_deployment_data: Vec, + + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub proof_facts: Vec, } /// Represents deserialized L2 "L1 handler" transaction data. @@ -2244,8 +2249,8 @@ pub mod state_update { #[derive(Clone, Debug, Deserialize)] pub struct EthContractAddresses { #[serde(rename = "Starknet")] - #[serde_as(as = "EthereumAddressAsHexStr")] - pub starknet: EthereumAddress, + #[serde_as(as = "SettlementLayerAddressAsHexStr")] + pub starknet: SettlementLayerAddress, pub strk_l2_token_address: Option, diff --git a/crates/gateway-types/src/request.rs b/crates/gateway-types/src/request.rs index 82976824a6..d44f1aeb09 100644 --- a/crates/gateway-types/src/request.rs +++ b/crates/gateway-types/src/request.rs @@ -8,7 +8,14 @@ pub mod add_transaction { SelectorAndOffset, }; use pathfinder_common::prelude::*; - use pathfinder_common::{CallParam, ContractAddress, Fee, TransactionSignatureElem}; + use pathfinder_common::{ + CallParam, + ContractAddress, + Fee, + Proof, + ProofFactElem, + TransactionSignatureElem, + }; use pathfinder_serde::{CallParamAsDecimalStr, TransactionSignatureElemAsDecimalStr}; use serde_with::serde_as; @@ -99,6 +106,15 @@ pub mod add_transaction { V3(InvokeFunctionV3), } + impl InvokeFunction { + pub fn is_proof_empty(&self) -> bool { + match self { + InvokeFunction::V0(_) | InvokeFunction::V1(_) => true, + InvokeFunction::V3(v3) => v3.proof.is_empty(), + } + } + } + #[serde_as] #[derive(Debug, serde::Serialize)] pub struct InvokeFunctionV0V1 { @@ -131,6 +147,10 @@ pub mod add_transaction { pub sender_address: ContractAddress, pub calldata: Vec, pub account_deployment_data: Vec, + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub proof_facts: Vec, + #[serde(default, skip_serializing_if = "Proof::is_empty")] + pub proof: Proof, } /// Declare transaction details. diff --git a/crates/gateway-types/src/trace.rs b/crates/gateway-types/src/trace.rs index 444e5a13f7..c98926a7c2 100644 --- a/crates/gateway-types/src/trace.rs +++ b/crates/gateway-types/src/trace.rs @@ -41,7 +41,6 @@ pub struct Event { #[serde_with::skip_serializing_none] #[derive(Debug, Deserialize)] -#[serde(deny_unknown_fields)] pub struct FunctionInvocation { pub calldata: Vec, pub contract_address: ContractAddress, diff --git a/crates/load-test/Cargo.lock b/crates/load-test/Cargo.lock index fa8e30a26e..49c04d5dce 100644 --- a/crates/load-test/Cargo.lock +++ b/crates/load-test/Cargo.lock @@ -1,37 +1,22 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 - -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] +version = 4 [[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 = "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", ] -[[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" @@ -49,48 +34,38 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "async-compression" -version = "0.4.23" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b37fc50485c4f3f736a4fb14199f6d5f5ba008d7f28fe710306c92780f004c07" +checksum = "d0f9ee0f6e02ffd7ad5816e9464499fba7b3effd01123b515c41d1697c43dad1" dependencies = [ - "flate2", - "futures-core", - "memchr", + "compression-codecs", + "compression-core", "pin-project-lite", "tokio", ] [[package]] name = "async-trait" -version = "0.1.88" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] -name = "autocfg" -version = "1.4.0" +name = "atomic-waker" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] -name = "backtrace" -version = "0.3.74" +name = "autocfg" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets 0.52.6", -] +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "base64" @@ -100,9 +75,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" [[package]] name = "bitvec" @@ -127,30 +102,31 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.17.0" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "bytes" -version = "1.10.1" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "cc" -version = "1.2.23" +version = "1.2.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4ac86a9e5bc1e2b3449ab9d7d3a6a405e3d1bb28d7b9be8614f55846ae3766" +checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" dependencies = [ + "find-msvc-tools", "shlex", ] [[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" @@ -160,16 +136,32 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" dependencies = [ - "android-tzdata", "iana-time-zone", "num-traits", "windows-link", ] +[[package]] +name = "compression-codecs" +version = "0.4.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb7b51a7d9c967fc26773061ba86150f19c50c0d65c887cb1fbe295fd16619b7" +dependencies = [ + "compression-core", + "flate2", + "memchr", +] + +[[package]] +name = "compression-core" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75984efb6ed102a0d42db99afb6c1948f0380d1d91808d5529916e6c08b49d8d" + [[package]] name = "cookie" version = "0.18.1" @@ -183,9 +175,9 @@ dependencies = [ [[package]] name = "cookie_store" -version = "0.21.1" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eac901828f88a5241ee0600950ab981148a18f2f756900ffba1b125ca6a3ef9" +checksum = "3fc4bff745c9b4c7fb1e97b25d13153da2bc7796260141df62378998d070207f" dependencies = [ "cookie", "document-features", @@ -216,18 +208,18 @@ dependencies = [ [[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", ] [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "typenum", @@ -245,15 +237,15 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" +checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", ] @@ -282,7 +274,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -316,11 +308,17 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + [[package]] name = "flate2" -version = "1.1.1" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", "miniz_oxide", @@ -338,17 +336,11 @@ dependencies = [ "spin", ] -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - [[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", ] @@ -361,9 +353,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -376,9 +368,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -386,15 +378,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", @@ -403,38 +395,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -444,7 +436,6 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] @@ -460,42 +451,36 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "js-sys", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasip2", "wasm-bindgen", ] -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - [[package]] name = "goose" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c53a6b3a8e4cc8d178eea3374801c3bcbf7f51fb848f7a30410088b4daeea480" +checksum = "8d5e77ce04d5086ca6659396f81b5d63c9c0c4453c05b7fa38fcc83ea1b2b8e7" dependencies = [ "async-trait", "chrono", @@ -509,7 +494,7 @@ dependencies = [ "lazy_static", "log", "num-format", - "rand 0.9.1", + "rand 0.9.2", "regex", "reqwest", "serde", @@ -551,12 +536,11 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "http" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", - "fnv", "itoa", ] @@ -591,18 +575,20 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hyper" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", + "futures-core", "http", "http-body", "httparse", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -610,11 +596,10 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.5" +version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "futures-util", "http", "hyper", "hyper-util", @@ -623,22 +608,25 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "webpki-roots 0.26.11", + "webpki-roots", ] [[package]] name = "hyper-util" -version = "0.1.12" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9f1e950e0d9d1d3c47184416723cf29c0d1f93bd8cccf37e4beb6b44f31710" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ + "base64", "bytes", "futures-channel", "futures-util", "http", "http-body", "hyper", + "ipnet", "libc", + "percent-encoding", "pin-project-lite", "socket2", "tokio", @@ -648,9 +636,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -672,21 +660,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", @@ -695,104 +684,66 @@ 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.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" - [[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.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" 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.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[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.101", -] - [[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", @@ -801,9 +752,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", @@ -811,9 +762,19 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.11.0" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" + +[[package]] +name = "iri-string" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" +dependencies = [ + "memchr", + "serde", +] [[package]] name = "itertools" @@ -826,15 +787,15 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" dependencies = [ "once_cell", "wasm-bindgen", @@ -848,15 +809,15 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.172" +version = "0.2.183" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" [[package]] name = "litemap" -version = "0.7.4" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "litrs" @@ -870,7 +831,7 @@ version = "0.1.0" dependencies = [ "goose", "pathfinder-crypto", - "rand 0.9.1", + "rand 0.9.2", "serde", "serde_json", "tokio", @@ -878,19 +839,18 @@ dependencies = [ [[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", ] [[package]] name = "log" -version = "0.4.27" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "lru-slab" @@ -900,34 +860,29 @@ checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] name = "memchr" -version = "2.7.4" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "miniz_oxide" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", + "simd-adler32", ] [[package]] name = "mio" -version = "1.0.3" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "wasi", + "windows-sys 0.61.2", ] [[package]] @@ -936,7 +891,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] @@ -953,9 +908,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" [[package]] name = "num-format" @@ -985,24 +940,15 @@ dependencies = [ "libc", ] -[[package]] -name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "pathfinder-crypto" -version = "0.21.0" +version = "0.22.3" dependencies = [ "bitvec", "fake", @@ -1012,15 +958,15 @@ dependencies = [ [[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 = "pin-project-lite" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pin-utils" @@ -1028,6 +974,15 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[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" version = "0.2.0" @@ -1045,9 +1000,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] @@ -1070,9 +1025,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", "cfg_aliases", @@ -1090,14 +1045,14 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.12" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" dependencies = [ "bytes", - "getrandom 0.3.3", + "getrandom 0.3.4", "lru-slab", - "rand 0.9.1", + "rand 0.9.2", "ring", "rustc-hash", "rustls", @@ -1111,32 +1066,32 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.12" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4e529991f949c5e25755532370b8af5d114acae52326361d68d47af64aa842" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ "cfg_aliases", "libc", "once_cell", "socket2", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] [[package]] name = "r-efi" -version = "5.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "radium" @@ -1157,12 +1112,12 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -1182,7 +1137,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -1191,23 +1146,23 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", ] [[package]] name = "regex" -version = "1.11.1" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", @@ -1217,9 +1172,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", @@ -1228,39 +1183,33 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "reqwest" -version = "0.12.15" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ - "async-compression", "base64", "bytes", "cookie", "cookie_store", "futures-core", - "futures-util", "http", "http-body", "http-body-util", "hyper", "hyper-rustls", "hyper-util", - "ipnet", "js-sys", "log", - "mime", - "once_cell", "percent-encoding", "pin-project-lite", "quinn", "rustls", - "rustls-pemfile", "rustls-pki-types", "serde", "serde_json", @@ -1268,15 +1217,14 @@ dependencies = [ "sync_wrapper", "tokio", "tokio-rustls", - "tokio-util", "tower", + "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots 0.26.11", - "windows-registry", + "webpki-roots", ] [[package]] @@ -1287,18 +1235,12 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", ] -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - [[package]] name = "rustc-hash" version = "2.1.1" @@ -1307,9 +1249,9 @@ checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustls" -version = "0.23.27" +version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "730944ca083c1c233a75c09f199e973ca499344a2b7ba9e755c457e86fb4a321" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" dependencies = [ "once_cell", "ring", @@ -1319,20 +1261,11 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustls-pemfile" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "rustls-pki-types" -version = "1.12.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" dependencies = [ "web-time", "zeroize", @@ -1340,9 +1273,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.3" +version = "0.103.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" +checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" dependencies = [ "ring", "rustls-pki-types", @@ -1351,15 +1284,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 = "ryu" -version = "1.0.20" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "scopeguard" @@ -1369,34 +1302,45 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +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", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", - "ryu", "serde", + "serde_core", + "zmij", ] [[package]] @@ -1428,6 +1372,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "simd-adler32" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" + [[package]] name = "simplelog" version = "0.12.2" @@ -1441,27 +1391,24 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.9" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.5.9" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -1475,27 +1422,26 @@ 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 = "strum" -version = "0.27.1" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" [[package]] name = "strum_macros" -version = "0.27.1" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" dependencies = [ "heck", "proc-macro2", "quote", - "rustversion", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -1517,9 +1463,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.101" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -1543,7 +1489,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] @@ -1563,29 +1509,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] name = "time" -version = "0.3.41" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "itoa", @@ -1593,22 +1539,22 @@ dependencies = [ "num-conv", "num_threads", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" dependencies = [ "num-conv", "time-core", @@ -1616,9 +1562,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", @@ -1626,9 +1572,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", ] @@ -1641,36 +1587,35 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.45.0" +version = "1.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" dependencies = [ - "backtrace", "bytes", "libc", "mio", "pin-project-lite", "socket2", "tokio-macros", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[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", "tokio", @@ -1678,9 +1623,9 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.26.2" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" +checksum = "489a59b6730eda1b0171fcfda8b121f4bee2b35cba8645ca35c5f7ba3eb736c1" dependencies = [ "futures-util", "log", @@ -1691,9 +1636,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.15" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", @@ -1704,9 +1649,9 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", @@ -1717,6 +1662,29 @@ dependencies = [ "tower-service", ] +[[package]] +name = "tower-http" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" +dependencies = [ + "async-compression", + "bitflags", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "iri-string", + "pin-project-lite", + "tokio", + "tokio-util", + "tower", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-layer" version = "0.3.3" @@ -1731,9 +1699,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "pin-project-lite", "tracing-core", @@ -1741,9 +1709,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", ] @@ -1756,16 +1724,16 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" -version = "0.26.2" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" +checksum = "eadc29d668c91fcc564941132e17b28a7ceb2f3ebf0b9dae3e03fd7a6748eb0d" dependencies = [ "bytes", "data-encoding", "http", "httparse", "log", - "rand 0.9.1", + "rand 0.9.2", "sha1", "thiserror", "utf-8", @@ -1773,15 +1741,15 @@ dependencies = [ [[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 = "unicode-ident" -version = "1.0.18" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "untrusted" @@ -1791,13 +1759,14 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.4" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] [[package]] @@ -1806,12 +1775,6 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" -[[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" @@ -1835,52 +1798,40 @@ 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.14.2+wasi-0.2.4" +name = "wasip2" +version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" 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.101", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "e9c5522b3a28661442748e09d40924dfb9ca614b21c00d3fd135720e48b67db8" dependencies = [ "cfg-if", + "futures-util", "js-sys", "once_cell", "wasm-bindgen", @@ -1889,9 +1840,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1899,31 +1850,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.101", - "wasm-bindgen-backend", + "syn 2.0.117", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" dependencies = [ "js-sys", "wasm-bindgen", @@ -1941,136 +1892,115 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.11" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" -dependencies = [ - "webpki-roots 1.0.0", -] - -[[package]] -name = "webpki-roots" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2853738d1cc4f2da3a225c18ec6c3721abb31961096e9dbf5ab35fa88b19cfdb" +checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" dependencies = [ "rustls-pki-types", ] [[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]] 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", + "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.101", + "syn 2.0.117", ] [[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.101", + "syn 2.0.117", ] [[package]] name = "windows-link" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" - -[[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.4", - "windows-strings 0.3.1", - "windows-targets 0.53.0", -] +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[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.4" +name = "windows-strings" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ "windows-link", ] [[package]] -name = "windows-strings" -version = "0.1.0" +name = "windows-sys" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-result 0.2.0", "windows-targets 0.52.6", ] [[package]] -name = "windows-strings" -version = "0.3.1" +name = "windows-sys" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-link", + "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]] @@ -2091,18 +2021,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.0" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" +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]] @@ -2113,9 +2044,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" @@ -2125,9 +2056,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" @@ -2137,9 +2068,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" @@ -2149,9 +2080,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" @@ -2161,9 +2092,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" @@ -2173,9 +2104,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" @@ -2185,9 +2116,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" @@ -2197,30 +2128,21 @@ 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 = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags", -] - -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" [[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 = "wyz" @@ -2233,11 +2155,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", @@ -2245,41 +2166,41 @@ 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.101", + "syn 2.0.117", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.25" +version = "0.8.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" +checksum = "f2578b716f8a7a858b7f02d5bd870c14bf4ddbbcf3a4c05414ba6503640505e3" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.25" +version = "0.8.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +checksum = "7e6cc098ea4d3bd6246687de65af3f920c430e236bee1e3bf2e441463f08a02f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", ] [[package]] name = "zerofrom" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] @@ -2292,21 +2213,32 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.101", + "syn 2.0.117", "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" + +[[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", @@ -2315,11 +2247,17 @@ 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.101", + "syn 2.0.117", ] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/crates/load-test/Cargo.toml b/crates/load-test/Cargo.toml index e467c28252..ac42600015 100644 --- a/crates/load-test/Cargo.toml +++ b/crates/load-test/Cargo.toml @@ -5,14 +5,14 @@ description = "Load test for pathfinder JSON-RPC endpoints" authors = ["Equilibrium Labs "] edition = "2021" license = "MIT OR Apache-2.0" -rust-version = "1.73" +rust-version = "1.91" [dependencies] -goose = { version = "0.18.0", default-features = false, features = [ +goose = { version = "0.18.1", default-features = false, features = [ "rustls-tls", ] } pathfinder-crypto = { path = "../crypto" } -rand = "0.9.0" -serde = { version = "1.0.218", features = ["derive"] } -serde_json = { version = "1.0.140", features = ["arbitrary_precision"] } -tokio = "1.45.0" +rand = "0.9.2" +serde = { version = "1.0.228", features = ["derive"] } +serde_json = { version = "1.0.149", features = ["arbitrary_precision"] } +tokio = "1.50.0" diff --git a/crates/merkle-tree/src/starknet_state.rs b/crates/merkle-tree/src/starknet_state.rs index 1b7ebcb3a6..b1d24d3965 100644 --- a/crates/merkle-tree/src/starknet_state.rs +++ b/crates/merkle-tree/src/starknet_state.rs @@ -43,7 +43,9 @@ pub fn update_starknet_state( .into()) } }; - let transaction = connection.transaction()?; + let transaction = connection + .transaction() + .map_err(|e| StateUpdateError::StorageError(e.into()))?; update_contract_state( **contract_address, update.storage, @@ -147,3 +149,193 @@ pub fn update_starknet_state( Ok((storage_commitment, class_commitment)) } + +#[cfg(test)] +mod tests { + use pathfinder_common::prelude::*; + use pathfinder_common::{ + class_commitment, + state_commitment, + storage_address, + storage_commitment, + storage_value, + ClassCommitment, + StarknetVersion, + StateCommitment, + }; + + use crate::contract_state::calculate_contract_state_hash; + use crate::{ContractsStorageTree, StorageCommitmentTree}; + + /// Regression test for state commitment calculation in Starknet v0.14+. + /// + /// In Starknet v0.14.0+, the state commitment formula changed: it now + /// always uses the Poseidon hash with STARKNET_STATE_V0 prefix, even + /// when the class_commitment is zero. + /// + /// Before v0.14: + /// If class_commitment == 0: state = storage_commitment. + /// Else: state = poseidon([STARKNET_STATE_V0, storage, class]). + /// + /// v0.14+: + /// State = poseidon([STARKNET_STATE_V0, storage, class]) (always). + /// + /// Test data from feeder gateway get_state_update for blockNumber=0. + /// Expected state_root: + /// 0x68bcf9e9257ab6bffd9425833a208aaab6b85649fd21c787a546cb7cb9abf. + #[test] + fn state_commitment_v0_14_with_zero_class_commitment() { + let storage = pathfinder_storage::StorageBuilder::in_memory().unwrap(); + let mut db = storage.connection().unwrap(); + let tx = db.transaction().unwrap(); + + // Contract 0x2 is a system contract. + let contract_address = ContractAddress::TWO; + + // Create contract storage tree with single entry: key 0x0 -> value 0x80. + let mut contract_tree = ContractsStorageTree::empty(&tx, contract_address); + contract_tree + .set(storage_address!("0x0"), storage_value!("0x80")) + .unwrap(); + let (contract_root, _) = contract_tree.commit().unwrap(); + + // For system contracts: class_hash = 0, nonce = 0. + let contract_state_hash = + calculate_contract_state_hash(ClassHash::ZERO, contract_root, ContractNonce::ZERO); + + // Create storage commitment tree with the contract. + let mut storage_commitment_tree = StorageCommitmentTree::empty(&tx); + storage_commitment_tree + .set(contract_address, contract_state_hash) + .unwrap(); + let (storage_commitment, _) = storage_commitment_tree.commit().unwrap(); + + // Class commitment is ZERO (no declared classes). + let class_commitment = ClassCommitment::ZERO; + + // Expected state commitment from feeder gateway. + let expected = + state_commitment!("0x68bcf9e9257ab6bffd9425833a208aaab6b85649fd21c787a546cb7cb9abf"); + + // Test v0.14 calculation (should match). + let state_commitment_v014 = StateCommitment::calculate( + storage_commitment, + class_commitment, + StarknetVersion::V_0_14_0, + ); + assert_eq!( + state_commitment_v014, expected, + "v0.14 state commitment should match expected." + ); + + // Test pre-0.14 calculation (should NOT match for this case). + let state_commitment_v013 = StateCommitment::calculate( + storage_commitment, + class_commitment, + StarknetVersion::V_0_13_4, + ); + assert_ne!( + state_commitment_v013, expected, + "Pre-0.14 calculation should NOT match for v0.14+ expected value." + ); + + // Verify pre-0.14 returns storage_commitment directly. + assert_eq!( + state_commitment_v013.0, storage_commitment.0, + "Pre-0.14 should return storage_commitment when class_commitment is zero." + ); + } + + /// Test that pre-v0.14 behavior is preserved for older versions. + #[test] + fn state_commitment_pre_v0_14_with_zero_class_commitment() { + let storage_commitment = storage_commitment!("0x1234"); + let class_commitment = ClassCommitment::ZERO; + + // Pre-v0.14: state_commitment should equal storage_commitment when class is + // zero. + let state_v013 = StateCommitment::calculate( + storage_commitment, + class_commitment, + StarknetVersion::V_0_13_4, + ); + assert_eq!( + state_v013.0, storage_commitment.0, + "Pre-v0.14 should return storage_commitment when class_commitment is zero." + ); + + // v0.14+: state_commitment should use Poseidon formula. + let state_v014 = StateCommitment::calculate( + storage_commitment, + class_commitment, + StarknetVersion::V_0_14_0, + ); + assert_ne!( + state_v014.0, storage_commitment.0, + "v0.14+ should NOT return storage_commitment directly when class_commitment is zero." + ); + } + + /// Test that non-zero class commitment uses Poseidon formula for all + /// versions. + #[test] + fn state_commitment_with_nonzero_class_commitment() { + let storage_commitment = storage_commitment!("0x1234"); + let class_commitment = class_commitment!("0x5678"); + + // Both versions should use Poseidon formula when class_commitment is non-zero. + let state_v013 = StateCommitment::calculate( + storage_commitment, + class_commitment, + StarknetVersion::V_0_13_4, + ); + let state_v014 = StateCommitment::calculate( + storage_commitment, + class_commitment, + StarknetVersion::V_0_14_0, + ); + + // Both should produce the same result (Poseidon hash). + assert_eq!( + state_v013, state_v014, + "Non-zero class: v0.13 and v0.14 should produce the same result." + ); + + // Neither should equal storage_commitment directly. + assert_ne!( + state_v013.0, storage_commitment.0, + "Non-zero class commitment should use Poseidon formula." + ); + } + + /// Test that both storage and class commitment being zero returns zero + /// state commitment. + #[test] + fn state_commitment_with_both_zero() { + let storage_commitment = StorageCommitment::ZERO; + let class_commitment = ClassCommitment::ZERO; + + // When both are zero, state commitment should be zero for any version. + let state_v013 = StateCommitment::calculate( + storage_commitment, + class_commitment, + StarknetVersion::V_0_13_4, + ); + let state_v014 = StateCommitment::calculate( + storage_commitment, + class_commitment, + StarknetVersion::V_0_14_0, + ); + + assert_eq!( + state_v013, + StateCommitment::ZERO, + "Both zero should return StateCommitment::ZERO for pre-0.14." + ); + assert_eq!( + state_v014, + StateCommitment::ZERO, + "Both zero should return StateCommitment::ZERO for v0.14+." + ); + } +} diff --git a/crates/p2p/Cargo.toml b/crates/p2p/Cargo.toml index d2f7a2c76b..4a92dbf94e 100644 --- a/crates/p2p/Cargo.toml +++ b/crates/p2p/Cargo.toml @@ -16,23 +16,7 @@ flate2 = { workspace = true } futures = { workspace = true } governor = { workspace = true } ipnet = { workspace = true } -libp2p = { workspace = true, features = [ - "autonat", - "dcutr", - "dns", - "identify", - "gossipsub", - "kad", - "macros", - "noise", - "ping", - "relay", - "request-response", - "serde", - "tcp", - "tokio", - "yamux", -] } +libp2p = { workspace = true, features = ["autonat", "dcutr", "dns", "identify", "gossipsub", "kad", "macros", "noise", "ping", "relay", "request-response", "serde", "tcp", "tokio", "yamux"] } p2p_proto = { path = "../p2p_proto" } p2p_stream = { path = "../p2p_stream" } pathfinder-common = { path = "../common" } diff --git a/crates/p2p/src/consensus.rs b/crates/p2p/src/consensus.rs index b90ab28d20..575704509b 100644 --- a/crates/p2p/src/consensus.rs +++ b/crates/p2p/src/consensus.rs @@ -3,6 +3,7 @@ use std::collections::HashMap; use libp2p::gossipsub::PublishError; +use libp2p::PeerId; use p2p_proto::consensus::{ProposalPart, Vote}; use pathfinder_common::ContractAddress; use smallvec::SmallVec; @@ -12,6 +13,7 @@ use tokio::sync::mpsc::Sender; mod behaviour; mod client; mod height_and_round; +pub mod peer_score; mod stream; pub use behaviour::Behaviour; @@ -40,35 +42,53 @@ pub enum Command { vote: Vote, done_tx: Sender>, }, + /// Apply decay to all peer scores. + PeerScoreDecay, + /// A peer performed an action worthy of a score change. + ChangePeerScore { + /// The target peer ID. + peer_id: PeerId, + /// The score delta to apply (can be positive or negative). + /// + /// This should most likely be one of the constants defined in + /// the [peer_score::penalty] module. + delta: f64, + }, /// Test command to create a proposal stream. #[cfg(test)] TestProposalStream(HeightAndRound, Vec, bool), } /// Events emitted by the consensus behaviour. +#[derive(Debug, Clone)] +pub struct Event { + pub source: PeerId, + pub kind: EventKind, +} + #[allow(clippy::large_enum_variant)] #[derive(Debug, Clone, PartialEq)] -pub enum Event { +pub enum EventKind { /// A proposal (part) for a new block. Proposal(HeightAndRound, ProposalPart), /// A vote for a proposal. Vote(Vote), } -impl Event { +impl EventKind { /// Returns the height associated with the event. pub fn height(&self) -> u64 { match self { - Event::Proposal(hnr, _) => hnr.height(), - Event::Vote(vote) => vote.block_number, + EventKind::Proposal(hnr, _) => hnr.height(), + EventKind::Vote(vote) => vote.height, } } /// Returns a static string representing the type of event. pub fn type_name(&self) -> &'static str { match self { - Event::Proposal(_, _) => "Proposal", - Event::Vote(_) => "Vote", + EventKind::Proposal(_, _) => "Proposal", + EventKind::Vote(_) => "Vote", } } } @@ -77,14 +97,17 @@ impl Event { #[derive(Default, Debug)] pub struct State { /// The active streams of the consensus P2P network. - active_streams: HashMap>, // TODO: Implement cleanup of inactive streams + active_streams: HashMap>, + /// Application scores for connected peers. + peer_app_scores: HashMap, } impl State { pub fn new() -> Self { Self { active_streams: HashMap::new(), + peer_app_scores: HashMap::new(), } } } @@ -140,6 +163,7 @@ pub fn create_outgoing_proposal_message( pub fn handle_incoming_proposal_message( state: &mut State, message: StreamMessage, + propagation_source: PeerId, ) -> Vec { let stream_id = message.stream_id; @@ -176,14 +200,22 @@ pub fn handle_incoming_proposal_message( // Process this message (it's in order) let mut events = Vec::new(); if let StreamMessageBody::Content(content) = message.message { - events.push(Event::Proposal(stream_id, content)); + let event = Event { + source: propagation_source, + kind: EventKind::Proposal(stream_id, content), + }; + events.push(event); state.next_message_id += 1; } // Process any buffered messages that are now in order while let Some(next_message) = state.received_messages.remove(&state.next_message_id) { if let StreamMessageBody::Content(content) = next_message.message { - events.push(Event::Proposal(stream_id, content)); + let event = Event { + source: propagation_source, + kind: EventKind::Proposal(stream_id, content.clone()), + }; + events.push(event); state.next_message_id += 1; } } @@ -216,7 +248,7 @@ mod tests { use tokio::sync::mpsc; use super::*; - use crate::consensus::{Command, Event}; + use crate::consensus::{Command, EventKind}; use crate::core::{self, Config}; use crate::libp2p::Multiaddr; use crate::{consensus, main_loop, new_consensus}; @@ -229,14 +261,15 @@ mod tests { // Create a sample proposal let block_info = BlockInfo { - block_number: 100, + height: 100, timestamp: 1234567890, builder: Address(Felt::from_hex_str("0x456").unwrap()), l1_da_mode: L1DataAvailabilityMode::Calldata, l2_gas_price_fri: 1000, - l1_gas_price_wei: 2000, - l1_data_gas_price_wei: 3000, - eth_to_strk_rate: 4000, + l1_gas_price_fri: 2000, + l1_data_gas_price_fri: 3000, + l1_gas_price_wei: 4000, + l1_data_gas_price_wei: 5000, }; let proposal = ProposalPart::BlockInfo(block_info); @@ -269,14 +302,15 @@ mod tests { // Create a sample proposal let block_info = BlockInfo { - block_number: 100, + height: 100, timestamp: 1234567890, builder: Address(Felt::from_hex_str("0x456").unwrap()), l1_da_mode: L1DataAvailabilityMode::Calldata, l2_gas_price_fri: 1000, - l1_gas_price_wei: 2000, - l1_data_gas_price_wei: 3000, - eth_to_strk_rate: 4000, + l1_gas_price_fri: 2000, + l1_data_gas_price_fri: 3000, + l1_gas_price_wei: 4000, + l1_data_gas_price_wei: 5000, }; let proposal = ProposalPart::BlockInfo(block_info); @@ -288,7 +322,7 @@ mod tests { }; // Handle the message - let events = handle_incoming_proposal_message(&mut state, message); + let events = handle_incoming_proposal_message(&mut state, message, PeerId::random()); // Verify state was updated let stream_state = state.active_streams.get(&height_and_round).unwrap(); @@ -303,7 +337,10 @@ mod tests { // Verify events assert_eq!(events.len(), 1); - assert_eq!(events[0], Event::Proposal(height_and_round, proposal)); + assert_eq!( + events[0].kind, + EventKind::Proposal(height_and_round, proposal) + ); } /// Tests sending proposal streams between two nodes with message shuffling. @@ -371,8 +408,10 @@ mod tests { let mut completed_proposals = HashSet::new(); while completed_proposals.len() < proposals.len() { - if let Some(Event::Proposal(height_and_round, received_proposal)) = - node2_events.recv().await + if let Some(Event { + kind: EventKind::Proposal(height_and_round, received_proposal), + .. + }) = node2_events.recv().await { // Get or create the vector for this height/round let proposal_parts = received_proposals @@ -453,21 +492,21 @@ mod tests { let votes = vec![ Vote { vote_type: VoteType::Prevote, - block_number: 100, + height: 100, round: 1, proposal_commitment: Some(Hash(Felt::from_hex_str("0x123").unwrap())), voter: Address(Felt::from_hex_str("0x456").unwrap()), }, Vote { vote_type: VoteType::Precommit, - block_number: 100, + height: 100, round: 1, proposal_commitment: Some(Hash(Felt::from_hex_str("0x789").unwrap())), voter: Address(Felt::from_hex_str("0xabc").unwrap()), }, Vote { vote_type: VoteType::Prevote, - block_number: 101, + height: 101, round: 2, proposal_commitment: None, // NIL vote voter: Address(Felt::from_hex_str("0xdef").unwrap()), @@ -492,7 +531,11 @@ mod tests { let mut expected_votes = votes.clone(); while !expected_votes.is_empty() { - if let Some(Event::Vote(received_vote)) = node2_events.recv().await { + if let Some(Event { + kind: EventKind::Vote(received_vote), + .. + }) = node2_events.recv().await + { received_votes.push(received_vote.clone()); // Find and remove the matching expected vote @@ -539,7 +582,7 @@ mod tests { // ProposalInit stream.push(ProposalPart::Init(ProposalInit { - block_number: height, + height, round, proposer: p2p_proto::common::Address(Felt::from_hex_str("0x123").unwrap()), valid_round: None, @@ -547,14 +590,15 @@ mod tests { // BlockInfo stream.push(ProposalPart::BlockInfo(BlockInfo { - block_number: height, + height, timestamp: 1234567890 + base, builder: p2p_proto::common::Address(Felt::from_hex_str("0x456").unwrap()), l1_da_mode: p2p_proto::common::L1DataAvailabilityMode::Calldata, l2_gas_price_fri: 1000 + base as u128, - l1_gas_price_wei: 2000 + base as u128, - l1_data_gas_price_wei: 3000 + base as u128, - eth_to_strk_rate: 4000 + base as u128, + l1_gas_price_fri: 2000 + base as u128, + l1_data_gas_price_fri: 3000 + base as u128, + l1_gas_price_wei: 4000 + base as u128, + l1_data_gas_price_wei: 5000 + base as u128, })); // TransactionBatch (send a few) diff --git a/crates/p2p/src/consensus/behaviour.rs b/crates/p2p/src/consensus/behaviour.rs index 1433d2be6f..53daad071d 100644 --- a/crates/p2p/src/consensus/behaviour.rs +++ b/crates/p2p/src/consensus/behaviour.rs @@ -1,4 +1,4 @@ -use libp2p::gossipsub::{self, IdentTopic}; +use libp2p::gossipsub::{self, Sha256Topic}; use libp2p::swarm::NetworkBehaviour; use libp2p::{identity, PeerId}; use p2p_proto::consensus::Vote; @@ -12,7 +12,9 @@ use crate::consensus::stream::StreamMessage; use crate::consensus::{ create_outgoing_proposal_message, handle_incoming_proposal_message, + peer_score, Event, + EventKind, TOPIC_PROPOSALS, TOPIC_VOTES, }; @@ -47,7 +49,7 @@ impl ApplicationBehaviour for Behaviour { let mut tx_result = Ok(()); for msg in stream_msgs { - let topic = IdentTopic::new(TOPIC_PROPOSALS); + let topic = Sha256Topic::new(TOPIC_PROPOSALS); if let Err(e) = self.gossipsub.publish(topic, msg.to_protobuf_bytes()) { error!( @@ -67,7 +69,7 @@ impl ApplicationBehaviour for Behaviour { ConsensusCommand::Vote { vote, done_tx } => { let cloned_vote = vote.clone(); let data = vote.to_protobuf_bytes(); - let topic = IdentTopic::new(TOPIC_VOTES); + let topic = Sha256Topic::new(TOPIC_VOTES); let tx_result = self .gossipsub @@ -82,6 +84,40 @@ impl ApplicationBehaviour for Behaviour { .await .expect("Receiver not to be dropped"); } + ConsensusCommand::PeerScoreDecay => { + let connected_peers: Vec<_> = + self.gossipsub.all_peers().map(|(id, _)| *id).collect(); + + // Use the opportunity to remove scores for disconnected peers. + state.peer_app_scores.retain(|peer_id, score| { + if connected_peers.contains(peer_id) { + *score *= peer_score::DECAY_FACTOR; + true + } else { + false + } + }); + } + ConsensusCommand::ChangePeerScore { peer_id, delta } => { + let current_score = state + .peer_app_scores + .entry(peer_id) + .or_insert(peer_score::INITIAL_APPLICATION_SCORE); + *current_score += delta; + let done = self + .gossipsub + .set_application_score(&peer_id, *current_score); + if !done { + // Peer scoring _should_ be active for consensus P2P, so the only reason we + // would fail to set the score is if the peer disconnected or its score + // expired. + // Either way, we can remove its score from our local state at this point. + state.peer_app_scores.remove(&peer_id); + tracing::debug!( + "Failed to set peer score for {peer_id}, peer may have disconnected" + ); + } + } #[cfg(test)] ConsensusCommand::TestProposalStream(height_and_round, proposal_stream, shuffle) => { // This command is used to test out-of-order delivery of proposal streams. @@ -97,7 +133,7 @@ impl ApplicationBehaviour for Behaviour { stream_msgs.shuffle(&mut rand::thread_rng()); } for msg in stream_msgs { - let topic = IdentTopic::new(TOPIC_PROPOSALS); + let topic = Sha256Topic::new(TOPIC_PROPOSALS); if let Err(e) = self.gossipsub.publish(topic, msg.to_protobuf_bytes()) { error!("Failed to publish proposal message: {}", e); } @@ -115,15 +151,22 @@ impl ApplicationBehaviour for Behaviour { ) { use gossipsub::Event::*; let BehaviourEvent::Gossipsub(e) = event; + + tracing::trace!(event=?e, "Gossipsub event received"); + + let topic_proposals_hash = Sha256Topic::new(TOPIC_PROPOSALS).hash(); + let topic_votes_hash = Sha256Topic::new(TOPIC_VOTES).hash(); + match e { Message { - propagation_source: _, + propagation_source, message_id, message, - } => match message.topic.as_str() { - TOPIC_PROPOSALS => { + } => match message.topic { + hash if hash == topic_proposals_hash => { if let Ok(stream_msg) = StreamMessage::from_protobuf_bytes(&message.data) { - let events = handle_incoming_proposal_message(state, stream_msg); + let events = + handle_incoming_proposal_message(state, stream_msg, propagation_source); for event in events { let _ = event_sender.send(event); } @@ -131,9 +174,13 @@ impl ApplicationBehaviour for Behaviour { error!("Failed to parse proposal message with id: {}", message_id); } } - TOPIC_VOTES => { + hash if hash == topic_votes_hash => { if let Ok(vote) = Vote::from_protobuf_bytes(&message.data) { - let _ = event_sender.send(Event::Vote(vote)); + let event = Event { + source: propagation_source, + kind: EventKind::Vote(vote), + }; + let _ = event_sender.send(event); } else { error!("Failed to parse vote message with id: {}", message_id); } @@ -163,8 +210,15 @@ impl Behaviour { ) .expect("Failed to create gossipsub behaviour"); - let proposals_topic = IdentTopic::new(TOPIC_PROPOSALS); - let votes_topic = IdentTopic::new(TOPIC_VOTES); + gossipsub + .with_peer_score( + peer_score::default_params(), + peer_score::default_thresholds(), + ) + .expect("Params should be valid and not already set"); + + let proposals_topic = Sha256Topic::new(TOPIC_PROPOSALS); + let votes_topic = Sha256Topic::new(TOPIC_VOTES); gossipsub .subscribe(&proposals_topic) diff --git a/crates/p2p/src/consensus/client.rs b/crates/p2p/src/consensus/client.rs index 7b5907babe..67fc3777c1 100644 --- a/crates/p2p/src/consensus/client.rs +++ b/crates/p2p/src/consensus/client.rs @@ -52,4 +52,25 @@ impl Client { rx.recv().await.expect("Sender not to be dropped") } + + /// Apply decay to all peer scores. + pub fn decay_peer_scores(&self) { + self.sender + .send(core::Command::Application(Command::PeerScoreDecay)) + .expect("Command receiver not to be dropped"); + } + + /// Change the application-specific score for the given peer (if it is + /// connected to us). + /// + /// The `delta` parameter should most likely be one of the constants defined + /// in the [penalty](crate::consensus::peer_score::penalty) module. + pub fn change_peer_score(&self, peer_id: PeerId, delta: f64) { + self.sender + .send(core::Command::Application(Command::ChangePeerScore { + peer_id, + delta, + })) + .expect("Command receiver not to be dropped"); + } } diff --git a/crates/p2p/src/consensus/peer_score.rs b/crates/p2p/src/consensus/peer_score.rs new file mode 100644 index 0000000000..d5da9f485e --- /dev/null +++ b/crates/p2p/src/consensus/peer_score.rs @@ -0,0 +1,66 @@ +use std::time::Duration; + +use libp2p::gossipsub; + +/// Initial value of the application-specific portion of the peer score. +pub const INITIAL_APPLICATION_SCORE: f64 = 0.0; + +/// Decay period for peer scoring. +pub const DECAY_PERIOD: Duration = Duration::from_secs(60); + +/// Decay factor for peer scoring. +pub const DECAY_FACTOR: f64 = 0.8; + +/// Application-specific weight for peer scoring. +/// +/// When calculating overall peer score, libp2p multiplies the application score +/// by this weight. The penalty values should be picked with this in +/// mind. +/// +/// The value is the same as the default in libp2p (at the time) but we expose +/// it here to have something to base our penalty values on. +const APP_SPECIFIC_WEIGHT: f64 = 10.0; + +/// Graylist threshold for peer scoring. Peers with a score below this value +/// will have their message processing suppressed altogether. +/// +/// The value is the same as the default in libp2p (at the time) but we expose +/// it here to have something to base our penalty values on. +const GRAYLIST_THRESHOLD: f64 = -80.0; + +pub fn default_params() -> gossipsub::PeerScoreParams { + gossipsub::PeerScoreParams { + app_specific_weight: APP_SPECIFIC_WEIGHT, + ..Default::default() + } +} + +pub fn default_thresholds() -> gossipsub::PeerScoreThresholds { + gossipsub::PeerScoreThresholds { + graylist_threshold: GRAYLIST_THRESHOLD, + ..Default::default() + } +} + +pub mod penalty { + use super::{APP_SPECIFIC_WEIGHT, GRAYLIST_THRESHOLD, INITIAL_APPLICATION_SCORE}; + + // This is the only penalty we have at the moment and the whole peer scoring + // system still needs to be tested in a realistic environment before we can be + // confident these values make sense. + // + // For now we'll set this to a value that requires quite a lot of offenses to + // graylist a peer, in order to avoid affecting the network. + pub const OUTDATED_MESSAGE: f64 = penalty(1000); + + /// Calculate a penalty value. Penalties are defined in terms of the number + /// of times the error that is being penalized should occur to reach the + /// graylist threshold. + /// + /// ### Reference + /// + /// + const fn penalty(err_count: u16) -> f64 { + (GRAYLIST_THRESHOLD - INITIAL_APPLICATION_SCORE) / APP_SPECIFIC_WEIGHT / (err_count as f64) + } +} diff --git a/crates/p2p/src/consensus/stream.rs b/crates/p2p/src/consensus/stream.rs index 51aff17f34..b7c9db896f 100644 --- a/crates/p2p/src/consensus/stream.rs +++ b/crates/p2p/src/consensus/stream.rs @@ -25,7 +25,7 @@ impl ProtobufSerializable for StreamMessage { fn to_protobuf_bytes(&self) -> Vec { let proto_message = p2p_proto::consensus::StreamMessage { stream_id: self.stream_id.into(), - sequence_number: self.message_id, + message_id: self.message_id, message: match &self.message { StreamMessageBody::Content(content) => { p2p_proto::consensus::StreamMessageVariant::Content(content.to_protobuf_bytes()) @@ -49,7 +49,7 @@ impl ProtobufSerializable for StreamMessage { Ok(StreamMessage { stream_id: proto_message.stream_id.try_into()?, - message_id: proto_message.sequence_number, + message_id: proto_message.message_id, message, }) } @@ -141,14 +141,15 @@ mod tests { fn test_encode_decode() { // Create a sample ProposalPart let block_info = p2p_proto::consensus::BlockInfo { - block_number: 100, + height: 100, timestamp: 1234567890, builder: Address(Felt::from_hex_str("0x456").unwrap()), l1_da_mode: L1DataAvailabilityMode::Calldata, l2_gas_price_fri: 1000, - l1_gas_price_wei: 2000, - l1_data_gas_price_wei: 3000, - eth_to_strk_rate: 4000, + l1_gas_price_fri: 2000, + l1_data_gas_price_fri: 3000, + l1_gas_price_wei: 4000, + l1_data_gas_price_wei: 5000, }; let proposal = p2p_proto::consensus::ProposalPart::BlockInfo(block_info); diff --git a/crates/p2p/src/main_loop.rs b/crates/p2p/src/main_loop.rs index 6080a88064..dee8fdcea7 100644 --- a/crates/p2p/src/main_loop.rs +++ b/crates/p2p/src/main_loop.rs @@ -243,6 +243,7 @@ where local_addr, send_back_addr, error, + peer_id: _, } => { tracing::debug!(%connection_id, %local_addr, %send_back_addr, %error, "Failed to establish incoming connection"); } diff --git a/crates/p2p/src/sync/client/conv.rs b/crates/p2p/src/sync/client/conv.rs index 43fbc9bcc4..a5ea6d2a9f 100644 --- a/crates/p2p/src/sync/client/conv.rs +++ b/crates/p2p/src/sync/client/conv.rs @@ -25,6 +25,8 @@ use pathfinder_common::class_definition::{ Cairo, SelectorAndFunctionIndex, SelectorAndOffset, + SerializedCairoDefinition, + SerializedSierraDefinition, Sierra, }; use pathfinder_common::event::Event; @@ -56,6 +58,7 @@ use pathfinder_common::transaction::{ Transaction, TransactionVariant, }; +use pathfinder_common::ProofFactElem; use pathfinder_crypto::Felt; use serde::{Deserialize, Serialize}; use serde_json::value::RawValue; @@ -286,6 +289,7 @@ impl ToDto for TransactionVari nonce_data_availability_mode: x.nonce_data_availability_mode.to_dto(), fee_data_availability_mode: x.fee_data_availability_mode.to_dto(), nonce: x.nonce.0, + proof_facts: x.proof_facts.into_iter().map(|p| p.0).collect(), }, ), L1Handler(x) => p2p_proto::sync::transaction::TransactionVariant::L1HandlerV0( @@ -683,6 +687,7 @@ impl TryFromDto for Transactio .collect(), calldata: x.calldata.into_iter().map(CallParam).collect(), sender_address: ContractAddress(x.sender.0), + proof_facts: x.proof_facts.into_iter().map(ProofFactElem).collect(), }), L1HandlerV0(x) => Self::L1Handler(L1HandlerTransaction { contract_address: ContractAddress(x.address.0), @@ -882,10 +887,7 @@ impl TryFromDto for L1DataAvailabilit } } -#[derive(Debug)] -pub struct CairoDefinition(pub Vec); - -impl TryFromDto for CairoDefinition { +impl TryFromDto for SerializedCairoDefinition { fn try_from_dto(dto: p2p_proto::class::Cairo0Class) -> anyhow::Result { #[derive(Debug, Serialize)] struct SelectorAndOffset { @@ -952,13 +954,11 @@ impl TryFromDto for CairoDefinition { }; let class_def = serde_json::to_vec(&class_def).context("serialize cairo class definition")?; - Ok(Self(class_def)) + Ok(Self::from_bytes(class_def)) } } -pub struct SierraDefinition(pub Vec); - -impl TryFromDto for SierraDefinition { +impl TryFromDto for SerializedSierraDefinition { fn try_from_dto(dto: p2p_proto::class::Cairo1Class) -> anyhow::Result { #[derive(Debug, Serialize)] pub struct SelectorAndFunctionIndex { @@ -1017,7 +1017,7 @@ impl TryFromDto for SierraDefinition { let sierra = serde_json::to_vec(&sierra).context("serialize sierra class definition")?; - Ok(Self(sierra)) + Ok(Self::from_bytes(sierra)) } } diff --git a/crates/p2p/src/sync/client/peer_agnostic.rs b/crates/p2p/src/sync/client/peer_agnostic.rs index 060d2ec347..8a2023b998 100644 --- a/crates/p2p/src/sync/client/peer_agnostic.rs +++ b/crates/p2p/src/sync/client/peer_agnostic.rs @@ -26,6 +26,7 @@ use p2p_proto::sync::transaction::{ TransactionsRequest, TransactionsResponse, }; +use pathfinder_common::class_definition::{SerializedCairoDefinition, SerializedSierraDefinition}; use pathfinder_common::event::Event; use pathfinder_common::prelude::*; use pathfinder_common::state_update::{ContractClassUpdate, StateUpdateData}; @@ -50,7 +51,7 @@ use traits::{ }; use crate::peer_data::PeerData; -use crate::sync::client::conv::{CairoDefinition, FromDto, SierraDefinition, TryFromDto}; +use crate::sync::client::conv::{FromDto, TryFromDto}; use crate::sync::client::types::{ ClassDefinition, ClassDefinitionsError, @@ -461,12 +462,12 @@ impl BlockClient for Client { async fn class_definitions_for_block( self, - block: BlockNumber, + block_number: BlockNumber, declared_classes_count: u64, ) -> Result)>, ClassDefinitionsError> { let request = ClassesRequest { iteration: Iteration { - start: BlockNumberOrHash::Number(block.get()), + start: BlockNumberOrHash::Number(block_number.get()), direction: Direction::Forward, limit: 1, step: 1.into(), @@ -495,11 +496,11 @@ impl BlockClient for Client { domain: _, class_hash, })) => { - let definition = CairoDefinition::try_from_dto(class) + let definition = SerializedCairoDefinition::try_from_dto(class) .map_err(|_| ClassDefinitionsError::CairoDefinitionError(peer))?; class_definitions.push(ClassDefinition::Cairo { - block_number: block, - definition: definition.0, + block_number, + definition, hash: ClassHash(class_hash.0), }); } @@ -508,11 +509,11 @@ impl BlockClient for Client { domain: _, class_hash, })) => { - let definition = SierraDefinition::try_from_dto(class) + let sierra_definition = SerializedSierraDefinition::try_from_dto(class) .map_err(|_| ClassDefinitionsError::SierraDefinitionError(peer))?; class_definitions.push(ClassDefinition::Sierra { - block_number: block, - sierra_definition: definition.0, + block_number, + sierra_definition, hash: SierraHash(class_hash.0), }); } @@ -1261,7 +1262,7 @@ mod class_definition_stream { domain: _, class_hash, })) => { - let Ok(CairoDefinition(definition)) = CairoDefinition::try_from_dto(class) else { + let Ok(definition) = SerializedCairoDefinition::try_from_dto(class) else { // TODO punish the peer tracing::debug!(%peer, "Cairo definition failed to parse"); return None; @@ -1278,7 +1279,7 @@ mod class_definition_stream { domain: _, class_hash, })) => { - let Ok(SierraDefinition(definition)) = SierraDefinition::try_from_dto(class) else { + let Ok(sierra_definition) = SerializedSierraDefinition::try_from_dto(class) else { // TODO punish the peer tracing::debug!(%peer, "Sierra definition failed to parse"); return None; @@ -1286,7 +1287,7 @@ mod class_definition_stream { Some(ClassDefinition::Sierra { block_number, - sierra_definition: definition, + sierra_definition, hash: SierraHash(class_hash.0), }) } diff --git a/crates/p2p/src/sync/client/peer_agnostic/fixtures.rs b/crates/p2p/src/sync/client/peer_agnostic/fixtures.rs index f70148f8a6..df08ff8798 100644 --- a/crates/p2p/src/sync/client/peer_agnostic/fixtures.rs +++ b/crates/p2p/src/sync/client/peer_agnostic/fixtures.rs @@ -17,6 +17,7 @@ use p2p_proto::sync::state::{ StateDiffsResponse, }; use p2p_proto::sync::transaction::{TransactionWithReceipt, TransactionsResponse}; +use pathfinder_common::class_definition::{SerializedCairoDefinition, SerializedSierraDefinition}; use pathfinder_common::event::Event; use pathfinder_common::prelude::*; use pathfinder_common::state_update::{ContractClassUpdate, ContractUpdate, StateUpdateData}; @@ -33,7 +34,7 @@ use rand::seq::SliceRandom; use tokio::sync::Mutex; use super::ClassDefinition; -use crate::sync::client::conv::{CairoDefinition, SierraDefinition, ToDto, TryFromDto}; +use crate::sync::client::conv::{ToDto, TryFromDto}; use crate::sync::client::peer_agnostic::Receipt; #[derive(Clone, PartialEq, TaggedDebug)] @@ -352,7 +353,7 @@ pub fn class(tag: i32, block_number: u64) -> ClassDefinition { }) => { Tagged::get(format!("class {tag}"), || ClassDefinition::Cairo { block_number, - definition: CairoDefinition::try_from_dto(class).unwrap().0, + definition: SerializedCairoDefinition::try_from_dto(class).unwrap(), hash: ClassHash(class_hash.0), }) .unwrap() @@ -365,7 +366,7 @@ pub fn class(tag: i32, block_number: u64) -> ClassDefinition { }) => { Tagged::get(format!("class {tag}"), || ClassDefinition::Sierra { block_number, - sierra_definition: SierraDefinition::try_from_dto(class).unwrap().0, + sierra_definition: SerializedSierraDefinition::try_from_dto(class).unwrap(), hash: SierraHash(class_hash.0), }) .unwrap() diff --git a/crates/p2p/src/sync/client/types.rs b/crates/p2p/src/sync/client/types.rs index 0aea681134..2a4b15c022 100644 --- a/crates/p2p/src/sync/client/types.rs +++ b/crates/p2p/src/sync/client/types.rs @@ -1,6 +1,11 @@ use anyhow::Context; use fake::Dummy; use libp2p::PeerId; +use pathfinder_common::class_definition::{ + SerializedCairoDefinition, + SerializedOpaqueClassDefinition, + SerializedSierraDefinition, +}; use pathfinder_common::event::Event; use pathfinder_common::prelude::*; use pathfinder_common::receipt::{ExecutionResources, ExecutionStatus, L2ToL1Message}; @@ -14,24 +19,24 @@ use crate::sync::client::conv::TryFromDto; pub enum ClassDefinition { Cairo { block_number: BlockNumber, - definition: Vec, + definition: SerializedCairoDefinition, hash: ClassHash, }, Sierra { block_number: BlockNumber, - sierra_definition: Vec, + sierra_definition: SerializedSierraDefinition, hash: SierraHash, }, } impl ClassDefinition { /// Return Cairo or Sierra class definition depending on the variant. - pub fn class_definition(&self) -> Vec { + pub fn class_definition(&self) -> SerializedOpaqueClassDefinition { match self { - Self::Cairo { definition, .. } => definition.clone(), + Self::Cairo { definition, .. } => definition.clone().into(), Self::Sierra { sierra_definition, .. - } => sierra_definition.clone(), + } => sierra_definition.clone().into(), } } } diff --git a/crates/p2p/src/test_utils/sync.rs b/crates/p2p/src/test_utils/sync.rs index 0293641092..2ba21cb8ff 100644 --- a/crates/p2p/src/test_utils/sync.rs +++ b/crates/p2p/src/test_utils/sync.rs @@ -39,7 +39,7 @@ where } } -/// Falls back to [`SyncCodec::Prod`] unless the caller expliticly sets a +/// Falls back to [`SyncCodec::Prod`] unless the caller explicitly sets a /// read/write factory. #[derive(Clone)] pub struct TestCodec { diff --git a/crates/p2p_proto/proto/consensus/consensus.proto b/crates/p2p_proto/proto/consensus/consensus.proto index 0f6b6ff10f..ba280e3dcc 100644 --- a/crates/p2p_proto/proto/consensus/consensus.proto +++ b/crates/p2p_proto/proto/consensus/consensus.proto @@ -5,16 +5,15 @@ package starknet.consensus.consensus; import "proto/common.proto"; import "proto/transaction.proto"; -// WIP - will change - -// Contains all variants of mempool and an L1Handler variant to cover all transactions that can be -// in a new block. +// Contains all transaction types that can be in a new block: +// - User transactions (same types as MempoolTransaction: Declare, DeployAccount, Invoke) +// - L1Handler transactions (messages from L1, not propagated via mempool) message ConsensusTransaction { oneof txn { - starknet.transaction.DeclareV3WithClass declare_v3 = 1; - starknet.transaction.DeployAccountV3 deploy_account_v3 = 2; - starknet.transaction.InvokeV3 invoke_v3 = 3; - starknet.transaction.L1HandlerV0 l1_handler = 4; + starknet.transaction.DeclareV3WithClass declare_v3 = 1; + starknet.transaction.DeployAccountV3 deploy_account_v3 = 2; + starknet.transaction.InvokeV3WithProof invoke_v3 = 3; + starknet.transaction.L1HandlerV0 l1_handler = 4; } starknet.common.Hash transaction_hash = 5; } @@ -28,100 +27,67 @@ message Vote { // We use a type field to distinguish between prevotes and precommits instead of different // messages, to make sure the data, and therefore the signatures, are unambiguous between // Prevote and Precommit. - VoteType vote_type = 1; - uint64 block_number = 2; - uint32 round = 3; + VoteType vote_type = 2; + uint64 height = 3; + uint32 round = 4; // This is optional since a vote can be NIL. - optional starknet.common.Hash proposal_commitment = 4; - // Identifies the voter. - starknet.common.Address voter = 5; -} - -// Streaming of proposals is done on the "consensus_proposal" topic. -message ConsensusStreamId { - uint64 block_number = 1; - uint32 round = 2; - uint64 nonce = 3; + optional starknet.common.Hash proposal_commitment = 5; + starknet.common.Address voter = 6; } -// Messages which make up a Proposal stream. -message ProposalPart { - oneof messages { - ProposalInit init = 1; - ProposalFin fin = 2; - BlockInfo block_info = 3; - TransactionBatch transactions = 4; - TransactionsFin transaction_fin = 5; - ProposalCommitment commitment = 6; +message StreamMessage { + oneof message { + bytes content = 1; + starknet.common.Fin fin = 2; } + bytes stream_id = 3; + uint64 message_id = 4; } message ProposalInit { - uint64 block_number = 1; - uint32 round = 2; - optional uint32 valid_round = 3; - starknet.common.Address proposer = 4; + uint64 height = 1; + uint32 round = 2; + optional uint32 valid_round = 3; + starknet.common.Address proposer = 4; } -// Identifies the content proposed (and executed). Consensus is reached on the value contained here. -message ProposalFin { - starknet.common.Hash proposal_commitment = 1; +message BlockInfo { + uint64 height = 1; + uint64 timestamp = 2; + starknet.common.Address builder = 3; + starknet.common.L1DataAvailabilityMode l1_da_mode = 4; + starknet.common.Uint128 l2_gas_price_fri = 5; + starknet.common.Uint128 l1_gas_price_fri = 6; + starknet.common.Uint128 l1_data_gas_price_fri = 7; + starknet.common.Uint128 l1_gas_price_wei = 8; + starknet.common.Uint128 l1_data_gas_price_wei = 9; } message TransactionBatch { repeated ConsensusTransaction transactions = 1; } -// Marks the completion of the transaction streaming. -message TransactionsFin { - // Total number of transactions executed in the proposal. - uint64 executed_transaction_count = 1; +message ProposalFin { + // Identifies a Starknet block based on the content streamed in the proposal. + starknet.common.Hash proposal_commitment = 1; } -// The content and stream_id are generic fields. The user of the stream can choose to pass whatever -// message that they want. The messages are then encoded in bytes. -message StreamMessage { +// Network format: +// 1. First message is ProposalInit +// 2. Last message is ProposalFin +// +// Empty block - no other messages sent. +// +// Block with transactions: +// 3. block_info is sent once +// 4. transactions is sent repeatedly +// 5. executed_transaction_count is sent once +message ProposalPart { oneof message { - bytes content = 1; - starknet.common.Fin fin = 2; + ProposalInit init = 1; + ProposalFin fin = 2; + BlockInfo block_info = 3; + TransactionBatch transactions = 4; + uint64 executed_transaction_count = 5; } - bytes stream_id = 3; - uint64 sequence_number = 4; -} - -message ProposalCommitment { - uint64 block_number = 1; - starknet.common.Hash parent_commitment = 2; - starknet.common.Address builder = 3; - uint64 timestamp = 4; - string protocol_version = 5; // Starknet version - // State root of block `H-K`, where `K` is defined by the protocol's version. - starknet.common.Hash old_state_root = 6; - starknet.common.Hash version_constant_commitment = 7; - // The state diff commitment returned by the Starknet Feeder Gateway - starknet.common.Hash state_diff_commitment = 8; - starknet.common.Hash transaction_commitment = 9; - starknet.common.Hash event_commitment = 10; - starknet.common.Hash receipt_commitment = 11; - // Lets for the 5 preceding commitments. - // TODO: Just put the sizes explicitly? This is relatively free compared actually hashing the - // lists we commit to. If not, should we also pack other fields? - starknet.common.Felt252 concatenated_counts = 12; - starknet.common.Uint128 l1_gas_price_fri = 13; - starknet.common.Uint128 l1_data_gas_price_fri = 14; - starknet.common.Uint128 l2_gas_price_fri = 15; - starknet.common.Uint128 l2_gas_used = 16; - starknet.common.Uint128 next_l2_gas_price_fri = 17; - starknet.common.L1DataAvailabilityMode l1_da_mode = 18; -} - -message BlockInfo { - uint64 block_number = 1; - starknet.common.Address builder = 2; - uint64 timestamp = 3; - starknet.common.Uint128 l2_gas_price_fri = 4; - starknet.common.Uint128 l1_gas_price_wei = 5; - starknet.common.Uint128 l1_data_gas_price_wei = 6; - starknet.common.Uint128 eth_to_strk_rate = 7; - starknet.common.L1DataAvailabilityMode l1_da_mode = 8; } \ No newline at end of file diff --git a/crates/p2p_proto/proto/mempool/transaction.proto b/crates/p2p_proto/proto/mempool/transaction.proto index 62c998d457..44514e05fe 100644 --- a/crates/p2p_proto/proto/mempool/transaction.proto +++ b/crates/p2p_proto/proto/mempool/transaction.proto @@ -10,7 +10,7 @@ message MempoolTransaction { oneof txn { starknet.transaction.DeclareV3WithClass declare_v3 = 1; starknet.transaction.DeployAccountV3 deploy_account_v3 = 2; - starknet.transaction.InvokeV3 invoke_v3 = 3; + starknet.transaction.InvokeV3WithProof invoke_v3 = 3; } starknet.common.Hash transaction_hash = 4; } \ No newline at end of file diff --git a/crates/p2p_proto/proto/snapshot.proto b/crates/p2p_proto/proto/snapshot.proto index 9522b6ce0f..8f3b0dfa24 100644 --- a/crates/p2p_proto/proto/snapshot.proto +++ b/crates/p2p_proto/proto/snapshot.proto @@ -114,4 +114,4 @@ message ContractStorageResponse { ContractStorage storage = 2; starknet.common.Fin fin = 3; } -} \ No newline at end of file +} diff --git a/crates/p2p_proto/proto/transaction.proto b/crates/p2p_proto/proto/transaction.proto index a9ded3a9e0..c80d139c60 100644 --- a/crates/p2p_proto/proto/transaction.proto +++ b/crates/p2p_proto/proto/transaction.proto @@ -49,6 +49,7 @@ message DeclareV3WithClass { // see https://external.integration.starknet.io/feeder_gateway/get_transaction?transactionHash=0x41906f1c314cca5f43170ea75d3b1904196a10101190d2b12a41cc61cfd17c +// An invoke V3 transaction without client-side proof (only contains proof_facts). message InvokeV3 { starknet.common.Address sender = 1; AccountSignature signature = 2; @@ -60,6 +61,14 @@ message InvokeV3 { starknet.common.VolitionDomain nonce_data_availability_mode = 8; starknet.common.VolitionDomain fee_data_availability_mode = 9; starknet.common.Felt252 nonce = 10; + repeated starknet.common.Felt252 proof_facts = 11; +} + +// An invoke V3 transaction with client-side proof. +// Used in consensus and mempool contexts where proof is included. +message InvokeV3WithProof { + InvokeV3 invoke = 1; + bytes proof = 2; } // see https://external.integration.starknet.io/feeder_gateway/get_transaction?transactionHash=0x29fd7881f14380842414cdfdd8d6c0b1f2174f8916edcfeb1ede1eb26ac3ef0 diff --git a/crates/p2p_proto/src/common.rs b/crates/p2p_proto/src/common.rs index ecb61f0c8c..ec35d2f954 100644 --- a/crates/p2p_proto/src/common.rs +++ b/crates/p2p_proto/src/common.rs @@ -25,6 +25,10 @@ use crate::{proto, ToProtobuf, TryFromProtobuf}; )] pub struct Hash(pub Felt); +impl Hash { + pub const ZERO: Self = Self(Felt::ZERO); +} + impl std::fmt::Display for Hash { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self.0) @@ -81,8 +85,9 @@ pub struct BlockId { pub hash: Hash, } -#[derive(Debug, Copy, Clone, PartialEq, Eq, Dummy)] +#[derive(Debug, Default, Copy, Clone, PartialEq, Eq, Dummy)] pub enum L1DataAvailabilityMode { + #[default] Calldata, Blob, } diff --git a/crates/p2p_proto/src/consensus.rs b/crates/p2p_proto/src/consensus.rs index 5dd519a4a1..a020734f5e 100644 --- a/crates/p2p_proto/src/consensus.rs +++ b/crates/p2p_proto/src/consensus.rs @@ -1,17 +1,16 @@ -use fake::Dummy; -use pathfinder_crypto::Felt; +use fake::{Dummy, Fake as _}; use prost::Message; use proto::consensus::consensus as consensus_proto; use crate::common::{Address, Hash, L1DataAvailabilityMode}; -use crate::transaction::{DeclareV3WithClass, DeployAccountV3, InvokeV3, L1HandlerV0}; +use crate::transaction::{DeclareV3WithClass, DeployAccountV3, InvokeV3WithProof, L1HandlerV0}; use crate::{proto, proto_field, ProtobufSerializable, ToProtobuf, TryFromProtobuf}; #[derive(Debug, Clone, PartialEq, Eq, Dummy)] pub enum TransactionVariant { DeclareV3(DeclareV3WithClass), DeployAccountV3(DeployAccountV3), - InvokeV3(InvokeV3), + InvokeV3(InvokeV3WithProof), L1HandlerV0(L1HandlerV0), } @@ -35,7 +34,7 @@ pub enum VoteType { #[protobuf(name = "consensus_proto::Vote")] pub struct Vote { pub vote_type: VoteType, - pub block_number: u64, + pub height: u64, pub round: u32, #[optional] pub proposal_commitment: Option, @@ -53,14 +52,6 @@ impl ProtobufSerializable for Vote { } } -#[derive(Debug, Clone, PartialEq, Eq, ToProtobuf, TryFromProtobuf, Dummy)] -#[protobuf(name = "consensus_proto::ConsensusStreamId")] -struct ConsensusStreamId { - pub block_number: u64, - pub round: u32, - pub nonce: u64, -} - #[allow(clippy::large_enum_variant)] #[derive(Debug, Clone, PartialEq, Eq, Dummy)] pub enum ProposalPart { @@ -68,14 +59,13 @@ pub enum ProposalPart { Fin(ProposalFin), BlockInfo(BlockInfo), TransactionBatch(Vec), - TransactionsFin(TransactionsFin), - ProposalCommitment(ProposalCommitment), + ExecutedTransactionCount(u64), } #[derive(Debug, Clone, PartialEq, Eq, ToProtobuf, TryFromProtobuf, Dummy)] #[protobuf(name = "consensus_proto::ProposalInit")] pub struct ProposalInit { - pub block_number: u64, + pub height: u64, pub round: u32, #[optional] pub valid_round: Option, @@ -88,74 +78,59 @@ pub struct ProposalFin { pub proposal_commitment: Hash, } -#[derive(Debug, Clone, PartialEq, Eq, ToProtobuf, TryFromProtobuf, Dummy)] -#[protobuf(name = "consensus_proto::TransactionBatch")] -pub struct TransactionBatch { - pub transactions: Vec, -} - -#[derive(Debug, Clone, PartialEq, Eq, ToProtobuf, TryFromProtobuf, Dummy)] -#[protobuf(name = "consensus_proto::TransactionsFin")] -pub struct TransactionsFin { - pub executed_transaction_count: u64, -} - -#[derive(Debug, Clone, PartialEq, Eq, ToProtobuf, TryFromProtobuf, Dummy)] +#[derive(Debug, Clone, PartialEq, Eq, ToProtobuf, TryFromProtobuf)] #[protobuf(name = "consensus_proto::BlockInfo")] pub struct BlockInfo { - pub block_number: u64, + pub height: u64, pub builder: Address, pub timestamp: u64, pub l2_gas_price_fri: u128, + pub l1_gas_price_fri: u128, + pub l1_data_gas_price_fri: u128, pub l1_gas_price_wei: u128, pub l1_data_gas_price_wei: u128, - pub eth_to_strk_rate: u128, pub l1_da_mode: L1DataAvailabilityMode, } +impl Dummy for BlockInfo { + fn dummy_with_rng(_: &T, rng: &mut R) -> Self { + Self { + height: rng.gen_range(0..i64::MAX) as u64, + builder: fake::Faker.fake_with_rng(rng), + timestamp: rng.gen_range(0..i64::MAX) as u64, + // Keep the prices low enough to avoid overflow when converting between fri and wei + l2_gas_price_fri: rng.gen_range(1..i64::MAX) as u128, + l1_gas_price_fri: rng.gen_range(1..i64::MAX) as u128, + l1_data_gas_price_fri: rng.gen_range(1..i64::MAX) as u128, + l1_gas_price_wei: rng.gen_range(1..i64::MAX) as u128, + l1_data_gas_price_wei: rng.gen_range(1..i64::MAX) as u128, + l1_da_mode: fake::Faker.fake_with_rng(rng), + } + } +} + #[derive(Debug, Clone, PartialEq, Eq, ToProtobuf, TryFromProtobuf, Dummy)] -#[protobuf(name = "consensus_proto::ProposalCommitment")] -pub struct ProposalCommitment { - pub block_number: u64, - pub parent_commitment: Hash, - pub builder: Address, - pub timestamp: u64, - pub protocol_version: String, - pub old_state_root: Hash, - pub version_constant_commitment: Hash, - pub state_diff_commitment: Hash, - pub transaction_commitment: Hash, - pub event_commitment: Hash, - pub receipt_commitment: Hash, - pub concatenated_counts: Felt, - pub l1_gas_price_fri: u128, - pub l1_data_gas_price_fri: u128, - pub l2_gas_price_fri: u128, - pub l2_gas_used: u128, - pub next_l2_gas_price_fri: u128, - pub l1_da_mode: L1DataAvailabilityMode, +#[protobuf(name = "consensus_proto::TransactionBatch")] +pub struct TransactionBatch { + pub transactions: Vec, } #[derive(Debug, Clone, PartialEq, Eq, ToProtobuf, TryFromProtobuf, Dummy)] #[protobuf(name = "consensus_proto::StreamMessage")] pub struct StreamMessage { - pub message: StreamMessageVariant, pub stream_id: Vec, - pub sequence_number: u64, + pub message_id: u64, + pub message: StreamMessageVariant, } impl StreamMessage { /// Creates a new StreamMessage containing a serialized ProposalPart - pub fn with_proposal_part( - proposal: ProposalPart, - stream_id: Vec, - sequence_number: u64, - ) -> Self { + pub fn with_proposal_part(stream_id: Vec, message_id: u64, proposal: ProposalPart) -> Self { let proposal_bytes = proposal.to_protobuf().encode_to_vec(); Self { - message: StreamMessageVariant::Content(proposal_bytes), stream_id, - sequence_number, + message_id, + message: StreamMessageVariant::Content(proposal_bytes), } } @@ -184,12 +159,11 @@ pub enum StreamMessageVariant { impl ToProtobuf for ProposalPart { fn to_protobuf(self) -> consensus_proto::ProposalPart { - use consensus_proto::proposal_part::Messages::{ + use consensus_proto::proposal_part::Message::{ BlockInfo, - Commitment, + ExecutedTransactionCount, Fin, Init, - TransactionFin, Transactions, }; let msg = match self { @@ -204,16 +178,11 @@ impl ToProtobuf for ProposalPart { .collect(), }) } - ProposalPart::TransactionsFin(transactions_fin) => { - TransactionFin(transactions_fin.to_protobuf()) - } - ProposalPart::ProposalCommitment(proposal_commitment) => { - Commitment(proposal_commitment.to_protobuf()) + ProposalPart::ExecutedTransactionCount(count) => { + ExecutedTransactionCount(count.to_protobuf()) } }; - consensus_proto::ProposalPart { - messages: Some(msg), - } + consensus_proto::ProposalPart { message: Some(msg) } } } @@ -222,16 +191,16 @@ impl TryFromProtobuf for ProposalPart { input: consensus_proto::ProposalPart, field_name: &'static str, ) -> Result { - use consensus_proto::proposal_part::Messages::{ + use consensus_proto::proposal_part::Message::{ BlockInfo, - Commitment, + ExecutedTransactionCount, Fin, Init, - TransactionFin, Transactions, }; - match proto_field(input.messages, field_name)? { + match proto_field(input.message, field_name)? { Init(init) => TryFromProtobuf::try_from_protobuf(init, field_name).map(Self::Init), + Fin(fin) => TryFromProtobuf::try_from_protobuf(fin, field_name).map(Self::Fin), BlockInfo(bi) => { TryFromProtobuf::try_from_protobuf(bi, field_name).map(Self::BlockInfo) } @@ -241,14 +210,9 @@ impl TryFromProtobuf for ProposalPart { .map(|txn| TryFromProtobuf::try_from_protobuf(txn, field_name)) .collect::, _>>() .map(Self::TransactionBatch), - Fin(fin) => TryFromProtobuf::try_from_protobuf(fin, field_name).map(Self::Fin), - TransactionFin(transactions_fin) => { - TryFromProtobuf::try_from_protobuf(transactions_fin, field_name) - .map(Self::TransactionsFin) - } - Commitment(proposal_commitment) => { - TryFromProtobuf::try_from_protobuf(proposal_commitment, field_name) - .map(Self::ProposalCommitment) + ExecutedTransactionCount(count) => { + TryFromProtobuf::try_from_protobuf(count, field_name) + .map(Self::ExecutedTransactionCount) } } } @@ -289,6 +253,26 @@ impl ProposalPart { None } } + + pub fn is_proposal_init(&self) -> bool { + matches!(self, Self::Init(_)) + } + + pub fn is_proposal_fin(&self) -> bool { + matches!(self, Self::Fin(_)) + } + + pub fn is_block_info(&self) -> bool { + matches!(self, Self::BlockInfo(_)) + } + + pub fn is_transaction_batch(&self) -> bool { + matches!(self, Self::TransactionBatch(_)) + } + + pub fn is_executed_transaction_count(&self) -> bool { + matches!(self, Self::ExecutedTransactionCount(_)) + } } impl ToProtobuf for TransactionVariant { @@ -344,7 +328,7 @@ impl ToProtobuf for VoteType { impl TryFromProtobuf for VoteType { fn try_from_protobuf(input: i32, field_name: &'static str) -> Result { - use consensus_proto::vote::VoteType::{Precommit, Prevote}; + use consensus_proto::vote::VoteType as VoteTypeProto; Ok( match TryFrom::try_from(input).map_err(|e| { std::io::Error::new( @@ -352,8 +336,8 @@ impl TryFromProtobuf for VoteType { format!("Invalid vote type field element {field_name} enum value: {e}"), ) })? { - Prevote => VoteType::Prevote, - Precommit => VoteType::Precommit, + VoteTypeProto::Prevote => VoteType::Prevote, + VoteTypeProto::Precommit => VoteType::Precommit, }, ) } @@ -361,10 +345,10 @@ impl TryFromProtobuf for VoteType { impl ToProtobuf for StreamMessageVariant { fn to_protobuf(self) -> consensus_proto::stream_message::Message { - use proto::consensus::consensus::stream_message::Message::{Content, Fin}; + use consensus_proto::stream_message::Message as StreamMessageProto; match self { - Self::Content(message) => Content(message), - Self::Fin => Fin(proto::common::Fin {}), + Self::Content(message) => StreamMessageProto::Content(message), + Self::Fin => StreamMessageProto::Fin(proto::common::Fin {}), } } } diff --git a/crates/p2p_proto/src/transaction.rs b/crates/p2p_proto/src/transaction.rs index 77aa64fe68..839576baba 100644 --- a/crates/p2p_proto/src/transaction.rs +++ b/crates/p2p_proto/src/transaction.rs @@ -5,13 +5,22 @@ use crate::class::Cairo1Class; use crate::common::{Address, Hash, VolitionDomain}; use crate::{ToProtobuf, TryFromProtobuf}; -#[derive(Debug, Clone, PartialEq, Eq, ToProtobuf, TryFromProtobuf, Dummy)] +#[derive(Debug, Clone, PartialEq, Eq, ToProtobuf, TryFromProtobuf)] #[protobuf(name = "crate::proto::transaction::ResourceLimits")] pub struct ResourceLimits { pub max_amount: Felt, pub max_price_per_unit: Felt, } +impl Dummy for ResourceLimits { + fn dummy_with_rng(_: &T, rng: &mut R) -> Self { + Self { + max_amount: Felt::from_u64(rng.gen()), + max_price_per_unit: Felt::from_u128(rng.gen()), + } + } +} + #[derive(Debug, Clone, PartialEq, Eq, ToProtobuf, TryFromProtobuf, Dummy)] #[protobuf(name = "crate::proto::transaction::ResourceBounds")] pub struct ResourceBounds { @@ -71,6 +80,14 @@ pub struct InvokeV3 { pub nonce_data_availability_mode: VolitionDomain, pub fee_data_availability_mode: VolitionDomain, pub nonce: Felt, + pub proof_facts: Vec, +} + +#[derive(Debug, Clone, PartialEq, Eq, ToProtobuf, TryFromProtobuf, Dummy)] +#[protobuf(name = "crate::proto::transaction::InvokeV3WithProof")] +pub struct InvokeV3WithProof { + pub invoke: InvokeV3, + pub proof: Vec, } #[derive(Debug, Clone, PartialEq, Eq, ToProtobuf, TryFromProtobuf, Dummy)] diff --git a/crates/p2p_stream/Cargo.toml b/crates/p2p_stream/Cargo.toml index 1e0409e4a0..5ae242296e 100644 --- a/crates/p2p_stream/Cargo.toml +++ b/crates/p2p_stream/Cargo.toml @@ -22,13 +22,7 @@ void = { workspace = true } [dev-dependencies] anyhow = { workspace = true } fake = { workspace = true } -libp2p = { workspace = true, features = [ - "identify", - "noise", - "tcp", - "tokio", - "yamux", -] } +libp2p = { workspace = true, features = ["identify", "noise", "tcp", "tokio", "yamux"] } libp2p-plaintext = { workspace = true } libp2p-swarm-test = { workspace = true } rstest = { workspace = true } diff --git a/crates/p2p_stream/README.md b/crates/p2p_stream/README.md index 5ed6878fe0..d0ce414fe8 100644 --- a/crates/p2p_stream/README.md +++ b/crates/p2p_stream/README.md @@ -20,7 +20,7 @@ This crate is a derivative of Parity Technologies' [`libp2p request/response`](h
-*): [`pathfinder`](https://github.com/eqlabs/pathfinder) uses this crate with its own [Starknet](https://www.starknet.io/) specific [protocol](https://github.com/starknet-io/starknet-p2p-specs) and decided to drop unnecessary features +*): [`pathfinder`](https://github.com/equilibriumco/pathfinder) uses this crate with its own [Starknet](https://www.starknet.io/) specific [protocol](https://github.com/starknet-io/starknet-p2p-specs) and decided to drop unnecessary features # Acknowledgements diff --git a/crates/pathfinder/Cargo.toml b/crates/pathfinder/Cargo.toml index f65bd99dde..9aafc2291f 100644 --- a/crates/pathfinder/Cargo.toml +++ b/crates/pathfinder/Cargo.toml @@ -14,7 +14,7 @@ path = "src/lib.rs" cairo-native = ["pathfinder-executor/cairo-native"] consensus-integration-tests = [] tokio-console = ["console-subscriber", "tokio/tracing"] -p2p = ["pathfinder-consensus"] +p2p = ["pathfinder-consensus", "pathfinder-validator"] [dependencies] anyhow = { workspace = true } @@ -34,9 +34,11 @@ ipnet = { workspace = true } jemallocator = { workspace = true } metrics = { workspace = true } metrics-exporter-prometheus = { workspace = true } +num-bigint = { workspace = true } p2p = { path = "../p2p" } p2p_proto = { path = "../p2p_proto" } paste = { workspace = true } +pathfinder-block-commitments = { path = "../block-commitments" } pathfinder-block-hashes = { path = "../block-hashes" } pathfinder-casm-hashes = { path = "../casm-hashes" } pathfinder-class-hash = { path = "../class-hash" } @@ -47,22 +49,23 @@ pathfinder-consensus-fetcher = { path = "../consensus-fetcher" } pathfinder-crypto = { path = "../crypto" } pathfinder-ethereum = { path = "../ethereum" } pathfinder-executor = { path = "../executor" } +pathfinder-gas-price = { path = "../gas-price" } pathfinder-merkle-tree = { path = "../merkle-tree" } pathfinder-retry = { path = "../retry" } pathfinder-rpc = { path = "../rpc" } pathfinder-serde = { path = "../serde" } pathfinder-storage = { path = "../storage" } +pathfinder-validator = { path = "../validator", optional = true } pathfinder-version = { path = "../version" } primitive-types = { workspace = true } rand = { workspace = true } +rand_chacha = { workspace = true } rayon = { workspace = true } reqwest = { workspace = true } +rustls = { workspace = true } semver = { workspace = true } serde = { workspace = true, features = ["derive"] } -serde_json = { workspace = true, features = [ - "arbitrary_precision", - "raw_value", -] } +serde_json = { workspace = true, features = ["arbitrary_precision", "raw_value"] } sha3 = { workspace = true } starknet-gateway-client = { path = "../gateway-client" } starknet-gateway-types = { path = "../gateway-types" } @@ -73,11 +76,7 @@ time = { workspace = true, features = ["macros"] } tokio = { workspace = true, features = ["rt-multi-thread", "macros", "signal"] } tokio-stream = { workspace = true, features = ["sync"] } tracing = { workspace = true } -tracing-subscriber = { workspace = true, features = [ - "env-filter", - "time", - "ansi", -] } +tracing-subscriber = { workspace = true, features = ["env-filter", "time", "ansi"] } url = { workspace = true } util = { path = "../util" } zeroize = { workspace = true } @@ -92,12 +91,10 @@ pathfinder-common = { path = "../common", features = ["full-serde"] } pathfinder-compiler = { path = "../compiler" } pathfinder-executor = { path = "../executor" } pathfinder-rpc = { path = "../rpc" } -pathfinder-storage = { path = "../storage", features = [ - "small_aggregate_filters", -] } +pathfinder-storage = { path = "../storage", features = ["small_aggregate_filters"] } +pathfinder-validator = { path = "../validator", features = ["skip-commitment-validation"] } pretty_assertions_sorted = { workspace = true } proptest = { workspace = true } -rand_chacha = { workspace = true } rstest = { workspace = true } rusqlite = { workspace = true, features = ["bundled"] } serde_with = { workspace = true } diff --git a/crates/pathfinder/examples/compute_class_hash.rs b/crates/pathfinder/examples/compute_class_hash.rs index 18d2948d31..6d3cb5eda5 100644 --- a/crates/pathfinder/examples/compute_class_hash.rs +++ b/crates/pathfinder/examples/compute_class_hash.rs @@ -10,11 +10,10 @@ fn main() -> Result<(), Box> { } let mut s = Vec::new(); std::io::stdin().read_to_end(&mut s).unwrap(); - let s = s; - let class_hash = match pathfinder_class_hash::compute_class_hash(&s)? { - pathfinder_class_hash::ComputedClassHash::Cairo(h) => h.0, - pathfinder_class_hash::ComputedClassHash::Sierra(h) => h.0, - }; - println!("{class_hash:x}"); + let definition = + pathfinder_common::class_definition::SerializedOpaqueClassDefinition::from_bytes(s); + let (hash, _) = pathfinder_class_hash::compute_class_hash(definition)?; + let class_hash = hash.hash(); + println!("{:x}", class_hash.0); Ok(()) } diff --git a/crates/pathfinder/examples/compute_pre0132_hashes.rs b/crates/pathfinder/examples/compute_pre0132_hashes.rs index 2190f8f438..cc689696c6 100644 --- a/crates/pathfinder/examples/compute_pre0132_hashes.rs +++ b/crates/pathfinder/examples/compute_pre0132_hashes.rs @@ -2,13 +2,13 @@ use std::io::Write; use std::num::NonZeroU32; use anyhow::{ensure, Context}; -use pathfinder_common::prelude::*; -use pathfinder_lib::state::block_hash::{ +use pathfinder_block_commitments::{ calculate_event_commitment, calculate_receipt_commitment, calculate_transaction_commitment, compute_final_hash, }; +use pathfinder_common::prelude::*; const VERSION_CUTOFF: StarknetVersion = StarknetVersion::V_0_13_2; diff --git a/crates/pathfinder/examples/dump_events.rs b/crates/pathfinder/examples/dump_events.rs index 20d1000b25..fa76e44436 100644 --- a/crates/pathfinder/examples/dump_events.rs +++ b/crates/pathfinder/examples/dump_events.rs @@ -136,7 +136,7 @@ fn main() -> anyhow::Result<()> { let bn = BlockNumber::new(n).context(format!("invalid block number {n}"))?; if let Some(pairs) = db_tx.events_for_block(bn.into())? { for pair in pairs { - let tx_hash = pair.0; + let tx_hash = pair.0 .0; for event in &pair.1 { let accept_address = if let Some(addr) = address { event.from_address == addr diff --git a/crates/pathfinder/examples/re_execute.rs b/crates/pathfinder/examples/re_execute.rs index ed2da15d99..f0daac1191 100644 --- a/crates/pathfinder/examples/re_execute.rs +++ b/crates/pathfinder/examples/re_execute.rs @@ -62,7 +62,7 @@ fn main() -> anyhow::Result<()> { let start_time = std::time::Instant::now(); let mut num_transactions: usize = 0; - let native_class_cache = NativeClassCache::spawn(NonZeroUsize::new(512).unwrap()); + let native_class_cache = NativeClassCache::spawn(NonZeroUsize::new(512).unwrap(), 2); (first_block..=last_block) .map(|block_number| { @@ -148,12 +148,14 @@ fn execute( let execution_state = ExecutionState::trace( chain_id, + false, work.header.clone(), None, Default::default(), ETH_FEE_TOKEN_ADDRESS, STRK_FEE_TOKEN_ADDRESS, Some(native_class_cache), + false, ); let transactions = work @@ -170,9 +172,16 @@ fn execute( } }; - match pathfinder_executor::simulate(db_tx, execution_state, transactions, Percentage::new(0)) { + match pathfinder_executor::simulate( + db_tx, + execution_state, + transactions, + Percentage::new(0), + false, + ) { Ok(simulations) => { for (simulation, (receipt, transaction)) in simulations + .0 .iter() .zip(work.receipts.iter().zip(work.transactions.iter())) { diff --git a/crates/pathfinder/examples/recompute_casm_class_hashes.rs b/crates/pathfinder/examples/recompute_casm_class_hashes.rs index 7810482bef..b86e29b79b 100644 --- a/crates/pathfinder/examples/recompute_casm_class_hashes.rs +++ b/crates/pathfinder/examples/recompute_casm_class_hashes.rs @@ -1,5 +1,6 @@ use std::io::Write; +use pathfinder_common::class_definition::SerializedCasmDefinition; use pathfinder_common::ClassHash; use pathfinder_crypto::Felt; use rayon::prelude::*; @@ -44,7 +45,10 @@ fn main() -> Result<(), Box> { let definition = zstd::decode_all(definition.as_slice()) .map_err(|e| rusqlite::types::FromSqlError::Other(e.into())) .unwrap(); - let computed_hash = pathfinder_compiler::casm_class_hash_v2(&definition).unwrap(); + let computed_hash = pathfinder_compiler::casm_class_hash_v2( + &SerializedCasmDefinition::from_bytes(definition), + ) + .unwrap(); println!( "Computed CASM hash for class {:?}: {:x?}", class_hash, computed_hash.0 diff --git a/crates/pathfinder/examples/verify_block_hashes.rs b/crates/pathfinder/examples/verify_block_hashes.rs index 1b30c4139e..6f905b2683 100644 --- a/crates/pathfinder/examples/verify_block_hashes.rs +++ b/crates/pathfinder/examples/verify_block_hashes.rs @@ -1,12 +1,8 @@ use std::num::NonZeroU32; use anyhow::Context; +use pathfinder_block_commitments::{calculate_receipt_commitment, verify_block_hash, VerifyResult}; use pathfinder_common::{BlockNumber, Chain, ChainId, ReceiptCommitment}; -use pathfinder_lib::state::block_hash::{ - calculate_receipt_commitment, - verify_block_hash, - VerifyResult, -}; /// Verify block hashes in a pathfinder database. /// diff --git a/crates/pathfinder/examples/verify_transaction_commitment.rs b/crates/pathfinder/examples/verify_transaction_commitment.rs index deb3c954a3..457854262e 100644 --- a/crates/pathfinder/examples/verify_transaction_commitment.rs +++ b/crates/pathfinder/examples/verify_transaction_commitment.rs @@ -58,7 +58,7 @@ fn main() -> anyhow::Result<()> { .map(|(tx, _, _)| tx) .collect::>(); let computed_transaction_commitment = - pathfinder_lib::state::block_hash::calculate_transaction_commitment( + pathfinder_block_commitments::calculate_transaction_commitment( &transactions, header.starknet_version, )?; diff --git a/crates/pathfinder/fixtures/blockifier_versioned_constants_0_13_1_1.json b/crates/pathfinder/fixtures/blockifier_versioned_constants_0_13_1_1.json index 66003d2055..db76c94178 100644 --- a/crates/pathfinder/fixtures/blockifier_versioned_constants_0_13_1_1.json +++ b/crates/pathfinder/fixtures/blockifier_versioned_constants_0_13_1_1.json @@ -1,455 +1,468 @@ { - "tx_event_limits": { - "max_data_length": 300, - "max_keys_length": 50, - "max_n_emitted_events": 1000 - }, - "gateway": { - "max_calldata_length": 5000, - "max_contract_bytecode_size": 81920 + "allocation_cost": { + "blob_cost": { + "l1_data_gas": 0, + "l1_gas": 0, + "l2_gas": 0 + }, + "gas_cost": { + "l1_data_gas": 0, + "l1_gas": 0, + "l2_gas": 0 + } }, - "invoke_tx_max_n_steps": 4000000, - "deprecated_l2_resource_gas_costs": { - "gas_per_data_felt": [ - 128, - 1000 - ], + "archival_data_gas_costs": { "event_key_factor": [ 2, 1 ], "gas_per_code_byte": [ - 32, - 1000 - ] - }, - "archival_data_gas_costs": { + 1280, + 1 + ], "gas_per_data_felt": [ 5120, 1 ], + "gas_per_proof": [ + 0, + 1 + ] + }, + "block_casm_hash_v1_declares": false, + "block_direct_execute_call": false, + "comprehensive_state_diff": false, + "deprecated_l2_resource_gas_costs": { "event_key_factor": [ 2, 1 ], "gas_per_code_byte": [ - 1280, - 1 + 32, + 1000 + ], + "gas_per_data_felt": [ + 128, + 1000 ] }, - "max_recursion_depth": 50, - "segment_arena_cells": true, "disable_cairo0_redeclaration": false, + "disable_deploy_in_validation_mode": false, + "enable_casm_hash_migration": false, + "enable_reverts": false, "enable_stateful_compression": false, - "comprehensive_state_diff": false, - "block_direct_execute_call": false, - "allocation_cost": { - "blob_cost": { - "l1_gas": 0, - "l1_data_gas": 0, - "l2_gas": 0 - }, - "gas_cost": { - "l1_gas": 0, - "l1_data_gas": 0, - "l2_gas": 0 - } + "enable_tip": false, + "gateway": { + "max_calldata_length": 5000, + "max_contract_bytecode_size": 81920, + "max_proof_size": 0 }, "ignore_inner_event_resources": false, - "disable_deploy_in_validation_mode": false, - "enable_reverts": false, - "enable_casm_hash_migration": false, - "block_casm_hash_v1_declares": false, + "invoke_tx_max_n_steps": 4000000, + "max_recursion_depth": 50, + "min_sierra_version_for_sierra_gas": "100.0.0", "os_constants": { - "nop_entry_point_offset": -1, - "entry_point_type_external": 0, - "entry_point_type_l1_handler": 1, - "entry_point_type_constructor": 2, - "l1_handler_version": 0, - "sierra_array_len_bound": 4294967296, - "constructor_entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", - "execute_entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", - "validate_entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "validate_declare_entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", - "validate_deploy_entry_point_selector": "0x36fcbf06cd96843058359e1a75928beacfac10727dab22a3972f0af8aa92895", - "transfer_entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "default_entry_point_selector": "0x0", - "validate_max_sierra_gas": 10000000000, - "execute_max_sierra_gas": 10000000000, - "stored_block_hash_buffer": 10, - "step_gas_cost": 100, + "allowed_virtual_os_program_hashes": [], "builtin_gas_costs": { - "range_check": 70, - "range_check96": 0, - "keccak": 0, - "pedersen": 0, + "add_mod": 0, "bitwise": 0, + "ecdsa": 0, "ecop": 0, - "poseidon": 0, - "add_mod": 0, + "keccak": 0, "mul_mod": 0, - "ecdsa": 0 - }, - "l1_handler_max_amount_bounds": { - "l1_gas": 10000000000, - "l1_data_gas": 10000000000, - "l2_gas": 10000000000 - }, - "memory_hole_gas_cost": 10, - "os_contract_addresses": { - "block_hash_contract_address": 1, - "alias_contract_address": 2, - "reserved_contract_address": 3 + "pedersen": 0, + "poseidon": 0, + "range_check": 70, + "range_check96": 0, + "blake": 0 }, + "constructor_entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "data_gas_accounts": [], + "default_entry_point_selector": "0x0", "default_initial_gas_cost": { "step_gas_cost": 100000000 }, "entry_point_initial_budget": { "step_gas_cost": 100 }, - "syscall_base_gas_cost": { - "step_gas_cost": 100 - }, + "entry_point_type_constructor": 2, + "entry_point_type_external": 0, + "entry_point_type_l1_handler": 1, "error_block_number_out_of_range": "Block number out of range", - "error_out_of_gas": "Out of gas", "error_entry_point_failed": "ENTRYPOINT_FAILED", "error_entry_point_not_found": "ENTRYPOINT_NOT_FOUND", - "error_invalid_input_len": "Invalid input length", "error_invalid_argument": "Invalid argument", - "validated": "VALID", + "error_invalid_input_len": "Invalid input length", + "error_out_of_gas": "Out of gas", + "execute_entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", + "execute_max_sierra_gas": 10000000000, + "l1_data_gas": "L1_DATA", + "l1_data_gas_index": 2, "l1_gas": "L1_GAS", - "l2_gas": "L2_GAS", "l1_gas_index": 0, + "l1_handler_max_amount_bounds": { + "l1_data_gas": 10000000000, + "l1_gas": 10000000000, + "l2_gas": 10000000000 + }, + "l1_handler_version": 0, + "l2_gas": "L2_GAS", "l2_gas_index": 1, - "l1_data_gas": "L1_DATA", - "l1_data_gas_index": 2, - "validate_rounding_consts": { - "validate_block_number_rounding": 100, - "validate_timestamp_rounding": 3600 + "memory_hole_gas_cost": 10, + "nop_entry_point_offset": -1, + "os_contract_addresses": { + "alias_contract_address": 2, + "block_hash_contract_address": 1, + "reserved_contract_address": 3 + }, + "sierra_array_len_bound": 4294967296, + "step_gas_cost": 100, + "stored_block_hash_buffer": 10, + "syscall_base_gas_cost": { + "step_gas_cost": 100 }, "syscall_gas_costs": { "CallContract": { - "syscall_base_gas_cost": 1, - "step_gas_cost": 510 + "step_gas_cost": 510, + "syscall_base_gas_cost": 1 }, "Deploy": { - "syscall_base_gas_cost": 1, - "step_gas_cost": 700 + "step_gas_cost": 700, + "syscall_base_gas_cost": 1 + }, + "EmitEvent": { + "step_gas_cost": 10, + "syscall_base_gas_cost": 1 }, "GetBlockHash": { - "syscall_base_gas_cost": 1, - "step_gas_cost": 50 + "step_gas_cost": 50, + "syscall_base_gas_cost": 1 + }, + "GetClassHashAt": { + "step_gas_cost": 0, + "syscall_base_gas_cost": 0 }, "GetExecutionInfo": { - "syscall_base_gas_cost": 1, - "step_gas_cost": 10 + "step_gas_cost": 10, + "syscall_base_gas_cost": 1 }, + "Keccak": { + "syscall_base_gas_cost": 1 + }, + "KeccakRound": 180000, "LibraryCall": { - "syscall_base_gas_cost": 1, - "step_gas_cost": 510 + "step_gas_cost": 510, + "syscall_base_gas_cost": 1 }, "MetaTxV0": { - "syscall_base_gas_cost": 0, - "step_gas_cost": 0 - }, - "ReplaceClass": { - "syscall_base_gas_cost": 1, - "step_gas_cost": 50 - }, - "StorageRead": { - "syscall_base_gas_cost": 1, - "step_gas_cost": 50 - }, - "StorageWrite": { - "syscall_base_gas_cost": 1, - "step_gas_cost": 50 - }, - "GetClassHashAt": { "step_gas_cost": 0, "syscall_base_gas_cost": 0 }, - "EmitEvent": { - "syscall_base_gas_cost": 1, - "step_gas_cost": 10 - }, - "SendMessageToL1": { - "syscall_base_gas_cost": 1, - "step_gas_cost": 50 + "ReplaceClass": { + "step_gas_cost": 50, + "syscall_base_gas_cost": 1 }, "Secp256k1Add": { - "step_gas_cost": 406, - "range_check": 29 + "range_check": 29, + "step_gas_cost": 406 }, "Secp256k1GetPointFromX": { - "step_gas_cost": 391, + "memory_hole_gas_cost": 20, "range_check": 30, - "memory_hole_gas_cost": 20 + "step_gas_cost": 391 }, "Secp256k1GetXy": { - "step_gas_cost": 239, + "memory_hole_gas_cost": 40, "range_check": 11, - "memory_hole_gas_cost": 40 + "step_gas_cost": 239 }, "Secp256k1Mul": { - "step_gas_cost": 76501, + "memory_hole_gas_cost": 2, "range_check": 7045, - "memory_hole_gas_cost": 2 + "step_gas_cost": 76501 }, "Secp256k1New": { - "step_gas_cost": 475, + "memory_hole_gas_cost": 40, "range_check": 35, - "memory_hole_gas_cost": 40 + "step_gas_cost": 475 }, "Secp256r1Add": { - "step_gas_cost": 589, - "range_check": 57 + "range_check": 57, + "step_gas_cost": 589 }, "Secp256r1GetPointFromX": { - "step_gas_cost": 510, + "memory_hole_gas_cost": 20, "range_check": 44, - "memory_hole_gas_cost": 20 + "step_gas_cost": 510 }, "Secp256r1GetXy": { - "step_gas_cost": 241, + "memory_hole_gas_cost": 40, "range_check": 11, - "memory_hole_gas_cost": 40 + "step_gas_cost": 241 }, "Secp256r1Mul": { - "step_gas_cost": 125340, + "memory_hole_gas_cost": 2, "range_check": 13961, - "memory_hole_gas_cost": 2 + "step_gas_cost": 125340 }, "Secp256r1New": { - "step_gas_cost": 594, + "memory_hole_gas_cost": 40, "range_check": 49, - "memory_hole_gas_cost": 40 + "step_gas_cost": 594 }, - "Keccak": { + "SendMessageToL1": { + "step_gas_cost": 50, "syscall_base_gas_cost": 1 }, - "KeccakRound": 180000, "Sha256ProcessBlock": { - "step_gas_cost": 0, "range_check": 0, + "step_gas_cost": 0, "syscall_base_gas_cost": 0 + }, + "StorageRead": { + "step_gas_cost": 50, + "syscall_base_gas_cost": 1 + }, + "StorageWrite": { + "step_gas_cost": 50, + "syscall_base_gas_cost": 1 } }, + "transfer_entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", "v1_bound_accounts_cairo0": [], "v1_bound_accounts_cairo1": [], "v1_bound_accounts_max_tip": "0x0", - "data_gas_accounts": [] + "validate_declare_entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", + "validate_deploy_entry_point_selector": "0x36fcbf06cd96843058359e1a75928beacfac10727dab22a3972f0af8aa92895", + "validate_entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "validate_max_sierra_gas": 10000000000, + "validate_rounding_consts": { + "validate_block_number_rounding": 100, + "validate_timestamp_rounding": 3600 + }, + "validated": "VALID" }, "os_resources": { + "compute_os_kzg_commitment_info": { + "builtin_instance_counter": {}, + "n_memory_holes": 0, + "n_steps": 0 + }, "execute_syscalls": { "CallContract": { - "n_steps": 760, "builtin_instance_counter": { "range_check_builtin": 20 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 760 }, "DelegateCall": { - "n_steps": 713, "builtin_instance_counter": { "range_check_builtin": 19 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 713 }, "DelegateL1Handler": { - "n_steps": 692, "builtin_instance_counter": { "range_check_builtin": 15 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 692 }, "Deploy": { - "n_steps": 1012, "builtin_instance_counter": { "pedersen_builtin": 7, "range_check_builtin": 19 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 1012 }, "EmitEvent": { - "n_steps": 61, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 61 }, "GetBlockHash": { - "n_steps": 104, "builtin_instance_counter": { "range_check_builtin": 2 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 104 }, "GetBlockNumber": { - "n_steps": 40, "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 40 }, "GetBlockTimestamp": { - "n_steps": 38, "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 38 }, "GetCallerAddress": { - "n_steps": 64, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 64 + }, + "GetClassHashAt": { + "builtin_instance_counter": {}, + "n_memory_holes": 0, + "n_steps": 0 }, "GetContractAddress": { - "n_steps": 64, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 64 }, "GetExecutionInfo": { - "n_steps": 64, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 64 }, "GetSequencerAddress": { - "n_steps": 34, "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 34 }, "GetTxInfo": { - "n_steps": 64, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 64 }, "GetTxSignature": { - "n_steps": 44, "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 44 + }, + "Keccak": { + "builtin_instance_counter": {}, + "n_memory_holes": 0, + "n_steps": 0 }, "KeccakRound": { - "n_steps": 381, "builtin_instance_counter": { "bitwise_builtin": 6, "keccak_builtin": 1, "range_check_builtin": 56 }, - "n_memory_holes": 0 - }, - "Keccak": { - "n_steps": 0, - "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 381 }, "LibraryCall": { - "n_steps": 751, "builtin_instance_counter": { "range_check_builtin": 20 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 751 }, "LibraryCallL1Handler": { - "n_steps": 659, "builtin_instance_counter": { "range_check_builtin": 15 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 659 }, "MetaTxV0": { - "n_steps": 0, "builtin_instance_counter": { "range_check_builtin": 0 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 0 }, "ReplaceClass": { - "n_steps": 98, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 98 }, "Secp256k1Add": { - "n_steps": 408, "builtin_instance_counter": { "range_check_builtin": 29 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 408 }, "Secp256k1GetPointFromX": { - "n_steps": 393, "builtin_instance_counter": { "range_check_builtin": 30 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 393 }, "Secp256k1GetXy": { - "n_steps": 205, "builtin_instance_counter": { "range_check_builtin": 11 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 205 }, "Secp256k1Mul": { - "n_steps": 76503, "builtin_instance_counter": { "range_check_builtin": 7045 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 76503 }, "Secp256k1New": { - "n_steps": 459, "builtin_instance_counter": { "range_check_builtin": 35 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 459 }, "Secp256r1Add": { - "n_steps": 591, "builtin_instance_counter": { "range_check_builtin": 57 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 591 }, "Secp256r1GetPointFromX": { - "n_steps": 512, "builtin_instance_counter": { "range_check_builtin": 44 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 512 }, "Secp256r1GetXy": { - "n_steps": 207, "builtin_instance_counter": { "range_check_builtin": 11 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 207 }, "Secp256r1Mul": { - "n_steps": 125342, "builtin_instance_counter": { "range_check_builtin": 13961 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 125342 }, "Secp256r1New": { - "n_steps": 578, "builtin_instance_counter": { "range_check_builtin": 49 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 578 }, "SendMessageToL1": { - "n_steps": 139, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 139 }, "Sha256ProcessBlock": { "builtin_instance_counter": {}, @@ -457,101 +470,96 @@ "n_steps": 0 }, "StorageRead": { - "n_steps": 87, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 87 }, "StorageWrite": { - "n_steps": 89, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 - }, - "GetClassHashAt": { - "n_steps": 0, - "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 89 } }, "execute_txs_inner": { "Declare": { + "calldata_factor": { + "builtin_instance_counter": {}, + "n_memory_holes": 0, + "n_steps": 0 + }, "constant": { - "n_steps": 2839, "builtin_instance_counter": { "pedersen_builtin": 16, "range_check_builtin": 63 }, - "n_memory_holes": 0 - }, - "calldata_factor": { - "n_steps": 0, - "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 2839 } }, "DeployAccount": { - "constant": { - "n_steps": 3792, + "calldata_factor": { "builtin_instance_counter": { - "pedersen_builtin": 23, - "range_check_builtin": 83 + "pedersen_builtin": 2 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 21 }, - "calldata_factor": { - "n_steps": 21, + "constant": { "builtin_instance_counter": { - "pedersen_builtin": 2 + "pedersen_builtin": 23, + "range_check_builtin": 83 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 3792 } }, "InvokeFunction": { + "calldata_factor": { + "builtin_instance_counter": { + "pedersen_builtin": 1 + }, + "n_memory_holes": 0, + "n_steps": 8 + }, "constant": { - "n_steps": 3546, "builtin_instance_counter": { "pedersen_builtin": 14, "range_check_builtin": 80 }, - "n_memory_holes": 0 - }, + "n_memory_holes": 0, + "n_steps": 3546 + } + }, + "L1Handler": { "calldata_factor": { - "n_steps": 8, "builtin_instance_counter": { "pedersen_builtin": 1 }, - "n_memory_holes": 0 - } - }, - "L1Handler": { + "n_memory_holes": 0, + "n_steps": 13 + }, "constant": { - "n_steps": 1146, "builtin_instance_counter": { "pedersen_builtin": 11, "range_check_builtin": 17 }, - "n_memory_holes": 0 - }, - "calldata_factor": { - "n_steps": 13, - "builtin_instance_counter": { - "pedersen_builtin": 1 - }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 1146 } } - }, - "compute_os_kzg_commitment_info": { - "n_steps": 0, - "builtin_instance_counter": {}, - "n_memory_holes": 0 } }, + "segment_arena_cells": true, + "tx_event_limits": { + "max_data_length": 300, + "max_keys_length": 50, + "max_n_emitted_events": 1000 + }, "validate_max_n_steps": 1000000, - "min_sierra_version_for_sierra_gas": "100.0.0", "vm_resource_fee_cost": { "builtins": { "add_mod_builtin": [ @@ -590,19 +598,18 @@ 8, 100 ], - "range_check_builtin": [ - 4, - 100 - ], "range_check96_builtin": [ 0, 1 + ], + "range_check_builtin": [ + 4, + 100 ] }, "n_steps": [ 25, 10000 ] - }, - "enable_tip": false + } } \ No newline at end of file diff --git a/crates/pathfinder/fixtures/blockifier_versioned_constants_0_13_4.json b/crates/pathfinder/fixtures/blockifier_versioned_constants_0_13_4.json index 78cedf76df..da13ab6567 100644 --- a/crates/pathfinder/fixtures/blockifier_versioned_constants_0_13_4.json +++ b/crates/pathfinder/fixtures/blockifier_versioned_constants_0_13_4.json @@ -1,68 +1,87 @@ { - "tx_event_limits": { - "max_data_length": 300, - "max_keys_length": 50, - "max_n_emitted_events": 1000 - }, - "gateway": { - "max_calldata_length": 5000, - "max_contract_bytecode_size": 81920 + "allocation_cost": { + "blob_cost": { + "l1_data_gas": 32, + "l1_gas": 0, + "l2_gas": 0 + }, + "gas_cost": { + "l1_data_gas": 0, + "l1_gas": 551, + "l2_gas": 0 + } }, - "invoke_tx_max_n_steps": 10000000, - "deprecated_l2_resource_gas_costs": { - "gas_per_data_felt": [ - 128, - 1000 - ], + "archival_data_gas_costs": { "event_key_factor": [ 2, 1 ], "gas_per_code_byte": [ - 32, - 1000 - ] - }, - "archival_data_gas_costs": { + 1280, + 1 + ], "gas_per_data_felt": [ 5120, 1 ], + "gas_per_proof": [ + 0, + 1 + ] + }, + "block_casm_hash_v1_declares": false, + "block_direct_execute_call": false, + "comprehensive_state_diff": true, + "deprecated_l2_resource_gas_costs": { "event_key_factor": [ 2, 1 ], "gas_per_code_byte": [ - 1280, - 1 + 32, + 1000 + ], + "gas_per_data_felt": [ + 128, + 1000 ] }, "disable_cairo0_redeclaration": true, + "disable_deploy_in_validation_mode": false, + "enable_casm_hash_migration": false, + "enable_reverts": true, "enable_stateful_compression": true, - "comprehensive_state_diff": true, - "block_direct_execute_call": false, - "allocation_cost": { - "blob_cost": { - "l1_gas": 0, - "l1_data_gas": 32, - "l2_gas": 0 - }, - "gas_cost": { - "l1_gas": 551, - "l1_data_gas": 0, - "l2_gas": 0 - } + "enable_tip": false, + "gateway": { + "max_calldata_length": 5000, + "max_contract_bytecode_size": 81920, + "max_proof_size": 0 }, "ignore_inner_event_resources": false, - "disable_deploy_in_validation_mode": false, - "enable_reverts": true, - "enable_casm_hash_migration": false, - "block_casm_hash_v1_declares": false, + "invoke_tx_max_n_steps": 10000000, "max_recursion_depth": 50, - "segment_arena_cells": false, + "min_sierra_version_for_sierra_gas": "1.7.0", "os_constants": { + "allowed_virtual_os_program_hashes": [], + "builtin_gas_costs": { + "add_mod": 230, + "bitwise": 583, + "ecdsa": 10561, + "ecop": 4085, + "keccak": 136189, + "mul_mod": 604, + "pedersen": 4050, + "poseidon": 491, + "range_check": 70, + "range_check96": 56, + "blake": 0 + }, "constructor_entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "data_gas_accounts": [], "default_entry_point_selector": "0x0", + "default_initial_gas_cost": { + "step_gas_cost": 100000000 + }, "entry_point_initial_budget": { "step_gas_cost": 100 }, @@ -70,47 +89,32 @@ "entry_point_type_external": 0, "entry_point_type_l1_handler": 1, "error_block_number_out_of_range": "Block number out of range", - "error_invalid_input_len": "Invalid input length", - "error_invalid_argument": "Invalid argument", - "error_out_of_gas": "Out of gas", "error_entry_point_failed": "ENTRYPOINT_FAILED", "error_entry_point_not_found": "ENTRYPOINT_NOT_FOUND", + "error_invalid_argument": "Invalid argument", + "error_invalid_input_len": "Invalid input length", + "error_out_of_gas": "Out of gas", "execute_entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", "execute_max_sierra_gas": 1000000000, - "default_initial_gas_cost": { - "step_gas_cost": 100000000 - }, + "l1_data_gas": "L1_DATA", + "l1_data_gas_index": 2, "l1_gas": "L1_GAS", "l1_gas_index": 0, + "l1_handler_max_amount_bounds": { + "l1_data_gas": 10000000000, + "l1_gas": 10000000000, + "l2_gas": 10000000000 + }, "l1_handler_version": 0, "l2_gas": "L2_GAS", - "l1_data_gas": "L1_DATA", - "l1_data_gas_index": 2, "l2_gas_index": 1, "memory_hole_gas_cost": 10, "nop_entry_point_offset": -1, "os_contract_addresses": { - "block_hash_contract_address": 1, "alias_contract_address": 2, + "block_hash_contract_address": 1, "reserved_contract_address": 3 }, - "builtin_gas_costs": { - "range_check": 70, - "range_check96": 56, - "keccak": 136189, - "pedersen": 4050, - "bitwise": 583, - "ecop": 4085, - "poseidon": 491, - "add_mod": 230, - "mul_mod": 604, - "ecdsa": 10561 - }, - "l1_handler_max_amount_bounds": { - "l1_gas": 10000000000, - "l1_data_gas": 10000000000, - "l2_gas": 10000000000 - }, "sierra_array_len_bound": 4294967296, "step_gas_cost": 100, "stored_block_hash_buffer": 10, @@ -118,6 +122,9 @@ "step_gas_cost": 100 }, "transfer_entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "v1_bound_accounts_cairo0": [], + "v1_bound_accounts_cairo1": [], + "v1_bound_accounts_max_tip": "0x0", "validate_declare_entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", "validate_deploy_entry_point_selector": "0x36fcbf06cd96843058359e1a75928beacfac10727dab22a3972f0af8aa92895", "validate_entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", @@ -126,333 +133,334 @@ "validate_block_number_rounding": 100, "validate_timestamp_rounding": 3600 }, - "validated": "VALID", - "v1_bound_accounts_cairo0": [], - "v1_bound_accounts_cairo1": [], - "v1_bound_accounts_max_tip": "0x0", - "data_gas_accounts": [] + "validated": "VALID" }, "os_resources": { + "compute_os_kzg_commitment_info": { + "builtin_instance_counter": { + "range_check_builtin": 17 + }, + "n_memory_holes": 0, + "n_steps": 113 + }, "execute_syscalls": { "CallContract": { - "n_steps": 866, "builtin_instance_counter": { "range_check_builtin": 15 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 866 }, "DelegateCall": { - "n_steps": 713, "builtin_instance_counter": { "range_check_builtin": 19 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 713 }, "DelegateL1Handler": { - "n_steps": 692, "builtin_instance_counter": { "range_check_builtin": 15 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 692 }, "Deploy": { - "n_steps": 1132, "builtin_instance_counter": { "pedersen_builtin": 7, "range_check_builtin": 18 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 1132 }, "EmitEvent": { - "n_steps": 61, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 61 }, "GetBlockHash": { - "n_steps": 104, "builtin_instance_counter": { "range_check_builtin": 2 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 104 }, "GetBlockNumber": { - "n_steps": 40, "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 40 }, "GetBlockTimestamp": { - "n_steps": 38, "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 38 }, "GetCallerAddress": { - "n_steps": 64, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 64 + }, + "GetClassHashAt": { + "builtin_instance_counter": { + "range_check_builtin": 1 + }, + "n_memory_holes": 0, + "n_steps": 89 }, "GetContractAddress": { - "n_steps": 64, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 64 }, "GetExecutionInfo": { - "n_steps": 64, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 64 }, "GetSequencerAddress": { - "n_steps": 34, "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 34 }, "GetTxInfo": { - "n_steps": 64, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 64 }, "GetTxSignature": { - "n_steps": 44, "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 44 + }, + "Keccak": { + "builtin_instance_counter": {}, + "n_memory_holes": 0, + "n_steps": 100 }, "KeccakRound": { - "n_steps": 281, "builtin_instance_counter": { "bitwise_builtin": 6, "keccak_builtin": 1, "range_check_builtin": 56 }, - "n_memory_holes": 0 - }, - "Keccak": { - "n_steps": 100, - "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 281 }, "LibraryCall": { - "n_steps": 842, "builtin_instance_counter": { "range_check_builtin": 15 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 842 }, "LibraryCallL1Handler": { - "n_steps": 659, "builtin_instance_counter": { "range_check_builtin": 15 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 659 }, "MetaTxV0": { - "n_steps": 0, "builtin_instance_counter": { "range_check_builtin": 0 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 0 }, "ReplaceClass": { - "n_steps": 104, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 104 }, "Secp256k1Add": { - "n_steps": 410, "builtin_instance_counter": { "range_check_builtin": 29 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 410 }, "Secp256k1GetPointFromX": { - "n_steps": 395, "builtin_instance_counter": { "range_check_builtin": 30 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 395 }, "Secp256k1GetXy": { - "n_steps": 207, "builtin_instance_counter": { "range_check_builtin": 11 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 207 }, "Secp256k1Mul": { - "n_steps": 76505, "builtin_instance_counter": { "range_check_builtin": 7045 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 76505 }, "Secp256k1New": { - "n_steps": 461, "builtin_instance_counter": { "range_check_builtin": 35 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 461 }, "Secp256r1Add": { - "n_steps": 593, "builtin_instance_counter": { "range_check_builtin": 57 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 593 }, "Secp256r1GetPointFromX": { - "n_steps": 514, "builtin_instance_counter": { "range_check_builtin": 44 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 514 }, "Secp256r1GetXy": { - "n_steps": 209, "builtin_instance_counter": { "range_check_builtin": 11 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 209 }, "Secp256r1Mul": { - "n_steps": 125344, "builtin_instance_counter": { "range_check_builtin": 13961 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 125344 }, "Secp256r1New": { - "n_steps": 580, "builtin_instance_counter": { "range_check_builtin": 49 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 580 }, "SendMessageToL1": { - "n_steps": 141, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 141 }, "Sha256ProcessBlock": { - "n_steps": 1865, "builtin_instance_counter": { - "range_check_builtin": 65, - "bitwise_builtin": 1115 + "bitwise_builtin": 1115, + "range_check_builtin": 65 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 1865 }, "StorageRead": { - "n_steps": 87, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 87 }, "StorageWrite": { - "n_steps": 93, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 - }, - "GetClassHashAt": { - "n_steps": 89, - "builtin_instance_counter": { - "range_check_builtin": 1 - }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 93 } }, "execute_txs_inner": { "Declare": { + "calldata_factor": { + "builtin_instance_counter": {}, + "n_memory_holes": 0, + "n_steps": 0 + }, "constant": { - "n_steps": 3203, "builtin_instance_counter": { "pedersen_builtin": 16, - "range_check_builtin": 56, - "poseidon_builtin": 4 + "poseidon_builtin": 4, + "range_check_builtin": 56 }, - "n_memory_holes": 0 - }, - "calldata_factor": { - "n_steps": 0, - "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 3203 } }, "DeployAccount": { - "constant": { - "n_steps": 4161, + "calldata_factor": { "builtin_instance_counter": { - "pedersen_builtin": 23, - "range_check_builtin": 72 + "pedersen_builtin": 2 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 21 }, - "calldata_factor": { - "n_steps": 21, + "constant": { "builtin_instance_counter": { - "pedersen_builtin": 2 + "pedersen_builtin": 23, + "range_check_builtin": 72 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 4161 } }, "InvokeFunction": { + "calldata_factor": { + "builtin_instance_counter": { + "pedersen_builtin": 1 + }, + "n_memory_holes": 0, + "n_steps": 8 + }, "constant": { - "n_steps": 3918, "builtin_instance_counter": { "pedersen_builtin": 14, "range_check_builtin": 69 }, - "n_memory_holes": 0 - }, + "n_memory_holes": 0, + "n_steps": 3918 + } + }, + "L1Handler": { "calldata_factor": { - "n_steps": 8, "builtin_instance_counter": { "pedersen_builtin": 1 }, - "n_memory_holes": 0 - } - }, - "L1Handler": { + "n_memory_holes": 0, + "n_steps": 13 + }, "constant": { - "n_steps": 1279, "builtin_instance_counter": { "pedersen_builtin": 11, "range_check_builtin": 16 }, - "n_memory_holes": 0 - }, - "calldata_factor": { - "n_steps": 13, - "builtin_instance_counter": { - "pedersen_builtin": 1 - }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 1279 } } - }, - "compute_os_kzg_commitment_info": { - "n_steps": 113, - "builtin_instance_counter": { - "range_check_builtin": 17 - }, - "n_memory_holes": 0 } }, + "segment_arena_cells": false, + "tx_event_limits": { + "max_data_length": 300, + "max_keys_length": 50, + "max_n_emitted_events": 1000 + }, "validate_max_n_steps": 1000000, - "min_sierra_version_for_sierra_gas": "1.7.0", "vm_resource_fee_cost": { "builtins": { "add_mod_builtin": [ @@ -491,11 +499,11 @@ 8, 100 ], - "range_check_builtin": [ + "range_check96_builtin": [ 4, 100 ], - "range_check96_builtin": [ + "range_check_builtin": [ 4, 100 ] @@ -504,6 +512,5 @@ 25, 10000 ] - }, - "enable_tip": false + } } \ No newline at end of file diff --git a/crates/pathfinder/fixtures/blockifier_versioned_constants_0_13_5.json b/crates/pathfinder/fixtures/blockifier_versioned_constants_0_13_5.json index 1b96cc4939..d0b09e10b6 100644 --- a/crates/pathfinder/fixtures/blockifier_versioned_constants_0_13_5.json +++ b/crates/pathfinder/fixtures/blockifier_versioned_constants_0_13_5.json @@ -1,68 +1,87 @@ { - "tx_event_limits": { - "max_data_length": 300, - "max_keys_length": 50, - "max_n_emitted_events": 1000 - }, - "gateway": { - "max_calldata_length": 5000, - "max_contract_bytecode_size": 81920 + "allocation_cost": { + "blob_cost": { + "l1_data_gas": 32, + "l1_gas": 0, + "l2_gas": 0 + }, + "gas_cost": { + "l1_data_gas": 0, + "l1_gas": 551, + "l2_gas": 0 + } }, - "invoke_tx_max_n_steps": 10000000, - "deprecated_l2_resource_gas_costs": { - "gas_per_data_felt": [ - 128, - 1000 - ], + "archival_data_gas_costs": { "event_key_factor": [ 2, 1 ], "gas_per_code_byte": [ - 32, - 1000 - ] - }, - "archival_data_gas_costs": { + 1280, + 1 + ], "gas_per_data_felt": [ 5120, 1 ], + "gas_per_proof": [ + 0, + 1 + ] + }, + "block_casm_hash_v1_declares": false, + "block_direct_execute_call": false, + "comprehensive_state_diff": true, + "deprecated_l2_resource_gas_costs": { "event_key_factor": [ 2, 1 ], "gas_per_code_byte": [ - 1280, - 1 + 32, + 1000 + ], + "gas_per_data_felt": [ + 128, + 1000 ] }, "disable_cairo0_redeclaration": true, + "disable_deploy_in_validation_mode": false, + "enable_casm_hash_migration": false, + "enable_reverts": true, "enable_stateful_compression": true, - "comprehensive_state_diff": true, - "block_direct_execute_call": false, - "allocation_cost": { - "blob_cost": { - "l1_gas": 0, - "l1_data_gas": 32, - "l2_gas": 0 - }, - "gas_cost": { - "l1_gas": 551, - "l1_data_gas": 0, - "l2_gas": 0 - } + "enable_tip": false, + "gateway": { + "max_calldata_length": 5000, + "max_contract_bytecode_size": 81920, + "max_proof_size": 0 }, "ignore_inner_event_resources": false, - "disable_deploy_in_validation_mode": false, - "enable_reverts": true, - "enable_casm_hash_migration": false, - "block_casm_hash_v1_declares": false, + "invoke_tx_max_n_steps": 10000000, "max_recursion_depth": 50, - "segment_arena_cells": false, + "min_sierra_version_for_sierra_gas": "1.7.0", "os_constants": { + "allowed_virtual_os_program_hashes": [], + "builtin_gas_costs": { + "add_mod": 230, + "bitwise": 583, + "ecdsa": 10561, + "ecop": 4085, + "keccak": 136189, + "mul_mod": 604, + "pedersen": 4050, + "poseidon": 491, + "range_check": 70, + "range_check96": 56, + "blake": 0 + }, "constructor_entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "data_gas_accounts": [], "default_entry_point_selector": "0x0", + "default_initial_gas_cost": { + "step_gas_cost": 100000000 + }, "entry_point_initial_budget": { "step_gas_cost": 100 }, @@ -70,47 +89,32 @@ "entry_point_type_external": 0, "entry_point_type_l1_handler": 1, "error_block_number_out_of_range": "Block number out of range", - "error_invalid_input_len": "Invalid input length", - "error_invalid_argument": "Invalid argument", - "error_out_of_gas": "Out of gas", "error_entry_point_failed": "ENTRYPOINT_FAILED", "error_entry_point_not_found": "ENTRYPOINT_NOT_FOUND", + "error_invalid_argument": "Invalid argument", + "error_invalid_input_len": "Invalid input length", + "error_out_of_gas": "Out of gas", "execute_entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", "execute_max_sierra_gas": 1000000000, - "default_initial_gas_cost": { - "step_gas_cost": 100000000 - }, + "l1_data_gas": "L1_DATA", + "l1_data_gas_index": 2, "l1_gas": "L1_GAS", "l1_gas_index": 0, + "l1_handler_max_amount_bounds": { + "l1_data_gas": 10000000000, + "l1_gas": 10000000000, + "l2_gas": 10000000000 + }, "l1_handler_version": 0, "l2_gas": "L2_GAS", - "l1_data_gas": "L1_DATA", - "l1_data_gas_index": 2, "l2_gas_index": 1, "memory_hole_gas_cost": 10, "nop_entry_point_offset": -1, "os_contract_addresses": { - "block_hash_contract_address": 1, "alias_contract_address": 2, + "block_hash_contract_address": 1, "reserved_contract_address": 3 }, - "builtin_gas_costs": { - "range_check": 70, - "range_check96": 56, - "keccak": 136189, - "pedersen": 4050, - "bitwise": 583, - "ecop": 4085, - "poseidon": 491, - "add_mod": 230, - "mul_mod": 604, - "ecdsa": 10561 - }, - "l1_handler_max_amount_bounds": { - "l1_gas": 10000000000, - "l1_data_gas": 10000000000, - "l2_gas": 10000000000 - }, "sierra_array_len_bound": 4294967296, "step_gas_cost": 100, "stored_block_hash_buffer": 10, @@ -118,15 +122,6 @@ "step_gas_cost": 100 }, "transfer_entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "validate_declare_entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", - "validate_deploy_entry_point_selector": "0x36fcbf06cd96843058359e1a75928beacfac10727dab22a3972f0af8aa92895", - "validate_entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "validate_max_sierra_gas": 100000000, - "validate_rounding_consts": { - "validate_block_number_rounding": 100, - "validate_timestamp_rounding": 3600 - }, - "validated": "VALID", "v1_bound_accounts_cairo0": [ "0x06d706cfbac9b8262d601c38251c5fbe0497c3a96cc91a92b08d91b61d9e70c4", "0x0309c042d3729173c7f2f91a34f04d8c509c1b292d334679ef1aabf8da0899cc", @@ -143,338 +138,351 @@ "0x0251cac7b2f45d255b83b7a06dcdef70c8a8752f00ea776517c1c2243c7a06e5" ], "v1_bound_accounts_max_tip": "0x746a5288000", - "data_gas_accounts": [] + "validate_declare_entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", + "validate_deploy_entry_point_selector": "0x36fcbf06cd96843058359e1a75928beacfac10727dab22a3972f0af8aa92895", + "validate_entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "validate_max_sierra_gas": 100000000, + "validate_rounding_consts": { + "validate_block_number_rounding": 100, + "validate_timestamp_rounding": 3600 + }, + "validated": "VALID" }, "os_resources": { + "compute_os_kzg_commitment_info": { + "builtin_instance_counter": { + "range_check_builtin": 17 + }, + "n_memory_holes": 0, + "n_steps": 113 + }, "execute_syscalls": { "CallContract": { - "n_steps": 866, "builtin_instance_counter": { "range_check_builtin": 15 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 866 }, "DelegateCall": { - "n_steps": 713, "builtin_instance_counter": { "range_check_builtin": 19 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 713 }, "DelegateL1Handler": { - "n_steps": 692, "builtin_instance_counter": { "range_check_builtin": 15 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 692 }, "Deploy": { - "constant": { - "n_steps": 1132, + "calldata_factor": { "builtin_instance_counter": { - "pedersen_builtin": 7, - "range_check_builtin": 18 + "pedersen_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 8 }, - "calldata_factor": { - "n_steps": 8, + "constant": { "builtin_instance_counter": { - "pedersen_builtin": 1 + "pedersen_builtin": 7, + "range_check_builtin": 18 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 1132 } }, "EmitEvent": { - "n_steps": 61, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 61 }, "GetBlockHash": { - "n_steps": 104, "builtin_instance_counter": { "range_check_builtin": 2 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 104 }, "GetBlockNumber": { - "n_steps": 40, "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 40 }, "GetBlockTimestamp": { - "n_steps": 38, "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 38 }, "GetCallerAddress": { - "n_steps": 64, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 64 + }, + "GetClassHashAt": { + "builtin_instance_counter": { + "range_check_builtin": 1 + }, + "n_memory_holes": 0, + "n_steps": 89 }, "GetContractAddress": { - "n_steps": 64, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 64 }, "GetExecutionInfo": { - "n_steps": 64, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 64 }, "GetSequencerAddress": { - "n_steps": 34, "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 34 }, "GetTxInfo": { - "n_steps": 64, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 64 }, "GetTxSignature": { - "n_steps": 44, "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 44 + }, + "Keccak": { + "builtin_instance_counter": {}, + "n_memory_holes": 0, + "n_steps": 100 }, "KeccakRound": { - "n_steps": 281, "builtin_instance_counter": { "bitwise_builtin": 6, "keccak_builtin": 1, "range_check_builtin": 56 }, - "n_memory_holes": 0 - }, - "Keccak": { - "n_steps": 100, - "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 281 }, "LibraryCall": { - "n_steps": 842, "builtin_instance_counter": { "range_check_builtin": 15 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 842 }, "LibraryCallL1Handler": { - "n_steps": 659, "builtin_instance_counter": { "range_check_builtin": 15 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 659 }, "MetaTxV0": { - "n_steps": 0, "builtin_instance_counter": { "range_check_builtin": 0 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 0 }, "ReplaceClass": { - "n_steps": 104, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 104 }, "Secp256k1Add": { - "n_steps": 410, "builtin_instance_counter": { "range_check_builtin": 29 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 410 }, "Secp256k1GetPointFromX": { - "n_steps": 395, "builtin_instance_counter": { "range_check_builtin": 30 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 395 }, "Secp256k1GetXy": { - "n_steps": 207, "builtin_instance_counter": { "range_check_builtin": 11 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 207 }, "Secp256k1Mul": { - "n_steps": 76505, "builtin_instance_counter": { "range_check_builtin": 7045 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 76505 }, "Secp256k1New": { - "n_steps": 461, "builtin_instance_counter": { "range_check_builtin": 35 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 461 }, "Secp256r1Add": { - "n_steps": 593, "builtin_instance_counter": { "range_check_builtin": 57 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 593 }, "Secp256r1GetPointFromX": { - "n_steps": 514, "builtin_instance_counter": { "range_check_builtin": 44 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 514 }, "Secp256r1GetXy": { - "n_steps": 209, "builtin_instance_counter": { "range_check_builtin": 11 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 209 }, "Secp256r1Mul": { - "n_steps": 125344, "builtin_instance_counter": { "range_check_builtin": 13961 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 125344 }, "Secp256r1New": { - "n_steps": 580, "builtin_instance_counter": { "range_check_builtin": 49 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 580 }, "SendMessageToL1": { - "n_steps": 141, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 141 }, "Sha256ProcessBlock": { - "n_steps": 1865, "builtin_instance_counter": { - "range_check_builtin": 65, - "bitwise_builtin": 1115 + "bitwise_builtin": 1115, + "range_check_builtin": 65 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 1865 }, "StorageRead": { - "n_steps": 87, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 87 }, "StorageWrite": { - "n_steps": 93, - "builtin_instance_counter": { - "range_check_builtin": 1 - }, - "n_memory_holes": 0 - }, - "GetClassHashAt": { - "n_steps": 89, "builtin_instance_counter": { "range_check_builtin": 1 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 93 } }, "execute_txs_inner": { "Declare": { + "calldata_factor": { + "builtin_instance_counter": {}, + "n_memory_holes": 0, + "n_steps": 0 + }, "constant": { - "n_steps": 3203, "builtin_instance_counter": { "pedersen_builtin": 16, - "range_check_builtin": 56, - "poseidon_builtin": 4 + "poseidon_builtin": 4, + "range_check_builtin": 56 }, - "n_memory_holes": 0 - }, - "calldata_factor": { - "n_steps": 0, - "builtin_instance_counter": {}, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 3203 } }, "DeployAccount": { - "constant": { - "n_steps": 4161, + "calldata_factor": { "builtin_instance_counter": { - "pedersen_builtin": 23, - "range_check_builtin": 72 + "pedersen_builtin": 2 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 21 }, - "calldata_factor": { - "n_steps": 21, + "constant": { "builtin_instance_counter": { - "pedersen_builtin": 2 + "pedersen_builtin": 23, + "range_check_builtin": 72 }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 4161 } }, "InvokeFunction": { + "calldata_factor": { + "builtin_instance_counter": { + "pedersen_builtin": 1 + }, + "n_memory_holes": 0, + "n_steps": 8 + }, "constant": { - "n_steps": 3918, "builtin_instance_counter": { "pedersen_builtin": 14, "range_check_builtin": 69 }, - "n_memory_holes": 0 - }, + "n_memory_holes": 0, + "n_steps": 3918 + } + }, + "L1Handler": { "calldata_factor": { - "n_steps": 8, "builtin_instance_counter": { "pedersen_builtin": 1 }, - "n_memory_holes": 0 - } - }, - "L1Handler": { + "n_memory_holes": 0, + "n_steps": 13 + }, "constant": { - "n_steps": 1279, "builtin_instance_counter": { "pedersen_builtin": 11, "range_check_builtin": 16 }, - "n_memory_holes": 0 - }, - "calldata_factor": { - "n_steps": 13, - "builtin_instance_counter": { - "pedersen_builtin": 1 - }, - "n_memory_holes": 0 + "n_memory_holes": 0, + "n_steps": 1279 } } - }, - "compute_os_kzg_commitment_info": { - "n_steps": 113, - "builtin_instance_counter": { - "range_check_builtin": 17 - }, - "n_memory_holes": 0 } }, + "segment_arena_cells": false, + "tx_event_limits": { + "max_data_length": 300, + "max_keys_length": 50, + "max_n_emitted_events": 1000 + }, "validate_max_n_steps": 1000000, - "min_sierra_version_for_sierra_gas": "1.7.0", "vm_resource_fee_cost": { "builtins": { "add_mod_builtin": [ @@ -513,11 +521,11 @@ 8, 100 ], - "range_check_builtin": [ + "range_check96_builtin": [ 4, 100 ], - "range_check96_builtin": [ + "range_check_builtin": [ 4, 100 ] @@ -526,6 +534,5 @@ 25, 10000 ] - }, - "enable_tip": false -} + } +} \ No newline at end of file diff --git a/crates/pathfinder/proptest-regressions/consensus/inner/proposal_validator.txt b/crates/pathfinder/proptest-regressions/consensus/inner/proposal_validator.txt new file mode 100644 index 0000000000..d724278d4b --- /dev/null +++ b/crates/pathfinder/proptest-regressions/consensus/inner/proposal_validator.txt @@ -0,0 +1,7 @@ +# Seeds for failure cases proptest has generated in the past. It is +# automatically read and these particular cases re-run before any +# novel cases are generated. +# +# It is recommended to check this file in to source control so that +# everyone who runs the test benefits from these saved cases. +cc f6679a8440798c989c342d5c198ef2903e1c82d74760a3b78b026273970a17a7 # shrinks to seed = 5840642613864798225 diff --git a/crates/pathfinder/proptest-regressions/p2p_network/sync/sync_handlers/tests.txt b/crates/pathfinder/proptest-regressions/p2p_network/sync/sync_handlers/tests.txt new file mode 100644 index 0000000000..31daaf08ff --- /dev/null +++ b/crates/pathfinder/proptest-regressions/p2p_network/sync/sync_handlers/tests.txt @@ -0,0 +1,16 @@ +# Seeds for failure cases proptest has generated in the past. It is +# automatically read and these particular cases re-run before any +# novel cases are generated. +# +# It is recommended to check this file in to source control so that +# everyone who runs the test benefits from these saved cases. +cc bc13615220330a9aa3dcbad1f71a6b8c74a7d14e36ffa93a182243c593cc866c # shrinks to (num_blocks, seed, start_block, limit, step, direction) = (1, 8902626232982046058, 0, 1, Step(1), Forward) +cc 57069d20aea6c1421adac0b72bef7431b6c650f5f41dd6d3b16c2da0121486c3 # shrinks to (num_blocks, seed, start_block, limit, step, direction) = (1, 649405005586826819, 0, 1, Step(1), Forward) +cc bfb2d0ca5bc6271afdb10db6bb941552417549d62313cfdab5b1c8d63bed4559 # shrinks to (num_blocks, seed, start_block, limit, step, direction) = (7, 1516226182208585536, 0, 1, Step(1), Forward) +cc 362172e92f8c3bb8b57add0452a53575bef5640a22e0d9cfcabe821c5150086f # shrinks to (num_blocks, seed, start_block, limit, step, direction) = (4, 1507789758493800495, 1, 3, Step(1), Backward) +cc 3c0631f4271587b05d7638c8f95a767a85062d1ffb771167a3b24028376315df # shrinks to (num_blocks, seed, start_block, limit, step, direction) = (7, 9090751796217969733, 1, 4, Step(1), Backward) +cc e61a757eb84e98a3e8429942c16b6937603d36bd6272a92db52a392df2370a84 # shrinks to (num_blocks, seed, start_block, limit, step, direction) = (9, 12221019298661150784, 5, 3, Step(1), Backward) +cc 86c701dc281422d164cfcdd813470d0908f8da74089472c547085c89fd4fc74b # shrinks to (num_blocks, seed, start_block, limit, step, direction) = (11, 16005500644522549812, 0, 5, Step(1), Forward) +cc 88947174b63dc40a8ecadc8258db12c16449fe512c4729e350ded4c7b4a34baf # shrinks to (num_blocks, seed, start_block, limit, step, direction) = (0, 0, 0, 1, Step(1), Forward) +cc 48a4cce9020765acde8c0046cc73e72ef238865b8712045d0a95c23fb4062070 # shrinks to (num_blocks, seed, start_block, limit, step, direction) = (0, 0, 0, 1, Step(1), Forward) +cc bb0bb73a6e6719184832c149727d3e166cda4c891355f25ba8f8b4ed839ea3c2 # shrinks to (num_blocks, seed, start_block, limit, step, direction) = (0, 0, 0, 1, Step(1), Forward) diff --git a/crates/pathfinder/resources/fact_retrieval.py b/crates/pathfinder/resources/fact_retrieval.py index 43dddfa0b7..43336eaac8 100644 --- a/crates/pathfinder/resources/fact_retrieval.py +++ b/crates/pathfinder/resources/fact_retrieval.py @@ -120,7 +120,7 @@ def create( def _get_memory_pages_hashes_from_fact(self, fact_hash: bytes): """ - An auxiliary function for retrieveing the memory pages' hashes of a fact. + An auxiliary function for retrieving the memory pages' hashes of a fact. """ if fact_hash not in self.fact_memory_pages_map: raise Exception( diff --git a/crates/pathfinder/src/bin/pathfinder/http_client_refresh.rs b/crates/pathfinder/src/bin/pathfinder/http_client_refresh.rs new file mode 100644 index 0000000000..462c28f205 --- /dev/null +++ b/crates/pathfinder/src/bin/pathfinder/http_client_refresh.rs @@ -0,0 +1,24 @@ +use std::time::Duration; + +use starknet_gateway_client::Client; + +pub async fn refresh_http_client_periodically( + client: Client, + interval: Duration, +) -> anyhow::Result<()> { + let mut refresh_interval = tokio::time::interval(interval); + refresh_interval.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Skip); + + loop { + refresh_interval.tick().await; + + // Address resolution using `std::net` is blocking, so we need to run it in a + // blocking context to avoid blocking the async runtime. + tokio::task::block_in_place(|| { + // Ignore the result of refresh since it can fail due to transient network + // issues, and we don't want to crash the entire application because of that. + // We'll just try again in the next cycle. + let _ = client.refresh(); + }); + } +} diff --git a/crates/pathfinder/src/bin/pathfinder/main.rs b/crates/pathfinder/src/bin/pathfinder/main.rs index 313a871b9e..c648f484f0 100644 --- a/crates/pathfinder/src/bin/pathfinder/main.rs +++ b/crates/pathfinder/src/bin/pathfinder/main.rs @@ -11,21 +11,29 @@ use ::p2p::sync::client::peer_agnostic::Client as P2PSyncClient; use anyhow::Context; use config::BlockchainHistory; use metrics_exporter_prometheus::PrometheusBuilder; +use pathfinder_common::class_definition::SerializedSierraDefinition; use pathfinder_common::{BlockNumber, Chain, ChainId, EthereumChain}; -use pathfinder_ethereum::{EthereumApi, EthereumClient}; +use pathfinder_ethereum::EthereumClient; +use pathfinder_gas_price::{L1GasPriceConfig, L1GasPriceProvider}; +#[cfg(feature = "p2p")] use pathfinder_lib::consensus::ConsensusTaskHandles; -use pathfinder_lib::state::SyncContext; +use pathfinder_lib::state::{sync_gas_prices, L1GasPriceSyncConfig, SyncContext}; +use pathfinder_lib::ConsensusChannels; +#[cfg(feature = "p2p")] use pathfinder_lib::{config, consensus, monitoring, p2p_network, state}; +#[cfg(not(feature = "p2p"))] +use pathfinder_lib::{config, monitoring, p2p_network, state}; use pathfinder_rpc::context::{EthContractAddresses, WebsocketContext}; use pathfinder_rpc::{Notifications, SyncState}; use pathfinder_storage::Storage; use starknet_gateway_client::GatewayApi; use tokio::signal::unix::{signal, SignalKind}; use tokio::task::JoinError; -use tracing::{info, warn}; +use tracing::info; -use crate::config::{NetworkConfig, StateTries}; +use crate::config::{CompileConfig, NetworkConfig, StateTries}; +mod http_client_refresh; mod update; // The Cairo VM allocates felts on the stack, so during execution it's making @@ -35,24 +43,33 @@ mod update; static GLOBAL: jemallocator::Jemalloc = jemallocator::Jemalloc; fn main() -> anyhow::Result<()> { - tokio::runtime::Builder::new_multi_thread() - .enable_all() - .thread_stack_size(8 * 1024 * 1024) - .build() - .unwrap() - .block_on(async { - async_main().await?; - Ok(()) - }) + let cli = config::parse_cli(); + match cli.command { + config::Command::Node(args) => tokio::runtime::Builder::new_multi_thread() + .enable_all() + .thread_stack_size(8 * 1024 * 1024) + .build() + .unwrap() + .block_on(async move { + node_main(args).await?; + Ok(()) + }), + config::Command::Compile(config) => compile_main(config), + } } -async fn async_main() -> anyhow::Result { +async fn node_main(args: Box) -> anyhow::Result { if std::env::var_os("RUST_LOG").is_none() { // Disable all dependency logs by default. std::env::set_var("RUST_LOG", "pathfinder=info,error"); } - let config = config::Config::parse(); + // Configure rustls crypto provider. + rustls::crypto::aws_lc_rs::default_provider() + .install_default() + .expect("rustls crypto provider setup should not fail"); + + let config = config::Config::parse(args); setup_tracing( config.color, @@ -111,6 +128,7 @@ async fn async_main() -> anyhow::Result { &config.data_directory, config.gateway_api_key.clone(), config.gateway_timeout, + config.gateway_dns_refresh_interval, ) .await .context("Configuring pathfinder")?; @@ -237,8 +255,15 @@ Hint: This is usually caused by exceeding the file descriptor limit of your syst versioned_constants_map: config.versioned_constants_map.clone(), native_execution: config.native_execution.is_enabled(), native_class_cache_size: config.native_execution.class_cache_size(), + native_compiler_optimization_level: config.native_execution.optimization_level(), + native_execution_force_use_for_incompatible_classes: config + .native_execution + .force_use_for_incompatible_classes(), submission_tracker_time_limit: config.submission_tracker_time_limit, submission_tracker_size_limit: config.submission_tracker_size_limit, + block_trace_cache_size: config.rpc_block_trace_cache_size, + compiler_resource_limits: config.compiler_resource_limits, + blockifier_libfuncs: config.blockifier_libfuncs, }; let notifications = Notifications::default(); @@ -247,6 +272,7 @@ Hint: This is usually caused by exceeding the file descriptor limit of your syst execution_storage, sync_state.clone(), pathfinder_context.network_id, + pathfinder_context.is_l3, pathfinder_context.contract_addresses, pathfinder_context.gateway.clone(), rx_pending.clone(), @@ -299,39 +325,112 @@ Hint: This is usually caused by exceeding the file descriptor limit of your syst .await; let integration_testing_config = config.integration_testing; - let ConsensusTaskHandles { + + // Create L1 gas price provider and sync task if consensus is enabled + let gas_price_provider = if integration_testing_config.is_gas_price_validation_disabled() { + None + } else if let Some(consensus_config) = &config.consensus { + let provider = L1GasPriceProvider::new({ + #[cfg(feature = "p2p")] + { + L1GasPriceConfig { + tolerance: consensus_config.l1_gas_price_tolerance, + max_time_gap_seconds: consensus_config.l1_gas_price_max_time_gap, + ..Default::default() + } + } + #[cfg(not(feature = "p2p"))] + { + let _ = consensus_config; + L1GasPriceConfig::default() + } + }); + + // Spawn the L1 gas price sync task + let sync_provider = provider.clone(); + let ethereum_client = ethereum.client.clone(); + util::task::spawn(async move { + if let Err(e) = sync_gas_prices( + ethereum_client, + sync_provider, + L1GasPriceSyncConfig::default(), + ) + .await + { + tracing::error!(error = %e, "L1 gas price sync task failed"); + } + }); + + Some(provider) + } else { + None + }; + + #[cfg(feature = "p2p")] + let ( consensus_p2p_event_processing_handle, consensus_engine_handle, - consensus_info_watch, - } = if let Some(consensus_config) = &config.consensus { - let wal_directory = config.data_directory.join("consensus").join("wal"); - if !wal_directory.exists() { - std::fs::DirBuilder::new() - .recursive(true) - .create(&wal_directory) - .context("Creating consensus wal directory")?; - } + consensus_channels, + worker_pool, + ) = { + let handles = if let Some(consensus_config) = &config.consensus { + let wal_directory = config.data_directory.join("consensus").join("wal"); + if !wal_directory.exists() { + std::fs::DirBuilder::new() + .recursive(true) + .create(&wal_directory) + .context("Creating consensus wal directory")?; + } - if let Some((event_rx, client)) = consensus_p2p_client_and_event_rx { - consensus::start( - consensus_config.clone(), - chain_id, - consensus_storage, - wal_directory, - client, - event_rx, - &config.data_directory, - // Does nothing in production builds. Used for integration testing only. - integration_testing_config.inject_failure_config(), - ) + if let Some((event_rx, client)) = consensus_p2p_client_and_event_rx { + consensus::start( + consensus_config.clone(), + chain_id, + pathfinder_context.is_l3, + consensus_storage, + client, + event_rx, + wal_directory, + &config.data_directory, + gas_price_provider.clone(), + config.verify_tree_hashes, + config.compiler_resource_limits, + config.blockifier_libfuncs, + // Does nothing in production builds. Used for integration testing only. + integration_testing_config.inject_failure_config(), + ) + } else { + ConsensusTaskHandles::pending() + } } else { ConsensusTaskHandles::pending() - } - } else { - ConsensusTaskHandles::pending() + }; + ( + handles.consensus_p2p_event_processing_handle, + handles.consensus_engine_handle, + handles.consensus_channels, + handles.worker_pool, + ) }; - let context = if let Some(consensus_info_watch) = consensus_info_watch { + #[cfg(not(feature = "p2p"))] + let (consensus_p2p_event_processing_handle, consensus_engine_handle, consensus_channels) = { + let _ = ( + consensus_storage, + consensus_p2p_client_and_event_rx, + gas_price_provider, + ); + ( + tokio::task::spawn(std::future::pending::>()), + tokio::task::spawn(std::future::pending::>()), + None::, + ) + }; + + let context = if let Some(consensus_info_watch) = consensus_channels + .as_ref() + .map(|cc| cc.consensus_info_watch.clone()) + { context.with_consensus_info_watch(consensus_info_watch) } else { context @@ -351,6 +450,23 @@ Hint: This is usually caused by exceeding the file descriptor limit of your syst None => rpc_server, }; + let http_client_refresh_handle = + util::task::spawn(http_client_refresh::refresh_http_client_periodically( + pathfinder_context.gateway.clone(), + pathfinder_context.gateway_dns_refresh_interval, + )); + + // Nodes that ran v0.17.0–v0.19.x with pruning enabled may have + // class_definitions rows where definition IS NULL that were never filled due + // to a storage bug. This task re-downloads any such definitions on startup. + util::task::spawn(state::repair::repair_missing_class_definitions( + sync_storage.clone(), + pathfinder_context.gateway.clone(), + config.compiler_resource_limits, + config.blockifier_libfuncs, + config.fetch_casm_from_fgw, + )); + let sync_handle = if config.is_sync_enabled { start_sync( sync_storage, @@ -360,10 +476,10 @@ Hint: This is usually caused by exceeding the file descriptor limit of your syst &config, submitted_tx_tracker, tx_pending, + consensus_channels, notifications, gateway_public_key, sync_p2p_client, - config.verify_tree_hashes, ) } else { tokio::task::spawn(futures::future::pending()) @@ -402,6 +518,7 @@ Hint: This is usually caused by exceeding the file descriptor limit of your syst result = consensus_p2p_handle => handle_critical_task_result("Consensus P2P network", result), result = consensus_p2p_event_processing_handle => handle_critical_task_result("Consensus P2P event processing", result), result = consensus_engine_handle => handle_critical_task_result("Consensus engine", result), + result = http_client_refresh_handle => handle_critical_task_result("HTTP client refresh", result), _ = term_signal.recv() => { tracing::info!("TERM signal received"); Ok(()) @@ -426,6 +543,21 @@ Hint: This is usually caused by exceeding the file descriptor limit of your syst } } + // Join all worker pool threads so that they don't panic when the `p2p_task` is + // cancelled. + #[cfg(feature = "p2p")] + if let Some(worker_pool) = worker_pool { + match Arc::try_unwrap(worker_pool) { + Ok(pool) => pool.join(), + Err(pool) => { + tracing::error!( + "Failed to join worker pool, refcount is: {}", + Arc::strong_count(&pool) + ); + } + } + } + let jh = tokio::task::spawn_blocking(|| -> anyhow::Result { shutdown_storage .connection() @@ -448,6 +580,27 @@ Hint: This is usually caused by exceeding the file descriptor limit of your syst main_result.map(|_| shutdown_storage) } +fn compile_main(config: CompileConfig) -> anyhow::Result<()> { + use std::io::{Read, Write}; + + const SIERRA_DEFINITION_SIZE_ESTIMATE: usize = 400 * 1024; // 400 KiB + let mut sierra_bytes = Vec::with_capacity(SIERRA_DEFINITION_SIZE_ESTIMATE); + std::io::stdin() + .read_to_end(&mut sierra_bytes) + .context("reading Sierra from stdin")?; + let sierra_definition = SerializedSierraDefinition::from_bytes(sierra_bytes); + + let casm = pathfinder_compiler::compile_sierra_to_casm_impl( + &sierra_definition, + config.blockifier_libfuncs.into(), + ) + .context("compiling Sierra to CASM")?; + + std::io::stdout() + .write_all(casm.as_bytes()) + .context("writing CASM to stdout") +} + #[cfg(feature = "tokio-console")] fn setup_tracing(color: config::Color, pretty_log: bool, json_log: bool) { use tracing_subscriber::prelude::*; @@ -525,10 +678,10 @@ fn start_sync( config: &config::Config, submitted_tx_tracker: pathfinder_rpc::tracker::SubmittedTransactionTracker, tx_pending: tokio::sync::watch::Sender, + consensus_channels: Option, notifications: Notifications, gateway_public_key: pathfinder_common::PublicKey, p2p_client: Option, - verify_tree_hashes: bool, ) -> tokio::task::JoinHandle> { if config.sync_p2p.proxy { start_feeder_gateway_sync( @@ -542,6 +695,19 @@ fn start_sync( notifications, gateway_public_key, ) + } else if let Some(consensus_channels) = consensus_channels { + start_consensus_aware_fgw_sync( + storage, + pathfinder_context, + ethereum_client, + sync_state, + config, + submitted_tx_tracker, + tx_pending, + notifications, + gateway_public_key, + consensus_channels, + ) } else { let p2p_client = p2p_client.expect("P2P client is expected with the p2p feature enabled"); start_p2p_sync( @@ -551,7 +717,9 @@ fn start_sync( p2p_client, gateway_public_key, config.sync_p2p.l1_checkpoint_override, - verify_tree_hashes, + config.verify_tree_hashes, + config.compiler_resource_limits, + config.blockifier_libfuncs, ) } } @@ -566,10 +734,10 @@ fn start_sync( config: &config::Config, submitted_tx_tracker: pathfinder_rpc::tracker::SubmittedTransactionTracker, tx_pending: tokio::sync::watch::Sender, + _consensus_channels: Option, notifications: Notifications, gateway_public_key: pathfinder_common::PublicKey, _p2p_client: Option, - _verify_tree_hashes: bool, ) -> tokio::task::JoinHandle> { start_feeder_gateway_sync( storage, @@ -616,12 +784,61 @@ fn start_feeder_gateway_sync( sequencer_public_key: gateway_public_key, fetch_concurrency: config.feeder_gateway_fetch_concurrency, fetch_casm_from_fgw: config.fetch_casm_from_fgw, + compiler_resource_limits: config.compiler_resource_limits, + blockifier_libfuncs: config.blockifier_libfuncs, }; util::task::spawn(state::sync(sync_context, state::l1::sync, state::l2::sync)) } #[cfg(feature = "p2p")] +#[allow(clippy::too_many_arguments)] +fn start_consensus_aware_fgw_sync( + storage: Storage, + pathfinder_context: PathfinderContext, + ethereum_client: EthereumClient, + sync_state: Arc, + config: &config::Config, + submitted_tx_tracker: pathfinder_rpc::tracker::SubmittedTransactionTracker, + tx_pending: tokio::sync::watch::Sender, + notifications: Notifications, + gateway_public_key: pathfinder_common::PublicKey, + consensus_channels: ConsensusChannels, +) -> tokio::task::JoinHandle> { + let sync_context = SyncContext { + storage, + ethereum: ethereum_client, + chain: pathfinder_context.network, + chain_id: pathfinder_context.network_id, + core_address: pathfinder_context.contract_addresses.l1_contract_address, + sequencer: pathfinder_context.gateway, + state: sync_state.clone(), + head_poll_interval: config.poll_interval, + l1_poll_interval: config.l1_poll_interval, + pending_data: tx_pending, + submitted_tx_tracker, + block_validation_mode: state::l2::BlockValidationMode::Strict, + notifications, + block_cache_size: 10_000, + restart_delay: config.debug.restart_delay, + verify_tree_hashes: config.verify_tree_hashes, + sequencer_public_key: gateway_public_key, + compiler_resource_limits: config.compiler_resource_limits, + blockifier_libfuncs: config.blockifier_libfuncs, + fetch_concurrency: config.feeder_gateway_fetch_concurrency, + fetch_casm_from_fgw: config.fetch_casm_from_fgw, + }; + + util::task::spawn(state::consensus_sync( + sync_context, + state::l1::sync, + state::l2::consensus_sync, + consensus_channels, + )) +} + +#[cfg(feature = "p2p")] +#[allow(clippy::too_many_arguments)] fn start_p2p_sync( storage: Storage, pathfinder_context: PathfinderContext, @@ -630,6 +847,8 @@ fn start_p2p_sync( gateway_public_key: pathfinder_common::PublicKey, l1_checkpoint_override: Option, verify_tree_hashes: bool, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, ) -> tokio::task::JoinHandle> { use pathfinder_block_hashes::BlockHashDb; @@ -643,6 +862,8 @@ fn start_p2p_sync( public_key: gateway_public_key, l1_checkpoint_override, verify_tree_hashes, + compiler_resource_limits, + blockifier_libfuncs, block_hash_db: Some(BlockHashDb::new(pathfinder_context.network)), }; util::task::spawn(sync.run()) @@ -661,10 +882,12 @@ async fn spawn_monitoring( .install_recorder() .context("Creating Prometheus recorder")?; - metrics::gauge!("pathfinder_build_info", 1.0, "version" => pathfinder_version::VERSION); + metrics::gauge!("pathfinder_build_info", "version" => pathfinder_version::VERSION).set(1.0); match SystemTime::now().duration_since(UNIX_EPOCH) { - Ok(duration) => metrics::gauge!("process_start_time_seconds", duration.as_secs() as f64), + Ok(duration) => { + metrics::gauge!("process_start_time_seconds").set(duration.as_secs() as f64) + } Err(err) => tracing::error!("Failed to read system time: {:?}", err), } @@ -688,16 +911,13 @@ struct EthereumContext { impl EthereumContext { /// Configure an [EthereumContext]'s transport and read the chain ID using /// it. - async fn setup(mut url: reqwest::Url, password: &Option) -> anyhow::Result { - // Make sure the URL is a WS URL - if url.scheme().eq("http") { - warn!("The provided Ethereum URL is using HTTP, converting to WS"); - url.set_scheme("ws") - .map_err(|_| anyhow::anyhow!("Failed to set Ethereum URL scheme to ws"))?; - } else if url.scheme().eq("https") { - warn!("The provided Ethereum URL is using HTTPS, converting to WSS"); - url.set_scheme("wss") - .map_err(|_| anyhow::anyhow!("Failed to set Ethereum URL scheme to wss"))?; + async fn setup(url: reqwest::Url, password: &Option) -> anyhow::Result { + // Require WebSocket URL - EthereumClient uses WebSocket for all operations + if !matches!(url.scheme(), "ws" | "wss") { + anyhow::bail!( + "Ethereum URL must use WebSocket protocol (ws:// or wss://), got: {url}\n\nHint: \ + Change your --ethereum.url from http(s):// to ws(s)://" + ); } let client = if let Some(password) = password.as_ref() { @@ -708,7 +928,7 @@ impl EthereumContext { let chain = client.get_chain().await.context( r"Determining Ethereum chain. - + Hint: Make sure the provided ethereum.url and ethereum.password are good.", )?; @@ -736,7 +956,9 @@ If you are trying to connect to a custom Starknet on another Ethereum network, p struct PathfinderContext { network: Chain, network_id: ChainId, + is_l3: bool, gateway: starknet_gateway_client::Client, + gateway_dns_refresh_interval: std::time::Duration, database: PathBuf, contract_addresses: EthContractAddresses, } @@ -747,7 +969,7 @@ mod pathfinder_context { use std::time::Duration; use anyhow::Context; - use pathfinder_common::{Chain, ChainId}; + use pathfinder_common::{Chain, ChainId, SettlementLayerAddress}; use pathfinder_ethereum::core_addr; use pathfinder_rpc::context::EthContractAddresses; use reqwest::Url; @@ -762,27 +984,34 @@ mod pathfinder_context { data_directory: &Path, api_key: Option, gateway_timeout: Duration, + gateway_dns_refresh_interval: Duration, ) -> anyhow::Result { let context = match cfg { NetworkConfig::Mainnet => Self { network: Chain::Mainnet, network_id: ChainId::MAINNET, + is_l3: false, gateway: GatewayClient::mainnet(gateway_timeout).with_api_key(api_key), + gateway_dns_refresh_interval, database: data_directory.join("mainnet.sqlite"), contract_addresses: EthContractAddresses::new_known(core_addr::MAINNET), }, NetworkConfig::SepoliaTestnet => Self { network: Chain::SepoliaTestnet, network_id: ChainId::SEPOLIA_TESTNET, + is_l3: false, gateway: GatewayClient::sepolia_testnet(gateway_timeout).with_api_key(api_key), + gateway_dns_refresh_interval, database: data_directory.join("testnet-sepolia.sqlite"), contract_addresses: EthContractAddresses::new_known(core_addr::SEPOLIA_TESTNET), }, NetworkConfig::SepoliaIntegration => Self { network: Chain::SepoliaIntegration, network_id: ChainId::SEPOLIA_INTEGRATION, + is_l3: false, gateway: GatewayClient::sepolia_integration(gateway_timeout) .with_api_key(api_key), + gateway_dns_refresh_interval, database: data_directory.join("integration-sepolia.sqlite"), contract_addresses: EthContractAddresses::new_known( core_addr::SEPOLIA_INTEGRATION, @@ -792,13 +1021,18 @@ mod pathfinder_context { gateway, feeder_gateway, chain_id, + compress_gateway_requests, + is_l3, } => Self::configure_custom( - gateway, - feeder_gateway, + *gateway, + *feeder_gateway, chain_id, + is_l3, data_directory, api_key, gateway_timeout, + gateway_dns_refresh_interval, + compress_gateway_requests, ) .await .context("Configuring custom network")?, @@ -811,20 +1045,25 @@ mod pathfinder_context { /// additional verification by checking for a proxy gateway by /// comparing against L1 starknet address against of /// the known networks. + #[allow(clippy::too_many_arguments)] async fn configure_custom( gateway: Url, feeder: Url, chain_id: String, + is_l3: bool, data_directory: &Path, api_key: Option, gateway_timeout: Duration, + gateway_dns_refresh_interval: Duration, + compress_gateway_requests: bool, ) -> anyhow::Result { use pathfinder_crypto::Felt; use starknet_gateway_client::GatewayApi; let gateway = GatewayClient::with_urls(gateway, feeder, gateway_timeout) .context("Creating gateway client")? - .with_api_key(api_key); + .with_api_key(api_key) + .with_compress_gateway_requests(compress_gateway_requests); let network_id = ChainId(Felt::from_be_slice(chain_id.as_bytes()).context("Parsing chain ID")?); @@ -833,7 +1072,30 @@ mod pathfinder_context { .eth_contract_addresses() .await .context("Downloading starknet L1 address from gateway for proxy check")?; - let l1_core_address = reply_contract_addresses.starknet.0; + + let l1_core_address = if is_l3 { + // For L3 networks, assert we got Starknet variant (ContractAddress) + match reply_contract_addresses.starknet { + SettlementLayerAddress::Starknet(_contract_address) => { + // TODO(mehul 14/11/2025): This is a placeholder return. L1 syncing for L3 networks would + // require significant changes that are not prioritized for pathfinder. + // Returning 0 address as a dummy return + primitive_types::H160::zero() + } + SettlementLayerAddress::Ethereum(_) => { + anyhow::bail!("L3 networks should have ContractAddress (Starknet variant) in starknet field, but got EthereumAddress (Ethereum variant)"); + } + } + } else { + // For L2 networks, assert we got Ethereum variant (EthereumAddress) + match reply_contract_addresses.starknet { + SettlementLayerAddress::Starknet(_) => { + anyhow::bail!("L2 networks should have EthereumAddress (Ethereum variant) in starknet field, but got ContractAddress (Starknet variant)"); + } + SettlementLayerAddress::Ethereum(address) => address.0, + } + }; + let contract_addresses = EthContractAddresses::new_custom( l1_core_address, reply_contract_addresses.eth_l2_token_address, @@ -856,7 +1118,9 @@ mod pathfinder_context { let context = Self { network, network_id, + is_l3, gateway, + gateway_dns_refresh_interval, database: data_directory.join("custom.sqlite"), contract_addresses, }; @@ -902,9 +1166,7 @@ async fn verify_database( if let Some(database_genesis) = db_genesis { use pathfinder_common::consts::{ - MAINNET_GENESIS_HASH, - SEPOLIA_INTEGRATION_GENESIS_HASH, - SEPOLIA_TESTNET_GENESIS_HASH, + MAINNET_GENESIS_HASH, SEPOLIA_INTEGRATION_GENESIS_HASH, SEPOLIA_TESTNET_GENESIS_HASH, }; let db_network = match database_genesis { diff --git a/crates/pathfinder/src/bin/pathfinder/update.rs b/crates/pathfinder/src/bin/pathfinder/update.rs index 8cb4067844..9bbc148694 100644 --- a/crates/pathfinder/src/bin/pathfinder/update.rs +++ b/crates/pathfinder/src/bin/pathfinder/update.rs @@ -126,7 +126,8 @@ async fn fetch_latest_github_release( ) -> UpdateResult { use reqwest::{StatusCode, Url}; - let url = Url::parse("https://api.github.com/repos/eqlabs/pathfinder/releases/latest").unwrap(); + let url = Url::parse("https://api.github.com/repos/equilibriumco/pathfinder/releases/latest") + .unwrap(); let mut request = client.get(url); diff --git a/crates/pathfinder/src/config.rs b/crates/pathfinder/src/config.rs index e5f4a0bba9..a828c2f2df 100644 --- a/crates/pathfinder/src/config.rs +++ b/crates/pathfinder/src/config.rs @@ -4,6 +4,7 @@ use std::fs::File; use std::net::SocketAddr; use std::num::{NonZeroU32, NonZeroU64, NonZeroUsize}; use std::path::{Path, PathBuf}; +use std::str::FromStr; use std::time::Duration; use clap::{ArgAction, CommandFactory, Parser}; @@ -24,14 +25,96 @@ pub mod p2p; use p2p::cli::{P2PConsensusCli, P2PSyncCli}; use p2p::{P2PConsensusConfig, P2PSyncConfig}; +const COMPILER_MEMORY_USAGE_ALLOWED_RANGE: std::ops::RangeInclusive = + (pathfinder_compiler::ResourceLimits::RECOMMENDED_MEMORY_USAGE_LIMIT_MIB / 2) + ..=(4 * pathfinder_compiler::ResourceLimits::RECOMMENDED_MEMORY_USAGE_LIMIT_MIB); + +const COMPILER_CPU_TIME_ALLOWED_RANGE: std::ops::RangeInclusive = + pathfinder_compiler::ResourceLimits::RECOMMENDED_CPU_TIME_LIMIT + ..=(4 * pathfinder_compiler::ResourceLimits::RECOMMENDED_CPU_TIME_LIMIT); + #[derive(Parser)] #[command(name = "Pathfinder")] #[command(author = "Equilibrium Labs")] #[command(version = pathfinder_version::VERSION)] +#[command(propagate_version = true)] #[command( - about = "A Starknet node implemented by Equilibrium Labs. Submit bug reports and issues at https://github.com/eqlabs/pathfinder." + about = "A Starknet node implemented by Equilibrium Labs. Submit bug reports and issues at https://github.com/equilibriumco/pathfinder." )] -struct Cli { +pub struct Cli { + #[command(subcommand)] + pub command: Command, +} + +/// Parse command line arguments, defaulting to the `node` subcommand +/// if no valid subcommand is provided. +/// +/// NOTE: There are nicer ways to do this but they all involve setting +/// the `#[command(flatten)]` attribute on [`NodeArgs`] which isn't possible +/// as long as it has fields with `#[clap(skip)]`. +pub fn parse_cli() -> Cli { + let mut os_args: Vec<_> = std::env::args_os().collect(); + let arg1 = os_args.get(1).and_then(|arg1| arg1.to_str()); + + // If a valid subcommand was provided, run it. Otherwise, default to the + // `node` subcommand and let clap handle any errors. + match arg1 { + Some(arg1) if CommandKind::from_str(arg1).is_ok() => {} + _ => { + os_args.insert(1, "node".into()); + } + } + + Cli::parse_from(os_args) +} + +#[derive(clap::Subcommand)] +pub enum Command { + /// Run the Pathfinder node. + Node(Box), + + /// Run the Sierra to CASM compiler. Raw Sierra class definitions are read + /// from stdin and the compiled CASM is written to stdout. + /// + /// This command is intended to be used as a subprocess by the main + /// `pathfinder` executable and is not generally useful to run directly. + Compile(CompileConfig), +} + +enum CommandKind { + Node, + Compile, + Help, + Version, +} + +impl FromStr for CommandKind { + type Err = (); + + fn from_str(s: &str) -> Result { + match s { + "node" => Ok(CommandKind::Node), + "compile" => Ok(CommandKind::Compile), + "help" | "--help" | "-h" => Ok(CommandKind::Help), + "--version" | "-V" => Ok(CommandKind::Version), + _ => Err(()), + } + } +} + +// Not actually used, but serves as a guarantee that every command has a +// corresponding CommandKind. +impl From for CommandKind { + fn from(command: Command) -> Self { + match command { + Command::Node(_) => CommandKind::Node, + Command::Compile(_) => CommandKind::Compile, + } + } +} + +#[derive(clap::Args)] +pub struct NodeArgs { #[arg( long, value_name = "DIR", @@ -160,7 +243,7 @@ Examples: #[arg( long = "log-output-json", - long_help = "This flag controls when to use colors in the output logs.", + long_help = "Enable JSON structured logging output.", default_value = "false", env = "PATHFINDER_LOG_OUTPUT_JSON", value_name = "BOOL" @@ -297,6 +380,15 @@ This should only be enabled for debugging purposes as it adds substantial proces )] feeder_gateway_fetch_concurrency: std::num::NonZeroUsize, + #[arg( + long = "gateway.check-for-dns-updates-interval", + value_name = "Seconds", + long_help = "Interval for checking DNS updates for the gateway and feeder gateway URLs", + env = "PATHFINDER_GATEWAY_CHECK_FOR_DNS_UPDATES_INTERVAL", + default_value = "60" + )] + gateway_dns_refresh_interval: std::num::NonZeroU64, + #[arg( long = "storage.event-filter-cache-size", long_help = format!( @@ -374,6 +466,31 @@ This should only be enabled for debugging purposes as it adds substantial proces )] custom_versioned_constants_path: Option, + #[arg( + long = "compiler.max-memory-usage-mib", + long_help = "Maximum memory usage for the compiler in MiB. + +Setting this value too low may cause compilation of large classes to fail.", + env = "PATHFINDER_COMPILER_MAX_MEMORY_USAGE_MIB", + default_value_t = pathfinder_compiler::ResourceLimits::RECOMMENDED_MEMORY_USAGE_LIMIT_MIB, + value_parser = clap::value_parser!(u64).range(COMPILER_MEMORY_USAGE_ALLOWED_RANGE), + )] + compiler_max_memory_usage_mib: u64, + + #[arg( + long = "compiler.max-cpu-time-secs", + long_help = "Maximum CPU time for the compiler in seconds. + +Setting this value too low may cause compilation of large classes to fail.", + env = "PATHFINDER_COMPILER_MAX_CPU_TIME_SECONDS", + default_value_t = pathfinder_compiler::ResourceLimits::RECOMMENDED_CPU_TIME_LIMIT, + value_parser = clap::value_parser!(u64).range(COMPILER_CPU_TIME_ALLOWED_RANGE), + )] + compiler_max_cpu_time_secs: u64, + + #[clap(flatten)] + compile_config: CompileConfig, + #[arg( long = "sync.fetch-casm-from-fgw", long_help = "Do not compile classes locally, instead fetch them from the feeder gateway", @@ -404,6 +521,14 @@ This should only be enabled for debugging purposes as it adds substantial proces )] fee_estimation_epsilon: Percentage, + #[arg( + long = "rpc.block-trace-cache-size", + long_help = "Number of block traces to cache in memory for RPC calls.", + default_value = "128", + env = "PATHFINDER_RPC_BLOCK_TRACE_CACHE_SIZE" + )] + rpc_block_trace_cache_size: std::num::NonZeroUsize, + #[cfg_attr( all( feature = "consensus-integration-tests", @@ -444,6 +569,50 @@ impl Color { } } +#[derive(Clone, Copy, Debug, Default, PartialEq)] +pub enum BlockifierLibfuncs { + #[default] + Audited, + All, + Experimental, +} + +fn parse_blockifier_libfuncs(s: &str) -> Result { + match s { + "audited" => Ok(BlockifierLibfuncs::Audited), + "all" => Ok(BlockifierLibfuncs::All), + "experimental" => Ok(BlockifierLibfuncs::Experimental), + _ => Err("Unknown blockifier libfunc list".to_string()), + } +} + +impl From for pathfinder_compiler::BlockifierLibfuncs { + fn from(val: BlockifierLibfuncs) -> Self { + match val { + BlockifierLibfuncs::Audited => pathfinder_compiler::BlockifierLibfuncs::Audited, + BlockifierLibfuncs::All => pathfinder_compiler::BlockifierLibfuncs::All, + BlockifierLibfuncs::Experimental => { + pathfinder_compiler::BlockifierLibfuncs::Experimental + } + } + } +} + +#[derive(clap::Args, Clone)] +pub struct CompileConfig { + #[arg( + long = "blockifier.libfunc-list", + long_help = "This names the libfunc list to be used in Starknet program validation. + +The default is suitable for all uses except testing.", + default_value = "audited", + value_name = "audited | all | experimental", + value_parser = parse_blockifier_libfuncs, + env = "PATHFINDER_BLOCKIFIER_LIBFUNC_LIST" + )] + pub blockifier_libfuncs: BlockifierLibfuncs, +} + #[derive(clap::ValueEnum, Debug, Clone, Copy, PartialEq)] pub enum RootRpcVersion { V06, @@ -562,6 +731,16 @@ Note that 'custom' requires also setting the --gateway-url and --feeder-gateway- required_if_eq("network", Network::Custom) )] chain_id: Option, + + #[arg( + long = "is-l3", + long_help = "Set if the network is an L3 network", + env = "PATHFINDER_IS_L3", + required_if_eq("network", Network::Custom), + default_value = "false" + )] + is_l3: Option, + #[arg( long = "feeder-gateway-url", value_name = "URL", @@ -581,6 +760,14 @@ Note that 'custom' requires also setting the --gateway-url and --feeder-gateway- required_if_eq("network", Network::Custom), )] gateway: Option, + + #[arg( + long = "gateway.compress-requests", + long_help = "Compress requests sent to the Starknet gateway, if they contain nonempty proofs. Requests that do not contain a proof are not compressed. Requires '--network custom'.", + action = clap::ArgAction::Set, + default_value = "true", + )] + compress_gateway_requests: bool, } #[cfg(feature = "p2p")] @@ -625,6 +812,24 @@ struct NativeExecutionCli { env = "PATHFINDER_RPC_NATIVE_EXECUTION_CLASS_CACHE_SIZE" )] class_cache_size: NonZeroUsize, + + #[arg( + long = "rpc.native-execution-compiler-optimization-level", + long_help = "Optimization level for the Cairo native compiler. Valid values are 0(none), 1 (less), 2 (default), and 3 (aggressive).", + action = clap::ArgAction::Set, + default_value = "2", + env = "PATHFINDER_RPC_NATIVE_EXECUTION_COMPILER_OPTIMIZATION_LEVEL" + )] + optimization_level: u8, + + #[arg( + long = "rpc.native-execution-force-use-for-incompatible-classes", + long_help = "Force use of Cairo native execution even for Sierra classes before 1.7.0 that are known to result in incorrect cost calculation.", + action = clap::ArgAction::Set, + default_value = "false", + env = "PATHFINDER_RPC_NATIVE_EXECUTION_FORCE_USE_FOR_INCOMPATIBLE_CLASSES" + )] + force_use_for_incompatible_classes: bool, } #[cfg(feature = "p2p")] @@ -672,7 +877,7 @@ struct ConsensusCli { #[arg( long = "consensus.history-depth", - long_help = "How many historical consensus engines (ie. those prior to the current one) to keep enabled. Warning!Setting this value to 0 may stall small networks in some circumstances.", + long_help = "How many historical consensus engines (ie. those prior to the current one) to keep enabled. Warning! Setting this value to below 2 may stall small networks in some circumstances.", action = clap::ArgAction::Set, default_value = "10", value_name = "DEPTH", @@ -680,6 +885,28 @@ struct ConsensusCli { env = "PATHFINDER_CONSENSUS_HISTORY_DEPTH", )] history_depth: u64, + + #[arg( + long = "consensus.l1-gas-price-tolerance", + value_name = "Percentage", + long_help = "Maximum allowed tolerance for L1 gas price changes from the rolling average when validating new proposals.", + action = clap::ArgAction::Set, + default_value = "20", + value_parser = clap::value_parser!(u8).range(0..=100), + env = "PATHFINDER_CONSENSUS_L1_GAS_PRICE_TOLERANCE", + )] + l1_gas_price_tolerance: u8, + + #[arg( + long = "consensus.l1-gas-price-max-time-gap", + value_name = "Seconds", + long_help = "Maximum allowed time gap between the requested timestamp and the latest L1 gas price sample when validating new proposals. If exceeded, the data is considered stale.", + action = clap::ArgAction::Set, + default_value = "600", + value_parser = clap::value_parser!(u64), + env = "PATHFINDER_CONSENSUS_L1_GAS_PRICE_MAX_TIME_GAP", + )] + l1_gas_price_max_time_gap: u64, } #[derive(clap::ValueEnum, Clone, serde::Deserialize)] @@ -860,11 +1087,14 @@ pub struct Config { pub is_rpc_enabled: bool, pub gateway_api_key: Option, pub gateway_timeout: Duration, + pub gateway_dns_refresh_interval: Duration, pub event_filter_cache_size: NonZeroUsize, pub get_events_event_filter_block_range_limit: NonZeroUsize, pub blockchain_history: Option, pub state_tries: Option, pub versioned_constants_map: VersionedConstantsMap, + pub compiler_resource_limits: pathfinder_compiler::ResourceLimits, + pub blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, pub feeder_gateway_fetch_concurrency: NonZeroUsize, pub fetch_casm_from_fgw: bool, pub shutdown_grace_period: Duration, @@ -872,6 +1102,7 @@ pub struct Config { pub native_execution: NativeExecutionConfig, pub submission_tracker_time_limit: NonZeroU64, pub submission_tracker_size_limit: NonZeroUsize, + pub rpc_block_trace_cache_size: NonZeroUsize, pub consensus: Option, /// Integration testing config, only available on debug builds with `p2p` /// and `consensus-integration-tests` features enabled. @@ -889,9 +1120,11 @@ pub enum NetworkConfig { SepoliaTestnet, SepoliaIntegration, Custom { - gateway: Url, - feeder_gateway: Url, + gateway: Box, + feeder_gateway: Box, chain_id: String, + compress_gateway_requests: bool, + is_l3: bool, }, } @@ -905,6 +1138,8 @@ pub struct DebugConfig { pub struct NativeExecutionConfig { enabled: bool, class_cache_size: NonZeroUsize, + optimization_level: u8, + force_use_for_incompatible_classes: bool, } #[cfg(not(feature = "cairo-native"))] @@ -923,6 +1158,13 @@ pub struct ConsensusConfig { /// How many historical consensus engines (ie. those prior to the current /// one) to keep enabled. pub history_depth: u64, + /// Maximum allowed tolerance for L1 gas price changes from the rolling + /// average when validating new proposals. + pub l1_gas_price_tolerance: f64, + /// Maximum allowed time gap between the requested timestamp and the latest + /// L1 gas price sample when validating new proposals. If exceeded, the data + /// is considered stale. + pub l1_gas_price_max_time_gap: u64, } #[cfg(not(feature = "p2p"))] @@ -937,22 +1179,25 @@ impl NetworkConfig { args.gateway, args.feeder_gateway, args.chain_id, + args.is_l3, ) { - (None, None, None, None) => return None, - (Some(Custom), Some(gateway), Some(feeder_gateway), Some(chain_id)) => { + (None, None, None, None, None) => return None, + (Some(Custom), Some(gateway), Some(feeder_gateway), Some(chain_id), Some(is_l3)) => { NetworkConfig::Custom { - gateway, - feeder_gateway, + gateway: Box::new(gateway), + feeder_gateway: Box::new(feeder_gateway), chain_id, + compress_gateway_requests: args.compress_gateway_requests, + is_l3, } } - (Some(Custom), _, _, _) => { + (Some(Custom), _, _, _, _) => { unreachable!("`--network custom` requirements are handled by clap derive") } // Handle non-custom variants in an inner match so that the compiler will force // us to handle a new network variants explicitly. Otherwise we end up with a // catch-all arm that would swallow new variants silently. - (Some(non_custom), None, None, None) => match non_custom { + (Some(non_custom), None, None, None, None) => match non_custom { Mainnet => NetworkConfig::Mainnet, SepoliaTestnet => NetworkConfig::SepoliaTestnet, SepoliaIntegration => NetworkConfig::SepoliaIntegration, @@ -1010,6 +1255,14 @@ impl NativeExecutionConfig { pub fn class_cache_size(&self) -> NonZeroUsize { NonZeroUsize::new(1).unwrap() } + + pub fn optimization_level(&self) -> u8 { + 0 + } + + pub fn force_use_for_incompatible_classes(&self) -> bool { + false + } } #[cfg(feature = "cairo-native")] @@ -1018,6 +1271,8 @@ impl NativeExecutionConfig { Self { enabled: args.is_native_execution_enabled, class_cache_size: args.class_cache_size, + optimization_level: args.optimization_level, + force_use_for_incompatible_classes: args.force_use_for_incompatible_classes, } } @@ -1028,6 +1283,14 @@ impl NativeExecutionConfig { pub fn class_cache_size(&self) -> NonZeroUsize { self.class_cache_size } + + pub fn optimization_level(&self) -> u8 { + self.optimization_level + } + + pub fn force_use_for_incompatible_classes(&self) -> bool { + self.force_use_for_incompatible_classes + } } #[cfg(not(feature = "p2p"))] @@ -1077,6 +1340,8 @@ impl ConsensusConfig { .map(ContractAddress) .collect(), history_depth: consensus_cli.history_depth, + l1_gas_price_tolerance: consensus_cli.l1_gas_price_tolerance as f64 / 100.0, + l1_gas_price_max_time_gap: consensus_cli.l1_gas_price_max_time_gap, } }) } @@ -1084,64 +1349,72 @@ impl ConsensusConfig { impl Config { #[cfg_attr(not(feature = "cairo-native"), allow(clippy::unit_arg))] - pub fn parse() -> Self { - let cli = Cli::parse(); - - let network = NetworkConfig::from_components(cli.network); + pub fn parse(args: Box) -> Self { + let network = NetworkConfig::from_components(args.network); Config { - data_directory: cli.data_directory, + data_directory: args.data_directory, ethereum: Ethereum { - password: cli.ethereum_password, - url: cli.ethereum_url, + password: args.ethereum_password, + url: args.ethereum_url, }, - rpc_address: cli.rpc_address, - rpc_cors_domains: parse_cors_or_exit(cli.rpc_cors_domains), - rpc_root_version: cli.rpc_root_version, - websocket: cli.websocket, - monitor_address: cli.monitor_address, + rpc_address: args.rpc_address, + rpc_cors_domains: parse_cors_or_exit(args.rpc_cors_domains), + rpc_root_version: args.rpc_root_version, + websocket: args.websocket, + monitor_address: args.monitor_address, network, - execution_concurrency: cli.execution_concurrency, - sqlite_wal: match cli.sqlite_wal { + execution_concurrency: args.execution_concurrency, + sqlite_wal: match args.sqlite_wal { true => JournalMode::WAL, false => JournalMode::Rollback, }, - max_rpc_connections: cli.max_rpc_connections, - poll_interval: cli.poll_interval, - l1_poll_interval: Duration::from_secs(cli.l1_poll_interval.get()), - color: cli.color, - log_output_json: cli.log_output_json, - disable_version_update_check: cli.disable_version_update_check, - sync_p2p: P2PSyncConfig::parse_or_exit(cli.p2p_sync), - consensus_p2p: P2PConsensusConfig::parse_or_exit(cli.p2p_consensus), - debug: DebugConfig::parse(cli.debug), - verify_tree_hashes: cli.verify_tree_node_data, - rpc_batch_concurrency_limit: cli.rpc_batch_concurrency_limit, - disable_batch_requests: cli.disable_batch_requests, - is_sync_enabled: cli.is_sync_enabled, - is_rpc_enabled: cli.is_rpc_enabled, - gateway_api_key: cli.gateway_api_key, - event_filter_cache_size: cli.event_filter_cache_size, - get_events_event_filter_block_range_limit: cli + max_rpc_connections: args.max_rpc_connections, + poll_interval: args.poll_interval, + l1_poll_interval: Duration::from_secs(args.l1_poll_interval.get()), + color: args.color, + log_output_json: args.log_output_json, + disable_version_update_check: args.disable_version_update_check, + sync_p2p: P2PSyncConfig::parse_or_exit(args.p2p_sync), + consensus_p2p: P2PConsensusConfig::parse_or_exit(args.p2p_consensus), + debug: DebugConfig::parse(args.debug), + verify_tree_hashes: args.verify_tree_node_data, + rpc_batch_concurrency_limit: args.rpc_batch_concurrency_limit, + disable_batch_requests: args.disable_batch_requests, + is_sync_enabled: args.is_sync_enabled, + is_rpc_enabled: args.is_rpc_enabled, + gateway_api_key: args.gateway_api_key, + event_filter_cache_size: args.event_filter_cache_size, + get_events_event_filter_block_range_limit: args .get_events_event_filter_block_range_limit, - gateway_timeout: Duration::from_secs(cli.gateway_timeout.get()), - feeder_gateway_fetch_concurrency: cli.feeder_gateway_fetch_concurrency, - blockchain_history: cli.blockchain_history, - state_tries: cli.state_tries, - versioned_constants_map: cli + gateway_timeout: Duration::from_secs(args.gateway_timeout.get()), + gateway_dns_refresh_interval: Duration::from_secs( + args.gateway_dns_refresh_interval.get(), + ), + feeder_gateway_fetch_concurrency: args.feeder_gateway_fetch_concurrency, + blockchain_history: args.blockchain_history, + state_tries: args.state_tries, + versioned_constants_map: args .custom_versioned_constants_path .map(|path| parse_versioned_constants_or_exit(&path)) .unwrap_or_default(), - fetch_casm_from_fgw: cli.fetch_casm_from_fgw, - shutdown_grace_period: Duration::from_secs(cli.shutdown_grace_period.get()), - fee_estimation_epsilon: cli.fee_estimation_epsilon, + compiler_resource_limits: pathfinder_compiler::ResourceLimits::new( + // Convert MiB to bytes for the general config. + args.compiler_max_memory_usage_mib * 1024 * 1024, + args.compiler_max_cpu_time_secs, + ), + blockifier_libfuncs: args.compile_config.blockifier_libfuncs.into(), + fetch_casm_from_fgw: args.fetch_casm_from_fgw, + shutdown_grace_period: Duration::from_secs(args.shutdown_grace_period.get()), + fee_estimation_epsilon: args.fee_estimation_epsilon, #[cfg_attr(not(feature = "cairo-native"), allow(clippy::unit_arg))] - native_execution: NativeExecutionConfig::parse(cli.native_execution), - submission_tracker_time_limit: cli.submission_tracker_time_limit, - submission_tracker_size_limit: cli.submission_tracker_size_limit, - consensus: ConsensusConfig::parse_or_exit(cli.consensus), + native_execution: NativeExecutionConfig::parse(args.native_execution), + submission_tracker_time_limit: args.submission_tracker_time_limit, + submission_tracker_size_limit: args.submission_tracker_size_limit, + rpc_block_trace_cache_size: args.rpc_block_trace_cache_size, + consensus: ConsensusConfig::parse_or_exit(args.consensus), integration_testing: integration_testing::IntegrationTestingConfig::parse( - cli.integration_testing, + args.integration_testing, ), } } diff --git a/crates/pathfinder/src/config/integration_testing.rs b/crates/pathfinder/src/config/integration_testing.rs index 9a05871584..0e6c934fce 100644 --- a/crates/pathfinder/src/config/integration_testing.rs +++ b/crates/pathfinder/src/config/integration_testing.rs @@ -16,34 +16,34 @@ pub use enabled::*; #[derive(Copy, Clone, PartialEq, Eq)] pub enum InjectFailureTrigger { ProposalInitRx, + ProposalFinRx, BlockInfoRx, TransactionBatchRx, - TransactionsFinRx, - ProposalCommitmentRx, - ProposalFinRx, - EntireProposalRx, - EntireProposalPersisted, + ExecutedTransactionCountRx, + ProposalFinalized, PrevoteRx, PrecommitRx, ProposalDecided, ProposalCommitted, + OutdatedVote, + CommittedVoteLost, } impl InjectFailureTrigger { pub fn as_str(&self) -> &'static str { match self { InjectFailureTrigger::ProposalInitRx => "proposal_init_rx", + InjectFailureTrigger::ProposalFinRx => "proposal_fin_rx", InjectFailureTrigger::BlockInfoRx => "block_info_rx", InjectFailureTrigger::TransactionBatchRx => "txn_batch_rx", - InjectFailureTrigger::TransactionsFinRx => "txns_fin_rx", - InjectFailureTrigger::ProposalCommitmentRx => "proposal_commitment_rx", - InjectFailureTrigger::ProposalFinRx => "proposal_fin_rx", - InjectFailureTrigger::EntireProposalRx => "entire_proposal_rx", - InjectFailureTrigger::EntireProposalPersisted => "entire_proposal_persisted", + InjectFailureTrigger::ExecutedTransactionCountRx => "executed_txn_count_rx", + InjectFailureTrigger::ProposalFinalized => "proposal_finalized", InjectFailureTrigger::PrevoteRx => "prevote_rx", InjectFailureTrigger::PrecommitRx => "precommit_rx", InjectFailureTrigger::ProposalDecided => "proposal_decided", InjectFailureTrigger::ProposalCommitted => "proposal_committed", + InjectFailureTrigger::OutdatedVote => "outdated_vote", + InjectFailureTrigger::CommittedVoteLost => "committed_vote_lost", } } } @@ -54,17 +54,17 @@ impl FromStr for InjectFailureTrigger { fn from_str(s: &str) -> Result { match s { "proposal_init_rx" => Ok(InjectFailureTrigger::ProposalInitRx), + "proposal_fin_rx" => Ok(InjectFailureTrigger::ProposalFinRx), "block_info_rx" => Ok(InjectFailureTrigger::BlockInfoRx), "txn_batch_rx" => Ok(InjectFailureTrigger::TransactionBatchRx), - "txns_fin_rx" => Ok(InjectFailureTrigger::TransactionsFinRx), - "proposal_commitment_rx" => Ok(InjectFailureTrigger::ProposalCommitmentRx), - "proposal_fin_rx" => Ok(InjectFailureTrigger::ProposalFinRx), - "entire_proposal_rx" => Ok(InjectFailureTrigger::EntireProposalRx), - "entire_proposal_persisted" => Ok(InjectFailureTrigger::EntireProposalPersisted), + "executed_txn_count_rx" => Ok(InjectFailureTrigger::ExecutedTransactionCountRx), + "proposal_finalized" => Ok(InjectFailureTrigger::ProposalFinalized), "prevote_rx" => Ok(InjectFailureTrigger::PrevoteRx), "precommit_rx" => Ok(InjectFailureTrigger::PrecommitRx), "proposal_decided" => Ok(InjectFailureTrigger::ProposalDecided), "proposal_committed" => Ok(InjectFailureTrigger::ProposalCommitted), + "outdated_vote" => Ok(InjectFailureTrigger::OutdatedVote), + "committed_vote_lost" => Ok(InjectFailureTrigger::CommittedVoteLost), _ => Err(format!("Unknown inject failure event: {s}")), } } @@ -85,6 +85,13 @@ mod enabled { )] disable_db_verification: bool, + #[arg( + long = "integration-tests.disable-gas-price-validation", + action = clap::ArgAction::Set, + default_value = "false" + )] + disable_gas_price_validation: bool, + #[arg( long = "integration-tests.inject-failure", action = clap::ArgAction::Set, @@ -121,6 +128,7 @@ mod enabled { #[derive(Copy, Clone)] pub struct IntegrationTestingConfig { disable_db_verification: bool, + disable_gas_price_validation: bool, inject_failure: Option, } @@ -128,6 +136,7 @@ mod enabled { pub fn parse(cli: IntegrationTestingCli) -> Self { Self { disable_db_verification: cli.disable_db_verification, + disable_gas_price_validation: cli.disable_gas_price_validation, inject_failure: cli.inject_failure, } } @@ -136,6 +145,10 @@ mod enabled { self.disable_db_verification } + pub fn is_gas_price_validation_disabled(&self) -> bool { + self.disable_gas_price_validation + } + pub fn inject_failure_config(&self) -> Option { self.inject_failure } @@ -169,6 +182,10 @@ mod disabled { false } + pub fn is_gas_price_validation_disabled(&self) -> bool { + false + } + pub fn inject_failure_config(&self) -> Option { None } diff --git a/crates/pathfinder/src/consensus.rs b/crates/pathfinder/src/consensus.rs index 5f73894d84..ac17fcab7e 100644 --- a/crates/pathfinder/src/consensus.rs +++ b/crates/pathfinder/src/consensus.rs @@ -1,14 +1,15 @@ use std::path::{Path, PathBuf}; -use p2p::consensus::{Client, Event}; -use pathfinder_common::{ChainId, ConsensusInfo}; +use p2p::consensus::Event; +use pathfinder_common::ChainId; +use pathfinder_gas_price::L1GasPriceProvider; use pathfinder_storage::Storage; -use tokio::sync::{mpsc, watch}; +use pathfinder_validator::ValidatorWorkerPool; +use tokio::sync::mpsc; use crate::config::integration_testing::InjectFailureConfig; use crate::config::ConsensusConfig; -#[cfg(feature = "p2p")] mod inner; pub type ConsensusP2PEventProcessingTaskHandle = tokio::task::JoinHandle>; @@ -17,15 +18,21 @@ pub type ConsensusEngineTaskHandle = tokio::task::JoinHandle> pub struct ConsensusTaskHandles { pub consensus_p2p_event_processing_handle: ConsensusP2PEventProcessingTaskHandle, pub consensus_engine_handle: ConsensusEngineTaskHandle, - pub consensus_info_watch: Option>>, + pub consensus_channels: Option, + // Use to `join()` the worker pool, so that it's threads don't panic when the `p2p_task` is + // cancelled. + pub worker_pool: Option, } +pub use crate::ConsensusChannels; + impl ConsensusTaskHandles { pub fn pending() -> Self { Self { consensus_p2p_event_processing_handle: tokio::task::spawn(std::future::pending()), consensus_engine_handle: tokio::task::spawn(std::future::pending()), - consensus_info_watch: None, + consensus_channels: None, + worker_pool: None, } } } @@ -34,41 +41,30 @@ impl ConsensusTaskHandles { pub fn start( config: ConsensusConfig, chain_id: ChainId, - storage: Storage, - wal_directory: PathBuf, - p2p_client: Client, + main_storage: Storage, + p2p_consensus_client: p2p::consensus::Client, p2p_event_rx: mpsc::UnboundedReceiver, + wal_directory: PathBuf, data_directory: &Path, + gas_price_provider: Option, + verify_tree_hashes: bool, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, // Does nothing in production builds. Used for integration testing only. inject_failure_config: Option, ) -> ConsensusTaskHandles { inner::start( config, chain_id, - storage, - wal_directory, - p2p_client, + main_storage, + p2p_consensus_client, p2p_event_rx, + wal_directory, data_directory, + gas_price_provider, + verify_tree_hashes, + compiler_resource_limits, + blockifier_libfuncs, inject_failure_config, ) } - -#[cfg(not(feature = "p2p"))] -mod inner { - use super::*; - - #[allow(clippy::too_many_arguments)] - pub fn start( - _: ConsensusConfig, - _: ChainId, - _: Storage, - _: PathBuf, - _: Client, - _: mpsc::UnboundedReceiver, - _: &Path, - _: Option, - ) -> ConsensusTaskHandles { - ConsensusTaskHandles::pending() - } -} diff --git a/crates/pathfinder/src/consensus/inner.rs b/crates/pathfinder/src/consensus/inner.rs index 1b54ca503e..8042be3bbf 100644 --- a/crates/pathfinder/src/consensus/inner.rs +++ b/crates/pathfinder/src/consensus/inner.rs @@ -1,43 +1,56 @@ mod batch_execution; mod consensus_task; -mod conv; -mod dto; mod fetch_proposers; mod fetch_validators; +mod gossip_retry; mod integration_testing; mod p2p_task; -mod persist_proposals; +mod proposal_validator; -#[cfg(test)] -mod test_helpers; +mod dummy_proposal; -use std::num::NonZeroU32; +use std::collections::HashMap; use std::path::{Path, PathBuf}; +use std::time::SystemTime; -use anyhow::Context; -use p2p::consensus::{Client, Event, HeightAndRound}; +use p2p::consensus::{Event, HeightAndRound}; use p2p_proto::consensus::ProposalPart; -use pathfinder_common::{ChainId, ContractAddress, ProposalCommitment}; +use pathfinder_common::{ + consensus_info, + BlockNumber, + BlockTimestamp, + ChainId, + ConsensusFinalizedBlockHeader, + ConsensusFinalizedL2Block, + ContractAddress, + ProposalCommitment, + StarknetVersion, +}; use pathfinder_consensus::{ConsensusCommand, ConsensusEvent, NetworkMessage}; -use pathfinder_storage::pruning::BlockchainHistoryMode; -use pathfinder_storage::{JournalMode, Storage, TriePruneMode}; +use pathfinder_gas_price::L1GasPriceProvider; +use pathfinder_storage::Storage; use serde::{Deserialize, Serialize}; use tokio::sync::{mpsc, watch}; -use super::ConsensusTaskHandles; +use super::{ConsensusChannels, ConsensusTaskHandles}; use crate::config::integration_testing::InjectFailureConfig; use crate::config::ConsensusConfig; -use crate::validator::FinalizedBlock; +use crate::SyncMessageToConsensus; #[allow(clippy::too_many_arguments)] pub fn start( config: ConsensusConfig, chain_id: ChainId, - storage: Storage, - wal_directory: PathBuf, - p2p_client: Client, + is_l3: bool, + main_storage: Storage, + p2p_consensus_client: p2p::consensus::Client, p2p_event_rx: mpsc::UnboundedReceiver, + wal_directory: PathBuf, data_directory: &Path, + gas_price_provider: Option, + verify_tree_hashes: bool, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, inject_failure_config: Option, ) -> ConsensusTaskHandles { // Events that are produced by the P2P task and consumed by the consensus task. @@ -46,67 +59,56 @@ pub fn start( // Events that are produced by the consensus task and consumed by the P2P task. // TODO determine sufficient buffer size. 1 is not enough. let (tx_to_p2p, rx_from_consensus) = mpsc::channel::(10); + // Requests sent to consensus by the sync task. + let (sync_to_consensus_tx, sync_to_consensus_rx) = mpsc::channel::(10); - let consensus_storage = - open_consensus_storage(data_directory).expect("Consensus storage cannot be opened"); + let (info_watch_tx, consensus_info_watch) = + watch::channel(consensus_info::ConsensusInfo::default()); + let finalized_blocks = HashMap::new(); - let consensus_p2p_event_processing_handle = p2p_task::spawn( + let (consensus_p2p_event_processing_handle, worker_pool) = p2p_task::spawn( chain_id, - (&config).into(), - p2p_client, - storage.clone(), + P2PTaskConfig::from_consensus_config(&config, is_l3), + p2p_consensus_client, p2p_event_rx, tx_to_consensus, rx_from_consensus, - consensus_storage.clone(), + sync_to_consensus_rx, + info_watch_tx, + main_storage.clone(), + finalized_blocks, data_directory, + compiler_resource_limits, + blockifier_libfuncs, + verify_tree_hashes, + gas_price_provider, inject_failure_config, ); - let (info_watch_tx, consensus_info_watch) = watch::channel(None); - let consensus_engine_handle = consensus_task::spawn( chain_id, config, wal_directory, tx_to_p2p, rx_from_p2p, - info_watch_tx, - consensus_storage, - storage, + main_storage, data_directory, + compiler_resource_limits, + blockifier_libfuncs, inject_failure_config, ); ConsensusTaskHandles { consensus_p2p_event_processing_handle, consensus_engine_handle, - consensus_info_watch: Some(consensus_info_watch), + consensus_channels: Some(ConsensusChannels { + consensus_info_watch, + sync_to_consensus_tx, + }), + worker_pool: Some(worker_pool), } } -fn open_consensus_storage(data_directory: &Path) -> anyhow::Result { - let storage_manager = - pathfinder_storage::StorageBuilder::file(data_directory.join("consensus.sqlite")) // TODO: https://github.com/eqlabs/pathfinder/issues/3047 - .journal_mode(JournalMode::WAL) - .trie_prune_mode(Some(TriePruneMode::Archive)) - .blockchain_history_mode(Some(BlockchainHistoryMode::Archive)) - .migrate()?; - let available_parallelism = std::thread::available_parallelism()?; - let consensus_storage = storage_manager - .create_pool(NonZeroU32::new(5 + available_parallelism.get() as u32).unwrap())?; - let mut db_conn = consensus_storage - .connection() - .context("Creating database connection")?; - let db_tx = db_conn - .transaction() - .context("Creating database transaction")?; - db_tx.ensure_consensus_proposals_table_exists()?; - db_tx.ensure_consensus_finalized_blocks_table_exists()?; - db_tx.commit()?; - Ok(consensus_storage) -} - /// Events handled by the consensus task. enum ConsensusTaskEvent { /// The consensus engine informs us about an event that it wants us to @@ -123,27 +125,33 @@ enum P2PTaskEvent { /// An event coming from the P2P network (from the consensus P2P network /// main loop). P2PEvent(Event), + /// A request coming from the sync task. + SyncRequest(SyncMessageToConsensus), /// The consensus engine requested that we produce a proposal, so we /// create it, feed it back to the consensus engine, and we must /// cache it for gossiping when the engine requests so. - CacheProposal(HeightAndRound, Vec, FinalizedBlock), + CacheProposal(HeightAndRound, Vec, ConsensusFinalizedL2Block), /// Consensus requested that we gossip a message via the P2P network. GossipRequest(NetworkMessage), - /// Commit the given block and state update to the database. All proposals - /// for this height are removed from the cache. - CommitBlock(HeightAndRound, ConsensusValue), + /// Indicate that the given block and state update can be committed to the + /// database. All proposals for this height are removed from the cache. All + /// other consensus finalized blocks for lower rounds at this height are + /// discarded. + MarkBlockAsDecidedAndCleanUp(HeightAndRound, ConsensusValue), } #[derive(Copy, Clone, Debug)] struct P2PTaskConfig { my_validator_address: ContractAddress, + is_l3: bool, history_depth: u64, } -impl From<&ConsensusConfig> for P2PTaskConfig { - fn from(config: &ConsensusConfig) -> Self { +impl P2PTaskConfig { + fn from_consensus_config(config: &ConsensusConfig, is_l3: bool) -> Self { Self { my_validator_address: config.my_validator_address, + is_l3, history_depth: config.history_depth, } } @@ -170,3 +178,33 @@ impl HeightExt for NetworkMessage { } } } + +/// Creates an empty finalized L2 block for the given height. +/// +/// TODO: The consensus spec does not define this for empty proposals. However, +/// the validator logic and storage usage patterns currently require a finalized +/// block to be created even for empty proposals. For now, we create a (mostly) +/// default block header with the necessary fields filled in. +/// +/// NOTE: Until timestamps become part of an empty proposal, disseminating an +/// empty proposal will cause timestamp discrepancies between nodes and +/// validation errors. +pub(crate) fn create_empty_block(height: u64) -> ConsensusFinalizedL2Block { + let timestamp = SystemTime::now() + .duration_since(SystemTime::UNIX_EPOCH) + .unwrap_or_default() + .as_secs(); + + // The only version handled by consensus, so far + let starknet_version = StarknetVersion::new(0, 14, 0, 0); + + ConsensusFinalizedL2Block { + header: ConsensusFinalizedBlockHeader { + number: BlockNumber::new_or_panic(height), + timestamp: BlockTimestamp::new_or_panic(timestamp), + starknet_version, + ..Default::default() + }, + ..Default::default() + } +} diff --git a/crates/pathfinder/src/consensus/inner/batch_execution.rs b/crates/pathfinder/src/consensus/inner/batch_execution.rs index 2767bb5f51..8d4524ec8b 100644 --- a/crates/pathfinder/src/consensus/inner/batch_execution.rs +++ b/crates/pathfinder/src/consensus/inner/batch_execution.rs @@ -1,38 +1,64 @@ -//! Batch execution manager with rollback support for TransactionsFin +//! Batch execution manager with rollback support for ExecutedTransactionCount //! //! This module provides functionality to handle optimistic execution of -//! transaction batches with the ability to rollback when TransactionsFin -//! indicates fewer transactions were actually executed by the proposer. +//! transaction batches with the ability to rollback when +//! ExecutedTransactionCount indicates fewer transactions were actually executed +//! by the proposer. use std::collections::{HashMap, HashSet}; use anyhow::Context; use p2p::consensus::HeightAndRound; use p2p_proto::consensus as proto_consensus; -use pathfinder_common::{BlockId, BlockNumber}; -use pathfinder_storage::Transaction as DbTransaction; - -use crate::validator::ValidatorTransactionBatchStage; - -/// Manages batch execution with rollback support for TransactionsFin -#[derive(Debug, Clone)] +use pathfinder_common::DecidedBlocks; +use pathfinder_gas_price::{L1GasPriceProvider, L2GasPriceProvider}; +use pathfinder_storage::Storage; +use pathfinder_validator::error::ProposalHandlingError; +use pathfinder_validator::{ + should_defer_validation, + TransactionExt, + ValidatorStage, + ValidatorTransactionBatchStage, + ValidatorWorkerPool, +}; + +/// Manages batch execution with rollback support for ExecutedTransactionCount +#[derive(Clone)] pub struct BatchExecutionManager { /// Tracks which proposals (height/round) have started execution. /// An entry exists here if at least one batch has been executed (not /// deferred). executing: HashSet, - /// Tracks which proposals (height/round) have had TransactionsFin - /// processed. An entry exists here if TransactionsFin has been + /// Tracks which proposals (height/round) have had ExecutedTransactionCount + /// processed. An entry exists here if ExecutedTransactionCount has been /// successfully processed for this height/round. - transactions_fin_processed: HashSet, + executed_transaction_count_processed: HashSet, + /// Gas price provider for block info validation. + gas_price_provider: Option, + l2_gas_price_provider: Option, + /// Worker pool for concurrent execution. + worker_pool: ValidatorWorkerPool, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, } impl BatchExecutionManager { /// Create a new batch execution manager - pub fn new() -> Self { + pub fn new( + gas_price_provider: Option, + l2_gas_price_provider: Option, + worker_pool: ValidatorWorkerPool, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, + ) -> Self { Self { executing: HashSet::new(), - transactions_fin_processed: HashSet::new(), + executed_transaction_count_processed: HashSet::new(), + gas_price_provider, + l2_gas_price_provider, + worker_pool, + compiler_resource_limits, + blockifier_libfuncs, } } @@ -44,44 +70,68 @@ impl BatchExecutionManager { self.executing.contains(height_and_round) } - /// Check if TransactionsFin has been processed for the given height and - /// round + /// Check if ExecutedTransactionCount has been processed for the given + /// height and round /// - /// Returns `true` if TransactionsFin has been successfully processed - /// for this height/round. - pub fn is_transactions_fin_processed(&self, height_and_round: &HeightAndRound) -> bool { - self.transactions_fin_processed.contains(height_and_round) + /// Returns `true` if ExecutedTransactionCount has been successfully + /// processed for this height/round. + pub fn is_executed_transaction_count_processed( + &self, + height_and_round: &HeightAndRound, + ) -> bool { + self.executed_transaction_count_processed + .contains(height_and_round) } /// Check if ProposalFin should be deferred for the given height and round /// /// ProposalFin should be deferred if execution has started but - /// TransactionsFin hasn't been processed yet. This ensures that we - /// don't finalize a proposal before we know the final transaction - /// count. + /// ExecutedTransactionCount hasn't been processed yet. This ensures that we + /// don't finalize a proposal before we know the final transaction count. /// /// Note: This is in its own method to prevent drift with tests. pub fn should_defer_proposal_fin(&self, height_and_round: &HeightAndRound) -> bool { - self.is_executing(height_and_round) && !self.is_transactions_fin_processed(height_and_round) + self.is_executing(height_and_round) + && !self.is_executed_transaction_count_processed(height_and_round) } /// Process a transaction batch with deferral support /// /// This is the main method that should be used by the P2P task - pub fn process_batch_with_deferral( + pub fn process_batch_with_deferral( &mut self, height_and_round: HeightAndRound, transactions: Vec, - validator: &mut ValidatorTransactionBatchStage, - db_tx: &DbTransaction<'_>, + validator_stage: ValidatorStage, + main_db: Storage, + decided_blocks: DecidedBlocks, deferred_executions: &mut HashMap, - ) -> anyhow::Result<()> { + ) -> Result { + let mut main_db_conn = main_db + .connection() + .context("Creating database connection for batch execution with deferral") + .map_err(ProposalHandlingError::Fatal)?; + let main_db_tx = main_db_conn + .transaction() + .context("Creating database transaction for batch execution with deferral") + .map_err(ProposalHandlingError::Fatal)?; // Check if execution should be deferred - if should_defer_execution(height_and_round, db_tx)? { + if should_defer_validation( + height_and_round.height(), + decided_blocks.clone(), + &main_db_tx, + )? { tracing::debug!( "🖧 ⚙️ transaction batch execution for height and round {height_and_round} is \ deferred" ); + assert!( + deferred_executions + .get(&height_and_round) + .is_some_and(|dex| dex.block_info.is_some()), + "If TransactionBatch execution is deferred, a BlockInfo must have been added too \ + (because it arrives first according to message order)" + ); // Defer execution - add to deferred_executions deferred_executions @@ -89,27 +139,58 @@ impl BatchExecutionManager { .or_default() .transactions .extend(transactions); - return Ok(()); + return Ok(validator_stage); } - // Execute any previously deferred transactions first let deferred = deferred_executions.remove(&height_and_round); + + // Execute any previously deferred transactions first let deferred_txns_len = deferred.as_ref().map_or(0, |d| d.transactions.len()); - let deferred_transactions_fin = deferred.as_ref().and_then(|d| d.transactions_fin.clone()); + let deferred_executed_transaction_count = + deferred.as_ref().and_then(|d| d.executed_transaction_count); let mut all_transactions = transactions; - if let Some(DeferredExecution { - transactions: deferred_txns, + let mut validator = if let Some(DeferredExecution { + transactions: mut deferred_txns, + block_info: deferred_block_info, .. }) = deferred { - all_transactions.extend(deferred_txns); - } + // Deferred transactions arrived first, so they should be executed first. + // Prepend them to the new transactions. + deferred_txns.extend(all_transactions); + all_transactions = deferred_txns; + if let Some(block_info) = deferred_block_info { + validator_stage + .try_into_block_info_stage() + .map_err(|e| ProposalHandlingError::Recoverable(e.into()))? + .validate_block_info( + block_info, + main_db.clone(), + decided_blocks, + self.gas_price_provider.clone(), + None, // TODO: Add L1ToFriValidator when oracle is available + self.l2_gas_price_provider.as_ref(), + self.worker_pool.clone(), + ) + .map(Box::new)? + } else { + validator_stage + .try_into_transaction_batch_stage() + .map_err(|e| ProposalHandlingError::Recoverable(e.into()))? + } + } else { + validator_stage + .try_into_transaction_batch_stage() + .map_err(|e| ProposalHandlingError::Recoverable(e.into()))? + }; // Execute the batch - validator - .execute_batch(all_transactions) - .context("Failed to execute transaction batch")?; + validator.execute_batch::( + all_transactions, + self.compiler_resource_limits, + self.blockifier_libfuncs, + )?; // Mark that execution has started for this height/round self.executing.insert(height_and_round); @@ -119,22 +200,27 @@ impl BatchExecutionManager { additionally {deferred_txns_len} previously deferred transactions were executed", ); - // If TransactionsFin was deferred (arrived before execution started, e.g., - // because batches were deferred), process it now that execution has - // started. + // If ExecutedTransactionCount was deferred (arrived before execution started, + // e.g., because batches were deferred), process it now that execution + // has started. // Assuming message ordering is guaranteed... // (see p2p::consensus::handle_incoming_proposal_message) - // ...if TransactionsFin is deferred, all batches are also in the deferred - // entry, so we can safely process TransactionsFin here. - if let Some(transactions_fin) = deferred_transactions_fin { + // ...if ExecutedTransactionCount is deferred, all batches are also in the + // deferred entry, so we can safely process ExecutedTransactionCount + // here. + if let Some(executed_txn_count) = deferred_executed_transaction_count { tracing::debug!( - "Processing deferred TransactionsFin for {height_and_round} after batch execution \ - started" + "Processing deferred ExecutedTransactionCount for {height_and_round} after batch \ + execution started" ); - self.process_transactions_fin(height_and_round, transactions_fin, validator)?; + self.process_executed_transaction_count::( + height_and_round, + executed_txn_count, + &mut validator, + )?; } - Ok(()) + Ok(ValidatorStage::TransactionBatch(validator)) } /// Execute a batch of transactions and track execution state @@ -143,15 +229,15 @@ impl BatchExecutionManager { /// know execution should proceed immediately (e.g., when executing /// previously deferred transactions after the parent block is /// committed). - pub fn execute_batch( + pub fn execute_batch( &mut self, height_and_round: HeightAndRound, transactions: Vec, validator: &mut ValidatorTransactionBatchStage, - ) -> anyhow::Result<()> { + ) -> Result<(), ProposalHandlingError> { // Mark that execution has started for this height/round, even if batch is - // empty. This is necessary because TransactionsFin may arrive later and - // requires execution to have started. + // empty. This is necessary because ExecutedTransactionCount may arrive later + // and requires execution to have started. self.executing.insert(height_and_round); if transactions.is_empty() { @@ -163,9 +249,11 @@ impl BatchExecutionManager { } // Execute the batch - validator - .execute_batch(transactions) - .context("Failed to execute transaction batch")?; + validator.execute_batch::( + transactions, + self.compiler_resource_limits, + self.blockifier_libfuncs, + )?; tracing::debug!( "Transaction batch execution for height and round {height_and_round} is complete" @@ -174,32 +262,32 @@ impl BatchExecutionManager { Ok(()) } - /// Process TransactionsFin message + /// Process ExecutedTransactionCount message /// - /// Processes TransactionsFin immediately with rollback support. Assumes - /// execution has already started (at least one batch executed). If - /// transactions are deferred, deferral should be handled by the caller - /// before calling this function. - pub fn process_transactions_fin( + /// Processes ExecutedTransactionCount immediately with rollback support. + /// Assumes execution has already started (at least one batch executed). + /// If transactions are deferred, deferral should be handled by the + /// caller before calling this function. + pub fn process_executed_transaction_count( &mut self, height_and_round: HeightAndRound, - transactions_fin: proto_consensus::TransactionsFin, + executed_transaction_count: u64, validator: &mut ValidatorTransactionBatchStage, - ) -> anyhow::Result<()> { + ) -> Result<(), ProposalHandlingError> { // Verify that execution has started (at least one batch was executed, not // deferred) if !self.executing.contains(&height_and_round) { - return Err(anyhow::anyhow!( + return Err(ProposalHandlingError::Fatal(anyhow::anyhow!( "No execution state found for {height_and_round}. Execution should have started \ - before processing TransactionsFin." - )); + before processing ExecutedTransactionCount." + ))); } - let target_transaction_count = transactions_fin.executed_transaction_count as usize; + let target_transaction_count = executed_transaction_count as usize; let current_transaction_count = validator.transaction_count(); tracing::debug!( - "Processing TransactionsFin for {height_and_round}: \ + "Processing ExecutedTransactionCount for {height_and_round}: \ target={target_transaction_count}, current={current_transaction_count}" ); @@ -209,36 +297,30 @@ impl BatchExecutionManager { current_transaction_count, target_transaction_count ); - - // Roll back to the target transaction count - // Note: rollback_to_transaction takes a 0-based index, but - // executed_transaction_count is a count. To keep N transactions, - // we need to rollback to index N-1 (which keeps transactions 0 through N-1). - let target_index = target_transaction_count - .checked_sub(1) - .context("Cannot rollback to 0 transactions")?; - validator - .rollback_to_transaction(target_index) - .context("Failed to rollback to target transaction count")?; + validator.rollback_to_transaction::(target_transaction_count)?; } else if target_transaction_count > current_transaction_count { // This shouldn't happen with proper message ordering and no protocol errors. // Ordering is guaranteed by p2p::consensus::handle_incoming_proposal_message. - // TransactionsFin should arrive after all TransactionBatches, so we should have - // at least as many transactions as TransactionsFin indicates. + // ExecutedTransactionCount should arrive after all TransactionBatches, so we + // should have at least as many transactions as + // ExecutedTransactionCount indicates. tracing::warn!( - "TransactionsFin for {height_and_round} indicates {} transactions, but we only \ - have {} transactions. This may indicate a protocol violation or missing batches.", + "ExecutedTransactionCount for {height_and_round} indicates {} transactions, but \ + we only have {} transactions. This may indicate a protocol violation or missing \ + batches.", target_transaction_count, current_transaction_count ); } + let final_transaction_count = validator.transaction_count(); tracing::info!( - "Finalized {height_and_round} with {target_transaction_count} executed transactions" + "Finalized {height_and_round} with {final_transaction_count} executed transactions" ); - // Mark TransactionsFin as processed for this height/round - self.transactions_fin_processed.insert(height_and_round); + // Mark ExecutedTransactionCount as processed for this height/round + self.executed_transaction_count_processed + .insert(height_and_round); Ok(()) } @@ -246,29 +328,26 @@ impl BatchExecutionManager { /// Clean up completed executions pub fn cleanup(&mut self, height_and_round: &HeightAndRound) { let had_execution = self.executing.remove(height_and_round); - let had_transactions_fin = self.transactions_fin_processed.remove(height_and_round); + let had_transactions_fin = self + .executed_transaction_count_processed + .remove(height_and_round); if had_execution || had_transactions_fin { tracing::debug!("Cleaned up execution state for {height_and_round}"); } } } -impl Default for BatchExecutionManager { - fn default() -> Self { - Self::new() - } -} - /// Represents transactions received from the network that are waiting for /// previous block to be committed before they can be executed. Also holds /// optional proposal commitment and proposer address in case that the entire -/// proposal has been received. May also store TransactionsFin if it arrives -/// while transactions are deferred. +/// proposal has been received. May also store ExecutedTransactionCount if it +/// arrives while transactions are deferred. #[derive(Debug, Clone, Default)] pub struct DeferredExecution { + pub block_info: Option, pub transactions: Vec, pub commitment: Option, - pub transactions_fin: Option, + pub executed_transaction_count: Option, } /// Proposal commitment and the address of its proposer. @@ -289,37 +368,34 @@ impl Default for ProposalCommitmentWithOrigin { } } -/// Determine whether execution of proposal parts for `height_and_round` should -/// be deferred because the previous block is not committed yet. -pub fn should_defer_execution( - height_and_round: HeightAndRound, - db_tx: &DbTransaction<'_>, -) -> anyhow::Result { - let parent_block = height_and_round.height().checked_sub(1); - let defer = if let Some(parent_block) = parent_block { - let parent_block = - BlockNumber::new(parent_block).context("Block number is larger than i64::MAX")?; - let parent_block = BlockId::Number(parent_block); - let parent_committed = db_tx.block_exists(parent_block)?; - !parent_committed - } else { - false - }; - Ok(defer) -} - #[cfg(test)] mod tests { + use std::sync::Arc; + + use p2p::consensus::HeightAndRound; + use pathfinder_common::prelude::*; + use pathfinder_common::BlockId; use pathfinder_crypto::Felt; + use pathfinder_executor::{ConcurrentStateReader, ExecutorWorkerPool}; + use pathfinder_storage::StorageBuilder; + use pathfinder_validator::{ProdTransactionMapper, ValidatorBlockInfoStage}; use super::*; + use crate::consensus::inner::dummy_proposal::{ + create_test_proposal_init, + create_transaction_batch, + }; + + /// Creates a worker pool for tests. + fn create_test_worker_pool() -> ValidatorWorkerPool { + ExecutorWorkerPool::::new(1).get() + } /// Helper function to create a committed parent block in storage fn create_committed_parent_block( storage: &pathfinder_storage::Storage, parent_height: u64, ) -> anyhow::Result<()> { - use pathfinder_common::prelude::*; let mut db_conn = storage.connection()?; let db_tx = db_conn.transaction()?; let block_id = BlockId::Number(BlockNumber::new_or_panic(parent_height)); @@ -342,75 +418,60 @@ mod tests { Ok(()) } - /// Helper function to create BlockInfo for tests - fn create_test_block_info(number: u64) -> pathfinder_executor::types::BlockInfo { - use pathfinder_common::{ - BlockNumber, - BlockTimestamp, - GasPrice, - L1DataAvailabilityMode, - SequencerAddress, - StarknetVersion, + fn create_test_proposal( + height: u64, + ) -> ( + p2p_proto::consensus::ProposalInit, + p2p_proto::consensus::BlockInfo, + ) { + let init = p2p_proto::consensus::ProposalInit { + height, + round: 1, + valid_round: None, + proposer: p2p_proto::common::Address::default(), }; - pathfinder_executor::types::BlockInfo { - number: BlockNumber::new_or_panic(number), - timestamp: BlockTimestamp::new_or_panic(1000), - sequencer_address: SequencerAddress::ZERO, - l1_da_mode: L1DataAvailabilityMode::Calldata, - eth_l1_gas_price: GasPrice::ZERO, - strk_l1_gas_price: GasPrice::ZERO, - eth_l1_data_gas_price: GasPrice::ZERO, - strk_l1_data_gas_price: GasPrice::ZERO, - strk_l2_gas_price: GasPrice::ZERO, - eth_l2_gas_price: GasPrice::ZERO, - starknet_version: StarknetVersion::new(0, 14, 0, 0), - } + let block_info = p2p_proto::consensus::BlockInfo { + height, + timestamp: 1000, + builder: p2p_proto::common::Address::default(), + l1_da_mode: p2p_proto::common::L1DataAvailabilityMode::Calldata, + l2_gas_price_fri: 0, + l1_gas_price_wei: 0, + l1_data_gas_price_wei: 0, + l1_gas_price_fri: 0, + l1_data_gas_price_fri: 0, + }; + (init, block_info) } /// Test that BatchExecutionManager correctly tracks execution state and - /// TransactionsFin processing. This verifies the tracking methods that - /// are used by defer_or_execute_proposal_fin to determine - /// whether ProposalFin should be deferred. + /// ExecutedTransactionCount processing. This verifies the tracking methods + /// that are used by defer_or_execute_proposal_fin to determine whether + /// ProposalFin should be deferred. #[tokio::test] async fn test_execution_state_tracking() { - use p2p::consensus::HeightAndRound; - use p2p_proto::consensus::TransactionsFin; - use pathfinder_common::{ - BlockNumber, - BlockTimestamp, - ChainId, - GasPrice, - L1DataAvailabilityMode, - SequencerAddress, - StarknetVersion, - }; - use pathfinder_executor::types::BlockInfo; - use pathfinder_storage::StorageBuilder; - - use crate::consensus::inner::test_helpers::create_transaction_batch; - let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); let chain_id = ChainId::SEPOLIA_TESTNET; - - let block_info = BlockInfo { - number: BlockNumber::new_or_panic(1), - timestamp: BlockTimestamp::new_or_panic(1000), - sequencer_address: SequencerAddress::ZERO, - l1_da_mode: L1DataAvailabilityMode::Calldata, - eth_l1_gas_price: GasPrice::ZERO, - strk_l1_gas_price: GasPrice::ZERO, - eth_l1_data_gas_price: GasPrice::ZERO, - strk_l1_data_gas_price: GasPrice::ZERO, - strk_l2_gas_price: GasPrice::ZERO, - eth_l2_gas_price: GasPrice::ZERO, - starknet_version: StarknetVersion::new(0, 14, 0, 0), - }; - - let mut validator_stage = - ValidatorTransactionBatchStage::new(chain_id, block_info, storage) - .expect("Failed to create validator stage"); - - let mut batch_execution_manager = BatchExecutionManager::new(); + let worker_pool = create_test_worker_pool(); + let (proposal_init, block_info) = create_test_proposal(1); + + let mut validator_stage = ValidatorBlockInfoStage::new(chain_id, proposal_init) + .and_then(|v| { + v.skip_validation( + block_info, + storage, + Arc::clone(&worker_pool), + DecidedBlocks::default(), + ) + }) + .expect("Failed to create validator stage"); + let mut batch_execution_manager = BatchExecutionManager::new( + None, + None, + worker_pool, + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), + ); let height_and_round = HeightAndRound::new(2, 1); // Initially, execution should not have started @@ -419,14 +480,18 @@ mod tests { "Execution should not have started initially" ); assert!( - !batch_execution_manager.is_transactions_fin_processed(&height_and_round), - "TransactionsFin should not be processed initially" + !batch_execution_manager.is_executed_transaction_count_processed(&height_and_round), + "ExecutedTransactionCount should not be processed initially" ); // Execute a batch to start execution - let transactions = create_transaction_batch(0, 5, chain_id); + let transactions = create_transaction_batch(0, 0, 5, chain_id); batch_execution_manager - .execute_batch(height_and_round, transactions, &mut validator_stage) + .execute_batch::( + height_and_round, + transactions, + &mut validator_stage, + ) .expect("Failed to execute batch"); // Verify execution has started @@ -435,62 +500,47 @@ mod tests { "Execution should have started after execute_batch" ); - // Verify TransactionsFin has NOT been processed yet + // Verify ExecutedTransactionCount has NOT been processed yet assert!( - !batch_execution_manager.is_transactions_fin_processed(&height_and_round), - "TransactionsFin should not be processed yet" + !batch_execution_manager.is_executed_transaction_count_processed(&height_and_round), + "ExecutedTransactionCount should not be processed yet" ); // Verify that ProposalFin should be deferred assert!( batch_execution_manager.should_defer_proposal_fin(&height_and_round), - "ProposalFin should be deferred when execution started but TransactionsFin not \ - processed" + "ProposalFin should be deferred when execution started but ExecutedTransactionCount \ + not processed" ); - // Now process TransactionsFin - let transactions_fin = TransactionsFin { - executed_transaction_count: 5, - }; + // Now process ExecutedTransactionCount + let executed_transaction_count = 5; batch_execution_manager - .process_transactions_fin(height_and_round, transactions_fin, &mut validator_stage) - .expect("Failed to process TransactionsFin"); + .process_executed_transaction_count::( + height_and_round, + executed_transaction_count, + &mut validator_stage, + ) + .expect("Failed to process ExecutedTransactionCount"); - // Verify TransactionsFin is now marked as processed + // Verify ExecutedTransactionCount is now marked as processed assert!( - batch_execution_manager.is_transactions_fin_processed(&height_and_round), - "TransactionsFin should be marked as processed after process_transactions_fin" + batch_execution_manager.is_executed_transaction_count_processed(&height_and_round), + "ExecutedTransactionCount should be marked as processed after process_transactions_fin" ); // Now ProposalFin should NOT be deferred assert!( !batch_execution_manager.should_defer_proposal_fin(&height_and_round), - "ProposalFin should NOT be deferred after TransactionsFin is processed" + "ProposalFin should NOT be deferred after ExecutedTransactionCount is processed" ); } - /// Test that TransactionsFin arriving before any TransactionBatch is - /// handled gracefully. TransactionsFin should be stored in deferred entry - /// even if no batches have been deferred yet. + /// Test that ExecutedTransactionCount arriving before any TransactionBatch + /// is handled gracefully. ExecutedTransactionCount should be stored in + /// deferred entry even if no batches have been deferred yet. #[tokio::test] - async fn test_transactions_fin_before_any_batch() { - use p2p::consensus::HeightAndRound; - use p2p_proto::consensus::TransactionsFin; - use pathfinder_common::prelude::*; - use pathfinder_common::{ - BlockNumber, - BlockTimestamp, - ChainId, - GasPrice, - L1DataAvailabilityMode, - SequencerAddress, - StarknetVersion, - }; - use pathfinder_executor::types::BlockInfo; - use pathfinder_storage::StorageBuilder; - - use crate::consensus::inner::test_helpers::create_transaction_batch; - + async fn test_executed_transaction_count_before_any_batch() { let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); let chain_id = ChainId::SEPOLIA_TESTNET; @@ -511,26 +561,35 @@ mod tests { db_tx.commit().unwrap(); } - let block_info = BlockInfo { - number: BlockNumber::new_or_panic(1), - timestamp: BlockTimestamp::new_or_panic(1000), - sequencer_address: SequencerAddress::ZERO, - l1_da_mode: L1DataAvailabilityMode::Calldata, - eth_l1_gas_price: GasPrice::ZERO, - strk_l1_gas_price: GasPrice::ZERO, - eth_l1_data_gas_price: GasPrice::ZERO, - strk_l1_data_gas_price: GasPrice::ZERO, - strk_l2_gas_price: GasPrice::ZERO, - eth_l2_gas_price: GasPrice::ZERO, - starknet_version: StarknetVersion::new(0, 14, 0, 0), + let height_and_round = HeightAndRound::new(2, 1); + let proposer_address = p2p_proto::common::Address(Felt::from_hex_str("0x456").unwrap()); + let proposal_init = proto_consensus::ProposalInit { + height: height_and_round.height(), + round: height_and_round.round(), + valid_round: None, + proposer: proposer_address, + }; + let proposal_block_info = proto_consensus::BlockInfo { + height: height_and_round.height(), + timestamp: 2000, + builder: proposer_address, + l1_da_mode: p2p_proto::common::L1DataAvailabilityMode::Calldata, + l2_gas_price_fri: 0, + l1_gas_price_fri: 0, + l1_data_gas_price_fri: 0, + l1_gas_price_wei: 0, + l1_data_gas_price_wei: 0, }; - let mut validator_stage = - ValidatorTransactionBatchStage::new(chain_id, block_info, storage.clone()) - .expect("Failed to create validator stage"); + let worker_pool = create_test_worker_pool(); + let mut batch_execution_manager = BatchExecutionManager::new( + None, + None, + worker_pool, + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), + ); - let mut batch_execution_manager = BatchExecutionManager::new(); - let height_and_round = HeightAndRound::new(2, 1); let mut deferred_executions: std::collections::HashMap = std::collections::HashMap::new(); @@ -544,38 +603,50 @@ mod tests { "No deferred entry should exist initially" ); - // Step 1: TransactionsFin arrives when execution hasn't started yet - // (Note: With P2P message ordering guarantees, TransactionsFin will always - // arrive after all TransactionBatches, but execution may not have started - // if batches were deferred. This test simulates the case where TransactionsFin - // arrives before execution starts, e.g., because batches were deferred.) - let transactions_fin = TransactionsFin { - executed_transaction_count: 5, - }; - - // Simulate the fix: create deferred entry and store TransactionsFin + // Step 1: ExecutedTransactionCount arrives when execution hasn't started yet + // (Note: With P2P message ordering guarantees, ExecutedTransactionCount will + // always arrive after all TransactionBatches, but execution may not have + // started if batches were deferred. This test simulates the case where + // ExecutedTransactionCount arrives before execution starts, e.g., because + // batches were deferred). + let executed_transaction_count = 5; + + // Simulate the fix: create deferred entry and store ExecutedTransactionCount. + // Also store BlockInfo because it should have arrived before any + // batches or ExecutedTransactionCount (according to message ordering). let deferred = deferred_executions.entry(height_and_round).or_default(); - deferred.transactions_fin = Some(transactions_fin.clone()); + deferred.block_info = Some(proposal_block_info); + deferred.executed_transaction_count = Some(executed_transaction_count); - // Verify TransactionsFin was stored + // Verify BlockInfo was stored assert!( deferred_executions .get(&height_and_round) - .and_then(|d| d.transactions_fin.as_ref()) + .is_some_and(|d| d.block_info.is_some()), + "BlockInfo should be stored in deferred entry" + ); + // Verify ExecutedTransactionCount was stored + assert!( + deferred_executions + .get(&height_and_round) + .and_then(|d| d.executed_transaction_count.as_ref()) .is_some(), - "TransactionsFin should be stored in deferred entry" + "ExecutedTransactionCount should be stored in deferred entry" ); + let validator_stage = ValidatorBlockInfoStage::new(chain_id, proposal_init) + .map(ValidatorStage::BlockInfo) + .expect("Failed to create validator stage"); + // Step 2: TransactionBatch arrives and executes - let transactions = create_transaction_batch(0, 5, chain_id); - let mut db_conn = storage.connection().unwrap(); - let db_tx = db_conn.transaction().unwrap(); - batch_execution_manager - .process_batch_with_deferral( + let transactions = create_transaction_batch(0, 0, 5, chain_id); + let next_stage = batch_execution_manager + .process_batch_with_deferral::( height_and_round, transactions, - &mut validator_stage, - &db_tx, + validator_stage, + storage.clone(), + DecidedBlocks::default(), &mut deferred_executions, ) .expect("Failed to process batch"); @@ -586,17 +657,19 @@ mod tests { "Execution should have started after batch execution" ); - // Verify TransactionsFin was processed (marked as processed) + // Verify ExecutedTransactionCount was processed (marked as processed) assert!( - batch_execution_manager.is_transactions_fin_processed(&height_and_round), - "TransactionsFin should be processed after batch execution" + batch_execution_manager.is_executed_transaction_count_processed(&height_and_round), + "ExecutedTransactionCount should be processed after batch execution" ); - // Verify validator state matches TransactionsFin count - assert_eq!( - validator_stage.transaction_count(), - 5, - "Validator should have 5 transactions matching TransactionsFin count" + // Verify validator state matches ExecutedTransactionCount count + assert!( + matches!( + next_stage, + ValidatorStage::TransactionBatch(stage) if stage.transaction_count() == 5 + ), + "Validator should have 5 transactions matching ExecutedTransactionCount" ); } @@ -608,37 +681,48 @@ mod tests { /// - multiple batches with mixed deferral #[tokio::test] async fn test_deferral_and_execution() { - use p2p::consensus::HeightAndRound; - use pathfinder_common::ChainId; - use pathfinder_storage::StorageBuilder; - - use crate::consensus::inner::test_helpers::create_transaction_batch; - let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); let chain_id = ChainId::SEPOLIA_TESTNET; - let block_info = create_test_block_info(1); - - let mut validator_stage = - ValidatorTransactionBatchStage::new(chain_id, block_info, storage.clone()) - .expect("Failed to create validator stage"); + let worker_pool = create_test_worker_pool(); - let mut batch_execution_manager = BatchExecutionManager::new(); let height_and_round = HeightAndRound::new(2, 1); + let proposer_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x456").unwrap()); + let (proposal_init, proposal_block_info) = create_test_proposal_init( + chain_id, + height_and_round.height(), + height_and_round.round(), + proposer_address, + ); + let validator_stage = ValidatorBlockInfoStage::new(chain_id, proposal_init) + .map(ValidatorStage::BlockInfo) + .expect("Failed to create validator stage"); + + let mut batch_execution_manager = BatchExecutionManager::new( + None, + None, + worker_pool.clone(), + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), + ); + let mut deferred_executions: std::collections::HashMap = std::collections::HashMap::new(); + deferred_executions + .entry(height_and_round) + .or_default() + .block_info = Some(proposal_block_info); // Test 1: Deferral when parent not committed - { - let mut db_conn = storage.connection().unwrap(); - let db_tx = db_conn.transaction().unwrap(); - let transactions = create_transaction_batch(0, 3, chain_id); + let next_stage = { + let transactions = create_transaction_batch(0, 0, 3, chain_id); - batch_execution_manager - .process_batch_with_deferral( + let next_stage = batch_execution_manager + .process_batch_with_deferral::( height_and_round, transactions, - &mut validator_stage, - &db_tx, + validator_stage, + storage.clone(), + DecidedBlocks::default(), &mut deferred_executions, ) .expect("Failed to process batch"); @@ -656,28 +740,31 @@ mod tests { == 3, "Deferred transactions should be stored" ); - assert_eq!( - validator_stage.transaction_count(), - 0, - "No transactions should be executed when deferred" + assert!( + matches!( + next_stage, + ValidatorStage::BlockInfo(ref block_info) if block_info.proposal_height() == height_and_round.height() + ), + "Validator stage should remain at BlockInfo stage after deferral" ); - } + + next_stage + }; // Test 2: Commit parent block and execute deferred batch // Create parent block at height 1 (required for height 2 to execute) create_committed_parent_block(&storage, 1).expect("Failed to create parent block"); { - let mut db_conn = storage.connection().unwrap(); - let db_tx = db_conn.transaction().unwrap(); - let transactions = create_transaction_batch(3, 2, chain_id); + let transactions = create_transaction_batch(0, 3, 2, chain_id); - batch_execution_manager - .process_batch_with_deferral( + let next_stage = batch_execution_manager + .process_batch_with_deferral::( height_and_round, transactions, - &mut validator_stage, - &db_tx, + next_stage, + storage.clone(), + DecidedBlocks::default(), &mut deferred_executions, ) .expect("Failed to process batch"); @@ -691,37 +778,46 @@ mod tests { !deferred_executions.contains_key(&height_and_round), "Deferred entry should be removed after execution" ); - assert_eq!( - validator_stage.transaction_count(), - 5, - "All transactions (3 deferred + 2 new) should be executed" + assert!( + matches!(next_stage, ValidatorStage::TransactionBatch(ref stage) if stage.transaction_count() == 5), + "Validator should transition to next stage and transactions (3 deferred + 2 new) \ + should be executed" ); } // Test 3: Multiple batches with immediate execution (parent already committed) + // Create a new worker pool for the second validator to avoid potential issues + // with the blockifier's ConcurrentTransactionExecutor and shared worker pools. + let worker_pool_2 = create_test_worker_pool(); let height_and_round_2 = HeightAndRound::new(3, 1); - let mut validator_stage_2 = ValidatorTransactionBatchStage::new( - chain_id, - create_test_block_info(2), - storage.clone(), - ) - .expect("Failed to create validator stage"); + let (proposal_init, block_info) = create_test_proposal(height_and_round_2.height()); + let validator_stage_2 = ValidatorBlockInfoStage::new(chain_id, proposal_init) + .and_then(|validator| { + validator.skip_validation( + block_info, + storage.clone(), + worker_pool_2.clone(), + DecidedBlocks::default(), + ) + }) + .map(Box::new) + .map(ValidatorStage::TransactionBatch) + .expect("Failed to create validator stage"); create_committed_parent_block(&storage, 2).expect("Failed to create parent block"); { - let mut db_conn = storage.connection().unwrap(); - let db_tx = db_conn.transaction().unwrap(); - + let mut next_stage = validator_stage_2; // Execute multiple batches for i in 0..3 { - let transactions = create_transaction_batch(i * 2, 2, chain_id); - batch_execution_manager - .process_batch_with_deferral( + let transactions = create_transaction_batch(0, i * 2, 2, chain_id); + next_stage = batch_execution_manager + .process_batch_with_deferral::( height_and_round_2, transactions, - &mut validator_stage_2, - &db_tx, + next_stage, + storage.clone(), + DecidedBlocks::default(), &mut deferred_executions, ) .expect("Failed to process batch"); @@ -731,69 +827,78 @@ mod tests { batch_execution_manager.is_executing(&height_and_round_2), "Execution should have started" ); - assert_eq!( - validator_stage_2.transaction_count(), - 6, + assert!( + matches!(next_stage, ValidatorStage::TransactionBatch(stage) if stage.transaction_count() == 6), "All batches should be executed immediately" ); } } - /// Test TransactionsFin processing with rollback support. + /// Test ExecutedTransactionCount processing with rollback support. #[tokio::test] - async fn test_transactions_fin_rollback() { - use p2p::consensus::HeightAndRound; - use p2p_proto::consensus::TransactionsFin; - use pathfinder_common::ChainId; - use pathfinder_storage::StorageBuilder; - - use crate::consensus::inner::test_helpers::create_transaction_batch; - + async fn test_executed_transaction_count_rollback() { let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); let chain_id = ChainId::SEPOLIA_TESTNET; - let block_info = create_test_block_info(1); - - let mut validator_stage = - ValidatorTransactionBatchStage::new(chain_id, block_info, storage.clone()) - .expect("Failed to create validator stage"); - - let mut batch_execution_manager = BatchExecutionManager::new(); + let worker_pool = create_test_worker_pool(); + let (proposal_init, block_info) = create_test_proposal(1); + + let mut validator_stage = ValidatorBlockInfoStage::new(chain_id, proposal_init) + .and_then(|v| { + v.skip_validation( + block_info, + storage, + Arc::clone(&worker_pool), + DecidedBlocks::default(), + ) + }) + .expect("Failed to create validator stage"); + + let mut batch_execution_manager = BatchExecutionManager::new( + None, + None, + worker_pool, + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), + ); let height_and_round = HeightAndRound::new(2, 1); // Execute multiple batches: 3 + 7 + 4 = 14 transactions total - let batch1 = create_transaction_batch(0, 3, chain_id); - let batch2 = create_transaction_batch(3, 7, chain_id); - let batch3 = create_transaction_batch(10, 4, chain_id); + let batch1 = create_transaction_batch(0, 0, 3, chain_id); + let batch2 = create_transaction_batch(0, 3, 7, chain_id); + let batch3 = create_transaction_batch(0, 10, 4, chain_id); batch_execution_manager - .execute_batch(height_and_round, batch1, &mut validator_stage) + .execute_batch::(height_and_round, batch1, &mut validator_stage) .expect("Failed to execute batch 1"); batch_execution_manager - .execute_batch(height_and_round, batch2, &mut validator_stage) + .execute_batch::(height_and_round, batch2, &mut validator_stage) .expect("Failed to execute batch 2"); batch_execution_manager - .execute_batch(height_and_round, batch3, &mut validator_stage) + .execute_batch::(height_and_round, batch3, &mut validator_stage) .expect("Failed to execute batch 3"); assert_eq!( validator_stage.transaction_count(), 14, - "Should have 14 transactions before TransactionsFin" + "Should have 14 transactions before ExecutedTransactionCount" ); - // Test 1: Normal case - no rollback (TransactionsFin matches current count) + // Test 1: Normal case - no rollback (ExecutedTransactionCount matches current + // count) { - let transactions_fin = TransactionsFin { - executed_transaction_count: 14, - }; + let executed_transaction_count = 14; batch_execution_manager - .process_transactions_fin(height_and_round, transactions_fin, &mut validator_stage) - .expect("Failed to process TransactionsFin"); + .process_executed_transaction_count::( + height_and_round, + executed_transaction_count, + &mut validator_stage, + ) + .expect("Failed to process ExecutedTransactionCount"); assert!( - batch_execution_manager.is_transactions_fin_processed(&height_and_round), - "TransactionsFin should be marked as processed" + batch_execution_manager.is_executed_transaction_count_processed(&height_and_round), + "ExecutedTransactionCount should be marked as processed" ); assert_eq!( validator_stage.transaction_count(), @@ -802,73 +907,104 @@ mod tests { ); } - // Test 2: Rollback case - TransactionsFin indicates fewer transactions + // Test 2: Rollback case - ExecutedTransactionCount indicates fewer transactions + // Create a new worker pool for the second validator to avoid issues with + // blockifier's ConcurrentTransactionExecutor and shared worker pools. + let worker_pool_2 = create_test_worker_pool(); + // Re-execute batches to get back to 14 transactions let storage_2 = StorageBuilder::in_tempdir().expect("Failed to create temp database"); - let mut validator_stage_2 = - ValidatorTransactionBatchStage::new(chain_id, create_test_block_info(1), storage_2) - .expect("Failed to create validator stage"); + let (proposal_init, block_info) = create_test_proposal(1); + let mut validator_stage_2 = ValidatorBlockInfoStage::new(chain_id, proposal_init) + .and_then(|validator| { + validator.skip_validation( + block_info, + storage_2, + worker_pool_2, + DecidedBlocks::default(), + ) + }) + .expect("Failed to create validator stage"); - let batch1_2 = create_transaction_batch(0, 3, chain_id); - let batch2_2 = create_transaction_batch(3, 7, chain_id); - let batch3_2 = create_transaction_batch(10, 4, chain_id); + let batch1_2 = create_transaction_batch(0, 0, 3, chain_id); + let batch2_2 = create_transaction_batch(0, 3, 7, chain_id); + let batch3_2 = create_transaction_batch(0, 10, 4, chain_id); let height_and_round_2 = HeightAndRound::new(3, 1); batch_execution_manager - .execute_batch(height_and_round_2, batch1_2, &mut validator_stage_2) + .execute_batch::( + height_and_round_2, + batch1_2, + &mut validator_stage_2, + ) .expect("Failed to execute batch 1"); batch_execution_manager - .execute_batch(height_and_round_2, batch2_2, &mut validator_stage_2) + .execute_batch::( + height_and_round_2, + batch2_2, + &mut validator_stage_2, + ) .expect("Failed to execute batch 2"); batch_execution_manager - .execute_batch(height_and_round_2, batch3_2, &mut validator_stage_2) + .execute_batch::( + height_and_round_2, + batch3_2, + &mut validator_stage_2, + ) .expect("Failed to execute batch 3"); - let transactions_fin_rollback = TransactionsFin { - executed_transaction_count: 7, // Rollback from 14 to 7 - }; + let executed_transaction_count = 7; // Rollback from 14 to 7 batch_execution_manager - .process_transactions_fin( + .process_executed_transaction_count::( height_and_round_2, - transactions_fin_rollback, + executed_transaction_count, &mut validator_stage_2, ) - .expect("Failed to process TransactionsFin with rollback"); + .expect("Failed to process ExecutedTransactionCount with rollback"); assert!( - batch_execution_manager.is_transactions_fin_processed(&height_and_round_2), - "TransactionsFin should be marked as processed after rollback" + batch_execution_manager.is_executed_transaction_count_processed(&height_and_round_2), + "ExecutedTransactionCount should be marked as processed after rollback" ); assert_eq!( validator_stage_2.transaction_count(), 7, - "Transaction count should be rolled back to 7 (matching TransactionsFin count)" + "Transaction count should be rolled back to 7 (matching ExecutedTransactionCount)" ); } /// Test empty batch handling. #[tokio::test] async fn test_empty_batch() { - use p2p::consensus::HeightAndRound; - use p2p_proto::consensus::TransactionsFin; - use pathfinder_common::ChainId; - use pathfinder_storage::StorageBuilder; - let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); let chain_id = ChainId::SEPOLIA_TESTNET; - let block_info = create_test_block_info(1); - - let mut validator_stage = - ValidatorTransactionBatchStage::new(chain_id, block_info, storage) - .expect("Failed to create validator stage"); - - let mut batch_execution_manager = BatchExecutionManager::new(); + let worker_pool = create_test_worker_pool(); + let (proposal_init, block_info) = create_test_proposal(1); + + let mut validator_stage = ValidatorBlockInfoStage::new(chain_id, proposal_init) + .and_then(|v| { + v.skip_validation( + block_info, + storage, + Arc::clone(&worker_pool), + DecidedBlocks::default(), + ) + }) + .expect("Failed to create validator stage"); + + let mut batch_execution_manager = BatchExecutionManager::new( + None, + None, + worker_pool, + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), + ); let height_and_round = HeightAndRound::new(2, 1); // Empty batch still marks execution as started batch_execution_manager - .execute_batch(height_and_round, vec![], &mut validator_stage) + .execute_batch::(height_and_round, vec![], &mut validator_stage) .expect("Failed to execute empty batch"); assert!( @@ -881,18 +1017,152 @@ mod tests { "No transactions should be executed" ); - // TransactionsFin can be processed after empty batch - let transactions_fin = TransactionsFin { - executed_transaction_count: 0, - }; + // ExecutedTransactionCount can be processed after empty batch + let executed_transaction_count = 0; + + batch_execution_manager + .process_executed_transaction_count::( + height_and_round, + executed_transaction_count, + &mut validator_stage, + ) + .expect("Failed to process ExecutedTransactionCount after empty batch"); + + assert!( + batch_execution_manager.is_executed_transaction_count_processed(&height_and_round), + "ExecutedTransactionCount should be processed after empty batch" + ); + } + + /// Test that ExecutedTransactionCount == 0 rolls back all transactions to + /// zero. This covers the edge case where the proposer executed no + /// transactions but the validator optimistically executed some. + #[tokio::test] + async fn test_executed_transaction_count_zero_rollback() { + let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); + let chain_id = ChainId::SEPOLIA_TESTNET; + let worker_pool = create_test_worker_pool(); + let (proposal_init, block_info) = create_test_proposal(1); + + let mut validator_stage = ValidatorBlockInfoStage::new(chain_id, proposal_init) + .and_then(|v| { + v.skip_validation( + block_info, + storage, + Arc::clone(&worker_pool), + DecidedBlocks::default(), + ) + }) + .expect("Failed to create validator stage"); + + let mut batch_execution_manager = BatchExecutionManager::new( + None, + None, + worker_pool, + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), + ); + let height_and_round = HeightAndRound::new(2, 1); + + // Execute a batch of 5 transactions + let transactions = create_transaction_batch(0, 0, 5, chain_id); + batch_execution_manager + .execute_batch::( + height_and_round, + transactions, + &mut validator_stage, + ) + .expect("Failed to execute batch"); + + assert_eq!( + validator_stage.transaction_count(), + 5, + "Should have 5 transactions before ExecutedTransactionCount" + ); + + // ETC == 0 should roll back all transactions + batch_execution_manager + .process_executed_transaction_count::( + height_and_round, + 0, + &mut validator_stage, + ) + .expect("Failed to process ExecutedTransactionCount with zero rollback"); + + assert_eq!( + validator_stage.transaction_count(), + 0, + "All transactions should be rolled back when ETC is 0" + ); + assert!( + batch_execution_manager.is_executed_transaction_count_processed(&height_and_round), + "ExecutedTransactionCount should be marked as processed" + ); + } + + /// Test that ExecutedTransactionCount > actual transaction count does not + /// error or inflate the count. The validator continues with the + /// transactions it has. + #[tokio::test] + async fn test_executed_transaction_count_exceeds_actual() { + let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); + let chain_id = ChainId::SEPOLIA_TESTNET; + let worker_pool = create_test_worker_pool(); + let (proposal_init, block_info) = create_test_proposal(1); + + let mut validator_stage = ValidatorBlockInfoStage::new(chain_id, proposal_init) + .and_then(|v| { + v.skip_validation( + block_info, + storage, + Arc::clone(&worker_pool), + DecidedBlocks::default(), + ) + }) + .expect("Failed to create validator stage"); + + let mut batch_execution_manager = BatchExecutionManager::new( + None, + None, + worker_pool, + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), + ); + let height_and_round = HeightAndRound::new(2, 1); + // Execute a batch of 5 transactions + let transactions = create_transaction_batch(0, 0, 5, chain_id); batch_execution_manager - .process_transactions_fin(height_and_round, transactions_fin, &mut validator_stage) - .expect("Failed to process TransactionsFin after empty batch"); + .execute_batch::( + height_and_round, + transactions, + &mut validator_stage, + ) + .expect("Failed to execute batch"); + assert_eq!( + validator_stage.transaction_count(), + 5, + "Should have 5 transactions before ExecutedTransactionCount" + ); + + // ETC == 10 exceeds the 5 we have; should warn but not error + batch_execution_manager + .process_executed_transaction_count::( + height_and_round, + 10, + &mut validator_stage, + ) + .expect("ETC exceeding actual count should not error"); + + assert_eq!( + validator_stage.transaction_count(), + 5, + "Transaction count should remain unchanged when ETC exceeds actual" + ); assert!( - batch_execution_manager.is_transactions_fin_processed(&height_and_round), - "TransactionsFin should be processed after empty batch" + batch_execution_manager.is_executed_transaction_count_processed(&height_and_round), + "ExecutedTransactionCount should be marked as processed" ); } } diff --git a/crates/pathfinder/src/consensus/inner/consensus_task.rs b/crates/pathfinder/src/consensus/inner/consensus_task.rs index 0e5c63133f..063e848143 100644 --- a/crates/pathfinder/src/consensus/inner/consensus_task.rs +++ b/crates/pathfinder/src/consensus/inner/consensus_task.rs @@ -9,58 +9,34 @@ //! 4. issues commands to the P2P task, for example to gossip a proposal or a //! vote -use std::collections::HashSet; use std::path::{Path, PathBuf}; use std::sync::Arc; -use std::time::{Duration, SystemTime}; -use std::vec; +use std::time::Duration; use anyhow::Context; use p2p::consensus::HeightAndRound; -use p2p_proto::common::{Address, Hash, L1DataAvailabilityMode}; -use p2p_proto::consensus::{ - BlockInfo, - ProposalCommitment as ProposalCommitmentProto, - ProposalFin, - ProposalInit, - ProposalPart, -}; -use pathfinder_common::{ - BlockHash, - BlockId, - BlockNumber, - ChainId, - ConsensusInfo, - ContractAddress, - ProposalCommitment, - StarknetVersion, -}; +use p2p_proto::consensus::{ProposalFin, ProposalPart}; +use pathfinder_common::{BlockId, ContractAddress, ProposalCommitment}; use pathfinder_consensus::{ Config, Consensus, ConsensusCommand, ConsensusEvent, - NetworkMessage, Proposal, Round, - SignedVote, ValidatorSet, ValidatorSetProvider, }; -use pathfinder_storage::{Storage, TransactionBehavior}; -use tokio::sync::{mpsc, watch}; +use pathfinder_storage::Storage; +use tokio::sync::mpsc; use super::fetch_proposers::L2ProposerSelector; use super::fetch_validators::L2ValidatorSetProvider; use super::{integration_testing, ConsensusTaskEvent, ConsensusValue, HeightExt, P2PTaskEvent}; use crate::config::integration_testing::InjectFailureConfig; use crate::config::ConsensusConfig; -use crate::state::block_hash::{ - calculate_event_commitment, - calculate_receipt_commitment, - calculate_transaction_commitment, -}; -use crate::validator::{FinalizedBlock, ValidatorBlockInfoStage}; +use crate::consensus::inner::dummy_proposal; +use crate::devnet::Account; #[allow(clippy::too_many_arguments)] pub fn spawn( @@ -69,57 +45,68 @@ pub fn spawn( wal_directory: PathBuf, tx_to_p2p: mpsc::Sender, mut rx_from_p2p: mpsc::Receiver, - info_watch_tx: watch::Sender>, - storage: Storage, - fake_proposals_storage: Storage, + main_storage: Storage, data_directory: &Path, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, // Does nothing in production builds. Used for integration testing only. inject_failure: Option, ) -> tokio::task::JoinHandle> { let data_directory = data_directory.to_path_buf(); util::task::spawn(async move { - let highest_finalized = highest_finalized(&storage)?; + let main_storage_clone = main_storage.clone(); + let account = util::task::spawn_blocking(move |_| { + let mut db_conn = main_storage_clone.connection()?; + let db_txn = db_conn.transaction()?; + Account::from_storage(&db_txn) + }) + .await??; + + let highest_committed = highest_committed(&main_storage) + .context("Failed to read highest committed block at startup")?; // Get the validator address and validator set provider let validator_address = config.my_validator_address; let validator_set_provider = - L2ValidatorSetProvider::new(storage.clone(), chain_id, config.clone()); + L2ValidatorSetProvider::new(main_storage.clone(), chain_id, config.clone()); // Get the proposer selector - let proposer_selector = L2ProposerSelector::new(storage.clone(), chain_id, config.clone()); + let proposer_selector = + L2ProposerSelector::new(main_storage.clone(), chain_id, config.clone()); let mut consensus = Consensus::::recover_with_proposal_selector( Config::new(validator_address) + .with_history_depth(config.history_depth) .with_wal_dir(wal_directory), // TODO use a dynamic validator set provider, once fetching the validator set from - // the staking contract is implemented. Related issue: https://github.com/eqlabs/pathfinder/issues/2936 + // the staking contract is implemented. Related issue: https://github.com/equilibriumco/pathfinder/issues/2936 Arc::new(validator_set_provider.clone()), proposer_selector, - highest_finalized, + highest_committed, )?; - // Get the current height - let mut current_height = consensus.current_height().unwrap_or_default(); - - // A validator that joins the consensus network and is lagging behind will vote - // Nil for its current height, because the consensus network is already at a - // higher height. This is a workaround for the missing sync/catch-up mechanism. - // Related issue: https://github.com/eqlabs/pathfinder/issues/2934 - let mut last_nil_vote_height = None; - - // TODO FIXME this should be taken from WAL & DB - // This set is used to make sure we only start each height once and is used when - // a new height needs to be started upon a proposal or vote for H arriving - // before H-1 has been decided upon. Such race conditions occur very often in a - // network with low latency. - let mut started_heights = HashSet::new(); + // Compute the next height to work on using all available information: + // - max_active_height: highest incomplete/active height being tracked + // - last_decided_height: highest decided height (even if not actively tracked) + // - highest_committed + 1: next height after what's been committed to main DB + let mut next_height = [ + consensus.max_active_height().unwrap_or(0), + consensus.last_decided_height().unwrap_or(0), + highest_committed.map(|h| h + 1).unwrap_or(0), + ] + .into_iter() + .max() + .unwrap_or(0); + + tracing::trace!(%next_height, "consensus task started with"); start_height( &mut consensus, - &mut started_heights, - current_height, - validator_set_provider.get_validator_set(current_height)?, + next_height, + validator_set_provider + .get_validator_set(next_height) + .context("Failed to get validator set at startup")?, ); loop { @@ -133,7 +120,13 @@ pub fn spawn( } } from_p2p = rx_from_p2p.recv() => { - from_p2p.expect("Consensus task event receiver not to be dropped") + match from_p2p { + Some(command) => command, + None => { + tracing::warn!("Receiver for commands from the P2P task was dropped, exiting Consensus task"); + anyhow::bail!("Receiver for commands from the P2P task was dropped, exiting Consensus task"); + } + } } }; @@ -151,50 +144,79 @@ pub fn spawn( {round}", ); - let fake_proposals_storage = fake_proposals_storage.clone(); - let (wire_proposal, finalized_block) = - util::task::spawn_blocking(move |_| { - create_empty_proposal( - chain_id, - height, - round.into(), - validator_address, - fake_proposals_storage, - ) - }) - .await? - .context("Creating empty proposal")?; - - let ProposalFin { - proposal_commitment, - } = wire_proposal.last().and_then(ProposalPart::as_fin).expect( - "Proposals produced by our node are always coherent and complete", - ); - - let value = ConsensusValue(ProposalCommitment(proposal_commitment.0)); - - tx_to_p2p - .send(P2PTaskEvent::CacheProposal( - HeightAndRound::new(height, round), - wire_proposal, - finalized_block, - )) - .await - .expect("Cache proposal receiver not to be dropped"); + dummy_proposal::wait_for_parent_committed( + height, + main_storage.clone(), + Duration::from_millis(50), + ) + .await + .context("Waiting for parent block to be committed")?; - let proposal = Proposal { + match dummy_proposal::create( height, - round: round.into(), - proposer: validator_address, - pol_round: Round::nil(), - value, - }; + round.into(), + &account, + validator_address, + main_storage.clone(), + compiler_resource_limits, + blockifier_libfuncs, + None, + ) { + Ok((wire_proposal, finalized_block)) => { + let ProposalFin { + proposal_commitment, + } = wire_proposal + .last() + .and_then(ProposalPart::as_fin) + .context(format!( + "Proposal for height {height} round {round} is \ + missing ProposalFin part" + ))?; + + let value = + ConsensusValue(ProposalCommitment(proposal_commitment.0)); + + tx_to_p2p + .send(P2PTaskEvent::CacheProposal( + HeightAndRound::new(height, round), + wire_proposal, + finalized_block, + )) + .await + .expect("Cache proposal receiver not to be dropped"); + + let proposal = Proposal { + height, + round: round.into(), + proposer: validator_address, + pol_round: Round::nil(), + value, + }; - tracing::info!( - "🧠 ⚙️ {validator_address} handling command Propose({proposal:?})" - ); + tracing::info!( + "🧠 ⚙️ {validator_address} handling command \ + Propose({proposal:?})" + ); - consensus.handle_command(ConsensusCommand::Propose(proposal)); + consensus.handle_command(ConsensusCommand::Propose(proposal)); + } + Err(e) => { + // Proposal creation failed - skip this round but continue + // consensus (we can still vote on other validators' proposals) + // + // NOTE: The consensus engine is event-driven and doesn't block + // waiting for our proposal. If we're the designated proposer + // and don't propose, the round will timeout and move to the + // next round. + tracing::warn!( + validator = %validator_address, + height = height, + round = round, + error = %e, + "Failed to create proposal - skipping this round." + ); + } + } } // The consensus engine wants us to gossip a message via the P2P consensus // network. @@ -202,29 +224,16 @@ pub fn spawn( // TODO Sometimes the engine requests gossiping votes for heights that // are a few steps behind the current height and have already been // decided upon. This is due to the fact that `history_depth` in config - // is > 0 and we're not supporting round certificates yet. Setting - // history depth to a low value (or 0) should mitigate this issue for - // now. - if msg.height() >= current_height { - // Record the highest height at which we voted Nil as it may be an - // indication that we're lagging behind the consensus network. - if let NetworkMessage::Vote(SignedVote { vote, .. }) = &msg { - if vote.is_nil() { - last_nil_vote_height = Some( - vote.height - .max(last_nil_vote_height.unwrap_or_default()), - ); - } - } - + // is > 0 and we're not supporting round certificates yet. Once round + // certificates are supported this check can be removed. + if msg.height() >= next_height { tx_to_p2p .send(P2PTaskEvent::GossipRequest(msg)) .await .expect("Gossip request receiver not to be dropped"); } else { tracing::debug!( - "🧠 🤷 Ignoring gossip request for height {} < \ - {current_height}", + "🧠 🤷 Ignoring gossip request for height {} < {next_height}", msg.height() ); } @@ -250,54 +259,55 @@ pub fn spawn( let height_and_round = HeightAndRound::new(height, round); tx_to_p2p - .send(P2PTaskEvent::CommitBlock(height_and_round, value.clone())) + .send(P2PTaskEvent::MarkBlockAsDecidedAndCleanUp( + height_and_round, + value.clone(), + )) .await .expect("Commit block receiver not to be dropped"); - info_watch_tx.send_if_modified(|info| { - let do_update = match info { - Some(info) => { - height > info.highest_decided_height.get() - || value.0 != info.highest_decided_value - } - None => true, - }; - if do_update { - if let Some(height) = BlockNumber::new(height) { - *info = Some(ConsensusInfo { - highest_decided_height: height, - highest_decided_value: value.0, - }); - } else { - tracing::error!( - "Height {height} is out of range for BlockNumber" - ); - *info = None; - } - } - do_update - }); + let prev_height = next_height; + // Either move to the next height, or catch up if the decided height + // is ahead of our current next_height. + next_height = next_height + .max(height) + .checked_add(1) + .expect("Height never reaches i64::MAX"); - assert!(started_heights.remove(&height)); + tracing::trace!(%prev_height, %next_height, "Changing height"); - if height == current_height { - current_height = current_height - .checked_add(1) - .expect("Height never reaches i64::MAX"); - start_height( - &mut consensus, - &mut started_heights, - current_height, - validator_set_provider.get_validator_set(current_height)?, - ); - } + start_height( + &mut consensus, + next_height, + validator_set_provider + .get_validator_set(next_height) + .context("Failed to get validator set")?, + ); } ConsensusEvent::Error(error) => { - // TODO are all of these errors fatal or recoverable? - // What is the best way to handle them? - tracing::error!("🧠 ❌ {validator_address} consensus error: {error:?}"); - // Bail out, stop the consensus - return Err(error); + if error.is_recoverable() { + // Recoverable errors: log and continue + // - WAL entry errors: can skip corrupted entries + // - Invalid peer messages: engine should handle, we continue + tracing::warn!( + validator = %validator_address, + error = %error, + error_chain = %format!("{:#}", error), + "Recoverable consensus error - continuing operation" + ); + // Continue to next event - don't restart task + } else { + tracing::error!( + validator = %validator_address, + error = %error, + error_chain = %format!("{:#}", error), + "Fatal consensus error" + ); + // Bail out, stop the consensus + return Err( + anyhow::Error::from(error).context("Fatal consensus error") + ); + } } } } @@ -310,37 +320,50 @@ pub fn spawn( // so we did start a new height upon successful decision, before any p2p // messages for the new height were received. ConsensusCommand::StartHeight(..) | ConsensusCommand::Propose(_) => { - assert!(cmd_height >= current_height); - assert!(started_heights.contains(&cmd_height)); + // Commands from P2P should always be for current or future heights. + assert!( + cmd_height >= next_height, + "Received command for height {cmd_height} < current height \ + {next_height}" + ); } // Sometimes messages for the next height are received before the engine // decides upon the current height. In such case we need to ensure that a // consensus engine is already started for this new height carried in those // messages. ConsensusCommand::Proposal(_) | ConsensusCommand::Vote(_) => { - // TODO catch up with the current height of the consensus network using - // sync, for the time being just observe the height in the rebroadcasted - // votes or in the proposals. - let last_nil = last_nil_vote_height.take(); - - if let Some(last_nil) = last_nil { - if cmd_height > current_height && cmd_height > last_nil { - tracing::info!( - "🧠 ⏩ {validator_address} catching up current height \ - {current_height} -> {cmd_height}", - ); - current_height = cmd_height; - } else { - last_nil_vote_height = Some(last_nil); + if let ConsensusCommand::Vote(ref signed_vote) = cmd { + let vote = &signed_vote.vote; + // The condition is always false in production builds. + if integration_testing::debug_ignore_received_vote( + vote.r#type.clone(), + vote.height, + vote.round.as_u32(), + inject_failure, + ) { + continue; } } - start_height( - &mut consensus, - &mut started_heights, - cmd_height, - validator_set_provider.get_validator_set(cmd_height)?, - ); + // Make sure we don't start older heights that have already been decided + // upon, or are still in progress due to race conditions, or are too old + // to fit in history depth anyway. + let is_decided = consensus + .last_decided_height() + .is_some_and(|last_decided| cmd_height <= last_decided); + if is_decided { + tracing::debug!( + lower_height=%cmd_height, %next_height, "🧠 🤷 Skipping start consensus for" + ); + } else { + start_height( + &mut consensus, + cmd_height, + validator_set_provider + .get_validator_set(cmd_height) + .context("Failed to get validator set")?, + ); + } } } @@ -355,203 +378,31 @@ pub fn spawn( }) } -fn highest_finalized(storage: &Storage) -> anyhow::Result> { - let mut db_conn = storage +/// Reads the highest committed block number from main storage. +fn highest_committed(main_storage: &Storage) -> anyhow::Result> { + let mut db_conn = main_storage .connection() - .context("Creating database connection")?; + .context("Failed to create database connection for reading highest committed block")?; let db_txn = db_conn .transaction() - .context("Creating database transaction")?; - let highest_finalized = db_txn.block_number(BlockId::Latest)?.map(|x| x.get()); - Ok(highest_finalized) + .context("Failed to create database transaction for reading highest committed block")?; + let highest_committed = db_txn + .block_number(BlockId::Latest) + .context("Failed to query latest block number")? + .map(|x| x.get()); + Ok(highest_committed) } +/// Starts consensus for the given height if not already active. fn start_height( consensus: &mut Consensus, - started_heights: &mut HashSet, height: u64, validator_set: ValidatorSet, ) { - if !started_heights.contains(&height) { - started_heights.insert(height); + if !consensus.is_height_active(height) { + tracing::trace!(%height, "🧠 🚀 Starting consensus for"); consensus.handle_command(ConsensusCommand::StartHeight(height, validator_set)); - } -} - -/// Create an empty proposal for the given height and round. Returns -/// proposal parts that can be gossiped via P2P network and the -/// finalized block that corresponds to this proposal. -fn create_empty_proposal( - chain_id: ChainId, - height: u64, - round: Round, - proposer: ContractAddress, - storage: Storage, -) -> anyhow::Result<(Vec, FinalizedBlock)> { - let round = round.as_u32().expect("Round not to be Nil???"); - let proposer = Address(proposer.0); - let timestamp = SystemTime::now() - .duration_since(SystemTime::UNIX_EPOCH) - .unwrap_or_default() - .as_secs(); - let proposal_init = ProposalInit { - block_number: height, - round, - valid_round: None, - proposer, - }; - let block_info = BlockInfo { - block_number: height, - timestamp, - builder: proposer, - l1_da_mode: L1DataAvailabilityMode::Calldata, - l2_gas_price_fri: 1, - l1_gas_price_wei: 1_000_000_000, - l1_data_gas_price_wei: 1, - eth_to_strk_rate: 1_000_000_000, - }; - let current_block = BlockNumber::new(height).context("Invalid height")?; - let parent_proposal_commitment_hash = if let Some(parent_number) = current_block.parent() { - let mut db_conn = storage - .connection() - .context("Creating database connection")?; - let db_txn = db_conn - .transaction() - .context("Create database transaction")?; - // TODO it should probably be not a block hash but the state diff commitment of - // the parent block - let hash = db_txn.block_hash(parent_number.into())?.unwrap_or_default(); - db_txn.commit()?; - hash } else { - BlockHash::ZERO - }; - - let validator = ValidatorBlockInfoStage::new(chain_id, proposal_init.clone())? - .validate_consensus_block_info(block_info.clone(), storage.clone())?; - let validator = validator.consensus_finalize0()?; - let mut db_conn = storage - .connection() - .context("Creating database connection")?; - let db_txn = db_conn - .transaction_with_behavior(TransactionBehavior::Immediate) - .context("Create database transaction")?; - let finalized_block = validator.finalize(db_txn, storage.clone())?; - let proposal_commitment_hash = Hash(finalized_block.header.state_diff_commitment.0); - - // The only version handled by consensus, so far - let starknet_version = StarknetVersion::new(0, 14, 0, 0); - let transactions = vec![]; - let transaction_commitment = calculate_transaction_commitment(&transactions, starknet_version)?; - let transaction_events = vec![]; - let event_commitment = calculate_event_commitment(&transaction_events, starknet_version)?; - let receipts = vec![]; - let receipt_commitment = calculate_receipt_commitment(&receipts)?; - let proposal_commitment = ProposalCommitmentProto { - block_number: height, - parent_commitment: Hash(parent_proposal_commitment_hash.0), - builder: proposer, - timestamp, - protocol_version: starknet_version.to_string(), - old_state_root: Default::default(), // not used by 0.14.0 - version_constant_commitment: Default::default(), // TODO - state_diff_commitment: proposal_commitment_hash, - transaction_commitment: Hash(transaction_commitment.0), - event_commitment: Hash(event_commitment.0), - receipt_commitment: Hash(receipt_commitment.0), - concatenated_counts: Default::default(), // should be the sum of lengths of inputs to *_commitment - l1_gas_price_fri: 1000, - l1_data_gas_price_fri: 2000, - l2_gas_price_fri: 3000, - l2_gas_used: 4000, - next_l2_gas_price_fri: 3000, - l1_da_mode: L1DataAvailabilityMode::Calldata, - }; - - Ok(( - vec![ - ProposalPart::Init(proposal_init), - ProposalPart::BlockInfo(block_info), - // Note: Per spec, empty proposals skip TransactionBatch entirely. - ProposalPart::ProposalCommitment(proposal_commitment), - ProposalPart::Fin(ProposalFin { - proposal_commitment: proposal_commitment_hash, - }), - ], - finalized_block, - )) -} - -#[cfg(test)] -mod tests { - use pathfinder_crypto::Felt; - use pathfinder_storage::StorageBuilder; - - use super::*; - - /// Tests that create_empty_proposal successfully creates an empty proposal - /// and finalizes it without requiring an executor. - #[test] - fn test_create_empty_proposal() { - let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); - let chain_id = ChainId::SEPOLIA_TESTNET; - let height = 0u64; - let round = Round::new(0); - let proposer = ContractAddress::new_or_panic(Felt::from_hex_str("0x1").unwrap()); - - // Create an empty proposal - this should succeed without an executor - let (proposal_parts, finalized_block) = - create_empty_proposal(chain_id, height, round, proposer, storage) - .expect("create_empty_proposal should succeed for empty proposals"); - - // Verify proposal structure - assert!( - proposal_parts.len() >= 4, - "Empty proposal should have at least Init, BlockInfo, ProposalCommitment, and Fin" - ); - - // Verify it starts with Init - assert!( - matches!(proposal_parts[0], ProposalPart::Init(_)), - "First part should be ProposalInit" - ); - - // Verify it has BlockInfo - assert!( - matches!(proposal_parts[1], ProposalPart::BlockInfo(_)), - "Second part should be BlockInfo" - ); - - // Verify it ends with Fin - let last_part = proposal_parts.last().expect("Proposal should have parts"); - assert!( - matches!(last_part, ProposalPart::Fin(_)), - "Last part should be ProposalFin" - ); - - // Verify finalized block has empty state - assert_eq!( - finalized_block.header.transaction_count, 0, - "Empty proposal should have 0 transaction count" - ); - assert_eq!( - finalized_block.header.event_count, 0, - "Empty proposal should have 0 event count" - ); - assert_eq!( - finalized_block.state_update.contract_updates.len(), - 0, - "Empty proposal should have no contract updates" - ); - assert_eq!( - finalized_block.state_update.system_contract_updates.len(), - 0, - "Empty proposal should have no system contract updates" - ); - assert_eq!( - finalized_block.transactions_and_receipts.len(), - 0, - "Empty proposal should have no transactions" - ); + tracing::trace!(%height, "🧠 🤷 Consensus already active for"); } } diff --git a/crates/pathfinder/src/consensus/inner/conv.rs b/crates/pathfinder/src/consensus/inner/conv.rs deleted file mode 100644 index 705cc2d42b..0000000000 --- a/crates/pathfinder/src/consensus/inner/conv.rs +++ /dev/null @@ -1,1147 +0,0 @@ -use p2p_proto::consensus as proto; -use pathfinder_common::{receipt, state_update}; -use pathfinder_storage::{ - DataAvailabilityMode, - DeclareTransactionV4, - DeployAccountTransactionV4, - InvokeTransactionV4, - L1HandlerTransactionV0, - ResourceBound, - ResourceBoundsV1, - TransactionV2, -}; - -use crate::consensus::inner::dto; -use crate::validator::FinalizedBlock; - -/// Convert a DTO type to a data model type (`protobuf` in case of raw -/// proposals, and `pathfinder_common` types in case of finalized blocks) -pub trait IntoModel { - fn into_model(self) -> T; -} - -/// Convert a data model type into a DTO, fallibly -pub trait TryIntoDto { - fn try_into_dto(dto: T) -> anyhow::Result - where - Self: Sized; -} - -impl IntoModel for dto::ProposalPart { - fn into_model(self) -> proto::ProposalPart { - match self { - dto::ProposalPart::Init(p) => proto::ProposalPart::Init(proto::ProposalInit { - block_number: p.block_number, - round: p.round, - valid_round: p.valid_round, - proposer: p2p_proto::common::Address(p.proposer.into()), - }), - dto::ProposalPart::Fin(p) => proto::ProposalPart::Fin(proto::ProposalFin { - proposal_commitment: p2p_proto::common::Hash(p.proposal_commitment.into()), - }), - dto::ProposalPart::BlockInfo(p) => proto::ProposalPart::BlockInfo(proto::BlockInfo { - block_number: p.block_number, - builder: p2p_proto::common::Address(p.builder.into()), - timestamp: p.timestamp, - l2_gas_price_fri: p.l2_gas_price_fri, - l1_gas_price_wei: p.l1_gas_price_wei, - l1_data_gas_price_wei: p.l1_data_gas_price_wei, - eth_to_strk_rate: p.eth_to_strk_rate, - l1_da_mode: p.l1_da_mode.into_model(), - }), - dto::ProposalPart::TransactionBatch(batch) => proto::ProposalPart::TransactionBatch( - batch.into_iter().map(|t| t.into_model()).collect(), - ), - dto::ProposalPart::TransactionsFin(p) => { - proto::ProposalPart::TransactionsFin(proto::TransactionsFin { - executed_transaction_count: p.executed_transaction_count, - }) - } - dto::ProposalPart::ProposalCommitment(p) => { - proto::ProposalPart::ProposalCommitment(proto::ProposalCommitment { - block_number: p.block_number, - parent_commitment: p2p_proto::common::Hash(p.parent_commitment.into()), - builder: p2p_proto::common::Address(p.builder.into()), - timestamp: p.timestamp, - protocol_version: p.protocol_version, - old_state_root: p2p_proto::common::Hash(p.old_state_root.into()), - version_constant_commitment: p2p_proto::common::Hash( - p.version_constant_commitment.into(), - ), - state_diff_commitment: p2p_proto::common::Hash(p.state_diff_commitment.into()), - transaction_commitment: p2p_proto::common::Hash( - p.transaction_commitment.into(), - ), - event_commitment: p2p_proto::common::Hash(p.event_commitment.into()), - receipt_commitment: p2p_proto::common::Hash(p.receipt_commitment.into()), - concatenated_counts: p.concatenated_counts.into(), - l1_gas_price_fri: p.l1_gas_price_fri, - l1_data_gas_price_fri: p.l1_data_gas_price_fri, - l2_gas_price_fri: p.l2_gas_price_fri, - l2_gas_used: p.l2_gas_used, - next_l2_gas_price_fri: p.next_l2_gas_price_fri, - l1_da_mode: p.l1_da_mode.into_model(), - }) - } - } - } -} - -impl IntoModel for dto::TransactionWithClass { - fn into_model(self) -> proto::Transaction { - let dto::TransactionWithClass { variant, hash } = self; - proto::Transaction { - txn: variant.into_model(), - transaction_hash: p2p_proto::common::Hash(hash.into()), - } - } -} - -impl IntoModel for dto::TransactionVariantWithClass { - fn into_model(self) -> proto::TransactionVariant { - match self { - dto::TransactionVariantWithClass::Declare(dcl) => { - proto::TransactionVariant::DeclareV3(p2p_proto::transaction::DeclareV3WithClass { - common: dcl.declare_transaction.into_model(), - class: dcl.class.into_model(), - }) - } - dto::TransactionVariantWithClass::DeployAccount(dpl) => { - proto::TransactionVariant::DeployAccountV3(dpl.into_model()) - } - dto::TransactionVariantWithClass::Invoke(inv) => { - proto::TransactionVariant::InvokeV3(inv.into_model()) - } - dto::TransactionVariantWithClass::L1Handler(h) => { - proto::TransactionVariant::L1HandlerV0(h.into_model()) - } - } - } -} - -impl IntoModel for DeclareTransactionV4 { - fn into_model(self) -> p2p_proto::transaction::DeclareV3Common { - p2p_proto::transaction::DeclareV3Common { - sender: p2p_proto::common::Address(self.sender_address.into()), - signature: p2p_proto::transaction::AccountSignature { - parts: self.signature.into_iter().map(|s| s.into()).collect(), - }, - nonce: self.nonce.into(), - compiled_class_hash: p2p_proto::common::Hash(self.compiled_class_hash.into()), - resource_bounds: self.resource_bounds.into_model(), - tip: self.tip.0, - paymaster_data: self.paymaster_data.into_iter().map(|e| e.into()).collect(), - account_deployment_data: self - .account_deployment_data - .into_iter() - .map(|e| e.into()) - .collect(), - nonce_data_availability_mode: self.nonce_data_availability_mode.into_model(), - fee_data_availability_mode: self.fee_data_availability_mode.into_model(), - } - } -} - -impl IntoModel for DeployAccountTransactionV4 { - fn into_model(self) -> p2p_proto::transaction::DeployAccountV3 { - p2p_proto::transaction::DeployAccountV3 { - signature: p2p_proto::transaction::AccountSignature { - parts: self.signature.into_iter().map(|s| s.into()).collect(), - }, - class_hash: p2p_proto::common::Hash(self.class_hash.into()), - nonce: self.nonce.into(), - address_salt: self.contract_address_salt.into(), - calldata: self - .constructor_calldata - .into_iter() - .map(|e| e.into()) - .collect(), - resource_bounds: self.resource_bounds.into_model(), - tip: self.tip.0, - paymaster_data: self.paymaster_data.into_iter().map(|e| e.into()).collect(), - nonce_data_availability_mode: self.nonce_data_availability_mode.into_model(), - fee_data_availability_mode: self.fee_data_availability_mode.into_model(), - } - } -} - -impl IntoModel for InvokeTransactionV4 { - fn into_model(self) -> p2p_proto::transaction::InvokeV3 { - p2p_proto::transaction::InvokeV3 { - sender: p2p_proto::common::Address(self.sender_address.into()), - signature: p2p_proto::transaction::AccountSignature { - parts: self.signature.into_iter().map(|s| s.into()).collect(), - }, - calldata: self.calldata.into_iter().map(|e| e.into()).collect(), - resource_bounds: self.resource_bounds.into_model(), - tip: self.tip.0, - paymaster_data: self.paymaster_data.into_iter().map(|e| e.into()).collect(), - account_deployment_data: self - .account_deployment_data - .into_iter() - .map(|e| e.into()) - .collect(), - nonce_data_availability_mode: self.nonce_data_availability_mode.into_model(), - fee_data_availability_mode: self.fee_data_availability_mode.into_model(), - nonce: self.nonce.into(), - } - } -} - -impl IntoModel for L1HandlerTransactionV0 { - fn into_model(self) -> p2p_proto::transaction::L1HandlerV0 { - let L1HandlerTransactionV0 { - contract_address, - entry_point_selector, - nonce, - calldata, - } = self; - p2p_proto::transaction::L1HandlerV0 { - nonce: nonce.into(), - address: p2p_proto::common::Address(contract_address.into()), - entry_point_selector: entry_point_selector.into(), - calldata: calldata.into_iter().map(|e| e.into()).collect(), - } - } -} - -impl IntoModel for ResourceBoundsV1 { - fn into_model(self) -> p2p_proto::transaction::ResourceBounds { - let ResourceBoundsV1 { - l1_gas, - l2_gas, - l1_data_gas, - } = self; - p2p_proto::transaction::ResourceBounds { - l1_gas: l1_gas.into_model(), - l2_gas: l2_gas.into_model(), - l1_data_gas: l1_data_gas.map(|r| r.into_model()), - } - } -} - -impl IntoModel for ResourceBound { - fn into_model(self) -> p2p_proto::transaction::ResourceLimits { - let ResourceBound { - max_amount, - max_price_per_unit, - } = self; - p2p_proto::transaction::ResourceLimits { - max_amount: max_amount.0.into(), - max_price_per_unit: max_price_per_unit.0.into(), - } - } -} - -impl IntoModel for DataAvailabilityMode { - fn into_model(self) -> p2p_proto::common::VolitionDomain { - match self { - DataAvailabilityMode::L1 => p2p_proto::common::VolitionDomain::L1, - DataAvailabilityMode::L2 => p2p_proto::common::VolitionDomain::L2, - } - } -} - -impl IntoModel for dto::Cairo1Class { - fn into_model(self) -> p2p_proto::class::Cairo1Class { - p2p_proto::class::Cairo1Class { - abi: self.abi, - entry_points: self.entry_points.into_model(), - program: self.program.into_iter().map(|e| e.into()).collect(), - contract_class_version: self.contract_class_version, - } - } -} - -impl IntoModel for dto::Cairo1EntryPoints { - fn into_model(self) -> p2p_proto::class::Cairo1EntryPoints { - let dto::Cairo1EntryPoints { - externals, - l1_handlers, - constructors, - } = self; - p2p_proto::class::Cairo1EntryPoints { - externals: externals.into_iter().map(|e| e.into_model()).collect(), - l1_handlers: l1_handlers.into_iter().map(|e| e.into_model()).collect(), - constructors: constructors.into_iter().map(|e| e.into_model()).collect(), - } - } -} - -impl IntoModel for dto::SierraEntryPoint { - fn into_model(self) -> p2p_proto::class::SierraEntryPoint { - let dto::SierraEntryPoint { index, selector } = self; - p2p_proto::class::SierraEntryPoint { - index, - selector: selector.into(), - } - } -} - -impl IntoModel for u8 { - fn into_model(self) -> p2p_proto::common::L1DataAvailabilityMode { - match self { - 0 => p2p_proto::common::L1DataAvailabilityMode::Calldata, - 1 => p2p_proto::common::L1DataAvailabilityMode::Blob, - _ => panic!("DB has unexpected L1DataAvailabilityMode"), - } - } -} - -impl TryIntoDto for dto::ProposalPart { - fn try_into_dto(p: proto::ProposalPart) -> anyhow::Result { - let r = match p { - proto::ProposalPart::Init(q) => dto::ProposalPart::Init(dto::ProposalInit { - block_number: q.block_number, - round: q.round, - valid_round: q.valid_round, - proposer: q.proposer.0.into(), - }), - proto::ProposalPart::Fin(q) => dto::ProposalPart::Fin(dto::ProposalFin { - proposal_commitment: q.proposal_commitment.0.into(), - }), - proto::ProposalPart::BlockInfo(q) => dto::ProposalPart::BlockInfo(dto::BlockInfo { - block_number: q.block_number, - builder: q.builder.0.into(), - timestamp: q.timestamp, - l2_gas_price_fri: q.l2_gas_price_fri, - l1_gas_price_wei: q.l1_gas_price_wei, - l1_data_gas_price_wei: q.l1_data_gas_price_wei, - eth_to_strk_rate: q.eth_to_strk_rate, - l1_da_mode: u8::try_into_dto(q.l1_da_mode)?, - }), - proto::ProposalPart::TransactionBatch(proto_batch) => { - dto::ProposalPart::TransactionBatch( - proto_batch - .into_iter() - .map(dto::TransactionWithClass::try_into_dto) - .collect::, _>>()?, - ) - } - proto::ProposalPart::TransactionsFin(q) => { - dto::ProposalPart::TransactionsFin(dto::TransactionsFin { - executed_transaction_count: q.executed_transaction_count, - }) - } - proto::ProposalPart::ProposalCommitment(q) => { - dto::ProposalPart::ProposalCommitment(Box::new(dto::ProposalCommitment { - block_number: q.block_number, - parent_commitment: q.parent_commitment.0.into(), - builder: q.builder.0.into(), - timestamp: q.timestamp, - protocol_version: q.protocol_version, - old_state_root: q.old_state_root.0.into(), - version_constant_commitment: q.version_constant_commitment.0.into(), - state_diff_commitment: q.state_diff_commitment.0.into(), - transaction_commitment: q.transaction_commitment.0.into(), - event_commitment: q.event_commitment.0.into(), - receipt_commitment: q.receipt_commitment.0.into(), - concatenated_counts: q.concatenated_counts.into(), - l1_gas_price_fri: q.l1_gas_price_fri, - l1_data_gas_price_fri: q.l1_data_gas_price_fri, - l2_gas_price_fri: q.l2_gas_price_fri, - l2_gas_used: q.l2_gas_used, - next_l2_gas_price_fri: q.next_l2_gas_price_fri, - l1_da_mode: u8::try_into_dto(q.l1_da_mode)?, - })) - } - }; - Ok(r) - } -} - -impl TryIntoDto for dto::TransactionWithClass { - fn try_into_dto(tx: proto::Transaction) -> anyhow::Result { - let proto::Transaction { - txn, - transaction_hash, - } = tx; - Ok(dto::TransactionWithClass { - variant: dto::TransactionVariantWithClass::try_into_dto(txn)?, - hash: transaction_hash.0.into(), - }) - } -} - -impl TryIntoDto for dto::TransactionVariantWithClass { - fn try_into_dto( - tx: proto::TransactionVariant, - ) -> anyhow::Result { - let res = match tx { - proto::TransactionVariant::DeclareV3(dcl) => { - dto::TransactionVariantWithClass::Declare(dto::DeclareTransactionWithClass { - declare_transaction: DeclareTransactionV4::try_into_dto(dcl.common)?, - class: dto::Cairo1Class::try_into_dto(dcl.class)?, - }) - } - proto::TransactionVariant::DeployAccountV3(dpl) => { - dto::TransactionVariantWithClass::DeployAccount( - DeployAccountTransactionV4::try_into_dto(dpl)?, - ) - } - proto::TransactionVariant::InvokeV3(inv) => { - dto::TransactionVariantWithClass::Invoke(InvokeTransactionV4::try_into_dto(inv)?) - } - proto::TransactionVariant::L1HandlerV0(h) => { - dto::TransactionVariantWithClass::L1Handler(L1HandlerTransactionV0::try_into_dto( - h, - )?) - } - }; - Ok(res) - } -} - -impl TryIntoDto for DeclareTransactionV4 { - fn try_into_dto( - dc: p2p_proto::transaction::DeclareV3Common, - ) -> anyhow::Result { - let res = DeclareTransactionV4 { - class_hash: Default::default(), // not used - nonce: dc.nonce.into(), - nonce_data_availability_mode: DataAvailabilityMode::try_into_dto( - dc.nonce_data_availability_mode, - )?, - fee_data_availability_mode: DataAvailabilityMode::try_into_dto( - dc.fee_data_availability_mode, - )?, - resource_bounds: ResourceBoundsV1::try_into_dto(dc.resource_bounds)?, - tip: pathfinder_common::Tip(dc.tip), - paymaster_data: dc.paymaster_data.into_iter().map(|e| e.into()).collect(), - signature: dc.signature.parts.into_iter().map(|e| e.into()).collect(), - account_deployment_data: dc - .account_deployment_data - .into_iter() - .map(|e| e.into()) - .collect(), - sender_address: dc.sender.0.into(), - compiled_class_hash: dc.compiled_class_hash.0.into(), - }; - Ok(res) - } -} - -impl TryIntoDto for DeployAccountTransactionV4 { - fn try_into_dto( - dp: p2p_proto::transaction::DeployAccountV3, - ) -> anyhow::Result { - let res = DeployAccountTransactionV4 { - sender_address: Default::default(), // not used - signature: dp.signature.parts.into_iter().map(|e| e.into()).collect(), - nonce: dp.nonce.into(), - nonce_data_availability_mode: DataAvailabilityMode::try_into_dto( - dp.nonce_data_availability_mode, - )?, - fee_data_availability_mode: DataAvailabilityMode::try_into_dto( - dp.fee_data_availability_mode, - )?, - resource_bounds: ResourceBoundsV1::try_into_dto(dp.resource_bounds)?, - tip: pathfinder_common::Tip(dp.tip), - paymaster_data: dp.paymaster_data.into_iter().map(|e| e.into()).collect(), - contract_address_salt: dp.address_salt.into(), - constructor_calldata: dp.calldata.into_iter().map(|e| e.into()).collect(), - class_hash: dp.class_hash.0.into(), - }; - Ok(res) - } -} - -impl TryIntoDto for InvokeTransactionV4 { - fn try_into_dto(inv: p2p_proto::transaction::InvokeV3) -> anyhow::Result { - let res = InvokeTransactionV4 { - signature: inv.signature.parts.into_iter().map(|e| e.into()).collect(), - nonce: inv.nonce.into(), - nonce_data_availability_mode: DataAvailabilityMode::try_into_dto( - inv.nonce_data_availability_mode, - )?, - fee_data_availability_mode: DataAvailabilityMode::try_into_dto( - inv.fee_data_availability_mode, - )?, - resource_bounds: ResourceBoundsV1::try_into_dto(inv.resource_bounds)?, - tip: pathfinder_common::Tip(inv.tip), - paymaster_data: inv.paymaster_data.into_iter().map(|e| e.into()).collect(), - account_deployment_data: inv - .account_deployment_data - .into_iter() - .map(|e| e.into()) - .collect(), - calldata: inv.calldata.into_iter().map(|e| e.into()).collect(), - sender_address: inv.sender.0.into(), - }; - Ok(res) - } -} - -impl TryIntoDto for L1HandlerTransactionV0 { - fn try_into_dto( - h: p2p_proto::transaction::L1HandlerV0, - ) -> anyhow::Result { - let p2p_proto::transaction::L1HandlerV0 { - nonce, - address, - entry_point_selector, - calldata, - } = h; - let res = L1HandlerTransactionV0 { - contract_address: address.0.into(), - entry_point_selector: entry_point_selector.into(), - nonce: nonce.into(), - calldata: calldata.into_iter().map(|e| e.into()).collect(), - }; - Ok(res) - } -} - -impl TryIntoDto for DataAvailabilityMode { - fn try_into_dto(vd: p2p_proto::common::VolitionDomain) -> anyhow::Result { - let res = match vd { - p2p_proto::common::VolitionDomain::L1 => DataAvailabilityMode::L1, - p2p_proto::common::VolitionDomain::L2 => DataAvailabilityMode::L2, - }; - Ok(res) - } -} - -impl TryIntoDto for ResourceBoundsV1 { - fn try_into_dto( - rb: p2p_proto::transaction::ResourceBounds, - ) -> anyhow::Result { - let p2p_proto::transaction::ResourceBounds { - l1_gas, - l2_gas, - l1_data_gas, - } = rb; - let res = ResourceBoundsV1 { - l1_gas: ResourceBound::try_into_dto(l1_gas)?, - l2_gas: ResourceBound::try_into_dto(l2_gas)?, - l1_data_gas: match l1_data_gas { - Some(dg) => Some(ResourceBound::try_into_dto(dg)?), - None => None, - }, - }; - Ok(res) - } -} - -impl TryIntoDto for ResourceBound { - fn try_into_dto(rl: p2p_proto::transaction::ResourceLimits) -> anyhow::Result { - let p2p_proto::transaction::ResourceLimits { - max_amount, - max_price_per_unit, - } = rl; - let res = ResourceBound { - max_amount: pathfinder_common::ResourceAmount(max_amount.try_into()?), - max_price_per_unit: pathfinder_common::ResourcePricePerUnit( - max_price_per_unit.try_into()?, - ), - }; - Ok(res) - } -} - -impl TryIntoDto for dto::Cairo1Class { - fn try_into_dto(cls: p2p_proto::class::Cairo1Class) -> anyhow::Result { - let p2p_proto::class::Cairo1Class { - abi, - entry_points, - program, - contract_class_version, - } = cls; - let res = dto::Cairo1Class { - abi, - entry_points: dto::Cairo1EntryPoints::try_into_dto(entry_points)?, - program: program.into_iter().map(|e| e.into()).collect(), - contract_class_version, - }; - Ok(res) - } -} - -impl TryIntoDto for dto::Cairo1EntryPoints { - fn try_into_dto( - eps: p2p_proto::class::Cairo1EntryPoints, - ) -> anyhow::Result { - let p2p_proto::class::Cairo1EntryPoints { - externals, - l1_handlers, - constructors, - } = eps; - let res = dto::Cairo1EntryPoints { - externals: externals - .into_iter() - .map(dto::SierraEntryPoint::try_into_dto) - .collect::, _>>()?, - l1_handlers: l1_handlers - .into_iter() - .map(dto::SierraEntryPoint::try_into_dto) - .collect::, _>>()?, - constructors: constructors - .into_iter() - .map(dto::SierraEntryPoint::try_into_dto) - .collect::, _>>()?, - }; - Ok(res) - } -} - -impl TryIntoDto for dto::SierraEntryPoint { - fn try_into_dto( - ep: p2p_proto::class::SierraEntryPoint, - ) -> anyhow::Result { - let p2p_proto::class::SierraEntryPoint { index, selector } = ep; - let res = dto::SierraEntryPoint { - index, - selector: selector.into(), - }; - Ok(res) - } -} - -impl TryIntoDto for u8 { - fn try_into_dto(da: p2p_proto::common::L1DataAvailabilityMode) -> anyhow::Result { - let res = match da { - p2p_proto::common::L1DataAvailabilityMode::Calldata => 0, - p2p_proto::common::L1DataAvailabilityMode::Blob => 1, - }; - Ok(res) - } -} - -impl IntoModel for dto::FinalizedBlock { - fn into_model(self) -> FinalizedBlock { - let dto::FinalizedBlock { - header, - state_update, - transactions_and_receipts, - events, - } = self; - FinalizedBlock { - header: header.into_model(), - state_update: state_update.into_model(), - transactions_and_receipts: transactions_and_receipts - .into_iter() - .map(|(t, r)| (t.into(), r.into_model())) - .collect(), - events, - } - } -} - -impl IntoModel for dto::BlockHeader { - fn into_model(self) -> pathfinder_common::BlockHeader { - let dto::BlockHeader { - hash, - parent_hash, - number, - timestamp, - eth_l1_gas_price, - strk_l1_gas_price, - eth_l1_data_gas_price, - strk_l1_data_gas_price, - eth_l2_gas_price, - strk_l2_gas_price, - sequencer_address, - starknet_version, - event_commitment, - state_commitment, - transaction_commitment, - transaction_count, - event_count, - receipt_commitment, - state_diff_commitment, - state_diff_length, - l1_da_mode, - } = self; - pathfinder_common::BlockHeader { - hash, - parent_hash, - number, - timestamp, - eth_l1_gas_price, - strk_l1_gas_price, - eth_l1_data_gas_price, - strk_l1_data_gas_price, - eth_l2_gas_price, - strk_l2_gas_price, - sequencer_address, - starknet_version: pathfinder_common::StarknetVersion::from_u32(starknet_version), - event_commitment, - state_commitment, - transaction_commitment, - transaction_count: transaction_count as usize, - event_count: event_count as usize, - l1_da_mode, - receipt_commitment, - state_diff_commitment, - state_diff_length, - } - } -} - -impl IntoModel for dto::StateUpdateData { - fn into_model(self) -> state_update::StateUpdateData { - let dto::StateUpdateData { - contract_updates, - system_contract_updates, - declared_cairo_classes, - declared_sierra_classes, - migrated_compiled_classes, - } = self; - state_update::StateUpdateData { - contract_updates: contract_updates - .line - .into_iter() - .map(|(k, v)| (k, v.into_model())) - .collect(), - system_contract_updates: system_contract_updates - .line - .into_iter() - .map(|(k, v)| (k, v.into_model())) - .collect(), - declared_cairo_classes: declared_cairo_classes.into_iter().collect(), - declared_sierra_classes: declared_sierra_classes.line.into_iter().collect(), - migrated_compiled_classes: migrated_compiled_classes.line.into_iter().collect(), - } - } -} - -impl IntoModel for dto::ContractUpdate { - fn into_model(self) -> state_update::ContractUpdate { - let dto::ContractUpdate { - storage, - class, - nonce, - } = self; - state_update::ContractUpdate { - storage: storage.line.into_iter().collect(), - class: class.map(|c| c.into_model()), - nonce, - } - } -} - -impl IntoModel for dto::SystemContractUpdate { - fn into_model(self) -> state_update::SystemContractUpdate { - let dto::SystemContractUpdate { storage } = self; - state_update::SystemContractUpdate { - storage: storage.line.into_iter().collect(), - } - } -} - -impl IntoModel for dto::ContractClassUpdate { - fn into_model(self) -> state_update::ContractClassUpdate { - match self { - dto::ContractClassUpdate::Deploy(c) => state_update::ContractClassUpdate::Deploy(c), - dto::ContractClassUpdate::Replace(c) => state_update::ContractClassUpdate::Replace(c), - } - } -} - -impl IntoModel for dto::Receipt { - fn into_model(self) -> receipt::Receipt { - let dto::Receipt { - actual_fee, - execution_resources, - l2_to_l1_messages, - execution_status, - transaction_hash, - transaction_index, - } = self; - receipt::Receipt { - actual_fee, - execution_resources: execution_resources.into_model(), - l2_to_l1_messages: l2_to_l1_messages - .into_iter() - .map(|m| m.into_model()) - .collect(), - execution_status: execution_status.into_model(), - transaction_hash, - transaction_index, - } - } -} - -impl IntoModel for dto::L2ToL1Message { - fn into_model(self) -> receipt::L2ToL1Message { - let dto::L2ToL1Message { - from_address, - payload, - to_address, - } = self; - receipt::L2ToL1Message { - from_address, - payload, - to_address, - } - } -} - -impl IntoModel for dto::ExecutionResources { - fn into_model(self) -> receipt::ExecutionResources { - let dto::ExecutionResources { - builtins, - n_steps, - n_memory_holes, - data_availability, - total_gas_consumed, - l2_gas, - } = self; - receipt::ExecutionResources { - builtins: builtins.into_model(), - n_steps, - n_memory_holes, - data_availability: data_availability.into_model(), - total_gas_consumed: total_gas_consumed.into_model(), - l2_gas: receipt::L2Gas(l2_gas), - } - } -} - -impl IntoModel for dto::L1Gas { - fn into_model(self) -> receipt::L1Gas { - let dto::L1Gas { - l1_gas, - l1_data_gas, - } = self; - receipt::L1Gas { - l1_gas, - l1_data_gas, - } - } -} - -impl IntoModel for dto::BuiltinCounters { - fn into_model(self) -> receipt::BuiltinCounters { - let dto::BuiltinCounters { - output, - pedersen, - range_check, - ecdsa, - bitwise, - ec_op, - keccak, - poseidon, - segment_arena, - add_mod, - mul_mod, - range_check96, - } = self; - receipt::BuiltinCounters { - output, - pedersen, - range_check, - ecdsa, - bitwise, - ec_op, - keccak, - poseidon, - segment_arena, - add_mod, - mul_mod, - range_check96, - } - } -} - -impl IntoModel for dto::ExecutionStatus { - fn into_model(self) -> receipt::ExecutionStatus { - match self { - dto::ExecutionStatus::Succeeded => receipt::ExecutionStatus::Succeeded, - dto::ExecutionStatus::Reverted { reason } => { - receipt::ExecutionStatus::Reverted { reason } - } - } - } -} - -impl TryIntoDto for dto::FinalizedBlock { - fn try_into_dto(b: FinalizedBlock) -> anyhow::Result { - let FinalizedBlock { - header, - state_update, - transactions_and_receipts, - events, - } = b; - let res = dto::FinalizedBlock { - header: dto::BlockHeader::try_into_dto(header)?, - state_update: dto::StateUpdateData::try_into_dto(state_update)?, - transactions_and_receipts: transactions_and_receipts - .into_iter() - .map(|(tx, rcpt)| { - let dtx = TransactionV2::from(&tx); - let drcpt = dto::Receipt::try_into_dto(rcpt)?; - anyhow::Ok((dtx, drcpt)) - }) - .collect::, _>>()?, - events, - }; - Ok(res) - } -} - -impl TryIntoDto for dto::BlockHeader { - fn try_into_dto(h: pathfinder_common::BlockHeader) -> anyhow::Result { - let pathfinder_common::BlockHeader { - hash, - parent_hash, - number, - timestamp, - eth_l1_gas_price, - strk_l1_gas_price, - eth_l1_data_gas_price, - strk_l1_data_gas_price, - eth_l2_gas_price, - strk_l2_gas_price, - sequencer_address, - starknet_version, - event_commitment, - state_commitment, - transaction_commitment, - transaction_count, - event_count, - l1_da_mode, - receipt_commitment, - state_diff_commitment, - state_diff_length, - } = h; - let res = dto::BlockHeader { - hash, - parent_hash, - number, - timestamp, - eth_l1_gas_price, - strk_l1_gas_price, - eth_l1_data_gas_price, - strk_l1_data_gas_price, - eth_l2_gas_price, - strk_l2_gas_price, - sequencer_address, - starknet_version: starknet_version.as_u32(), - event_commitment, - state_commitment, - transaction_commitment, - transaction_count: transaction_count.try_into()?, - event_count: event_count.try_into()?, - receipt_commitment, - state_diff_commitment, - state_diff_length, - l1_da_mode, - }; - Ok(res) - } -} - -impl TryIntoDto for dto::StateUpdateData { - fn try_into_dto(u: state_update::StateUpdateData) -> anyhow::Result { - let state_update::StateUpdateData { - contract_updates, - system_contract_updates, - declared_cairo_classes, - declared_sierra_classes, - migrated_compiled_classes, - } = u; - let res = dto::StateUpdateData { - contract_updates: - dto::LinearMap { - line: - contract_updates - .into_iter() - .map(|(a, u)| anyhow::Ok((a, dto::ContractUpdate::try_into_dto(u)?))) - .collect::, - _, - >>()?, - }, - system_contract_updates: dto::LinearMap { - line: system_contract_updates - .into_iter() - .map(|(a, u)| anyhow::Ok((a, dto::SystemContractUpdate::try_into_dto(u)?))) - .collect::, - _, - >>()?, - }, - declared_cairo_classes: declared_cairo_classes.into_iter().collect(), - declared_sierra_classes: dto::LinearMap { - line: declared_sierra_classes.into_iter().collect(), - }, - migrated_compiled_classes: dto::LinearMap { - line: migrated_compiled_classes.into_iter().collect(), - }, - }; - Ok(res) - } -} - -impl TryIntoDto for dto::ContractUpdate { - fn try_into_dto(u: state_update::ContractUpdate) -> anyhow::Result { - let state_update::ContractUpdate { - storage, - class, - nonce, - } = u; - let res = dto::ContractUpdate { - storage: dto::LinearMap { - line: storage.into_iter().collect(), - }, - class: class - .map(dto::ContractClassUpdate::try_into_dto) - .transpose()?, - nonce, - }; - Ok(res) - } -} - -impl TryIntoDto for dto::SystemContractUpdate { - fn try_into_dto( - u: state_update::SystemContractUpdate, - ) -> anyhow::Result { - let state_update::SystemContractUpdate { storage } = u; - let res = dto::SystemContractUpdate { - storage: dto::LinearMap { - line: storage.into_iter().collect(), - }, - }; - Ok(res) - } -} - -impl TryIntoDto for dto::ContractClassUpdate { - fn try_into_dto( - u: state_update::ContractClassUpdate, - ) -> anyhow::Result { - let res = match u { - state_update::ContractClassUpdate::Deploy(c) => dto::ContractClassUpdate::Deploy(c), - state_update::ContractClassUpdate::Replace(c) => dto::ContractClassUpdate::Replace(c), - }; - Ok(res) - } -} - -impl TryIntoDto for dto::Receipt { - fn try_into_dto(r: receipt::Receipt) -> anyhow::Result { - let receipt::Receipt { - actual_fee, - execution_resources, - l2_to_l1_messages, - execution_status, - transaction_hash, - transaction_index, - } = r; - let res = dto::Receipt { - actual_fee, - execution_resources: dto::ExecutionResources::try_into_dto(execution_resources)?, - l2_to_l1_messages: l2_to_l1_messages - .into_iter() - .map(dto::L2ToL1Message::try_into_dto) - .collect::, _>>()?, - execution_status: dto::ExecutionStatus::try_into_dto(execution_status)?, - transaction_hash, - transaction_index, - }; - Ok(res) - } -} - -impl TryIntoDto for dto::L2ToL1Message { - fn try_into_dto(m: receipt::L2ToL1Message) -> anyhow::Result { - let receipt::L2ToL1Message { - from_address, - payload, - to_address, - } = m; - let res = dto::L2ToL1Message { - from_address, - payload, - to_address, - }; - Ok(res) - } -} - -impl TryIntoDto for dto::ExecutionResources { - fn try_into_dto(er: receipt::ExecutionResources) -> anyhow::Result { - let receipt::ExecutionResources { - builtins, - n_steps, - n_memory_holes, - data_availability, - total_gas_consumed, - l2_gas, - } = er; - let res = dto::ExecutionResources { - builtins: dto::BuiltinCounters::try_into_dto(builtins)?, - n_steps, - n_memory_holes, - data_availability: dto::L1Gas::try_into_dto(data_availability)?, - total_gas_consumed: dto::L1Gas::try_into_dto(total_gas_consumed)?, - l2_gas: l2_gas.0, - }; - Ok(res) - } -} - -impl TryIntoDto for dto::L1Gas { - fn try_into_dto(g: receipt::L1Gas) -> anyhow::Result { - let receipt::L1Gas { - l1_gas, - l1_data_gas, - } = g; - let res = dto::L1Gas { - l1_gas, - l1_data_gas, - }; - Ok(res) - } -} - -impl TryIntoDto for dto::BuiltinCounters { - fn try_into_dto(bc: receipt::BuiltinCounters) -> anyhow::Result { - let receipt::BuiltinCounters { - output, - pedersen, - range_check, - ecdsa, - bitwise, - ec_op, - keccak, - poseidon, - segment_arena, - add_mod, - mul_mod, - range_check96, - } = bc; - let res = dto::BuiltinCounters { - output, - pedersen, - range_check, - ecdsa, - bitwise, - ec_op, - keccak, - poseidon, - segment_arena, - add_mod, - mul_mod, - range_check96, - }; - Ok(res) - } -} - -impl TryIntoDto for dto::ExecutionStatus { - fn try_into_dto(e: receipt::ExecutionStatus) -> anyhow::Result { - let res = match e { - receipt::ExecutionStatus::Succeeded => dto::ExecutionStatus::Succeeded, - receipt::ExecutionStatus::Reverted { reason } => { - dto::ExecutionStatus::Reverted { reason } - } - }; - Ok(res) - } -} diff --git a/crates/pathfinder/src/consensus/inner/dto.rs b/crates/pathfinder/src/consensus/inner/dto.rs deleted file mode 100644 index 823c3ef66a..0000000000 --- a/crates/pathfinder/src/consensus/inner/dto.rs +++ /dev/null @@ -1,245 +0,0 @@ -use pathfinder_storage::{ - DeclareTransactionV4, - DeployAccountTransactionV4, - InvokeTransactionV4, - L1HandlerTransactionV0, - MinimalFelt, - TransactionV2, -}; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Deserialize, Serialize)] -pub enum ProposalParts { - V0(Vec), -} - -#[derive(Debug, Deserialize, Serialize)] -pub enum ProposalPart { - Init(ProposalInit), - Fin(ProposalFin), - BlockInfo(BlockInfo), - TransactionBatch(Vec), - TransactionsFin(TransactionsFin), - ProposalCommitment(Box), -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct ProposalInit { - pub block_number: u64, - pub round: u32, - pub valid_round: Option, - pub proposer: MinimalFelt, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct BlockInfo { - pub block_number: u64, - pub builder: MinimalFelt, - pub timestamp: u64, - pub l2_gas_price_fri: u128, - pub l1_gas_price_wei: u128, - pub l1_data_gas_price_wei: u128, - pub eth_to_strk_rate: u128, - pub l1_da_mode: u8, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct ProposalFin { - pub proposal_commitment: MinimalFelt, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct TransactionWithClass { - pub variant: TransactionVariantWithClass, - pub hash: MinimalFelt, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct TransactionsFin { - pub executed_transaction_count: u64, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct ProposalCommitment { - pub block_number: u64, - pub parent_commitment: MinimalFelt, - pub builder: MinimalFelt, - pub timestamp: u64, - pub protocol_version: String, - pub old_state_root: MinimalFelt, - pub version_constant_commitment: MinimalFelt, - pub state_diff_commitment: MinimalFelt, - pub transaction_commitment: MinimalFelt, - pub event_commitment: MinimalFelt, - pub receipt_commitment: MinimalFelt, - pub concatenated_counts: MinimalFelt, - pub l1_gas_price_fri: u128, - pub l1_data_gas_price_fri: u128, - pub l2_gas_price_fri: u128, - pub l2_gas_used: u128, - pub next_l2_gas_price_fri: u128, - pub l1_da_mode: u8, -} - -#[derive(Debug, Deserialize, Serialize)] -pub enum TransactionVariantWithClass { - Declare(DeclareTransactionWithClass), - DeployAccount(DeployAccountTransactionV4), - Invoke(InvokeTransactionV4), - L1Handler(L1HandlerTransactionV0), -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct DeclareTransactionWithClass { - pub declare_transaction: DeclareTransactionV4, - pub class: Cairo1Class, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct Cairo1Class { - pub abi: String, - pub entry_points: Cairo1EntryPoints, - pub program: Vec, - pub contract_class_version: String, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct Cairo1EntryPoints { - pub externals: Vec, - pub l1_handlers: Vec, - pub constructors: Vec, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct SierraEntryPoint { - pub index: u64, - pub selector: MinimalFelt, -} - -#[derive(Debug, Deserialize, Serialize)] -pub enum PersistentFinalizedBlock { - V0(FinalizedBlock), -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct FinalizedBlock { - pub header: BlockHeader, - pub state_update: StateUpdateData, - pub transactions_and_receipts: Vec<(TransactionV2, Receipt)>, - pub events: Vec>, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct BlockHeader { - pub hash: pathfinder_common::BlockHash, - pub parent_hash: pathfinder_common::BlockHash, - pub number: pathfinder_common::BlockNumber, - pub timestamp: pathfinder_common::BlockTimestamp, - pub eth_l1_gas_price: pathfinder_common::GasPrice, - pub strk_l1_gas_price: pathfinder_common::GasPrice, - pub eth_l1_data_gas_price: pathfinder_common::GasPrice, - pub strk_l1_data_gas_price: pathfinder_common::GasPrice, - pub eth_l2_gas_price: pathfinder_common::GasPrice, - pub strk_l2_gas_price: pathfinder_common::GasPrice, - pub sequencer_address: pathfinder_common::SequencerAddress, - pub starknet_version: u32, - pub event_commitment: pathfinder_common::EventCommitment, - pub state_commitment: pathfinder_common::StateCommitment, - pub transaction_commitment: pathfinder_common::TransactionCommitment, - pub transaction_count: u64, - pub event_count: u64, - pub receipt_commitment: pathfinder_common::ReceiptCommitment, - pub state_diff_commitment: pathfinder_common::StateDiffCommitment, - pub state_diff_length: u64, - pub l1_da_mode: pathfinder_common::L1DataAvailabilityMode, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct StateUpdateData { - pub contract_updates: LinearMap, - pub system_contract_updates: - LinearMap, - pub declared_cairo_classes: Vec, - pub declared_sierra_classes: - LinearMap, - pub migrated_compiled_classes: - LinearMap, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct LinearMap { - pub line: Vec<(K, V)>, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct ContractUpdate { - pub storage: LinearMap, - pub class: Option, - pub nonce: Option, -} - -#[derive(Debug, Deserialize, Serialize)] -pub enum ContractClassUpdate { - Deploy(pathfinder_common::ClassHash), - Replace(pathfinder_common::ClassHash), -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct SystemContractUpdate { - pub storage: LinearMap, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct Receipt { - pub actual_fee: pathfinder_common::Fee, - pub execution_resources: ExecutionResources, - pub l2_to_l1_messages: Vec, - pub execution_status: ExecutionStatus, - pub transaction_hash: pathfinder_common::TransactionHash, - pub transaction_index: pathfinder_common::TransactionIndex, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct L2ToL1Message { - pub from_address: pathfinder_common::ContractAddress, - pub payload: Vec, - pub to_address: pathfinder_common::ContractAddress, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct ExecutionResources { - pub builtins: BuiltinCounters, - pub n_steps: u64, - pub n_memory_holes: u64, - pub data_availability: L1Gas, - pub total_gas_consumed: L1Gas, - pub l2_gas: u128, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct L1Gas { - pub l1_gas: u128, - pub l1_data_gas: u128, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct BuiltinCounters { - pub output: u64, - pub pedersen: u64, - pub range_check: u64, - pub ecdsa: u64, - pub bitwise: u64, - pub ec_op: u64, - pub keccak: u64, - pub poseidon: u64, - pub segment_arena: u64, - pub add_mod: u64, - pub mul_mod: u64, - pub range_check96: u64, -} - -#[derive(Debug, Deserialize, Serialize)] -pub enum ExecutionStatus { - Succeeded, - Reverted { reason: String }, -} diff --git a/crates/pathfinder/src/consensus/inner/dummy_proposal.rs b/crates/pathfinder/src/consensus/inner/dummy_proposal.rs new file mode 100644 index 0000000000..2fdc3892a2 --- /dev/null +++ b/crates/pathfinder/src/consensus/inner/dummy_proposal.rs @@ -0,0 +1,532 @@ +//! Test helpers for consensus transaction testing +//! +//! This module provides utilities for creating realistic test transactions +//! and testing consensus scenarios with actual transaction execution. + +use std::num::NonZeroUsize; +use std::sync::Arc; +use std::time::Duration; + +use anyhow::Context; +use p2p_proto::common::{Address, Hash, L1DataAvailabilityMode}; +use p2p_proto::consensus::{BlockInfo, ProposalFin, ProposalInit, ProposalPart}; +use pathfinder_common::{ + BlockId, + BlockNumber, + ChainId, + ConsensusFinalizedL2Block, + ContractAddress, + DecidedBlocks, +}; +use pathfinder_consensus::Round; +use pathfinder_crypto::Felt; +use pathfinder_executor::{ConcurrentStateReader, ExecutorWorkerPool}; +use pathfinder_storage::Storage; +use pathfinder_validator::{ProdTransactionMapper, ValidatorBlockInfoStage}; +use rand::seq::SliceRandom; +use rand::{thread_rng, Rng, SeedableRng}; + +use crate::devnet::{self, strictly_increasing_timestamp, Account}; + +// TODO consider waiting for the parent block to land in the decided blocks +/// Blocks consensus tasks's processing loop until the parent block of height is +/// committed in main storage without blocking the async runtime. +pub(crate) async fn wait_for_parent_committed( + height: u64, + main_storage: Storage, + poll_interval: Duration, +) -> anyhow::Result<()> { + let parent_number = height.checked_sub(1); + + tracing::debug!( + %height, + ?parent_number, + "Waiting for parent block to be committed" + ); + + util::task::spawn_blocking(move |cancellation_token| { + if let Some(parent_number) = parent_number { + loop { + if cancellation_token.is_cancelled() { + break; + } + + { + let mut main_db_conn = main_storage.connection()?; + let main_db_txn = main_db_conn.transaction()?; + + if main_db_txn + .block_exists(BlockId::Number(BlockNumber::new_or_panic(parent_number)))? + { + break; + } + + // Drop the transaction and return the connection to the + // pool before sleeping to avoid holding locks on the DB or + // shrinking available DB connections in the pool + // for longer than necessary + } + + tracing::debug!( + %height, + %parent_number, + "Parent block not yet committed, sleeping" + ); + + std::thread::sleep(poll_interval); + } + } + + anyhow::Ok(()) + }) + .await??; + + Ok(()) +} + +/// Creates a dummy proposal for the given height and round, filling it with +/// realistic transactions based on the state of the main storage DB, if it is +/// bootstrapped, or with invalid L1 handler transactions otherwise. +#[allow(clippy::too_many_arguments)] +pub(crate) fn create( + height: u64, + round: Round, + account: &Account, + proposer: ContractAddress, + main_storage: Storage, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, + config: Option, +) -> anyhow::Result<(Vec, ConsensusFinalizedL2Block)> { + let mut db_conn = main_storage.connection()?; + let db_txn = db_conn.transaction()?; + + if devnet::devnet_genesis_exists(&db_txn)? { + create_from_bootstrapped_devnet_db( + &db_txn, + height, + round, + account, + proposer, + main_storage, + compiler_resource_limits, + blockifier_libfuncs, + ) + } else { + create_with_invalid_l1_handler_transactions( + &db_txn, + height, + round, + proposer, + main_storage, + compiler_resource_limits, + blockifier_libfuncs, + config, + ) + } +} + +/// Creates a proposal with realistic transactions for the given height and +/// round, which: +/// - Deploys the "Hello Starknet" contract if it has not been deployed yet +/// - Invokes the "increase_balance" and "get_balance" functions of random +/// deployed instances +/// - Deploys more instances of the "Hello Starknet" contract randomly +#[allow(clippy::too_many_arguments)] +pub(crate) fn create_from_bootstrapped_devnet_db( + db_txn: &pathfinder_storage::Transaction<'_>, + height: u64, + round: Round, + account: &Account, + proposer: ContractAddress, + main_storage: Storage, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, +) -> anyhow::Result<(Vec, ConsensusFinalizedL2Block)> { + // TODO setting these constant to higher values can lead to weird panics in + // other validator (Pathfinder) nodes, which we need to investigate + const MAX_NUM_BATCHES: usize = 2; + // Number of loop iterations per batch, each iteration can add at most 3 + // transactions, so max batch length is MAX_BATCH_TRIES * 3. + const MAX_BATCH_TRIES: usize = 2; + + let round = round.as_u32().context(format!( + "Attempted to create proposal with Nil round at height {height}" + ))?; + + // We update the account entity each time, because the previously created + // transactions could have not gone into the committed block and thus we + // want to be sure we have the correct initial account nonce value and we are + // sure of the previous deployments before we start the new proposal. + account.update( + db_txn, + BlockNumber::new(height) + .context("Height exceeds i64::MAX")? + .parent(), + )?; + + let deployed_in_db = account.deployed(); + + // We generate up to 10 batches of up to 30 transactions and then randomly pick + // how many of those transactions we execute. + let seed = thread_rng().gen::(); + tracing::debug!(%height, %round, %seed, "Creating dummy proposal"); + let mut rng = rand_chacha::ChaCha12Rng::seed_from_u64(seed); + + let mut batches = Vec::new(); + let mut next_txn_idx_start = 0; + + // IMPORTANT + // Until ConcurrentStorageAdapter supports decided blocks we have to split + // declaring and deploying HelloStarknet into consecutive blocks. Otherwise the + // deployment will not succeed because the declaration may not be committed to + // storage yet, and we strictly do not want to mix successful and reverted + // transactions in the integration tests because this just simplifies + // correctness checks (either all successful or all reverted in case of a + // non-bootstrapped DB). + // + // Bootstrapped devnet DB already contains the genesis block, so the declaration + // of HelloStarknet falls into block number 1. + if height == 1 { + let first_batch = vec![account.hello_starknet_declare()?]; + next_txn_idx_start += first_batch.len(); + batches.push(first_batch); + } else { + // HelloStarknet need to be deployed at least once before we can invoke it, so + // if there are no deployments in the DB we just create a batch with the deploy + // transaction. + // + // IMPORTANT + // Until ConcurrentStorageAdapter supports decided blocks we have to split + // deploying HelloStarknet fir the first time and invoking it into consecutive + // blocks. Otherwise the first invokes will not succeed because the deployment + // may not be committed to storage yet, and we strictly do not want to mix + // successful and reverted transactions in the integration tests because + // this just simplifies correctness checks (either all successful or all + // reverted in case of a non-bootstrapped DB). + if deployed_in_db.is_empty() { + // Declare goes into the first proposal, that's it + let first_batch = vec![account.hello_starknet_deploy()?]; + next_txn_idx_start += first_batch.len(); + batches.push(first_batch); + } else { + let num_batches = rng.gen_range(1..=MAX_NUM_BATCHES); + + for _ in 0..num_batches { + let batch_tries = rng.gen_range(1..=MAX_BATCH_TRIES); + let mut batch = Vec::new(); + + for _ in 0..batch_tries { + // Maybe deploy another instance + if rng.gen() { + batch.push(account.hello_starknet_deploy()?); + } + + // Invoke a random contract instance if there are any deployments in the DB + if let Some(contract_address) = deployed_in_db.choose(&mut rng) { + batch.push(account.hello_starknet_increase_balance( + *contract_address, + rng.gen_range(1..=1000), + )); + // This is a view function, but it still gives us a realistic transaction + batch.push(account.hello_starknet_get_balance(*contract_address)); + } + + next_txn_idx_start += batch.len(); + } + + if !batch.is_empty() { + batches.push(batch); + } + } + } + } + + let num_executed_txns = rng.gen_range(1..=next_txn_idx_start); + let txns_to_execute = batches + .iter() + .flatten() + .take(num_executed_txns) + .cloned() + .collect(); + + // This is fine because `wait_for_parent_committed` is called first + let latest_timestamp = db_txn.block_header(BlockId::Latest)?.map(|h| h.timestamp); + + let worker_pool = ExecutorWorkerPool::::auto().get(); + let (mut validator, mut parts) = devnet::init_proposal_and_validator( + BlockNumber::new(height).context("Height exceeds i64::MAX")?, + round, + Address(proposer.0), + latest_timestamp, + main_storage.clone(), + worker_pool.clone(), + )?; + validator.execute_batch::( + txns_to_execute, + compiler_resource_limits, + blockifier_libfuncs, + )?; + let block = validator.consensus_finalize0()?; + let worker_pool = Arc::into_inner(worker_pool).context("Failed join worker pool")?; + worker_pool.join(); + + parts.extend(batches.into_iter().map(ProposalPart::TransactionBatch)); + parts.push(ProposalPart::ExecutedTransactionCount( + num_executed_txns as u64, + )); + parts.push(ProposalPart::Fin(ProposalFin { + proposal_commitment: Hash(block.header.state_diff_commitment.0), + })); + + Ok((parts, block)) +} + +#[derive(Debug)] +pub(crate) struct ProposalCreationConfig { + pub num_batches: NonZeroUsize, + pub batch_len: NonZeroUsize, + pub num_executed_txns: NonZeroUsize, +} + +/// Creates a dummy proposal for the given height and round, filling it with +/// random L1 handler transactions, which all ultimately will be reverted. +/// +/// TODO: Until empty proposals reintroduce timestamps, we cannot create +/// empty proposals here. +#[allow(clippy::too_many_arguments)] +pub(crate) fn create_with_invalid_l1_handler_transactions( + db_txn: &pathfinder_storage::Transaction<'_>, + height: u64, + round: Round, + proposer: ContractAddress, + main_storage: Storage, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, + config: Option, +) -> anyhow::Result<(Vec, ConsensusFinalizedL2Block)> { + let round = round.as_u32().context(format!( + "Attempted to create proposal with Nil round at height {height}" + ))?; + + // This is fine because `wait_for_parent_committed` is called first + let latest_timestamp = db_txn.block_header(BlockId::Latest)?.map(|h| h.timestamp); + + let seed = thread_rng().gen::(); + tracing::debug!(%height, %round, %seed, ?config, "Creating dummy proposal with invalid L1 handler transactions"); + let mut rng = rand_chacha::ChaCha12Rng::seed_from_u64(seed); + + let mut batches = Vec::new(); + let num_batches = config + .as_ref() + .map(|c| c.num_batches.get()) + .unwrap_or_else(|| rng.gen_range(1..=10)); + + let mut next_txn_idx_start = 0; + for _ in 1..=num_batches { + let batch_len = config + .as_ref() + .map(|c| c.batch_len.get()) + .unwrap_or_else(|| rng.gen_range(1..=10)); + + let batch = create_transaction_batch( + height as u32, + next_txn_idx_start, + batch_len, + ChainId::SEPOLIA_TESTNET, + ); + + batches.push(batch); + next_txn_idx_start += batch_len; + } + + let proposal_init = ProposalInit { + height, + round, + valid_round: None, + proposer: Address(proposer.0), + }; + + let mut parts = vec![ProposalPart::Init(proposal_init.clone())]; + + let block_info = BlockInfo { + height, + builder: Address(proposer.0), + timestamp: strictly_increasing_timestamp(latest_timestamp).get(), + l2_gas_price_fri: 1_000_000, + l1_gas_price_fri: 1_000_000, + l1_data_gas_price_fri: 1_000_000, + l1_gas_price_wei: 1_000_000, + l1_data_gas_price_wei: 1_000_000, + l1_da_mode: L1DataAvailabilityMode::Calldata, + }; + + parts.push(ProposalPart::BlockInfo(block_info.clone())); + + let validator = ValidatorBlockInfoStage::new(ChainId::SEPOLIA_TESTNET, proposal_init)?; + let worker_pool = ExecutorWorkerPool::::new(1).get(); + let mut validator = validator.skip_validation( + block_info.clone(), + main_storage, + worker_pool.clone(), + DecidedBlocks::default(), + )?; + + let num_executed_txns = config + .as_ref() + .map(|c| c.num_executed_txns.get()) + .unwrap_or_else(|| rng.gen_range(1..=next_txn_idx_start)); + + let txns_to_execute = batches + .iter() + .flatten() + .take(num_executed_txns) + .cloned() + .collect(); + + parts.extend(batches.into_iter().map(ProposalPart::TransactionBatch)); + parts.push(ProposalPart::ExecutedTransactionCount( + num_executed_txns as u64, + )); + + validator + .execute_batch::( + txns_to_execute, + compiler_resource_limits, + blockifier_libfuncs, + ) + .unwrap(); + + let block = validator.consensus_finalize0()?; + + parts.push(ProposalPart::Fin(ProposalFin { + proposal_commitment: Hash(block.header.state_diff_commitment.0), + })); + + let worker_pool = Arc::into_inner(worker_pool).context("Failed join worker pool")?; + worker_pool.join(); + + Ok((parts, block)) +} + +/// Creates a batch of transactions for testing +pub fn create_transaction_batch( + seed: u32, + start_index: usize, + count: usize, + chain_id: ChainId, +) -> Vec { + (start_index..start_index + count) + .map(|i| create_l1_handler_transaction(seed, i, chain_id)) + .collect() +} + +/// Creates a realistic L1Handler transaction for testing +/// +/// `seed` is used to vary the transaction content independently of `index`, +/// so that we don't encounter duplicate transaction hashes across +/// multiple blocks. +pub fn create_l1_handler_transaction( + seed: u32, + index: usize, + chain_id: ChainId, +) -> p2p_proto::consensus::Transaction { + // base is a seed and index dependent value to avoid collisions but at the same + // time easily allow to trace back which seed/index produced the transaction + let base = index as u64 + ((seed as u64) << 32); + let base = Felt::from_u64(base); + + // Create the L1Handler transaction + let txn = p2p_proto::consensus::TransactionVariant::L1HandlerV0( + p2p_proto::transaction::L1HandlerV0 { + nonce: base, + address: Address(base), + entry_point_selector: base, + calldata: vec![base], + }, + ); + + // Calculate the correct hash + let l1_handler = pathfinder_common::transaction::L1HandlerTransaction { + nonce: pathfinder_common::TransactionNonce(base), + contract_address: ContractAddress::new_or_panic(base), + entry_point_selector: pathfinder_common::EntryPoint(base), + calldata: vec![pathfinder_common::CallParam(base)], + }; + + let hash = l1_handler.calculate_hash(chain_id); + + p2p_proto::consensus::Transaction { + transaction_hash: p2p_proto::common::Hash(hash.0), + txn, + } +} + +/// Creates a test proposal init and block info for the given height and round. +#[cfg(test)] +pub(crate) fn create_test_proposal_init( + _chain_id: ChainId, + height: u64, + round: u32, + proposer: ContractAddress, +) -> (ProposalInit, BlockInfo) { + let proposer_address = Address(proposer.0); + let timestamp = std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap_or_default() + .as_secs(); + + let proposal_init = ProposalInit { + height, + round, + valid_round: None, + proposer: proposer_address, + }; + + let block_info = BlockInfo { + height, + timestamp, + builder: proposer_address, + l1_da_mode: L1DataAvailabilityMode::default(), + l2_gas_price_fri: 1, + l1_gas_price_fri: 1_000_000_000, + l1_data_gas_price_fri: 1, + l1_gas_price_wei: 1_000_000_000, + l1_data_gas_price_wei: 1, + }; + + (proposal_init, block_info) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_create_l1_handler_transaction() { + let chain_id = ChainId::SEPOLIA_TESTNET; + let tx = create_l1_handler_transaction(0, 1, chain_id); + + // Verify the transaction has a valid hash + assert!(!tx.transaction_hash.0.is_zero()); + + // Verify it's an L1Handler transaction + match tx.txn { + p2p_proto::consensus::TransactionVariant::L1HandlerV0(_) => {} + _ => panic!("Expected L1Handler transaction"), + } + } + + #[test] + fn test_create_transaction_batch() { + let chain_id = ChainId::SEPOLIA_TESTNET; + let batch = create_transaction_batch(0, 10, 5, chain_id); + + assert_eq!(batch.len(), 5); + + // Verify all transactions have different hashes + let hashes: std::collections::HashSet<_> = + batch.iter().map(|tx| tx.transaction_hash.0).collect(); + assert_eq!(hashes.len(), 5); // All unique + } +} diff --git a/crates/pathfinder/src/consensus/inner/gossip_retry.rs b/crates/pathfinder/src/consensus/inner/gossip_retry.rs new file mode 100644 index 0000000000..2ffc11a6aa --- /dev/null +++ b/crates/pathfinder/src/consensus/inner/gossip_retry.rs @@ -0,0 +1,243 @@ +use std::time::Duration; + +use p2p::consensus::{Client, HeightAndRound}; +use p2p_proto::consensus::{ProposalPart, Vote}; +use pathfinder_common::ContractAddress; + +/// Configuration for gossip retry behavior. +#[derive(Debug, Clone)] +pub(crate) struct GossipRetryConfig { + /// Maximum number of retries for recoverable errors. + pub max_retries: u32, + /// Maximum number of retries for NoPeersSubscribedToTopic (expected during + /// startup when no peers are subscribed to the topic yet). + pub max_no_peers_subscribed_retries: u32, + /// Initial retry delay in milliseconds for exponential backoff. + pub initial_retry_delay_ms: u64, + /// Delay in milliseconds for NoPeersSubscribedToTopic retries (fixed + /// delay). + pub no_peers_subscribed_delay_ms: u64, + /// Maximum exponential backoff delay in milliseconds (cap for backoff). + pub max_backoff_delay_ms: u64, +} + +impl Default for GossipRetryConfig { + fn default() -> Self { + Self { + // Recoverable errors: exponential backoff with fewer retries since these indicate + // transient network issues that should resolve quickly. + max_retries: 10, + // NoPeersSubscribedToTopic: more retries with fixed delay since this is expected + // during startup when no peers are subscribed to the topic yet. The longer delay (5s) + // gives peers more time to subscribe before retrying. + max_no_peers_subscribed_retries: 20, + initial_retry_delay_ms: 2000, // 2 seconds + no_peers_subscribed_delay_ms: 5000, // 5 seconds + max_backoff_delay_ms: 20_000, // 20 seconds (2x propose timeout) + } + } +} + +/// Handler for gossiping messages with retry logic. +pub(crate) struct GossipHandler { + validator_address: ContractAddress, + config: GossipRetryConfig, +} + +impl GossipHandler { + /// Create a new gossip retry handler. + pub fn new(validator_address: ContractAddress, config: GossipRetryConfig) -> Self { + Self { + validator_address, + config, + } + } + + /// Gossip a proposal with retry logic. + pub async fn gossip_proposal( + &self, + p2p_client: &Client, + height_and_round: HeightAndRound, + proposal_parts: Vec, + ) -> Result<(), anyhow::Error> { + let context = format!("proposal for {height_and_round}"); + gossip_with_retry( + self.validator_address, + &context, + || { + let proposal_parts = proposal_parts.clone(); + p2p_client.gossip_proposal(height_and_round, proposal_parts) + }, + &self.config, + ) + .await + } + + /// Gossip a vote with retry logic. + pub async fn gossip_vote(&self, p2p_client: &Client, vote: Vote) -> Result<(), anyhow::Error> { + let context = format!("vote {vote:?}"); + gossip_with_retry( + self.validator_address, + &context, + || { + let vote = vote.clone(); + p2p_client.gossip_vote(vote) + }, + &self.config, + ) + .await + } +} + +/// Attempt to gossip a message to the network. +/// +/// Recoverable errors are retried with exponential backoff. Fatal errors are +/// returned as an error. +/// +/// Note: After max retries for recoverable errors, we return `Ok(())` to avoid +/// crashing the task. The consensus engine has internal timeout mechanisms that +/// should advance rounds if gossip fails. For proposals, if we're the proposer +/// and fail to gossip, the engine should timeout and move to the next round. +/// For votes, other validators can still make progress without our vote. +pub(crate) async fn gossip_with_retry( + validator_address: ContractAddress, + context: &str, // e.g., "proposal" or "vote" + mut gossip_fn: F, + config: &GossipRetryConfig, +) -> Result<(), anyhow::Error> +where + F: FnMut() -> Fut, + Fut: std::future::Future>, +{ + use p2p::libp2p::gossipsub::PublishError; + + let mut retry_count = 0; + let mut no_peers_subscribed_retry_count = 0; + + loop { + match gossip_fn().await { + Ok(()) => { + tracing::debug!( + validator = %validator_address, + context = context, + "🖧 Gossiping {} SUCCESS", + context + ); + return Ok(()); + } + // Duplicate means the message was already published, so treat as success. + Err(PublishError::Duplicate) => { + tracing::debug!( + validator = %validator_address, + context = context, + "🖧 Gossiping {} SUCCESS (duplicate - already published)", + context + ); + return Ok(()); + } + // This error variant means "no peers subscribed to the topic" (renamed to + // NoPeersSubscribedToTopic in newer libp2p versions). + Err(PublishError::NoPeersSubscribedToTopic) => { + no_peers_subscribed_retry_count += 1; + if no_peers_subscribed_retry_count >= config.max_no_peers_subscribed_retries { + tracing::error!( + validator = %validator_address, + context = context, + retry_count = no_peers_subscribed_retry_count, + max_retries = config.max_no_peers_subscribed_retries, + "Failed to gossip {} after max NoPeersSubscribedToTopic retries - giving up", + context + ); + // Consensus engine should handle missing gossip via timeouts, so we return Ok. + return Ok(()); + } + tracing::warn!( + validator = %validator_address, + context = context, + retry_count = no_peers_subscribed_retry_count, + max_retries = config.max_no_peers_subscribed_retries, + "No peers subscribed to topic for {}, retrying...", + context + ); + tokio::time::sleep(Duration::from_millis(config.no_peers_subscribed_delay_ms)) + .await; + } + Err(error) => { + if is_gossip_error_recoverable(&error) { + retry_count += 1; + if retry_count >= config.max_retries { + tracing::error!( + validator = %validator_address, + context = context, + retry_count = retry_count, + max_retries = config.max_retries, + error = %error, + "Failed to gossip {} after max retries - giving up", + context + ); + // Consensus engine should handle missing gossip via timeouts, so we return + // Ok. + return Ok(()); + } + // Retry with exponential backoff: initial_delay * 2^retry_count (capped at + // max_backoff_delay_ms) + let backoff_multiplier = 2_u64.pow(retry_count); + let delay_ms = (config.initial_retry_delay_ms * backoff_multiplier) + .min(config.max_backoff_delay_ms); + tracing::warn!( + validator = %validator_address, + context = context, + retry_count = retry_count, + max_retries = config.max_retries, + delay_ms = delay_ms, + error = %error, + "Transient error gossiping {} - retrying with exponential backoff", + context + ); + tokio::time::sleep(Duration::from_millis(delay_ms)).await; + } else { + tracing::error!( + validator = %validator_address, + context = context, + error = %error, + "Fatal error gossiping {} - task must restart", + context + ); + // Fatal, unexpected publish error. Likely something permanent that won't be + // resolved by retrying. Return the error. + return Err(anyhow::Error::from(error) + .context(format!("Fatal error gossiping {context}"))); + } + } + } + } +} + +/// Classify whether a gossip/network error should be retried with exponential +/// backoff. +/// +/// Returns `true` for recoverable errors (retried with exponential backoff). +/// Returns `false` for fatal errors (permanent issues, no retries). +pub(crate) fn is_gossip_error_recoverable(error: &p2p::libp2p::gossipsub::PublishError) -> bool { + use p2p::libp2p::gossipsub::PublishError; + + match error { + // These are handled separately in gossip_with_retry and should never reach here. + PublishError::NoPeersSubscribedToTopic => { + unreachable!("NoPeersSubscribedToTopic handled separately") + } + PublishError::Duplicate => unreachable!("Duplicate handled separately"), + + // The network queues are temporarily full but should clear up. + PublishError::AllQueuesFull(_) => true, + + // IO error during compression + PublishError::TransformFailed(_) => false, + + // Message will never fit, no point retrying. + PublishError::MessageTooLarge => false, + + // Signing failed, permanent issue. + PublishError::SigningError(_) => false, + } +} diff --git a/crates/pathfinder/src/consensus/inner/integration_testing.rs b/crates/pathfinder/src/consensus/inner/integration_testing.rs index f4e3296e6d..3886456b52 100644 --- a/crates/pathfinder/src/consensus/inner/integration_testing.rs +++ b/crates/pathfinder/src/consensus/inner/integration_testing.rs @@ -5,6 +5,7 @@ use std::path::Path; use p2p_proto::consensus::ProposalPart; +use pathfinder_consensus::VoteType; use crate::config::integration_testing::{InjectFailureConfig, InjectFailureTrigger}; @@ -110,19 +111,15 @@ pub fn debug_fail_on_proposal_part( ProposalPart::BlockInfo(_), InjectFailureTrigger::BlockInfoRx ) + | (ProposalPart::Fin(_), InjectFailureTrigger::ProposalFinRx) | ( ProposalPart::TransactionBatch(_), InjectFailureTrigger::TransactionBatchRx ) | ( - ProposalPart::ProposalCommitment(_), - InjectFailureTrigger::ProposalCommitmentRx - ) - | ( - ProposalPart::TransactionsFin(_), - InjectFailureTrigger::TransactionsFinRx + ProposalPart::ExecutedTransactionCount(_), + InjectFailureTrigger::ExecutedTransactionCountRx ) - | (ProposalPart::Fin(_), InjectFailureTrigger::ProposalFinRx) ) }, height, @@ -131,26 +128,13 @@ pub fn debug_fail_on_proposal_part( ); } -pub fn debug_fail_on_entire_proposal_rx( - height: u64, - inject_failure: Option, - data_directory: &Path, -) { - debug_fail_on( - |trigger| matches!(trigger, InjectFailureTrigger::EntireProposalRx), - height, - inject_failure, - data_directory, - ); -} - -pub fn debug_fail_on_entire_proposal_persisted( +pub fn debug_fail_on_proposal_finalized( height: u64, inject_failure: Option, data_directory: &Path, ) { debug_fail_on( - |trigger| matches!(trigger, InjectFailureTrigger::EntireProposalPersisted), + |trigger| matches!(trigger, InjectFailureTrigger::ProposalFinalized), height, inject_failure, data_directory, @@ -188,7 +172,7 @@ pub fn debug_fail_on_vote( ) ) }, - vote.block_number, + vote.height, inject_failure, data_directory, ); @@ -206,3 +190,80 @@ pub fn debug_fail_on_decided( data_directory, ); } + +#[cfg(all( + feature = "p2p", + feature = "consensus-integration-tests", + debug_assertions +))] +pub fn send_outdated_vote(vote_height: u64, inject_failure: Option) -> bool { + matches!(inject_failure, + Some(InjectFailureConfig { + height, + trigger: InjectFailureTrigger::OutdatedVote, + }) if vote_height >= height + ) +} + +#[cfg(not(all( + feature = "p2p", + feature = "consensus-integration-tests", + debug_assertions +)))] +pub fn send_outdated_vote( + _proposal_height: u64, + _inject_failure: Option, +) -> bool { + false +} + +#[cfg(all( + feature = "p2p", + feature = "consensus-integration-tests", + debug_assertions +))] +pub fn debug_ignore_received_vote( + vote_type: VoteType, + vote_height: u64, + vote_round: Option, + inject_failure: Option, +) -> bool { + use std::sync::atomic::{AtomicBool, Ordering}; + + static IGNORE_RECEIVED_VOTE: AtomicBool = AtomicBool::new(true); + + let ret = if matches!(vote_type, VoteType::Precommit) + && matches!(vote_round, Some(0)) + && matches!(inject_failure, + Some(InjectFailureConfig { + height, + trigger: InjectFailureTrigger::CommittedVoteLost, + }) if vote_height == height + ) { + // Drop the message just once, not on re-send. + IGNORE_RECEIVED_VOTE.swap(false, Ordering::Relaxed) + } else { + false + }; + if ret { + tracing::info!( + "💥 Integration testing: ignoring PRECOMMIT vote at height {vote_height}, as \ + configured" + ); + } + ret +} + +#[cfg(not(all( + feature = "p2p", + feature = "consensus-integration-tests", + debug_assertions +)))] +pub fn debug_ignore_received_vote( + _vote_type: VoteType, + _proposal_height: u64, + _vote_round: Option, + _inject_failure: Option, +) -> bool { + false +} diff --git a/crates/pathfinder/src/consensus/inner/p2p_task.rs b/crates/pathfinder/src/consensus/inner/p2p_task.rs index 796f28f555..9d646ab86f 100644 --- a/crates/pathfinder/src/consensus/inner/p2p_task.rs +++ b/crates/pathfinder/src/consensus/inner/p2p_task.rs @@ -13,14 +13,23 @@ use std::collections::{BTreeMap, HashMap}; use std::path::Path; use std::sync::{Arc, Mutex}; -use std::time::Duration; use anyhow::Context; -use p2p::consensus::{Client, Event, HeightAndRound}; -use p2p::libp2p::gossipsub::PublishError; +use p2p::consensus::{peer_score, Client, Event, EventKind, HeightAndRound}; +use p2p::libp2p::PeerId; use p2p_proto::common::{Address, Hash}; use p2p_proto::consensus::{ProposalFin, ProposalInit, ProposalPart}; -use pathfinder_common::{BlockId, ChainId, ContractAddress, ProposalCommitment}; +use pathfinder_common::{ + consensus_info, + BlockId, + BlockNumber, + ChainId, + ConsensusFinalizedL2Block, + ContractAddress, + DecidedBlock, + DecidedBlocks, + ProposalCommitment, +}; use pathfinder_consensus::{ ConsensusCommand, NetworkMessage, @@ -30,82 +39,163 @@ use pathfinder_consensus::{ SignedProposal, SignedVote, }; +use pathfinder_executor::{ConcurrentStateReader, ExecutorWorkerPool}; +use pathfinder_gas_price::{L1GasPriceProvider, L2GasPriceConstants, L2GasPriceProvider}; use pathfinder_storage::{Storage, Transaction, TransactionBehavior}; -use tokio::sync::mpsc; +use pathfinder_validator::error::{ProposalError, ProposalHandlingError}; +use pathfinder_validator::{ + should_defer_validation, + ProdTransactionMapper, + TransactionExt, + ValidatorBlockInfoStage, + ValidatorStage, + ValidatorWorkerPool, +}; +use tokio::sync::{mpsc, watch}; -use super::{integration_testing, ConsensusTaskEvent, P2PTaskConfig, P2PTaskEvent}; +use super::gossip_retry::{GossipHandler, GossipRetryConfig}; +use super::proposal_validator::{ProposalPartsValidator, ValidationResult}; +use super::{integration_testing, ConsensusTaskEvent, ConsensusValue, P2PTaskConfig, P2PTaskEvent}; use crate::config::integration_testing::InjectFailureConfig; use crate::consensus::inner::batch_execution::{ - should_defer_execution, BatchExecutionManager, DeferredExecution, ProposalCommitmentWithOrigin, }; -use crate::consensus::inner::persist_proposals::{ - foreign_proposal_parts, - last_proposal_parts, - own_proposal_parts, - persist_finalized_block, - persist_proposal_parts, - read_finalized_block, - remove_finalized_blocks, - remove_proposal_parts, -}; -use crate::consensus::inner::ConsensusValue; -use crate::validator::{FinalizedBlock, ValidatorBlockInfoStage, ValidatorStage}; +use crate::consensus::inner::create_empty_block; +use crate::SyncMessageToConsensus; + +#[cfg(test)] +mod p2p_task_tests; // Successful result of handling an incoming message in a dedicated // thread; carried data are used for async handling (e.g. gossiping). enum ComputationSuccess { Continue, + ChangePeerScore { + peer_id: PeerId, + delta: f64, + }, IncomingProposalCommitment(HeightAndRound, ProposalCommitmentWithOrigin), EventVote(p2p_proto::consensus::Vote), ProposalGossip(HeightAndRound, Vec), GossipVote(p2p_proto::consensus::Vote), - ConfirmedProposalCommitment(HeightAndRound, ProposalCommitmentWithOrigin), + /// When a proposal has been decided upon and has been successfully + /// finalized for some height H, there may be another proposal at H+1 whose + /// execution was deferred until this block at H is committed. This variant + /// indicates that the deferred proposal at H+1 has been finalized. + PreviouslyDeferredProposalIsFinalized(HeightAndRound, ProposalCommitmentWithOrigin), } const EVENT_CHANNEL_SIZE_LIMIT: usize = 1024; +/// Seed the L2 gas price provider from the latest committed block in the DB. +fn seed_l2_provider_from_db( + provider: &L2GasPriceProvider, + storage: &Storage, +) -> anyhow::Result<()> { + let mut conn = storage.connection()?; + let db_tx = conn.transaction()?; + let Some(header) = db_tx.block_header(BlockId::Latest)? else { + return Ok(()); + }; + let Some(tx_data) = db_tx.transaction_data_for_block(BlockId::Latest)? else { + return Ok(()); + }; + let l2_gas_consumed: u128 = tx_data + .iter() + .map(|(_, receipt, _)| receipt.execution_resources.l2_gas.0) + .sum(); + let constants = L2GasPriceConstants::for_version(header.starknet_version); + provider.update_after_block(header.strk_l2_gas_price.0, l2_gas_consumed, &constants); + tracing::info!( + block_number = %header.number, + l2_gas_price = header.strk_l2_gas_price.0, + l2_gas_consumed, + "L2 gas price provider seeded from DB" + ); + Ok(()) +} + #[allow(clippy::too_many_arguments)] pub fn spawn( chain_id: ChainId, config: P2PTaskConfig, p2p_client: Client, - storage: Storage, mut p2p_event_rx: mpsc::UnboundedReceiver, tx_to_consensus: mpsc::Sender, mut rx_from_consensus: mpsc::Receiver, - consensus_storage: Storage, + mut rx_from_sync: mpsc::Receiver, + info_watch_tx: watch::Sender, + main_storage: Storage, + mut finalized_blocks: HashMap, data_directory: &Path, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, + verify_tree_hashes: bool, + gas_price_provider: Option, // Does nothing in production builds. Used for integration testing only. inject_failure: Option, -) -> tokio::task::JoinHandle> { +) -> ( + tokio::task::JoinHandle>, + ValidatorWorkerPool, +) { let validator_address = config.my_validator_address; - // TODO validators are long-lived but not persisted - let validator_cache = ValidatorCache::new(); // Contains transaction batches and proposal finalizations that are // waiting for previous block to be committed before they can be executed. let deferred_executions = Arc::new(Mutex::new(HashMap::new())); - // Manages batch execution with checkpoint-based rollback for TransactionsFin - // support - let mut batch_execution_manager = BatchExecutionManager::new(); + // Create worker pool for concurrent transaction execution + let worker_pool: ValidatorWorkerPool = + ExecutorWorkerPool::::auto().get(); + // This clone is used to be able to `join()` the worker pool, so that its + // threads don't panic when the `p2p_task` is cancelled. + let worker_pool_for_cleanup = worker_pool.clone(); + + let l2_gas_price_provider = gas_price_provider.as_ref().map(|_| { + let provider = L2GasPriceProvider::new(); + if let Err(e) = seed_l2_provider_from_db(&provider, &main_storage) { + tracing::warn!("Failed to seed L2 gas price provider from DB: {e}"); + } + provider + }); + + // Manages batch execution with concurrent execution support + let mut batch_execution_manager = BatchExecutionManager::new( + gas_price_provider.clone(), + l2_gas_price_provider.clone(), + worker_pool.clone(), + compiler_resource_limits, + blockifier_libfuncs, + ); // Keep track of whether we've already emitted a warning about the // event channel size exceeding the limit, to avoid spamming the logs. let mut channel_size_warning_emitted = false; + // Decay application peer scores at regular intervals. The first tick completing + // immediately is okay since we likely won't have any peers with modified + // scores this early anyway. + let mut peer_score_decay_timer = tokio::time::interval(peer_score::DECAY_PERIOD); + let data_directory = data_directory.to_path_buf(); - util::task::spawn(async move { - let readonly_storage = storage.clone(); - let mut db_conn = storage - .connection() - .context("Creating database connection")?; - let mut cons_conn = consensus_storage + let jh = util::task::spawn(async move { + let main_readonly_storage = main_storage.clone(); + let mut main_db_conn = main_storage .connection() - .context("Creating consensus database connection")?; + .context("Creating main database connection")?; + let gossip_handler = GossipHandler::new(validator_address, GossipRetryConfig::default()); + + let validator_cache = ValidatorCache::new(); + let mut incoming_proposals = HashMap::new(); + let mut own_proposal_parts = HashMap::new(); + let decided_blocks = DecidedBlocks::default(); + loop { let p2p_task_event = tokio::select! { + _ = peer_score_decay_timer.tick() => { + p2p_client.decay_peer_scores(); + continue; + } p2p_event = p2p_event_rx.recv() => { // Unbounded channel size monitoring. let channel_size = p2p_event_rx.len(); @@ -121,71 +211,87 @@ pub fn spawn( match p2p_event { Some(event) => P2PTaskEvent::P2PEvent(event), None => { - tracing::warn!("P2P event receiver was dropped, exiting P2P task"); - anyhow::bail!("P2P event receiver was dropped, exiting P2P task"); + tracing::warn!("P2P network event receiver was dropped, exiting P2P task"); + anyhow::bail!("P2P network event receiver was dropped, exiting P2P task"); } } } from_consensus = rx_from_consensus.recv() => { - from_consensus.expect("Receiver not to be dropped") + match from_consensus { + Some(command) => command, + None => { + tracing::warn!("Consensus command receiver was dropped, exiting P2P task"); + anyhow::bail!("Consensus command receiver was dropped, exiting P2P task"); + } + } + } + from_sync = rx_from_sync.recv() => match from_sync { + Some(request) => P2PTaskEvent::SyncRequest(request), + None => { + tracing::warn!("Sync request receiver was dropped, exiting P2P task"); + anyhow::bail!("Sync request receiver was dropped, exiting P2P task"); + } } }; let success = tokio::task::block_in_place(|| { tracing::debug!("creating DB txs"); - let mut db_tx = db_conn + let mut main_db_tx = main_db_conn .transaction_with_behavior(TransactionBehavior::Immediate) - .context("Create database transaction")?; - let mut cons_tx = cons_conn - .transaction_with_behavior(TransactionBehavior::Immediate) - .context("Create database transaction")?; + .context("Create main database transaction")?; let success = match p2p_task_event { P2PTaskEvent::P2PEvent(event) => { - tracing::info!("🖧 💌 {validator_address} incoming p2p event: {event:?}"); - // Even though rebroadcast certificates are not implemented yet, it still - // does make sense to keep `history_depth` nonzero. This is due to race - // conditions that occur between the current height, which is being - // committed and the next height which is being proposed. For example: we + // does make sense to keep `history_depth` larger than 0. This is due to + // race conditions that occur between the current height, which is being + // committed and the next height which is being proposed. For example: we // may have 3 nodes, from which ours has already committed H, while the // other 2 have not. If we fall over and respawn, the other nodes will still // be voting for H, while we are at H+1 and we are actively discarding votes // for H, so the other 2 nodes will not make any progress at H. And since // we're not keeping any historical engines (ie. including for H), we will // not help the other 2 nodes in the voting process. - if is_outdated_p2p_event(&db_tx, &event, config.history_depth)? { - // TODO consider punishing the sender if the event is too old - return Ok(ComputationSuccess::Continue); + // + // This call may yield unreliable results if history_depth is too small and + // the currently decided upon and finalized block has not been committed by + // the sync task yet, because we're only checking the main DB here. + if is_outdated_p2p_event( + &main_db_tx, + &event.kind, + config.history_depth, + &incoming_proposals, + )? { + return Ok(ComputationSuccess::ChangePeerScore { + peer_id: event.source, + delta: peer_score::penalty::OUTDATED_MESSAGE, + }); } - match event { - Event::Proposal(height_and_round, proposal_part) => { + match event.kind { + EventKind::Proposal(height_and_round, proposal_part) => { let vcache = validator_cache.clone(); let dex = deferred_executions.clone(); - let result = handle_incoming_proposal_part( + let result = handle_incoming_proposal_part::( chain_id, - validator_address, + config.is_l3, height_and_round, proposal_part, + &mut incoming_proposals, + &mut finalized_blocks, + decided_blocks.clone(), vcache, dex, - &db_tx, - readonly_storage.clone(), - &cons_tx, + main_readonly_storage.clone(), &mut batch_execution_manager, &data_directory, + gas_price_provider.clone(), + l2_gas_price_provider.clone(), inject_failure, + worker_pool.clone(), ); match result { Ok(Some(commitment)) => { - // Does nothing in production builds. - integration_testing::debug_fail_on_entire_proposal_rx( - height_and_round.height(), - inject_failure, - &data_directory, - ); - anyhow::Ok(ComputationSuccess::IncomingProposalCommitment( height_and_round, commitment, @@ -199,19 +305,35 @@ pub fn spawn( Ok(ComputationSuccess::Continue) } Err(error) => { - tracing::warn!( - "Error handling incoming proposal part for \ - {height_and_round}: {error:#?}" - ); - anyhow::bail!( - "Error handling incoming proposal part for \ - {height_and_round}: {error:#?}" - ); + // Log and skip on recoverable errors, don't bail out! + if error.is_recoverable() { + tracing::warn!( + validator = %validator_address, + height_and_round = %height_and_round, + error = %error.error_message(), + "Invalid proposal part from peer - skipping, continuing operation" + ); + // Purge the proposal + incoming_proposals.remove(&height_and_round); + Ok(ComputationSuccess::Continue) + } else { + tracing::error!( + validator = %validator_address, + height_and_round = %height_and_round, + error = %error.error_message(), + error_chain = %format!("{:#}", error), + "Fatal error handling proposal part" + ); + anyhow::bail!( + "Fatal error handling incoming proposal part for \ + {height_and_round}: {error:#?}" + ); + } } } } - Event::Vote(vote) => { + EventKind::Vote(vote) => { // Does nothing in production builds. integration_testing::debug_fail_on_vote( &vote, @@ -224,6 +346,127 @@ pub fn spawn( } } + P2PTaskEvent::SyncRequest(request) => { + tracing::info!("🖧 📥 {validator_address} processing request from sync"); + + match request { + // Sync asks for finalized block at given height. + SyncMessageToConsensus::GetConsensusFinalizedBlock { + number, + reply, + } => { + tracing::trace!( + %number, "🖧 📥 {validator_address} get consensus finalized and decided upon block" + ); + // If we're the proposer we could have a false positive here, which + // we avoid by having the decided block marked, so we only return + // a block that is both finalized and decided upon or nothing. + let resp = { + let decided_blocks = decided_blocks.read().unwrap(); + decided_blocks + .get(&number) + .map(|decided| Box::new(decided.block.clone())) + }; + + if resp.is_none() { + tracing::trace!( + %number, "🖧 ❌ {validator_address} no finalized and decided upon block found" + ); + } + + reply + .send(resp) + .map_err(|_| anyhow::anyhow!("Reply channel closed"))?; + + Ok(ComputationSuccess::Continue) + } + // Sync confirms that the block at given height has been committed to + // storage. + SyncMessageToConsensus::ConfirmBlockCommitted { number } => { + tracing::trace!( + %number, "🖧 📥 {validator_address} confirm finalized block committed" + ); + + integration_testing::debug_fail_on_proposal_committed( + number.get(), + inject_failure, + &data_directory, + ); + + // There are 2 scenarios here: + // 1. Consensus is used by sync to get the tip because the FGw is + // naturally lagging behind sync as it's just duplicating + // whatever consensus provides. + // 2. A rare but still possible scenario where the FGw is ahead of + // consensus for some nodes due to low network latency and their + // consensus engines not notifying those nodes internally fast + // enough that the executed proposal has been decided upon. In + // such case the sync algo will choose to download the block from + // the FGw because supposedly the proposal has not been decided + // upon. + remove_decided_block( + decided_blocks.clone(), + number, + validator_address, + ); + // Note: a committed block is always a decided block too + let success = on_finalized_block_decided( + number, + &validator_cache, + deferred_executions.clone(), + &mut batch_execution_manager, + main_readonly_storage.clone(), + decided_blocks.clone(), + &mut finalized_blocks, + gas_price_provider.clone(), + &l2_gas_price_provider, + worker_pool.clone(), + )?; + Ok(success) + } + SyncMessageToConsensus::ValidateBlock { block, reply, .. } => { + use pathfinder_common::StateCommitment; + use pathfinder_merkle_tree::starknet_state::update_starknet_state; + + let starknet_version = block.header.starknet_version; + let state_commitment = update_starknet_state( + &main_db_tx, + block.state_update.as_ref(), + verify_tree_hashes, + block.header.number, + main_readonly_storage.clone(), + ) + .context("Updating Starknet state") + .map(|(storage, class)| { + StateCommitment::calculate(storage, class, starknet_version) + }); + + // Do not commit this. + drop(main_db_tx); + main_db_tx = main_db_conn + .transaction_with_behavior(TransactionBehavior::Immediate) + .context("Create database transaction")?; + + let resp = match state_commitment { + Ok(state_commitment) => { + if state_commitment == block.header.state_commitment { + pathfinder_validator::ValidationResult::Valid + } else { + pathfinder_validator::ValidationResult::Invalid + } + } + Err(e) => pathfinder_validator::ValidationResult::Error(e), + }; + + reply + .send(resp) + .map_err(|_| anyhow::anyhow!("Reply channel closed"))?; + + Ok(ComputationSuccess::Continue) + } + } + } + P2PTaskEvent::CacheProposal( height_and_round, proposal_parts, @@ -240,19 +483,11 @@ pub fn spawn( {height_and_round}, hash {proposal_commitment}" ); - let duplicate_encountered = persist_proposal_parts( - &cons_tx, - height_and_round.height(), - height_and_round.round(), - &validator_address, - &proposal_parts, - )?; - persist_finalized_block( - &cons_tx, - height_and_round.height(), - height_and_round.round(), - finalized_block, - )?; + let duplicate_encountered = own_proposal_parts + .insert(height_and_round, proposal_parts) + .is_some(); + finalized_blocks.insert(height_and_round, finalized_block); + if duplicate_encountered { tracing::warn!( "Duplicate proposal cache request for {height_and_round}!" @@ -271,71 +506,12 @@ pub fn spawn( proposal.round.as_u32().expect("Valid round"), ); - let proposal_parts = if let Some(proposal_parts) = own_proposal_parts( - &cons_tx, - height_and_round.height(), - height_and_round.round(), - &validator_address, - )? { - // TODO we're assuming that all proposals are valid and any failure - // to reach consensus in round 0 - // always yields re-proposing the same - // proposal in following rounds. This will change once proposal - // validation is integrated. - proposal_parts - } else { - // TODO this is here to catch a very rare case which I'm almost - // sure occurred at least once during tests on my machine. - tracing::warn!( - "Engine requested gossiping a proposal for {height_and_round} \ - via ConsensusEvent::Gossip but we did not create it due to \ - missing respective ConsensusEvent::RequestProposal.", - ); - - // The engine chose us for this round as proposer and requested that - // we gossip a proposal from a - // previous round. - // For now we just choose the proposal from the previous round, and - // the rest are kept for debugging - // purposes. - let Some((round, mut proposal_parts)) = last_proposal_parts( - &cons_tx, - proposal.height, - &validator_address, - )? - else { - panic!("At least one proposal from a previous round"); - }; - assert_eq!( - round + 1, - proposal.round.as_u32().expect("Round not to be None") - ); - let ProposalInit { - round, proposer, .. - } = proposal_parts - .first_mut() - .and_then(ProposalPart::as_init_mut) - .expect("First part to be Init"); - // Since the proposal comes from some previous round we need to - // correct the round number and - // proposer address. - assert_ne!( - *round, - proposal.round.as_u32().expect("Round not to be None") - ); - assert_ne!(*proposer, Address(proposal.proposer.0)); - *round = proposal.round.as_u32().expect("Round not to be None"); - *proposer = Address(proposal.proposer.0); - let proposer_address = ContractAddress(proposal.proposer.0); - persist_proposal_parts( - &cons_tx, - proposal.height, - *round, - &proposer_address, - &proposal_parts, - )?; - proposal_parts - }; + let proposal_parts = own_proposal_parts + .get(&height_and_round) + .context(format!( + "Getting own proposal parts for {height_and_round}" + ))? + .clone(); Ok(ComputationSuccess::ProposalGossip( height_and_round, @@ -343,122 +519,205 @@ pub fn spawn( )) } NetworkMessage::Vote(SignedVote { vote, signature: _ }) => { + // Never happens in production builds. + let vote = if integration_testing::send_outdated_vote( + vote.height, + inject_failure, + ) { + pathfinder_consensus::Vote { + height: 0, // This should make the vote outdated. + ..vote + } + } else { + vote + }; + tracing::info!("🖧 ✋ {validator_address} Gossiping vote {vote:?} ..."); Ok(ComputationSuccess::GossipVote(consensus_vote_to_p2p_vote( vote, ))) } }, - P2PTaskEvent::CommitBlock(height_and_round, value) => { - { - let storage = readonly_storage.clone(); - let mut validator_cache = validator_cache.clone(); - tracing::info!( - "🖧 💾 {validator_address} Finalizing and committing block at \ - {height_and_round} to the database ...", + // Consensus has reached a positive decision on this proposal so the proposal's + // execution needs to be finalized and the resulting block has to be committed + // to the main database. + P2PTaskEvent::MarkBlockAsDecidedAndCleanUp(height_and_round, value) => { + // We do not have to commit these blocks to the main database + // anymore because they are being stored by the sync task (if enabled). + // + // TODO: Once we are ready to get rid of fake proposals, consider storing + // recently decided-upon blocks in memory (instead of a database) as + // "decided". + // + // NOTE: The main database still gets the state updates via consensus, + // which is the only reason why we still need the main database here at + // all. I could get it to work with only the consensus database in all + // scenarios except for when the node is chosen as a proposer and needs + // to cache the proposal for later. + tracing::info!( + "🖧 💾 {validator_address} Marking block at {height_and_round} as \ + decided and cleaning up ..." + ); + let stopwatch = std::time::Instant::now(); + + // `None` is possible here if the node has been respawned when precommit for + // this height has already been agreed by the quorum. We loose the finalized + // block for the height, but the consensus engine should still be able to + // decide on the block (thanks to WAL) and move on to the next height. The + // actual missing block will be fetched by the sync task from the FGw. + let mut decided_block_present = false; + + if let Some(block) = finalized_blocks.remove(&height_and_round) { + let mut decided_blocks = decided_blocks.write().unwrap(); + decided_blocks.insert( + BlockNumber::new(height_and_round.height()) + .context("Block number exceeds i64::MAX")?, + DecidedBlock { + round: height_and_round.round(), + block, + }, ); - let stopwatch = std::time::Instant::now(); - - let finalized_block = match read_finalized_block( - &cons_tx, - height_and_round.height(), - height_and_round.round(), - )? { - // Our own proposal is already executed and finalized. - Some(block) => block, - // Incoming proposal has been executed and needs to be finalized - // now. - None => { - let validator_stage = - validator_cache.remove(&height_and_round)?; - let validator = validator_stage.try_into_finalize_stage()?; - let block = validator.finalize(db_tx, storage)?; - db_tx = db_conn - .transaction_with_behavior(TransactionBehavior::Immediate) - .context("Create database transaction")?; - block - } - }; + decided_block_present = true; + } - assert_eq!(value.0 .0, finalized_block.header.state_diff_commitment.0); + tracing::info!( + "🖧 💾 {validator_address} Finalized and prepared block for \ + committing to the database at {height_and_round} in {} ms", + stopwatch.elapsed().as_millis() + ); - commit_finalized_block(&db_tx, finalized_block.clone())?; - db_tx.commit().context("Committing database transaction")?; + // Remove all finalized blocks for previous rounds at this height + // because they will not be committed to the main DB. + finalized_blocks.retain(|hnr, _| hnr.height() != height_and_round.height()); - // Does nothing in production builds. - integration_testing::debug_fail_on_proposal_committed( - height_and_round.height(), - inject_failure, - &data_directory, - ); + tracing::debug!( + "🖧 🗑️ {validator_address} removed my undecided finalized blocks for \ + height {}", + height_and_round.height() + ); - db_tx = db_conn - .transaction() - .context("Create unused database transaction")?; - // Necessary for proper fake proposal creation at next heights. - commit_finalized_block(&cons_tx, finalized_block)?; - cons_tx - .commit() - .context("Committing database transaction")?; - cons_tx = cons_conn - .transaction_with_behavior(TransactionBehavior::Immediate) - .context("Create consensus database transaction")?; - tracing::info!( - "🖧 💾 {validator_address} Finalized and committed block at \ - {height_and_round} to the database in {} ms", - stopwatch.elapsed().as_millis() - ); + // Update L2 gas price provider with the decided block's data + if let Some(ref l2_provider) = l2_gas_price_provider { + let decided_blocks = decided_blocks.read().unwrap(); + if let Some(decided) = decided_blocks.get( + &BlockNumber::new(height_and_round.height()) + .context("height exceeds i64::MAX")?, + ) { + let header = &decided.block.header; + let constants = + L2GasPriceConstants::for_version(header.starknet_version); + l2_provider.update_after_block( + header.strk_l2_gas_price.0, + header.l2_gas_consumed, + &constants, + ); + } + } - remove_finalized_blocks(&cons_tx, height_and_round.height())?; - tracing::debug!( - "🖧 🗑️ {validator_address} removed my finalized blocks for height \ - {}", - height_and_round.height() - ); + // Clean up batch execution state for this height + batch_execution_manager.cleanup(&height_and_round); + tracing::debug!( + "🖧 🗑️ {validator_address} cleaned up batch execution state for \ + height {}", + height_and_round.height() + ); + + // Remove cached proposal parts for this height + incoming_proposals + .retain(|hnr, _| hnr.height() != height_and_round.height()); + own_proposal_parts + .retain(|hnr, _| hnr.height() != height_and_round.height()); + tracing::debug!( + "🖧 🗑️ {validator_address} removed my proposal parts for height {}", + height_and_round.height() + ); - // Clean up batch execution state for this height - batch_execution_manager.cleanup(&height_and_round); - tracing::debug!( - "🖧 🗑️ {validator_address} cleaned up batch execution state for \ - height {}", - height_and_round.height() + tracing::debug!( + "🖧 🗑️ {validator_address} removed my undecided finalized blocks for \ + height {}", + height_and_round.height() + ); + + // There is a rare but still possible scenario where the FGw is ahead of + // consensus for some nodes due to low network latency and their consensus + // engines not notifying those nodes internally fast enough that the + // executed proposal has been decided upon. In such case we can check if the + // finalized block has already been committed to the main DB by the fgw sync + // task without waiting for a commit confirmation which had already arrived + // in the past. + let block_number = BlockNumber::new(height_and_round.height()) + .context("height exceeds i64::MAX")?; + + let is_already_committed = + main_db_tx.block_exists(BlockId::Number(block_number))?; + + let success = if decided_block_present || is_already_committed { + // A committed block is always a decided block too + on_finalized_block_decided( + block_number, + &validator_cache, + deferred_executions.clone(), + &mut batch_execution_manager, + main_readonly_storage.clone(), + decided_blocks.clone(), + &mut finalized_blocks, + gas_price_provider.clone(), + &l2_gas_price_provider, + worker_pool.clone(), + ) + } else { + Ok(ComputationSuccess::Continue) + }; + + if is_already_committed { + // We can only remove this block if it has been committed + remove_decided_block( + decided_blocks.clone(), + block_number, + validator_address, ); - remove_proposal_parts(&cons_tx, height_and_round.height(), None)?; + } - anyhow::Ok(()) - }?; + tracing::info!( + "🖧 💾 {validator_address} Finalized and prepared block for \ + committing to the database at {height_and_round} in {} ms", + stopwatch.elapsed().as_millis() + ); - let exec_success = execute_deferred_for_next_height( + update_info_watch( height_and_round, - validator_cache.clone(), - deferred_executions.clone(), - &mut batch_execution_manager, + value, + &incoming_proposals, + &own_proposal_parts, + &finalized_blocks, + decided_blocks.clone(), + &info_watch_tx, )?; - // If we finalized the proposal, we can now inform the consensus engine - // about it. Otherwise the rest of the transaction batches could be still be - // coming from the network, definitely the proposal fin is still missing for - // sure. - let success = match exec_success { - Some((hnr, commitment)) => { - ComputationSuccess::ConfirmedProposalCommitment(hnr, commitment) - } - None => ComputationSuccess::Continue, - }; - Ok(success) + + success } }?; - db_tx.commit()?; - cons_tx.commit()?; + main_db_tx.commit()?; tracing::debug!("DB txs committed"); Ok(success) })?; match success { ComputationSuccess::Continue => (), + ComputationSuccess::ChangePeerScore { peer_id, delta } => { + p2p_client.change_peer_score(peer_id, delta); + + info_watch_tx.send_modify(|info| { + info.application_peer_scores + .entry(peer_id.to_base58()) + .and_modify(|score| *score += delta) + .or_insert(delta); + }); + } ComputationSuccess::IncomingProposalCommitment(height_and_round, commitment) => { // Does nothing in production builds. - integration_testing::debug_fail_on_entire_proposal_persisted( + integration_testing::debug_fail_on_proposal_finalized( height_and_round.height(), inject_failure, &data_directory, @@ -479,68 +738,78 @@ pub fn spawn( .expect("Receiver not to be dropped"); } ComputationSuccess::ProposalGossip(height_and_round, proposal_parts) => { - loop { - tracing::info!( - "🖧 🚀 {validator_address} Gossiping proposal for {height_and_round} \ - ..." - ); - match p2p_client - .gossip_proposal(height_and_round, proposal_parts.clone()) - .await - { - Ok(()) => { - tracing::info!( - "🖧 🚀 {validator_address} Gossiping proposal for \ - {height_and_round} DONE" - ); - break; - } - Err(PublishError::InsufficientPeers) => { - tracing::warn!( - "Insufficient peers to gossip proposal for \ - {height_and_round}, retrying..." - ); - tokio::time::sleep(Duration::from_secs(5)).await; - } - Err(error) => { - tracing::error!( - "Error gossiping proposal for {height_and_round}: {error}" - ); - // TODO implement proper error handling policy - Err(error)?; - } - } - } + tracing::info!( + "🖧 🚀 {validator_address} Gossiping proposal for {height_and_round} ..." + ); + gossip_handler + .gossip_proposal(&p2p_client, height_and_round, proposal_parts) + .await?; } ComputationSuccess::GossipVote(vote) => { - loop { - match p2p_client.gossip_vote(vote.clone()).await { - Ok(()) => { - tracing::info!( - "🖧 ✋ {validator_address} Gossiping vote {vote:?} SUCCESS" - ); - break; - } - Err(PublishError::InsufficientPeers) => { - tracing::warn!( - "Insufficient peers to gossip {vote:?}, retrying..." - ); - tokio::time::sleep(Duration::from_secs(5)).await; - } - Err(error) => { - tracing::error!("Error gossiping {vote:?}: {error}"); - // TODO implement proper error handling policy - Err(error)?; - } - } - } + gossip_handler.gossip_vote(&p2p_client, vote).await?; } - ComputationSuccess::ConfirmedProposalCommitment(hnr, commitment) => { + ComputationSuccess::PreviouslyDeferredProposalIsFinalized(hnr, commitment) => { send_proposal_to_consensus(&tx_to_consensus, hnr, commitment).await; } } } - }) + }); + + (jh, worker_pool_for_cleanup) +} + +fn remove_decided_block( + decided_blocks: DecidedBlocks, + number: BlockNumber, + validator_address: ContractAddress, +) { + let mut decided_blocks = decided_blocks.write().unwrap(); + // Removal can fail if the node has been respawned after the decision was + // written into consensus WAL, because the consensus engine state will be + // restored but the decided blocks cache will be empty as it is not persisted + if decided_blocks.remove(&number).is_some() { + tracing::debug!( + "🖧 🗑️ {validator_address} removed finalized block for last round at height {} after \ + commit confirmation", + number.get() + ); + } +} + +/// Handle decide confirmation for a finalized block at given height. Note: a +/// committed block is always a decided block too. +#[allow(clippy::too_many_arguments)] +fn on_finalized_block_decided( + height: BlockNumber, + validator_cache: &ValidatorCache, + deferred_executions: Arc>>, + batch_execution_manager: &mut BatchExecutionManager, + main_db: Storage, + decided_blocks: DecidedBlocks, + finalized_blocks: &mut HashMap, + gas_price_provider: Option, + l2_gas_price_provider: &Option, + worker_pool: ValidatorWorkerPool, +) -> Result { + let exec_success = execute_deferred_for_next_height::( + height.get(), + validator_cache.clone(), + deferred_executions.clone(), + batch_execution_manager, + main_db, + finalized_blocks, + decided_blocks, + gas_price_provider, + l2_gas_price_provider.clone(), + worker_pool, + )?; + let success = match exec_success { + Some((hnr, commitment)) => { + ComputationSuccess::PreviouslyDeferredProposalIsFinalized(hnr, commitment) + } + None => ComputationSuccess::Continue, + }; + Ok(success) } #[derive(Clone)] @@ -551,30 +820,39 @@ impl ValidatorCache { Self(Arc::new(Mutex::new(HashMap::new()))) } - fn insert(&mut self, hnr: HeightAndRound, stage: ValidatorStage) { + fn insert(&self, hnr: HeightAndRound, stage: ValidatorStage) { let mut cache = self.0.lock().unwrap(); cache.insert(hnr, stage); } - fn remove(&mut self, hnr: &HeightAndRound) -> anyhow::Result { + fn remove(&self, hnr: &HeightAndRound) -> Result { let mut cache = self.0.lock().unwrap(); - cache - .remove(hnr) - .context(format!("No ValidatorStage for height and round {hnr}")) + cache.remove(hnr).ok_or_else(|| { + ProposalHandlingError::Recoverable(ProposalError::ValidatorStageNotFound { + height_and_round: hnr.to_string(), + }) + }) } } -fn execute_deferred_for_next_height( - height_and_round: HeightAndRound, - mut validator_cache: ValidatorCache, +#[allow(clippy::too_many_arguments)] +fn execute_deferred_for_next_height( + height: u64, + validator_cache: ValidatorCache, deferred_executions: Arc>>, batch_execution_manager: &mut BatchExecutionManager, + main_db: Storage, + finalized_blocks: &mut HashMap, + decided_blocks: DecidedBlocks, + gas_price_provider: Option, + l2_gas_price_provider: Option, + worker_pool: ValidatorWorkerPool, ) -> anyhow::Result> { // Retrieve and execute any deferred transactions or proposal finalizations // for the next height, if any. Sort by (height, round) in ascending order. let deferred = { let mut dex = deferred_executions.lock().unwrap(); - dex.extract_if(|hnr, _| hnr.height() == height_and_round.height() + 1) + dex.extract_if(|hnr, _| hnr.height() == height + 1) .collect::>() }; @@ -586,33 +864,48 @@ fn execute_deferred_for_next_height( if let Some((hnr, deferred)) = deferred.into_iter().next_back() { tracing::debug!("🖧 ⚙️ executing deferred proposal for height and round {hnr}"); + let block_info = deferred.block_info.expect( + "BlockInfo must be present if a deferred execution exists for height and round", + ); let validator_stage = validator_cache.remove(&hnr)?; - let mut validator = validator_stage.try_into_transaction_batch_stage()?; + let mut validator = validator_stage + .try_into_block_info_stage() + .map_err(|e| ProposalHandlingError::Recoverable(e.into()))? + .validate_block_info( + block_info, + main_db, + decided_blocks, + gas_price_provider, + None, // TODO: Add L1ToFriValidator when oracle is available + l2_gas_price_provider.as_ref(), + worker_pool, + ) + .map(Box::new)?; // Execute deferred transactions first. - let (validator, opt_commitment) = { + let opt_commitment = { // Parent block is now committed, so we can execute directly without deferral // checks if !deferred.transactions.is_empty() { - batch_execution_manager.execute_batch( + batch_execution_manager.execute_batch::( hnr, deferred.transactions, &mut validator, )?; } - // Process deferred TransactionsFin - if let Some(transactions_fin) = deferred.transactions_fin { + // Process deferred ExecutedTransactionCount + if let Some(executed_transaction_count) = deferred.executed_transaction_count { tracing::debug!( - "🖧 ⚙️ processing deferred TransactionsFin for height and round {hnr}" + "🖧 ⚙️ processing deferred ExecutedTransactionCount for height and round {hnr}" ); // Execution has started at this point (from execute_batch above, if // transactions were non-empty). If transactions were empty, // execute_batch handles marking execution as started, so we can - // process TransactionsFin immediately. - batch_execution_manager.process_transactions_fin( + // process ExecutedTransactionCount immediately. + batch_execution_manager.process_executed_transaction_count::( hnr, - transactions_fin, + executed_transaction_count, &mut validator, )?; } @@ -621,15 +914,13 @@ fn execute_deferred_for_next_height( if let Some(commitment) = deferred.commitment { // We've executed all transactions at the height, we can now // finalize the proposal. - let validator = validator.consensus_finalize(commitment.proposal_commitment)?; + let block = validator.consensus_finalize(commitment.proposal_commitment)?; tracing::debug!( "🖧 ⚙️ executed deferred finalized consensus for height and round {hnr}" ); - ( - ValidatorStage::Finalize(Box::new(validator)), - Some(commitment), - ) + finalized_blocks.insert(hnr, block); + Some(commitment) } else { tracing::debug!( "🖧 ⚙️ executed deferred transactions for height and round {hnr}, no \ @@ -641,11 +932,11 @@ fn execute_deferred_for_next_height( // the rest of the transaction batches could be still be // coming from the network, definitely the proposal fin is // still missing for sure. - (ValidatorStage::TransactionBatch(validator), None) + validator_cache.insert(hnr, ValidatorStage::TransactionBatch(validator)); + None } }; - validator_cache.insert(hnr, validator); Ok(opt_commitment.map(|commitment| (hnr, commitment))) } else { Ok(None) @@ -657,22 +948,54 @@ fn execute_deferred_for_next_height( /// otherwise return `false`. fn is_outdated_p2p_event( db_tx: &Transaction<'_>, - event: &Event, + event: &EventKind, history_depth: u64, + incoming_proposals: &HashMap, ) -> anyhow::Result { // Ignore messages that refer to already committed blocks. let incoming_height = event.height(); - let latest_committed = db_tx.block_number(BlockId::Latest)?; - if let Some(latest_committed) = latest_committed { - if incoming_height < latest_committed.get().saturating_sub(history_depth) { + + // Check the consensus database for the latest finalized height, which + // represents blocks that consensus has decided upon (even if not yet + // committed to main DB). + let latest_finalized = incoming_proposals.keys().map(|hnr| hnr.height()).max(); + + if let Some(latest_finalized) = latest_finalized { + let threshold = latest_finalized.saturating_sub(history_depth); + if incoming_height < threshold { tracing::info!( "🖧 ⛔ ignoring incoming p2p event {} for height {incoming_height} because latest \ - committed block is {latest_committed} and history depth is {history_depth}", + finalized height is {latest_finalized} and history depth is {history_depth}", event.type_name() ); return Ok(true); } + } else { + // Fallback to main database if no finalized blocks in consensus cache yet + let latest_committed = db_tx + .block_number(BlockId::Latest) + .context("Failed to query latest committed block for outdated event check")?; + + if let Some(latest_committed) = latest_committed { + let threshold = latest_committed.get().saturating_sub(history_depth); + if incoming_height < threshold { + tracing::info!( + "🖧 ⛔ ignoring incoming p2p event {} for height {incoming_height} because \ + latest committed block is {latest_committed} and history depth is \ + {history_depth}", + event.type_name() + ); + return Ok(true); + } + } else { + tracing::debug!( + "🖧 No committed blocks found in database, cannot determine if event {} for \ + height {incoming_height} is outdated", + event.type_name() + ); + } } + Ok(false) } @@ -706,32 +1029,6 @@ async fn send_proposal_to_consensus( .expect("Receiver not to be dropped"); } -/// Commit the given finalized block to the database. -fn commit_finalized_block( - db_txn: &Transaction<'_>, - finalized_block: FinalizedBlock, -) -> anyhow::Result<()> { - let FinalizedBlock { - header, - state_update, - transactions_and_receipts, - events, - } = finalized_block; - - let block_number = header.number; - db_txn - .insert_block_header(&header) - .context("Inserting block header")?; - db_txn - .insert_state_update_data(block_number, &state_update) - .context("Inserting state update")?; - db_txn - .insert_transaction_data(block_number, &transactions_and_receipts, Some(&events)) - .context("Inserting transactions, receipts and events")?; - - Ok(()) -} - /// Handles an incoming proposal part received from the P2P network. Returns /// `Ok(Some((proposal_commitment, proposer_address)))` if the proposal is /// complete and has been executed. Otherwise returns `Ok(None)`, which means @@ -743,28 +1040,39 @@ fn commit_finalized_block( /// - a complete proposal has been received but it cannot be executed yet. /// /// Returns `Err` if there was an error processing the proposal part. +/// +/// # Important +/// +/// We enforce the following order of proposal parts via +/// [ProposalPartsValidator] +/// 1. Proposal Init +/// 2. Block Info for non-empty proposals (or Proposal Fin for empty proposals) +/// 3. In random order: at least one Transaction Batch, ExecutedTransactionCount +/// 4. Proposal Fin +/// +/// The [spec](https://github.com/starknet-io/starknet-p2p-specs/blob/main/p2p/proto/consensus/consensus.md#order-of-messages) is more restrictive. #[allow(clippy::too_many_arguments)] -fn handle_incoming_proposal_part( +fn handle_incoming_proposal_part( chain_id: ChainId, - validator_address: ContractAddress, + is_l3: bool, height_and_round: HeightAndRound, proposal_part: ProposalPart, + incoming_proposals: &mut HashMap, + finalized_blocks: &mut HashMap, + decided_blocks: DecidedBlocks, mut validator_cache: ValidatorCache, deferred_executions: Arc>>, - db_tx: &Transaction<'_>, - storage: Storage, - cons_tx: &Transaction<'_>, + main_readonly_storage: Storage, batch_execution_manager: &mut BatchExecutionManager, data_directory: &Path, + gas_price_provider: Option, + l2_gas_price_provider: Option, inject_failure_config: Option, -) -> anyhow::Result> { - let mut parts = foreign_proposal_parts( - cons_tx, - height_and_round.height(), - height_and_round.round(), - &validator_address, - )? - .unwrap_or_default(); + worker_pool: ValidatorWorkerPool, +) -> Result, ProposalHandlingError> { + let proposal_validator = incoming_proposals + .entry(height_and_round) + .or_insert_with(|| ProposalPartsValidator::new(height_and_round)); // Does nothing in production builds. integration_testing::debug_fail_on_proposal_part( @@ -774,247 +1082,207 @@ fn handle_incoming_proposal_part( data_directory, ); - match proposal_part { - ProposalPart::Init(ref prop_init) => { - if !parts.is_empty() { - anyhow::bail!( - "Unexpected proposal Init for height and round {} at position {}", - height_and_round, - parts.len() - ); - } + let result = proposal_validator.accept_part(&proposal_part)?; - let proposal_init = prop_init.clone(); - parts.push(proposal_part); - let proposer_address = ContractAddress(proposal_init.proposer.0); - let updated = persist_proposal_parts( - cons_tx, - height_and_round.height(), - height_and_round.round(), - &proposer_address, - &parts, - )?; - assert!(!updated); - let validator = ValidatorBlockInfoStage::new(chain_id, proposal_init)?; + match (result, proposal_part) { + (ValidationResult::Accepted, ProposalPart::Init(init)) => { + let validator = ValidatorBlockInfoStage::new_with_l3(chain_id, is_l3, init)?; validator_cache.insert(height_and_round, ValidatorStage::BlockInfo(validator)); Ok(None) } - ProposalPart::BlockInfo(ref block_info) => { - if parts.len() != 1 { - anyhow::bail!( - "Unexpected proposal BlockInfo for height and round {} at position {}", - height_and_round, - parts.len() - ); - } - + (ValidationResult::Accepted, ProposalPart::BlockInfo(block_info)) => { let validator_stage = validator_cache.remove(&height_and_round)?; - let validator = validator_stage.try_into_block_info_stage()?; - - let block_info = block_info.clone(); - parts.push(proposal_part); - let ProposalPart::Init(ProposalInit { proposer, .. }) = - parts.first().expect("Proposal Init") - else { - unreachable!("Proposal Init is inserted first"); + + let validator = validator_stage + .try_into_block_info_stage() + .map_err(|e| ProposalHandlingError::Recoverable(e.into()))?; + + let defer = { + let mut db_conn = main_readonly_storage.connection().context( + "Creating database connection for deferral check in block info validation", + )?; + let db_tx = db_conn.transaction().context( + "Creating DB transaction for deferral check in block info validation", + )?; + should_defer_validation(block_info.height, decided_blocks.clone(), &db_tx)? }; + if defer { + tracing::debug!( + "🖧 ⚙️ deferring block info validation for height and round \ + {height_and_round}..." + ); + let mut dex = deferred_executions.lock().unwrap(); + let deferred = dex.entry(height_and_round).or_default(); + deferred.block_info = Some(block_info); + validator_cache.insert(height_and_round, ValidatorStage::BlockInfo(validator)); + return Ok(None); + } - let proposer_address = ContractAddress(proposer.0); - let updated = persist_proposal_parts( - cons_tx, - height_and_round.height(), - height_and_round.round(), - &proposer_address, - &parts, + let new_validator = validator.validate_block_info( + block_info, + main_readonly_storage, + decided_blocks, + gas_price_provider, + None, // TODO: Add L1ToFriValidator when oracle is available + l2_gas_price_provider.as_ref(), + worker_pool, )?; - assert!(updated); - let new_validator = validator.validate_consensus_block_info(block_info, storage)?; validator_cache.insert( height_and_round, ValidatorStage::TransactionBatch(Box::new(new_validator)), ); Ok(None) } - ProposalPart::TransactionBatch(ref tx_batch) => { - // TODO check if there is a length limit for the batch at network level - if parts.len() < 2 { - anyhow::bail!( - "Unexpected proposal TransactionBatch for height and round {} at position {}", - height_and_round, - parts.len() - ); - } - + (ValidationResult::Accepted, ProposalPart::TransactionBatch(tx_batch)) => { tracing::debug!( "🖧 ⚙️ executing transaction batch for height and round {height_and_round}..." ); let validator_stage = validator_cache.remove(&height_and_round)?; - let mut validator = validator_stage.try_into_transaction_batch_stage()?; - - let tx_batch = tx_batch.clone(); - parts.push(proposal_part); - // Use BatchExecutionManager to handle optimistic execution with checkpoints and - // deferral - batch_execution_manager.process_batch_with_deferral( + let next_stage = batch_execution_manager.process_batch_with_deferral::( height_and_round, tx_batch, - &mut validator, - db_tx, + validator_stage, + main_readonly_storage.clone(), + decided_blocks.clone(), &mut deferred_executions.lock().unwrap(), )?; + validator_cache.insert(height_and_round, next_stage); - validator_cache.insert( - height_and_round, - ValidatorStage::TransactionBatch(validator), - ); - - let ProposalPart::Init(ProposalInit { proposer, .. }) = - parts.first().expect("Proposal Init") - else { - unreachable!("Proposal Init is inserted first"); - }; - - let proposer_address = ContractAddress(proposer.0); - let updated = persist_proposal_parts( - cons_tx, - height_and_round.height(), - height_and_round.round(), - &proposer_address, - &parts, - )?; - assert!(updated); - - Ok(None) - } - ProposalPart::ProposalCommitment(proposal_commitment) => { - let validator_stage = validator_cache.remove(&height_and_round)?; - let mut validator = validator_stage.try_into_transaction_batch_stage()?; - - validator.record_proposal_commitment(proposal_commitment)?; - validator_cache.insert( - height_and_round, - ValidatorStage::TransactionBatch(validator), - ); Ok(None) } - ProposalPart::Fin(ProposalFin { - proposal_commitment, - }) => { + ( + ValidationResult::Accepted, + ProposalPart::ExecutedTransactionCount(executed_txn_count), + ) => { tracing::debug!( - "🖧 ⚙️ finalizing consensus for height and round {height_and_round}..." + "🖧 ⚙️ handling ExecutedTransactionCount for height and round \ + {height_and_round}..." ); - let validator_stage = validator_cache.remove(&height_and_round)?; - let validator = validator_stage.try_into_transaction_batch_stage()?; - - if !validator.has_proposal_commitment() { - anyhow::bail!( - "Transaction batch missing proposal commitment for height and round \ - {height_and_round}" - ); - } - - parts.push(proposal_part); - let ProposalPart::Init(ProposalInit { - proposer, - valid_round, - .. - }) = parts.first().expect("Proposal Init") - else { - unreachable!("Proposal Init is inserted first"); - }; - - let proposer_address = ContractAddress(proposer.0); - let updated = persist_proposal_parts( - cons_tx, - height_and_round.height(), - height_and_round.round(), - &proposer_address, - &parts, - )?; - assert!(updated); - - let (validator, proposal_commitment) = defer_or_execute_proposal_fin( - height_and_round, - proposal_commitment, - proposer, - *valid_round, - db_tx, - validator, - deferred_executions, - batch_execution_manager, - )?; - - validator_cache.insert(height_and_round, validator); - Ok(proposal_commitment) - } - ProposalPart::TransactionsFin(transactions_fin) => { - tracing::debug!( - "🖧 ⚙️ handling TransactionsFin for height and round {height_and_round}..." - ); - - let validator_stage = validator_cache.remove(&height_and_round)?; - let mut validator = validator_stage.try_into_transaction_batch_stage()?; - - // Check if execution has started let execution_started = batch_execution_manager.is_executing(&height_and_round); if !execution_started { - // Execution hasn't started - store TransactionsFin for later processing - // This can happen if: - // 1. Transactions are deferred (deferred entry already exists) - // 2. TransactionsFin arrives before execution starts (need to create deferred - // entry) - // Note: With message ordering guarantees, TransactionsFin should always arrive - // after all TransactionBatches, but execution may not have started yet if - // batches were deferred. + // Execution hasn't started - store ExecutedTransactionCount for later + // processing. This can happen if: + // - Transactions are deferred (deferred entry already exists) + // - ExecutedTransactionCount arrives before execution starts let mut dex = deferred_executions.lock().unwrap(); let deferred = dex.entry(height_and_round).or_default(); - deferred.transactions_fin = Some(transactions_fin.clone()); + deferred.executed_transaction_count = Some(executed_txn_count); tracing::debug!( - "TransactionsFin for {height_and_round} is deferred - storing for later \ - processing (execution not started yet)" + "ExecutedTransactionCount for {height_and_round} is deferred - storing for \ + later processing (execution not started yet)" ); } else { - // Execution has started - process TransactionsFin immediately - batch_execution_manager.process_transactions_fin( + let validator_stage = validator_cache.remove(&height_and_round)?; + let mut validator = validator_stage + .try_into_transaction_batch_stage() + .map_err(|e| ProposalHandlingError::Recoverable(e.into()))?; + + batch_execution_manager.process_executed_transaction_count::( height_and_round, - transactions_fin, + executed_txn_count, &mut validator, )?; - // After processing TransactionsFin, check if ProposalFin was deferred - // and should now be finalized + // Check if ProposalFin was deferred and should now be finalized let mut dex = deferred_executions.lock().unwrap(); if let Some(deferred) = dex.get_mut(&height_and_round) { if let Some(deferred_commitment) = deferred.commitment.take() { drop(dex); - // TransactionsFin is now processed, we can finalize the proposal - let validator = validator + let block = validator .consensus_finalize(deferred_commitment.proposal_commitment)?; tracing::debug!( "🖧 ⚙️ finalizing deferred ProposalFin for height and round \ - {height_and_round} after TransactionsFin was processed" - ); - validator_cache.insert( - height_and_round, - ValidatorStage::Finalize(Box::new(validator)), + {height_and_round} after ExecutedTransactionCount was processed" ); + + finalized_blocks.insert(height_and_round, block); + return Ok(Some(deferred_commitment)); } } + + validator_cache.insert( + height_and_round, + ValidatorStage::TransactionBatch(validator), + ); } - validator_cache.insert( + Ok(None) + } + ( + ValidationResult::EmptyProposal, + ProposalPart::Fin(ProposalFin { + proposal_commitment, + }), + ) => { + tracing::debug!( + "🖧 ⚙️ finalizing consensus for height and round {height_and_round} (empty \ + proposal)..." + ); + + finalized_blocks.insert( height_and_round, - ValidatorStage::TransactionBatch(validator), + create_empty_block(height_and_round.height()), ); - Ok(None) + let proposer_address = proposal_validator.proposer_address().ok_or_else(|| { + ProposalHandlingError::Fatal(anyhow::anyhow!( + "proposer_address not set after accepting empty proposal for \ + {height_and_round}" + )) + })?; + + Ok(Some(ProposalCommitmentWithOrigin { + proposal_commitment: ProposalCommitment(proposal_commitment.0), + proposer_address, + pol_round: proposal_validator + .valid_round() + .map(Round::new) + .unwrap_or(Round::nil()), + })) } + ( + ValidationResult::NonEmptyProposal, + ProposalPart::Fin(ProposalFin { + proposal_commitment, + }), + ) => { + tracing::debug!( + "🖧 ⚙️ finalizing consensus for height and round {height_and_round}..." + ); + + let proposer_address = proposal_validator.proposer_address().ok_or_else(|| { + ProposalHandlingError::Fatal(anyhow::anyhow!( + "proposer_address not set after accepting proposal for {height_and_round}" + )) + })?; + let valid_round = proposal_validator.valid_round(); + + Ok(defer_or_execute_proposal_fin::( + height_and_round, + proposal_commitment, + proposer_address, + valid_round, + main_readonly_storage.clone(), + deferred_executions, + batch_execution_manager, + decided_blocks, + finalized_blocks, + &mut validator_cache, + gas_price_provider.clone(), + l2_gas_price_provider.clone(), + worker_pool, + ) + // Note: We classify as recoverable by default. If there's a storage error in the + // chain, it will be automatically detected and converted to fatal. + .map_err(ProposalHandlingError::recoverable)?) + } + _ => unreachable!("Invalid result/part combination after validation"), } } @@ -1024,23 +1292,35 @@ fn handle_incoming_proposal_part( /// execution is performed, any previously deferred transactions for the height /// and round are executed first, then the proposal is finalized. #[allow(clippy::too_many_arguments)] -fn defer_or_execute_proposal_fin( +fn defer_or_execute_proposal_fin( height_and_round: HeightAndRound, proposal_commitment: Hash, - proposer: &Address, + proposer_address: ContractAddress, valid_round: Option, - db_tx: &Transaction<'_>, - mut validator: Box, + main_db: Storage, deferred_executions: Arc>>, batch_execution_manager: &mut BatchExecutionManager, -) -> anyhow::Result<(ValidatorStage, Option)> { + decided_blocks: DecidedBlocks, + finalized_blocks: &mut HashMap, + validator_cache: &mut ValidatorCache, + gas_price_provider: Option, + l2_gas_price_provider: Option, + worker_pool: ValidatorWorkerPool, +) -> anyhow::Result> { let commitment = ProposalCommitmentWithOrigin { proposal_commitment: ProposalCommitment(proposal_commitment.0), - proposer_address: ContractAddress(proposer.0), + proposer_address, pol_round: valid_round.map(Round::new).unwrap_or(Round::nil()), }; - if should_defer_execution(height_and_round, db_tx)? { + let mut main_db_conn = main_db.connection()?; + let main_db_tx = main_db_conn.transaction()?; + + if should_defer_validation( + height_and_round.height(), + decided_blocks.clone(), + &main_db_tx, + )? { // The proposal cannot be finalized yet, because the previous // block is not committed yet. Defer its finalization. tracing::debug!( @@ -1052,7 +1332,7 @@ fn defer_or_execute_proposal_fin( .entry(height_and_round) .or_default() .commitment = Some(commitment); - Ok((ValidatorStage::TransactionBatch(validator), None)) + Ok(None) } else { // The proposal can be finalized now, because the previous // block is committed. First execute any deferred transactions @@ -1063,26 +1343,56 @@ fn defer_or_execute_proposal_fin( }; let deferred_txns_len = deferred.as_ref().map_or(0, |d| d.transactions.len()); - if let Some(deferred) = deferred { + let validator = if let Some(deferred) = deferred { + let mut validator = if let Some(block_info) = deferred.block_info { + validator_cache + .remove(&height_and_round)? + .try_into_block_info_stage() + .expect("ValidatorStage to be BlockInfo if BlockInfo is deferred") + .validate_block_info( + block_info, + main_db.clone(), + decided_blocks, + gas_price_provider, + None, // TODO: Add L1ToFriValidator when oracle is available + l2_gas_price_provider.as_ref(), + worker_pool, + ) + .map(Box::new)? + } else { + validator_cache + .remove(&height_and_round)? + .try_into_transaction_batch_stage() + .map_err(|e| ProposalHandlingError::Recoverable(e.into()))? + }; + + // Execute deferred transactions first. + if !deferred.transactions.is_empty() { + tracing::debug!( + "🖧 ⚙️ executing {deferred_txns_len} deferred transactions for height and \ + round {height_and_round} before finalizing proposal..." + ); + } + if !deferred.transactions.is_empty() { - batch_execution_manager.execute_batch( + batch_execution_manager.execute_batch::( height_and_round, deferred.transactions, &mut validator, )?; } - // Process deferred TransactionsFin if it was stored - if let Some(transactions_fin) = deferred.transactions_fin { + // Process deferred ExecutedTransactionCount if it was stored + if let Some(executed_transaction_count) = deferred.executed_transaction_count { tracing::debug!( - "🖧 ⚙️ processing deferred TransactionsFin for height and round \ + "🖧 ⚙️ processing deferred ExecutedTransactionCount for height and round \ {height_and_round}" ); // Execution has started at this point (from execute_batch), - // so we can process TransactionsFin immediately - batch_execution_manager.process_transactions_fin( + // so we can process ExecutedTransactionCount immediately + batch_execution_manager.process_executed_transaction_count::( height_and_round, - transactions_fin, + executed_transaction_count, &mut validator, )?; } @@ -1095,26 +1405,32 @@ fn defer_or_execute_proposal_fin( ); // We've executed all transactions at the height, we can now finalize the // proposal. - let validator = + let block = validator.consensus_finalize(deferred_commitment.proposal_commitment)?; tracing::debug!( "🖧 ⚙️ consensus finalization for height and round {height_and_round} is \ complete, additionally {deferred_txns_len} previously deferred transactions \ were executed", ); - return Ok(( - ValidatorStage::Finalize(Box::new(validator)), - Some(deferred_commitment), - )); + finalized_blocks.insert(height_and_round, block); + return Ok(Some(deferred_commitment)); } - } - // Check if execution has started but TransactionsFin hasn't been processed yet - // If so, defer ProposalFin until TransactionsFin arrives + validator + } else { + validator_cache + .remove(&height_and_round)? + .try_into_transaction_batch_stage() + .map_err(|e| ProposalHandlingError::Recoverable(e.into()))? + }; + + // Check if execution has started but ExecutedTransactionCount hasn't been + // processed yet If so, defer ProposalFin until ExecutedTransactionCount + // arrives if batch_execution_manager.should_defer_proposal_fin(&height_and_round) { tracing::debug!( "🖧 ⚙️ consensus finalize for height and round {height_and_round} is deferred \ - because TransactionsFin hasn't been processed yet" + because ExecutedTransactionCount hasn't been processed yet" ); let mut deferred_executions = deferred_executions.lock().unwrap(); @@ -1122,20 +1438,23 @@ fn defer_or_execute_proposal_fin( .entry(height_and_round) .or_default() .commitment = Some(commitment); - return Ok((ValidatorStage::TransactionBatch(validator), None)); + validator_cache.insert( + height_and_round, + ValidatorStage::TransactionBatch(validator), + ); + return Ok(None); } - let validator = validator.consensus_finalize(commitment.proposal_commitment)?; + let block = validator.consensus_finalize(commitment.proposal_commitment)?; tracing::debug!( "🖧 ⚙️ consensus finalization for height and round {height_and_round} is complete, \ additionally {deferred_txns_len} previously deferred transactions were executed", ); - Ok(( - ValidatorStage::Finalize(Box::new(validator)), - Some(commitment), - )) + finalized_blocks.insert(height_and_round, block); + + Ok(Some(commitment)) } } @@ -1148,7 +1467,7 @@ fn p2p_vote_to_consensus_vote( p2p_proto::consensus::VoteType::Prevote => pathfinder_consensus::VoteType::Prevote, p2p_proto::consensus::VoteType::Precommit => pathfinder_consensus::VoteType::Precommit, }, - height: vote.block_number, + height: vote.height, round: vote.round.into(), value: vote .proposal_commitment @@ -1166,9 +1485,227 @@ fn consensus_vote_to_p2p_vote( pathfinder_consensus::VoteType::Prevote => p2p_proto::consensus::VoteType::Prevote, pathfinder_consensus::VoteType::Precommit => p2p_proto::consensus::VoteType::Precommit, }, - block_number: vote.height, + height: vote.height, round: vote.round.as_u32().expect("Round not to be Nil"), proposal_commitment: vote.value.map(|v| Hash(v.0 .0)), voter: Address(vote.validator_address.0), } } + +/// Extract the proposer address from the proposal parts. +fn proposer_address_from_parts( + parts: &[ProposalPart], + height_and_round: &HeightAndRound, +) -> Result { + let ProposalPart::Init(ProposalInit { proposer, .. }) = + parts + .first() + .ok_or(ProposalHandlingError::Fatal(anyhow::anyhow!( + "Proposal parts list is empty for {height_and_round} - logic error" + )))? + else { + return Err(ProposalHandlingError::Fatal(anyhow::anyhow!( + "First proposal part is not Init for {height_and_round} - logic error" + ))); + }; + Ok(ContractAddress(proposer.0)) +} + +/// Publish a snapshot of the current consensus state for observability. +fn update_info_watch( + hnr: HeightAndRound, + value: ConsensusValue, + incoming_proposals: &HashMap, + own_proposal_parts: &HashMap>, + finalized_blocks: &HashMap, + decided_blocks: DecidedBlocks, + info_watch_tx: &watch::Sender, +) -> Result<(), ProposalHandlingError> { + let mut cached = BTreeMap::::new(); + for (hnr, proposal) in incoming_proposals.iter() { + cached + .entry(hnr.height()) + .or_default() + .proposals + .push(consensus_info::ProposalParts { + round: hnr.round(), + proposer: proposal.proposer_address().unwrap_or_default(), + parts_len: proposal.parts().len(), + }); + } + own_proposal_parts.iter().try_for_each( + |(hnr, parts)| -> Result<(), ProposalHandlingError> { + cached + .entry(hnr.height()) + .or_default() + .proposals + .push(consensus_info::ProposalParts { + round: hnr.round(), + proposer: proposer_address_from_parts(parts, hnr)?, + parts_len: parts.len(), + }); + Ok(()) + }, + )?; + finalized_blocks.keys().for_each(|hnr| { + cached + .entry(hnr.height()) + .or_default() + .blocks + .push(consensus_info::FinalizedBlock { + round: hnr.round(), + is_decided: false, + }) + }); + { + let decided_blocks = decided_blocks.read().unwrap(); + decided_blocks.iter().for_each(|(h, decided)| { + cached + .entry(h.get()) + .or_default() + .blocks + .push(consensus_info::FinalizedBlock { + round: decided.round, + is_decided: true, + }) + }); + } + + info_watch_tx.send_modify(move |info| { + info.highest_decision = Some(consensus_info::Decision { + height: BlockNumber::new_or_panic(hnr.height()), + round: hnr.round(), + value: value.0, + }); + info.cached = cached; + }); + Ok(()) +} + +#[cfg(test)] +mod tests { + + use std::num::NonZeroUsize; + use std::path::PathBuf; + + use pathfinder_common::{BlockHash, ConsensusFinalizedL2Block, StateCommitment}; + use pathfinder_compiler::{BlockifierLibfuncs, ResourceLimits}; + use pathfinder_crypto::Felt; + use pathfinder_executor::{ConcurrentStateReader, ExecutorWorkerPool}; + use pathfinder_storage::StorageBuilder; + use pathfinder_validator::ValidatorWorkerPool; + + use super::*; + use crate::consensus::inner::dummy_proposal::{ + create_with_invalid_l1_handler_transactions, + ProposalCreationConfig, + }; + + /// Creates a worker pool for tests. + fn create_test_worker_pool() -> ValidatorWorkerPool { + ExecutorWorkerPool::::new(1).get() + } + + /// Requirements to reproduce: + /// - `H >= 10` + /// - rollback to batch `B`, `B > 0` + #[test] + fn regression_rollback_to_nonzero_batch_from_h10_onwards_clears_system_contract_0x1() { + let worker_pool = { + let main_storage = StorageBuilder::in_tempdir().unwrap(); + let worker_pool = create_test_worker_pool(); + let mut batch_execution_manager = BatchExecutionManager::new( + None, + None, + worker_pool.clone(), + ResourceLimits::for_test(), + BlockifierLibfuncs::default(), + ); + let dummy_data_dir = PathBuf::new(); + + let mut incoming_proposals = HashMap::new(); + let mut finalized_blocks = HashMap::new(); + let validator_cache = ValidatorCache::new(); + let deferred_executions = Arc::new(Mutex::new(HashMap::new())); + + let mut db_conn = main_storage.connection().unwrap(); + + for h in 0..20 { + let db_txn = db_conn.transaction().unwrap(); + let (proposal_parts, block) = create_with_invalid_l1_handler_transactions( + &db_txn, + h, + Round::new(0), + ContractAddress::ZERO, + main_storage.clone(), + ResourceLimits::for_test(), + BlockifierLibfuncs::default(), + // The smallest config that reproduced the issue until it was fixed + Some(ProposalCreationConfig { + num_batches: NonZeroUsize::new(3).unwrap(), + batch_len: NonZeroUsize::new(1).unwrap(), + num_executed_txns: NonZeroUsize::new(2).unwrap(), + }), + ) + .unwrap(); + + drop(db_txn); + + for proposal_part in proposal_parts { + let is_fin = proposal_part.is_proposal_fin(); + let proposal_commitment = + handle_incoming_proposal_part::( + ChainId::SEPOLIA_TESTNET, + false, + HeightAndRound::new(h, 0), + proposal_part, + &mut incoming_proposals, + &mut finalized_blocks, + DecidedBlocks::default(), + validator_cache.clone(), + deferred_executions.clone(), + main_storage.clone(), + &mut batch_execution_manager, + &dummy_data_dir, + None, + None, + None, + worker_pool.clone(), + ) + .unwrap(); + if is_fin { + assert_eq!( + proposal_commitment.unwrap().proposal_commitment.0, + block.header.state_diff_commitment.0, + "height={h}" + ); + } + } + + // Commit block at `h`, otherwise h+1 will be deferred + let main_db_tx = db_conn.transaction().unwrap(); + let ConsensusFinalizedL2Block { + header, + state_update, + .. + } = block; + // Fake trie updates - we don't care about actual trie state in this test + let header = header.compute_hash( + BlockHash(Felt::from_u64(h.saturating_sub(1))), + StateCommitment::ZERO, + |_| BlockHash(Felt::from_u64(h)), + ); + + main_db_tx.insert_block_header(&header).unwrap(); + main_db_tx + .insert_state_update_data(header.number, &state_update) + .unwrap(); + main_db_tx.commit().unwrap(); + } + + worker_pool.clone() + }; + let worker_pool = Arc::into_inner(worker_pool).unwrap(); + worker_pool.join(); + } +} diff --git a/crates/pathfinder/src/consensus/inner/p2p_task/p2p_task_tests.rs b/crates/pathfinder/src/consensus/inner/p2p_task/p2p_task_tests.rs new file mode 100644 index 0000000000..4681f9732a --- /dev/null +++ b/crates/pathfinder/src/consensus/inner/p2p_task/p2p_task_tests.rs @@ -0,0 +1,1498 @@ +//! End-to-end tests for p2p_task +//! +//! These tests verify the full integration flow of p2p_task, including proposal +//! processing, deferral logic (when ExecutedTransactionCount or ProposalFin +//! arrive out of order), rollback scenarios. They test the complete path from +//! receiving P2P events to sending consensus commands. + +use std::collections::HashMap; +use std::path::PathBuf; +use std::sync::{Arc, Mutex}; +use std::time::Duration; + +use p2p::consensus::{peer_score, Client, Event, EventKind, HeightAndRound}; +use p2p::libp2p::identity::Keypair; +use p2p::libp2p::PeerId; +use p2p_proto::consensus::ProposalPart; +use pathfinder_common::prelude::*; +use pathfinder_common::{ + consensus_info, + ChainId, + ConsensusFinalizedBlockHeader, + ConsensusFinalizedL2Block, + ContractAddress, + ProposalCommitment, +}; +use pathfinder_consensus::ConsensusCommand; +use pathfinder_crypto::Felt; +use pathfinder_storage::{Storage, StorageBuilder}; +use pathfinder_validator::ValidatorWorkerPool; +use tokio::sync::{mpsc, watch}; +use tokio::time::error::Elapsed; +use tokio::time::timeout; + +use crate::consensus::inner::dummy_proposal::{ + create_test_proposal_init, + create_transaction_batch, +}; +use crate::consensus::inner::{ + p2p_task, + ConsensusTaskEvent, + ConsensusValue, + P2PTaskConfig, + P2PTaskEvent, +}; +use crate::SyncMessageToConsensus; + +/// Helper struct to setup and manage the test environment (databases, +/// channels, mock client) +struct TestEnvironment { + main_storage: Storage, + p2p_client_receiver: mpsc::UnboundedReceiver>, + p2p_tx: mpsc::UnboundedSender, + tx_to_p2p: mpsc::Sender, + rx_from_p2p: mpsc::Receiver, + tx_sync_to_consensus: mpsc::Sender, + handle: Arc>>>>, + // Optional so we can `take()` it in `Drop`. + worker_pool: Option, + + // Keep these alive to prevent receiver from being dropped + _info_watch_rx: watch::Receiver, +} + +impl TestEnvironment { + const HISTORY_DEPTH: u64 = 10; + const TX_TO_CONSENSUS_CHANNEL_SIZE: usize = 100; + const TX_TO_P2P_CHANNEL_SIZE: usize = 100; + + fn new(chain_id: ChainId, validator_address: ContractAddress) -> Self { + Self::with_finalized_blocks(chain_id, validator_address, HashMap::new()) + } + + fn with_finalized_blocks( + chain_id: ChainId, + validator_address: ContractAddress, + finalized_blocks: HashMap, + ) -> Self { + // Initialize temp pathfinder and consensus databases + let main_storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); + + // Mock channels for p2p communication + let (p2p_tx, p2p_rx) = mpsc::unbounded_channel(); + let (tx_to_consensus, rx_from_p2p) = mpsc::channel(Self::TX_TO_CONSENSUS_CHANNEL_SIZE); + let (tx_to_p2p, rx_from_consensus) = mpsc::channel(Self::TX_TO_P2P_CHANNEL_SIZE); + let (tx_sync_to_consensus, rx_from_sync) = mpsc::channel(1); + let (info_watch_tx, info_watch_rx) = + watch::channel(consensus_info::ConsensusInfo::default()); + + // Create mock Client (used for receiving events in these tests) + let keypair = Keypair::generate_ed25519(); + let (client_sender, client_receiver) = mpsc::unbounded_channel(); + let peer_id = keypair.public().to_peer_id(); + let p2p_client = Client::from((peer_id, client_sender)); + + let (handle, worker_pool) = p2p_task::spawn( + chain_id, + P2PTaskConfig { + my_validator_address: validator_address, + is_l3: false, + history_depth: Self::HISTORY_DEPTH, + }, + p2p_client, + p2p_rx, + tx_to_consensus, + rx_from_consensus, + rx_from_sync, + info_watch_tx, + main_storage.clone(), + finalized_blocks, + // Only used for failure injection, which does not happen in these tests + &PathBuf::default(), + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), + true, + None, + None, + ); + + Self { + main_storage, + p2p_client_receiver: client_receiver, + p2p_tx, + tx_to_p2p, + rx_from_p2p, + tx_sync_to_consensus, + handle: Arc::new(Mutex::new(Some(handle))), + worker_pool: Some(worker_pool), + _info_watch_rx: info_watch_rx, + } + } + + fn create_committed_block(&self, height: u64) { + let block_id_felt = Felt::from(height); + let mut db_conn = self.main_storage.connection().unwrap(); + let db_tx = db_conn.transaction().unwrap(); + + let header = BlockHeader::builder() + .number(BlockNumber::new_or_panic(height)) + .timestamp(BlockTimestamp::new_or_panic(1000)) + .calculated_state_commitment( + StorageCommitment(block_id_felt), + ClassCommitment(block_id_felt), + ) + .sequencer_address(SequencerAddress::ZERO) + .finalize_with_hash(BlockHash(block_id_felt)); + + db_tx.insert_block_header(&header).unwrap(); + db_tx.commit().unwrap(); + } + + async fn wait_for_task_initialization(&self) { + tokio::time::sleep(Duration::from_millis(100)).await; + } + + async fn verify_task_alive(&self) { + let handle_opt = { + let handle_guard = self.handle.lock().unwrap(); + handle_guard.as_ref().map(|h| h.is_finished()) + }; + + if let Some(true) = handle_opt { + // Handle is finished, take it out and await to get the error + let handle = { + let mut handle_guard = self.handle.lock().unwrap(); + handle_guard.take().expect("Handle should exist") + }; + + match handle.await { + Ok(Ok(())) => { + panic!("Task finished successfully (unexpected - should still be running)"); + } + Ok(Err(e)) => { + panic!("Task finished with error: {e:#}"); + } + Err(e) => { + panic!("Task panicked: {e:?}"); + } + } + } + } + + async fn _wait_for_task_exit(&self) -> Result, Elapsed> { + let wait_for_exit_fut = async { + loop { + let handle_opt = { + let handle_guard = self.handle.lock().unwrap(); + handle_guard.as_ref().map(|h| h.is_finished()) + }; + + if let Some(true) = handle_opt { + // Handle is finished, take it out and await to get the result + let handle = { + let mut handle_guard = self.handle.lock().unwrap(); + handle_guard.take().expect("Handle should exist") + }; + + return handle.await?; + } + + tokio::time::sleep(Duration::from_millis(50)).await; + } + }; + timeout(Duration::from_millis(300), wait_for_exit_fut).await + } + + async fn wait_tx_to_p2p_consumed(&self) { + let start = std::time::Instant::now(); + let timeout_duration = Duration::from_millis(300); + + while start.elapsed() < timeout_duration { + if self.tx_to_p2p.capacity() == Self::TX_TO_P2P_CHANNEL_SIZE { + // All messages consumed + return; + } + tokio::time::sleep(Duration::from_millis(10)).await; + } + panic!("Timeout waiting for tx_to_p2p to be consumed"); + } +} + +impl Drop for TestEnvironment { + fn drop(&mut self) { + // Ensure the task is stopped when the test environment is dropped + let handle_opt = { + let mut handle_guard = self.handle.lock().unwrap(); + handle_guard.take() + }; + + if let Some(handle) = handle_opt { + handle.abort(); + } + + // Join the worker pool to ensure all threads are cleaned up properly + if let Some(pool) = self.worker_pool.take().and_then(Arc::into_inner) { + pool.join(); + } + } +} + +fn create_finalized_block(height: u64) -> ConsensusFinalizedL2Block { + ConsensusFinalizedL2Block { + header: ConsensusFinalizedBlockHeader { + number: BlockNumber::new_or_panic(height), + timestamp: BlockTimestamp::new_or_panic(height + 1000), + state_diff_commitment: StateDiffCommitment(Felt::from(height)), + ..Default::default() + }, + ..Default::default() + } +} + +/// Helper: Wait for a proposal event from consensus +async fn wait_for_proposal_event( + rx: &mut mpsc::Receiver, + timeout_duration: Duration, +) -> Option> { + let start = std::time::Instant::now(); + while start.elapsed() < timeout_duration { + // First try non-blocking recv + match rx.try_recv() { + Ok(ConsensusTaskEvent::CommandFromP2P(ConsensusCommand::Proposal(proposal))) => { + return Some(ConsensusCommand::Proposal(proposal)) + } + Ok(_) => { + // Other event, continue waiting + continue; + } + Err(mpsc::error::TryRecvError::Empty) => { + // No event yet, wait a bit + tokio::time::sleep(Duration::from_millis(50)).await; + continue; + } + Err(mpsc::error::TryRecvError::Disconnected) => { + // Channel closed + return None; + } + } + } + None +} + +/// Helper: Wait for a [ConsensusCommand::ChangePeerScore] event from +/// consensus. +async fn wait_for_change_peer_score( + p2p_client_rx: &mut mpsc::UnboundedReceiver>, + timeout_duration: Duration, +) -> Option<(PeerId, f64)> { + let start = std::time::Instant::now(); + while start.elapsed() < timeout_duration { + // First try non-blocking recv + match p2p_client_rx.try_recv() { + Ok(p2p::core::Command::Application(p2p::consensus::Command::ChangePeerScore { + peer_id, + delta, + })) => { + return Some((peer_id, delta)); + } + Ok(_) => { + // Other event, continue waiting + continue; + } + Err(mpsc::error::TryRecvError::Empty) => { + // No event yet, wait a bit + tokio::time::sleep(Duration::from_millis(50)).await; + continue; + } + Err(mpsc::error::TryRecvError::Disconnected) => { + // Channel closed + eprintln!("channel closed"); + return None; + } + } + } + None +} + +/// Helper: Verify no proposal event was received +async fn verify_no_proposal_event(rx: &mut mpsc::Receiver, duration: Duration) { + let start = std::time::Instant::now(); + while start.elapsed() < duration { + match rx.try_recv() { + Ok(ConsensusTaskEvent::CommandFromP2P(proposal @ ConsensusCommand::Proposal(_))) => { + panic!("Unexpected proposal event received: {proposal:?}"); + } + Ok(_) => { + // Other event, continue checking + continue; + } + Err(mpsc::error::TryRecvError::Empty) => { + // No event, wait a bit + tokio::time::sleep(Duration::from_millis(50)).await; + continue; + } + Err(mpsc::error::TryRecvError::Disconnected) => { + // Channel closed, that's fine + return; + } + } + } +} + +/// Helper: Verify proposal event matches expected values +fn verify_proposal_event( + proposal_cmd: ConsensusCommand, + expected_height: u64, + expected_commitment: ProposalCommitment, +) { + match proposal_cmd { + ConsensusCommand::Proposal(signed_proposal) => { + assert_eq!( + signed_proposal.proposal.height, expected_height, + "Proposal height should match" + ); + assert_eq!( + signed_proposal.proposal.value.0, expected_commitment, + "Proposal commitment should match" + ); + } + _ => panic!("Expected Proposal command"), + } +} + +/// ProposalFin deferred until parent block is decided. +/// +/// **Scenario**: ProposalFin arrives before the parent block is decided. +/// Execution has started (TransactionBatch received), so ProposalFin must +/// be deferred until the parent block is decided (or committed, covered by +/// [test_proposal_fin_deferred_until_parent_block_committed]), then +/// finalization can proceed. +/// +/// **Test**: Send Init → BlockInfo → TransactionBatch → +/// ExecutedTransactionCount → ProposalFin → +/// MarkBlockAsDecidedAndCleanUp(parent). +/// +/// Verify ProposalFin is deferred (no proposal event), then verify +/// finalization occurs after parent block is decided. +#[rstest::rstest] +#[case::consensus_ahead_of_fgw(true)] +#[case::fgw_ahead_of_consensus(false)] +#[test_log::test(tokio::test(flavor = "multi_thread"))] +async fn test_proposal_fin_deferred_until_parent_block_decided( + #[case] consensus_ahead_of_fgw: bool, +) { + use pathfinder_common::proposal_commitment; + + let chain_id = ChainId::SEPOLIA_TESTNET; + + let validator_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x123").unwrap()); + + let h0r0 = HeightAndRound::new(0, 0); + let h1r0 = HeightAndRound::new(1, 0); + let finalized_blocks = HashMap::from([ + (h0r0, create_finalized_block(h0r0.height())), + (h1r0, create_finalized_block(h1r0.height())), + ]); + + let proposal_commitment0 = finalized_blocks + .get(&h0r0) + .map(|block| block.header.state_diff_commitment.0) + .map(ProposalCommitment) + .unwrap(); + + let expected_proposal_commitment2 = + proposal_commitment!("0x02A3CE358B96A4A26AC9C0EF4F7A8F878A9F3B1A4757E716874CAC711617CA87"); + + let mut env = + TestEnvironment::with_finalized_blocks(chain_id, validator_address, finalized_blocks); + + env.tx_to_p2p + .send(P2PTaskEvent::MarkBlockAsDecidedAndCleanUp( + h0r0, + ConsensusValue(proposal_commitment0), + )) + .await + .expect("Failed to send MarkBlockAsDecidedAndCleanUp"); + + if !consensus_ahead_of_fgw { + // Simulate the case where the feeder gateway was faster to get the + // block for H=1 from the proposer than the node under test figured + // out that the very block was decided upon. + env.create_committed_block(1); + } + env.wait_for_task_initialization().await; + + let proposer_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x456").unwrap()); + let h2r1 = HeightAndRound::new(2, 1); + let transactions = create_transaction_batch(0, 0, 5, chain_id); + let (proposal_init, block_info) = + create_test_proposal_init(chain_id, h2r1.height(), h2r1.round(), proposer_address); + + // Step 1: Send ProposalInit + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(h2r1, ProposalPart::Init(proposal_init)), + }) + .expect("Failed to send ProposalInit"); + env.verify_task_alive().await; + + // Step 2: Send BlockInfo + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(h2r1, ProposalPart::BlockInfo(block_info)), + }) + .expect("Failed to send BlockInfo"); + env.verify_task_alive().await; + + // Step 3: Send TransactionBatch (execution should start) + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(h2r1, ProposalPart::TransactionBatch(transactions)), + }) + .expect("Failed to send TransactionBatch"); + env.verify_task_alive().await; + + // Verify: No proposal event yet (execution started, but not finalized) + verify_no_proposal_event(&mut env.rx_from_p2p, Duration::from_millis(200)).await; + + // Step 4: Send ExecutedTransactionCount + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(h2r1, ProposalPart::ExecutedTransactionCount(5)), + }) + .expect("Failed to send ExecutedTransactionCount"); + env.verify_task_alive().await; + + // Step 5: Send ProposalFin + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + h2r1, + ProposalPart::Fin(p2p_proto::consensus::ProposalFin { + proposal_commitment: p2p_proto::common::Hash(expected_proposal_commitment2.0), + }), + ), + }) + .expect("Failed to send ProposalFin"); + env.verify_task_alive().await; + + if consensus_ahead_of_fgw { + // Verify: Still no proposal event + verify_no_proposal_event(&mut env.rx_from_p2p, Duration::from_millis(200)).await; + } else { + // Verify: Proposal event should be sent now + let proposal_cmd = wait_for_proposal_event(&mut env.rx_from_p2p, Duration::from_secs(3)) + .await + .expect("Expected proposal event after ProposalFin"); + verify_proposal_event(proposal_cmd, 2, expected_proposal_commitment2); + } + + // Step 6: Send MarkBlockAsDecidedAndCleanUp for parent block (should trigger + // finalization) + env.tx_to_p2p + .send(P2PTaskEvent::MarkBlockAsDecidedAndCleanUp( + h2r1, + ConsensusValue(expected_proposal_commitment2), + )) + .await + .expect("Failed to send MarkBlockAsDecidedAndCleanUp"); + env.verify_task_alive().await; + + // Make sure the above message is consumed before proceeding, otherwise we can + // get an ugly race condition which does not occur in reality but will make the + // test fail once in a while + env.wait_tx_to_p2p_consumed().await; + + if consensus_ahead_of_fgw { + // Step 8: At some point sync sends SyncMessageToConsensus::GetFinalizedBlock + // for H=1, and then confirms committing the block with + // SyncMessageToConsensus::ConfirmFinalizedBlockCommitted + env.create_committed_block(1); + env.tx_sync_to_consensus + .send(SyncMessageToConsensus::ConfirmBlockCommitted { + number: BlockNumber::new_or_panic(1), + }) + .await + .expect("Failed to send ConfirmBlockCommitted"); + env.verify_task_alive().await; + + // Verify: Proposal event should be sent now + let proposal_cmd = wait_for_proposal_event(&mut env.rx_from_p2p, Duration::from_secs(3)) + .await + .expect("Expected proposal event after ExecutedTransactionCount"); + verify_proposal_event(proposal_cmd, 2, expected_proposal_commitment2); + } else { + // Step 8: It turns out that the feeder gateway was faster to get the + // block for H=1 from the proposer than the node under test figured out + // that the very block was decided upon. + } + env.verify_task_alive().await; +} + +/// ProposalFin deferred until parent block is committed. +/// +/// **Scenario**: ProposalFin arrives before the parent block is committed. +/// Execution has started (TransactionBatch received), so ProposalFin must be +/// deferred until the parent block is committed, then finalization can proceed. +/// +/// **Test**: Send Init → BlockInfo → TransactionBatch → +/// ExecutedTransactionCount → ProposalFin → CommitBlock(parent). +/// +/// Verify ProposalFin is deferred (no proposal event), then verify +/// finalization occurs after parent block is committed. +#[rstest::rstest] +#[case::consensus_ahead_of_fgw(true)] +#[case::fgw_ahead_of_consensus(false)] +#[test_log::test(tokio::test(flavor = "multi_thread"))] +async fn test_proposal_fin_deferred_until_parent_block_committed( + #[case] consensus_ahead_of_fgw: bool, +) { + let chain_id = ChainId::SEPOLIA_TESTNET; + let validator_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x123").unwrap()); + + let h1r0 = HeightAndRound::new(1, 0); + let finalized_blocks = HashMap::from([(h1r0, create_finalized_block(h1r0.height()))]); + + let proposal_commitment1 = finalized_blocks + .get(&h1r0) + .map(|block| block.header.state_diff_commitment.0) + .map(ProposalCommitment) + .unwrap(); + + let mut env = + TestEnvironment::with_finalized_blocks(chain_id, validator_address, finalized_blocks); + env.create_committed_block(0); + if !consensus_ahead_of_fgw { + // Simulate the case where the feeder gateway was faster to get the + // block for H=1 from the proposer than the node under test figured + // out that the very block was decided upon. + env.create_committed_block(1); + } + env.wait_for_task_initialization().await; + + let proposer_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x456").unwrap()); + let h2r1 = HeightAndRound::new(2, 1); + let transactions = create_transaction_batch(0, 0, 5, chain_id); + let (proposal_init, block_info) = + create_test_proposal_init(chain_id, h2r1.height(), h2r1.round(), proposer_address); + + // Focus is on batch execution and deferral logic, not commitment validation. + // Using a dummy commitment... + let proposal_commitment2 = ProposalCommitment(Felt::ZERO); + + // Step 1: Send ProposalInit + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(h2r1, ProposalPart::Init(proposal_init)), + }) + .expect("Failed to send ProposalInit"); + env.verify_task_alive().await; + + // Step 2: Send BlockInfo + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(h2r1, ProposalPart::BlockInfo(block_info)), + }) + .expect("Failed to send BlockInfo"); + env.verify_task_alive().await; + + // Step 3: Send TransactionBatch (execution should start) + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(h2r1, ProposalPart::TransactionBatch(transactions)), + }) + .expect("Failed to send TransactionBatch"); + env.verify_task_alive().await; + + // Verify: No proposal event yet (execution started, but not finalized) + verify_no_proposal_event(&mut env.rx_from_p2p, Duration::from_millis(200)).await; + + // Step 4: Send ExecutedTransactionCount + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(h2r1, ProposalPart::ExecutedTransactionCount(5)), + }) + .expect("Failed to send ExecutedTransactionCount"); + env.verify_task_alive().await; + + // Step 5: Send ProposalFin + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + h2r1, + ProposalPart::Fin(p2p_proto::consensus::ProposalFin { + proposal_commitment: p2p_proto::common::Hash(proposal_commitment2.0), + }), + ), + }) + .expect("Failed to send ProposalFin"); + env.verify_task_alive().await; + + if consensus_ahead_of_fgw { + // Verify: Still no proposal event + verify_no_proposal_event(&mut env.rx_from_p2p, Duration::from_millis(200)).await; + } else { + // Verify: Proposal event should be sent now + let proposal_cmd = wait_for_proposal_event(&mut env.rx_from_p2p, Duration::from_secs(3)) + .await + .expect("Expected proposal event after ProposalFin"); + verify_proposal_event(proposal_cmd, 2, proposal_commitment2); + } + + // Step 6: Send MarkBlockAsDecidedAndCleanUp for parent block (should trigger + // finalization) + env.tx_to_p2p + .send( + crate::consensus::inner::P2PTaskEvent::MarkBlockAsDecidedAndCleanUp( + h1r0, + ConsensusValue(proposal_commitment1), + ), + ) + .await + .expect("Failed to send MarkBlockAsDecidedAndCleanUp"); + env.verify_task_alive().await; + + // Make sure the above message is consumed before proceeding, otherwise we can + // get an ugly race condition which does not occur in reality but will make the + // test fail once in a while + env.wait_tx_to_p2p_consumed().await; + + if consensus_ahead_of_fgw { + // Step 8: At some point sync sends SyncMessageToConsensus::GetFinalizedBlock + // for H=1, and then confirms committing the block with + // SyncMessageToConsensus::ConfirmBlockCommitted + env.create_committed_block(1); + env.tx_sync_to_consensus + .send(SyncMessageToConsensus::ConfirmBlockCommitted { + number: BlockNumber::new_or_panic(1), + }) + .await + .expect("Failed to send ConfirmBlockCommitted"); + env.verify_task_alive().await; + + // Verify: Proposal event should be sent now + let proposal_cmd = wait_for_proposal_event(&mut env.rx_from_p2p, Duration::from_secs(3)) + .await + .expect("Expected proposal event after ExecutedTransactionCount"); + verify_proposal_event(proposal_cmd, 2, proposal_commitment2); + } else { + // Step 8: It turns out that the feeder gateway was faster to get the + // block for H=1 from the proposer than the node under test figured out + // that the very block was decided upon. + } + env.verify_task_alive().await; +} + +/// Full proposal flow in normal order. +/// +/// **Scenario**: Complete proposal flow with all parts arriving in the +/// expected order. ExecutedTransactionCount arrives before ProposalFin, so no +/// deferral is needed. +/// +/// **Test**: Send Init → BlockInfo → TransactionBatch → +/// ExecutedTransactionCount → ProposalFin. +/// +/// Verify proposal event is sent immediately after ProposalFin (no +/// deferral). +#[test_log::test(tokio::test(flavor = "multi_thread"))] +async fn test_full_proposal_flow_normal_order() { + let chain_id = ChainId::SEPOLIA_TESTNET; + let validator_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x123").unwrap()); + let mut env = TestEnvironment::new(chain_id, validator_address); + env.create_committed_block(1); + env.wait_for_task_initialization().await; + + let proposer_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x456").unwrap()); + let height_and_round = HeightAndRound::new(2, 1); + let transactions = create_transaction_batch(0, 0, 5, chain_id); + let (proposal_init, block_info) = create_test_proposal_init(chain_id, 2, 1, proposer_address); + + // Focus is on batch execution and deferral logic, not commitment validation. + // Using a dummy commitment... + let proposal_commitment = ProposalCommitment(Felt::ZERO); + + // Step 1: Send ProposalInit + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::Init(proposal_init)), + }) + .expect("Failed to send ProposalInit"); + env.verify_task_alive().await; + + // Step 2: Send BlockInfo + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::BlockInfo(block_info)), + }) + .expect("Failed to send BlockInfo"); + env.verify_task_alive().await; + + // Step 3: Send TransactionBatch + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + height_and_round, + ProposalPart::TransactionBatch(transactions), + ), + }) + .expect("Failed to send TransactionBatch"); + env.verify_task_alive().await; + + // Verify: No proposal event yet (execution started, but + // ExecutedTransactionCount not processed) + verify_no_proposal_event(&mut env.rx_from_p2p, Duration::from_millis(200)).await; + + // Step 4: Send ExecutedTransactionCount + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::ExecutedTransactionCount(5)), + }) + .expect("Failed to send ExecutedTransactionCount"); + env.verify_task_alive().await; + + // Verify: Still no proposal event (ExecutedTransactionCount processed, but + // ProposalFin not received) + verify_no_proposal_event(&mut env.rx_from_p2p, Duration::from_millis(200)).await; + + // Step 5: Send ProposalFin + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + height_and_round, + ProposalPart::Fin(p2p_proto::consensus::ProposalFin { + proposal_commitment: p2p_proto::common::Hash(proposal_commitment.0), + }), + ), + }) + .expect("Failed to send ProposalFin"); + tokio::time::sleep(Duration::from_millis(500)).await; + + // Verify: Proposal event should be sent immediately (both conditions met) + let proposal_cmd = wait_for_proposal_event(&mut env.rx_from_p2p, Duration::from_secs(2)) + .await + .expect("Expected proposal event after ProposalFin"); + verify_proposal_event(proposal_cmd, 2, proposal_commitment); + env.verify_task_alive().await; +} + +/// ExecutedTransactionCount deferred when execution not started. +/// +/// **Scenario**: Parent block is not committed initially, so +/// TransactionBatch and ExecutedTransactionCount are both deferred. After +/// parent is committed, execution starts and deferred messages are processed. +/// +/// **Test**: Send Init → BlockInfo → TransactionBatch → +/// ExecutedTransactionCount (without committing parent). +/// +/// Verify no execution occurs. Then commit parent block and send another +/// TransactionBatch. Verify deferred ExecutedTransactionCount is processed when +/// execution starts. +#[test_log::test(tokio::test(flavor = "multi_thread"))] +async fn test_executed_transaction_count_deferred_when_execution_not_started() { + let chain_id = ChainId::SEPOLIA_TESTNET; + let validator_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x123").unwrap()); + let mut env = TestEnvironment::new(chain_id, validator_address); + // Parent block NOT committed initially + env.wait_for_task_initialization().await; + + let proposer_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x456").unwrap()); + let height_and_round = HeightAndRound::new(2, 1); + let transactions_batch1 = create_transaction_batch(0, 0, 3, chain_id); + let transactions_batch2 = create_transaction_batch(0, 3, 2, chain_id); // Total: 5 + let (proposal_init, block_info) = create_test_proposal_init(chain_id, 2, 1, proposer_address); + + // Step 1: Send ProposalInit + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::Init(proposal_init)), + }) + .expect("Failed to send ProposalInit"); + env.verify_task_alive().await; + + // Step 2: Send BlockInfo (should be deferred - parent not committed) + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::BlockInfo(block_info)), + }) + .expect("Failed to send BlockInfo"); + env.verify_task_alive().await; + + // Step 3: Send first TransactionBatch (should be deferred - parent not + // committed) + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + height_and_round, + ProposalPart::TransactionBatch(transactions_batch1), + ), + }) + .expect("Failed to send first TransactionBatch"); + env.verify_task_alive().await; + + // Verify: No proposal event (execution deferred) + verify_no_proposal_event(&mut env.rx_from_p2p, Duration::from_millis(200)).await; + + // Step 4: Send ExecutedTransactionCount (should be deferred - execution not + // started) + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::ExecutedTransactionCount(5)), + }) + .expect("Failed to send ExecutedTransactionCount"); + env.verify_task_alive().await; + + // Verify: Still no proposal event (ExecutedTransactionCount deferred) + verify_no_proposal_event(&mut env.rx_from_p2p, Duration::from_millis(200)).await; + + // Step 5: Now we commit the parent block + env.create_committed_block(1); + tokio::time::sleep(Duration::from_millis(100)).await; + + // Step 6: Send another TransactionBatch + // This should trigger execution of deferred batches + process deferred + // ExecutedTransactionCount + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + height_and_round, + ProposalPart::TransactionBatch(transactions_batch2), + ), + }) + .expect("Failed to send second TransactionBatch"); + env.verify_task_alive().await; + + // At this point, execution should have started and ExecutedTransactionCount + // should be processed... + + // To verify this, we send ProposalFin, then verify that a proposal event is + // sent (which confirms ExecutedTransactionCount was processed). + + // Once again, using a dummy commitment... + let proposal_commitment = ProposalCommitment(Felt::ZERO); + + // Step 7: Send ProposalFin + // This should trigger finalization since ExecutedTransactionCount was processed + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + height_and_round, + ProposalPart::Fin(p2p_proto::consensus::ProposalFin { + proposal_commitment: p2p_proto::common::Hash(proposal_commitment.0), + }), + ), + }) + .expect("Failed to send ProposalFin"); + env.verify_task_alive().await; + + // Verify: Proposal event should be sent (confirms ExecutedTransactionCount was + // processed) + let proposal_cmd = wait_for_proposal_event(&mut env.rx_from_p2p, Duration::from_secs(2)) + .await + .expect("Expected proposal event after deferred ExecutedTransactionCount was processed"); + verify_proposal_event(proposal_cmd, 2, proposal_commitment); + env.verify_task_alive().await; +} + +/// Multiple TransactionBatch messages are executed correctly. +/// +/// **Scenario**: A proposal contains multiple TransactionBatch messages +/// that must all be executed in order. All batches should be executed +/// before ExecutedTransactionCount is processed. +/// +/// **Test**: Send Init → BlockInfo → TransactionBatch 1 → +/// TransactionBatch 2 → TransactionBatch 3 → ExecutedTransactionCount → +/// ProposalFin. +/// +/// Verify proposal event is sent after ProposalFin. +#[test_log::test(tokio::test(flavor = "multi_thread"))] +async fn test_multiple_batches_execution() { + let chain_id = ChainId::SEPOLIA_TESTNET; + let validator_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x123").unwrap()); + let mut env = TestEnvironment::new(chain_id, validator_address); + env.create_committed_block(1); + env.wait_for_task_initialization().await; + + let proposer_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x456").unwrap()); + let height_and_round = HeightAndRound::new(2, 1); + let transactions_batch1 = create_transaction_batch(0, 0, 2, chain_id); + let transactions_batch2 = create_transaction_batch(0, 2, 3, chain_id); + let transactions_batch3 = create_transaction_batch(0, 5, 2, chain_id); // Total: 7 + let (proposal_init, block_info) = create_test_proposal_init(chain_id, 2, 1, proposer_address); + + // Focus is on batch execution and deferral logic, not commitment validation. + // Using a dummy commitment... + let proposal_commitment = ProposalCommitment(Felt::ZERO); + + // Step 1: Send ProposalInit + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::Init(proposal_init)), + }) + .expect("Failed to send ProposalInit"); + env.verify_task_alive().await; + + // Step 2: Send BlockInfo + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::BlockInfo(block_info)), + }) + .expect("Failed to send BlockInfo"); + env.verify_task_alive().await; + + // Step 3: Send multiple TransactionBatches + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + height_and_round, + ProposalPart::TransactionBatch(transactions_batch1), + ), + }) + .expect("Failed to send TransactionBatch1"); + env.verify_task_alive().await; + + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + height_and_round, + ProposalPart::TransactionBatch(transactions_batch2), + ), + }) + .expect("Failed to send TransactionBatch2"); + env.verify_task_alive().await; + + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + height_and_round, + ProposalPart::TransactionBatch(transactions_batch3), + ), + }) + .expect("Failed to send TransactionBatch3"); + env.verify_task_alive().await; + + // Step 4: Send ExecutedTransactionCount (total count = 7) + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::ExecutedTransactionCount(7)), + }) + .expect("Failed to send ExecutedTransactionCount"); + env.verify_task_alive().await; + + // Step 5: Send ProposalFin + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + height_and_round, + ProposalPart::Fin(p2p_proto::consensus::ProposalFin { + proposal_commitment: p2p_proto::common::Hash(proposal_commitment.0), + }), + ), + }) + .expect("Failed to send ProposalFin"); + tokio::time::sleep(Duration::from_millis(500)).await; + + // Verify: Proposal event should be sent + let proposal_cmd = wait_for_proposal_event(&mut env.rx_from_p2p, Duration::from_secs(2)) + .await + .expect("Expected proposal event after ProposalFin"); + verify_proposal_event(proposal_cmd, 2, proposal_commitment); + env.verify_task_alive().await; +} + +/// ExecutedTransactionCount triggers rollback when count is less than executed. +/// +/// **Scenario**: We execute 10 transactions (2 batches of 5), but +/// ExecutedTransactionCount indicates only 7 transactions were executed by the +/// proposer. The validator must rollback from 10 to 7 transactions to +/// match the proposer's state. +/// +/// **Test**: Send Init → BlockInfo → TransactionBatch1 (5 txs) → +/// TransactionBatch2 (5 txs) → ExecutedTransactionCount (count=7) → +/// ProposalFin. +/// +/// Verify proposal event is sent successfully after rollback, confirming +/// the rollback mechanism works correctly. +#[test_log::test(tokio::test(flavor = "multi_thread"))] +async fn test_executed_transaction_count_rollback() { + let chain_id = ChainId::SEPOLIA_TESTNET; + let validator_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x123").unwrap()); + let mut env = TestEnvironment::new(chain_id, validator_address); + env.create_committed_block(1); + env.wait_for_task_initialization().await; + + let proposer_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x456").unwrap()); + let height_and_round = HeightAndRound::new(2, 1); + let transactions_batch1 = create_transaction_batch(0, 0, 5, chain_id); + let transactions_batch2 = create_transaction_batch(0, 5, 5, chain_id); // Total: 10 + let (proposal_init, block_info) = create_test_proposal_init(chain_id, 2, 1, proposer_address); + + // Focus is on batch execution and deferral logic, not commitment validation. + // Using a dummy commitment... + let proposal_commitment = ProposalCommitment(Felt::ZERO); + + // Step 1: Send ProposalInit + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::Init(proposal_init)), + }) + .expect("Failed to send ProposalInit"); + env.verify_task_alive().await; + + // Step 2: Send BlockInfo + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::BlockInfo(block_info)), + }) + .expect("Failed to send BlockInfo"); + env.verify_task_alive().await; + + // Step 3: Send TransactionBatch 1 (5 transactions) + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + height_and_round, + ProposalPart::TransactionBatch(transactions_batch1), + ), + }) + .expect("Failed to send TransactionBatch1"); + env.verify_task_alive().await; + + // Step 4: Send TransactionBatch 2 (5 more transactions, total = 10) + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + height_and_round, + ProposalPart::TransactionBatch(transactions_batch2), + ), + }) + .expect("Failed to send TransactionBatch2"); + env.verify_task_alive().await; + + // Step 5: Send ExecutedTransactionCount with count=7 (should trigger rollback + // from 10 to 7) + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::ExecutedTransactionCount(7)), + }) + .expect("Failed to send ExecutedTransactionCount"); + env.verify_task_alive().await; + + // Step 6: Send ProposalFin + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + height_and_round, + ProposalPart::Fin(p2p_proto::consensus::ProposalFin { + proposal_commitment: p2p_proto::common::Hash(proposal_commitment.0), + }), + ), + }) + .expect("Failed to send ProposalFin"); + tokio::time::sleep(Duration::from_millis(500)).await; + + // Verify: Proposal event should be sent (rollback completed successfully) + // + // NOTE: We verify that a proposal event is sent, which indicates rollback + // completed. However, we cannot directly verify the transaction count in e2e + // tests because the validator is internal to p2p_task. The rollback logic + // itself is verified in unit tests + // (batch_execution.rs::test_executed_transaction_count_rollback). + // This e2e test verifies that rollback doesn't break the proposal flow + // end-to-end. + let proposal_cmd = wait_for_proposal_event(&mut env.rx_from_p2p, Duration::from_secs(2)) + .await + .expect("Expected proposal event after ProposalFin"); + verify_proposal_event(proposal_cmd, 2, proposal_commitment); + env.verify_task_alive().await; +} + +/// Empty TransactionBatch execution (non-spec edge case). +/// +/// **Scenario**: A proposal contains an empty TransactionBatch. Per the +/// [Starknet consensus spec](https://raw.githubusercontent.com/starknet-io/starknet-p2p-specs/refs/heads/main/p2p/proto/consensus/consensus.md), +/// if a proposer has no transactions, they should send an empty proposal +/// (skipping BlockInfo, TransactionBatch and ExecutedTransactionCount +/// entirely). However, this test covers the case where a non-empty proposal +/// includes an empty TransactionBatch. Such a proposal is invalid per the spec, +/// so we reject it. +/// +/// **Test**: Send Init → BlockInfo → TransactionBatch (empty) → +/// ExecutedTransactionCount (count=0) → ProposalFin. +/// +/// Verify that the proposal is rejected and no proposal event is sent. +#[test_log::test(tokio::test(flavor = "multi_thread"))] +async fn test_empty_batch_is_rejected() { + let chain_id = ChainId::SEPOLIA_TESTNET; + let validator_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x123").unwrap()); + let mut env = TestEnvironment::new(chain_id, validator_address); + env.create_committed_block(1); + env.wait_for_task_initialization().await; + + let proposer_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x456").unwrap()); + let height_and_round = HeightAndRound::new(2, 1); + let empty_transactions = create_transaction_batch(0, 0, 0, chain_id); + let (proposal_init, block_info) = create_test_proposal_init(chain_id, 2, 1, proposer_address); + + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::Init(proposal_init)), + }) + .expect("Failed to send ProposalInit"); + env.verify_task_alive().await; + + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::BlockInfo(block_info)), + }) + .expect("Failed to send BlockInfo"); + env.verify_task_alive().await; + + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + height_and_round, + ProposalPart::TransactionBatch(empty_transactions), + ), + }) + .expect("Failed to send empty TransactionBatch"); + + verify_no_proposal_event(&mut env.rx_from_p2p, Duration::from_millis(200)).await; + // Empty batch is a recoverable error, so the task should remain alive. + env.verify_task_alive().await; +} + +/// ExecutedTransactionCount indicates more transactions than actually executed. +/// +/// **Scenario**: We execute 5 transactions, but ExecutedTransactionCount +/// indicates +/// 10. This shouldn't happen with proper message ordering, but the code +/// handles it by logging a warning and continuing. +/// +/// **Test**: Send Init → BlockInfo → TransactionBatch (5 txs) → +/// ExecutedTransactionCount (count=10) → ProposalFin. +/// +/// Verify processing continues and proposal event is sent (with 5 transactions, +/// not 10). +/// +/// **Note**: We cannot directly verify these things. The goal of this +/// e2e test is to verify that processing continues correctly despite the +/// mismatch. +#[test_log::test(tokio::test(flavor = "multi_thread"))] +async fn test_executed_transaction_count_exceeds_actually_executed() { + let chain_id = ChainId::SEPOLIA_TESTNET; + let validator_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x123").unwrap()); + let mut env = TestEnvironment::new(chain_id, validator_address); + env.create_committed_block(1); + env.wait_for_task_initialization().await; + + let proposer_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x456").unwrap()); + let height_and_round = HeightAndRound::new(2, 1); + let transactions = create_transaction_batch(0, 0, 5, chain_id); + let (proposal_init, block_info) = create_test_proposal_init(chain_id, 2, 1, proposer_address); + + let proposal_commitment = ProposalCommitment(Felt::ZERO); + + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::Init(proposal_init)), + }) + .expect("Failed to send ProposalInit"); + env.verify_task_alive().await; + + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::BlockInfo(block_info)), + }) + .expect("Failed to send BlockInfo"); + env.verify_task_alive().await; + + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + height_and_round, + ProposalPart::TransactionBatch(transactions), + ), + }) + .expect("Failed to send TransactionBatch"); + env.verify_task_alive().await; + + verify_no_proposal_event(&mut env.rx_from_p2p, Duration::from_millis(200)).await; + + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::ExecutedTransactionCount(10)), + }) + .expect("Failed to send ExecutedTransactionCount"); + env.verify_task_alive().await; + + verify_no_proposal_event(&mut env.rx_from_p2p, Duration::from_millis(200)).await; + + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + height_and_round, + ProposalPart::Fin(p2p_proto::consensus::ProposalFin { + proposal_commitment: p2p_proto::common::Hash(proposal_commitment.0), + }), + ), + }) + .expect("Failed to send ProposalFin"); + tokio::time::sleep(Duration::from_millis(500)).await; + + let proposal_cmd = wait_for_proposal_event(&mut env.rx_from_p2p, Duration::from_secs(2)) + .await + .expect("Expected proposal event after ProposalFin"); + verify_proposal_event(proposal_cmd, 2, proposal_commitment); + env.verify_task_alive().await; +} + +/// ExecutedTransactionCount arrives before any TransactionBatch. +/// +/// **Scenario**: ExecutedTransactionCount arrives before execution starts (no +/// batches received yet). It should be deferred until execution starts, +/// then processed. +/// +/// **Test**: Send Init → BlockInfo → ExecutedTransactionCount → +/// TransactionBatch → ProposalFin. +/// +/// Verify ExecutedTransactionCount is deferred, then processed when execution +/// starts, and proposal event is sent. +#[test_log::test(tokio::test(flavor = "multi_thread"))] +async fn test_executed_transaction_count_before_any_batch() { + let chain_id = ChainId::SEPOLIA_TESTNET; + let validator_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x123").unwrap()); + let mut env = TestEnvironment::new(chain_id, validator_address); + env.create_committed_block(1); + env.wait_for_task_initialization().await; + + let proposer_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x456").unwrap()); + let height_and_round = HeightAndRound::new(2, 1); + let transactions = create_transaction_batch(0, 0, 5, chain_id); + let (proposal_init, block_info) = create_test_proposal_init(chain_id, 2, 1, proposer_address); + + let proposal_commitment = ProposalCommitment(Felt::ZERO); + + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::Init(proposal_init)), + }) + .expect("Failed to send ProposalInit"); + env.verify_task_alive().await; + + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::BlockInfo(block_info)), + }) + .expect("Failed to send BlockInfo"); + env.verify_task_alive().await; + + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::ExecutedTransactionCount(5)), + }) + .expect("Failed to send ExecutedTransactionCount"); + env.verify_task_alive().await; + + verify_no_proposal_event(&mut env.rx_from_p2p, Duration::from_millis(200)).await; + + // Step 4: Send TransactionBatch + // This should trigger execution start and process the deferred + // ExecutedTransactionCount + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + height_and_round, + ProposalPart::TransactionBatch(transactions), + ), + }) + .expect("Failed to send TransactionBatch"); + env.verify_task_alive().await; + + // Verify: Still no proposal event (ExecutedTransactionCount processed, but + // ProposalFin not received) + // Note: We verify that deferred ExecutedTransactionCount was processed + // indirectly by sending ProposalFin below and confirming the proposal event + // is sent (which requires ExecutedTransactionCount to be processed first). + verify_no_proposal_event(&mut env.rx_from_p2p, Duration::from_millis(200)).await; + + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + height_and_round, + ProposalPart::Fin(p2p_proto::consensus::ProposalFin { + proposal_commitment: p2p_proto::common::Hash(proposal_commitment.0), + }), + ), + }) + .expect("Failed to send ProposalFin"); + tokio::time::sleep(Duration::from_millis(500)).await; + + let proposal_cmd = wait_for_proposal_event(&mut env.rx_from_p2p, Duration::from_secs(2)) + .await + .expect("Expected proposal event after ProposalFin"); + verify_proposal_event(proposal_cmd, 2, proposal_commitment); + env.verify_task_alive().await; +} + +/// Empty proposal per spec (no TransactionBatch, no ExecutedTransactionCount). +/// +/// **Scenario**: A proposer cannot offer a valid proposal, so the height is +/// agreed to be empty. Per the spec, empty proposals skip +/// TransactionBatch and ExecutedTransactionCount entirely. The order is: +/// ProposalInit → ProposalFin. +/// +/// **Test**: Send ProposalInit → ProposalFin (no TransactionBatch, no +/// ExecutedTransactionCount). +/// +/// Verify ProposalFin proceeds immediately (not deferred, since execution +/// never started), proposal event is sent. +#[test_log::test(tokio::test(flavor = "multi_thread"))] +async fn test_empty_proposal_per_spec() { + let chain_id = ChainId::SEPOLIA_TESTNET; + let validator_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x123").unwrap()); + let mut env = TestEnvironment::new(chain_id, validator_address); + env.create_committed_block(1); + env.wait_for_task_initialization().await; + + let proposer_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x456").unwrap()); + let height_and_round = HeightAndRound::new(2, 1); + + // For empty proposals, we still need BlockInfo to transition to + // TransactionBatch stage, but we don't send any TransactionBatch or + // ExecutedTransactionCount + let (proposal_init, _block_info) = create_test_proposal_init(chain_id, 2, 1, proposer_address); + + // Using a dummy commitment... + let proposal_commitment = ProposalCommitment(Felt::ZERO); + + // Step 1: Send ProposalInit + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal(height_and_round, ProposalPart::Init(proposal_init)), + }) + .expect("Failed to send ProposalInit"); + env.verify_task_alive().await; + + // Verify: No proposal event yet (ProposalFin not received) + verify_no_proposal_event(&mut env.rx_from_p2p, Duration::from_millis(200)).await; + + // Step 2: Send ProposalFin + // Since execution never started (no TransactionBatch), ProposalFin should + // proceed immediately without deferral. This is different from first test + // where execution started but ExecutedTransactionCount wasn't processed yet. + env.p2p_tx + .send(Event { + source: PeerId::random(), + kind: EventKind::Proposal( + height_and_round, + ProposalPart::Fin(p2p_proto::consensus::ProposalFin { + proposal_commitment: p2p_proto::common::Hash(proposal_commitment.0), + }), + ), + }) + .expect("Failed to send ProposalFin"); + env.verify_task_alive().await; + + // Verify: Proposal event should be sent immediately (not deferred) + // This confirms that ProposalFin proceeds when execution never started, + // which is the correct behavior for empty proposals per spec. + let proposal_cmd = wait_for_proposal_event(&mut env.rx_from_p2p, Duration::from_secs(2)) + .await + .expect("Expected proposal event after ProposalFin for empty proposal"); + verify_proposal_event(proposal_cmd, 2, proposal_commitment); + env.verify_task_alive().await; +} + +/// Make sure that receiving an outdated P2P message results in a command +/// that punishes the peer that sent the outdated message. +#[tokio::test(flavor = "multi_thread")] +async fn recv_outdated_event_changes_peer_score() { + let chain_id = ChainId::SEPOLIA_TESTNET; + let validator_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x123").unwrap()); + let mut env = TestEnvironment::new(chain_id, validator_address); + // Latest height (the only in this case) must be higher than the proposal height + // + history. + env.create_committed_block(TestEnvironment::HISTORY_DEPTH + 4); + let proposal_height_and_round = HeightAndRound::new(2, 1); + + env.wait_for_task_initialization().await; + + let proposer_address = ContractAddress::new_or_panic(Felt::from_hex_str("0x456").unwrap()); + + // We'll use an empty proposal, the content isn't important. + let (proposal_init, _) = create_test_proposal_init( + chain_id, + proposal_height_and_round.height(), + proposal_height_and_round.round(), + proposer_address, + ); + + let outdated_event_source = PeerId::random(); + + // Send ProposalInit + env.p2p_tx + .send(Event { + source: outdated_event_source, + kind: EventKind::Proposal(proposal_height_and_round, ProposalPart::Init(proposal_init)), + }) + .expect("Failed to send ProposalInit"); + env.verify_task_alive().await; + + // As soon as we receive an outdated command, the P2P client should receive the + // command to penalize the peer. + let (peer_id, delta) = + wait_for_change_peer_score(&mut env.p2p_client_receiver, Duration::from_secs(2)) + .await + .expect("Expected change peer score command after outdated ProposalInit"); + + assert_eq!(peer_id, outdated_event_source); + assert_eq!(delta, peer_score::penalty::OUTDATED_MESSAGE); +} diff --git a/crates/pathfinder/src/consensus/inner/persist_proposals.rs b/crates/pathfinder/src/consensus/inner/persist_proposals.rs deleted file mode 100644 index ce8e73286d..0000000000 --- a/crates/pathfinder/src/consensus/inner/persist_proposals.rs +++ /dev/null @@ -1,126 +0,0 @@ -use anyhow::Context; -use p2p_proto::consensus::ProposalPart; -use pathfinder_common::ContractAddress; -use pathfinder_storage::Transaction; - -use crate::consensus::inner::conv::{IntoModel, TryIntoDto}; -use crate::consensus::inner::dto; -use crate::validator::FinalizedBlock; - -pub fn persist_proposal_parts( - db_tx: &Transaction<'_>, - height: u64, - round: u32, - proposer: &ContractAddress, - parts: &[ProposalPart], -) -> anyhow::Result { - let serde_parts = parts - .iter() - .map(|p| dto::ProposalPart::try_into_dto(p.clone())) - .collect::, _>>()?; - let proposal_parts = dto::ProposalParts::V0(serde_parts); - let buf = bincode::serde::encode_to_vec(proposal_parts, bincode::config::standard()) - .context("Serializing proposal parts")?; - let updated = db_tx.persist_consensus_proposal_parts(height, round, proposer, &buf[..])?; - Ok(updated) -} - -pub fn own_proposal_parts( - db_tx: &Transaction<'_>, - height: u64, - round: u32, - validator: &ContractAddress, -) -> anyhow::Result>> { - if let Some(buf) = db_tx.own_consensus_proposal_parts(height, round, validator)? { - let parts = decode_proposal_parts(&buf[..])?; - Ok(Some(parts)) - } else { - Ok(None) - } -} - -pub fn foreign_proposal_parts( - db_tx: &Transaction<'_>, - height: u64, - round: u32, - validator: &ContractAddress, -) -> anyhow::Result>> { - if let Some(buf) = db_tx.foreign_consensus_proposal_parts(height, round, validator)? { - let parts = decode_proposal_parts(&buf[..])?; - Ok(Some(parts)) - } else { - Ok(None) - } -} - -pub fn last_proposal_parts( - db_tx: &Transaction<'_>, - height: u64, - validator: &ContractAddress, -) -> anyhow::Result)>> { - if let Some((round, buf)) = db_tx.last_consensus_proposal_parts(height, validator)? { - let parts = decode_proposal_parts(&buf[..])?; - let last_round = round.try_into().context("Invalid round")?; - Ok(Some((last_round, parts))) - } else { - Ok(None) - } -} - -fn decode_proposal_parts(buf: &[u8]) -> anyhow::Result> { - let proposal_parts: dto::ProposalParts = - bincode::serde::decode_from_slice(buf, bincode::config::standard()) - .context("Deserializing proposal parts")? - .0; - let dto::ProposalParts::V0(serde_parts) = proposal_parts; - let parts = serde_parts.into_iter().map(|p| p.into_model()).collect(); - Ok(parts) -} - -pub fn remove_proposal_parts( - db_tx: &Transaction<'_>, - height: u64, - round: Option, -) -> anyhow::Result<()> { - db_tx.remove_consensus_proposal_parts(height, round) -} - -pub fn persist_finalized_block( - db_tx: &Transaction<'_>, - height: u64, - round: u32, - block: FinalizedBlock, -) -> anyhow::Result { - let serde_block = dto::FinalizedBlock::try_into_dto(block)?; - let finalized_block = dto::PersistentFinalizedBlock::V0(serde_block); - let buf = bincode::serde::encode_to_vec(finalized_block, bincode::config::standard()) - .context("Serializing finalized block")?; - let updated = db_tx.persist_consensus_finalized_block(height, round, &buf[..])?; - Ok(updated) -} - -pub fn read_finalized_block( - db_tx: &Transaction<'_>, - height: u64, - round: u32, -) -> anyhow::Result> { - if let Some(buf) = db_tx.read_consensus_finalized_block(height, round)? { - let block = decode_finalized_block(&buf[..])?; - Ok(Some(block)) - } else { - Ok(None) - } -} - -fn decode_finalized_block(buf: &[u8]) -> anyhow::Result { - let persistent_block: dto::PersistentFinalizedBlock = - bincode::serde::decode_from_slice(buf, bincode::config::standard()) - .context("Deserializing finalized block")? - .0; - let dto::PersistentFinalizedBlock::V0(dto_block) = persistent_block; - Ok(dto_block.into_model()) -} - -pub fn remove_finalized_blocks(db_tx: &Transaction<'_>, height: u64) -> anyhow::Result<()> { - db_tx.remove_consensus_finalized_blocks(height) -} diff --git a/crates/pathfinder/src/consensus/inner/proposal_validator.rs b/crates/pathfinder/src/consensus/inner/proposal_validator.rs new file mode 100644 index 0000000000..067dc7fa1e --- /dev/null +++ b/crates/pathfinder/src/consensus/inner/proposal_validator.rs @@ -0,0 +1,564 @@ +use p2p::consensus::HeightAndRound; +use p2p_proto::consensus::{ProposalInit, ProposalPart}; +use pathfinder_common::ContractAddress; +use pathfinder_validator::error::{ProposalError, ProposalHandlingError}; + +/// Validates the structure of incoming proposal parts and stores them. +/// +/// Enforces the following order: +/// 1. Proposal Init (must be first) +/// 2. For non-empty proposals: Block Info (must be second) +/// 3. In any order: Transaction Batches (non-empty), ExecutedTransactionCount +/// (at most once) +/// 4. Proposal Fin (must be last) +/// +/// Empty proposals consist of Init + Fin only. +pub struct ProposalPartsValidator { + height_and_round: HeightAndRound, + parts: Vec, + has_init: bool, + has_block_info: bool, + has_fin: bool, + has_executed_txn_count: bool, + transaction_batch_count: usize, + proposer_address: Option, + valid_round: Option, +} + +/// Result of validating and accepting a proposal part. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum ValidationResult { + /// Part is valid; proposal is still being assembled. + Accepted, + /// Fin received: this is an empty proposal (Init + Fin only). + EmptyProposal, + /// Fin received: this is a non-empty proposal (Init + BlockInfo + content + + /// Fin). + NonEmptyProposal, +} + +impl ProposalPartsValidator { + pub fn new(height_and_round: HeightAndRound) -> Self { + Self { + height_and_round, + parts: Vec::new(), + has_init: false, + has_block_info: false, + has_fin: false, + has_executed_txn_count: false, + transaction_batch_count: 0, + proposer_address: None, + valid_round: None, + } + } + + /// Validate structure and store the part. + pub fn accept_part( + &mut self, + part: &ProposalPart, + ) -> Result { + match part { + ProposalPart::Init(init) => self.accept_init(init), + ProposalPart::BlockInfo(_) => self.accept_block_info(part), + ProposalPart::TransactionBatch(tx_batch) => { + self.accept_transaction_batch(tx_batch, part) + } + ProposalPart::ExecutedTransactionCount(_) => self.accept_executed_txn_count(part), + ProposalPart::Fin(_) => self.accept_fin(part), + } + } + + /// Returns the proposer address extracted from the Init part, or `None` if + /// Init has not been accepted yet. + pub fn proposer_address(&self) -> Option { + self.proposer_address + } + + /// Returns the valid round extracted from the Init part. + pub fn valid_round(&self) -> Option { + self.valid_round + } + + /// Returns the stored proposal parts. + pub fn parts(&self) -> &[ProposalPart] { + &self.parts + } + + fn accept_init( + &mut self, + init: &ProposalInit, + ) -> Result { + if !self.parts.is_empty() { + return Err(ProposalHandlingError::Recoverable( + ProposalError::UnexpectedProposalPart { + message: format!( + "Unexpected proposal Init for {} at position {}", + self.height_and_round, + self.parts.len() + ), + }, + )); + } + + self.has_init = true; + self.proposer_address = Some(ContractAddress(init.proposer.0)); + self.valid_round = init.valid_round; + self.parts.push(ProposalPart::Init(init.clone())); + Ok(ValidationResult::Accepted) + } + + fn accept_block_info( + &mut self, + part: &ProposalPart, + ) -> Result { + if self.parts.len() != 1 { + return Err(ProposalHandlingError::Recoverable( + ProposalError::UnexpectedProposalPart { + message: format!( + "Unexpected proposal BlockInfo for {} at position {}", + self.height_and_round, + self.parts.len() + ), + }, + )); + } + + self.has_block_info = true; + self.parts.push(part.clone()); + Ok(ValidationResult::Accepted) + } + + fn accept_transaction_batch( + &mut self, + tx_batch: &[p2p_proto::consensus::Transaction], + part: &ProposalPart, + ) -> Result { + if self.parts.len() < 2 { + return Err(ProposalHandlingError::Recoverable( + ProposalError::UnexpectedProposalPart { + message: format!( + "Unexpected proposal TransactionBatch for {} at position {}", + self.height_and_round, + self.parts.len() + ), + }, + )); + } + + if tx_batch.is_empty() { + return Err(ProposalHandlingError::Recoverable( + ProposalError::UnexpectedProposalPart { + message: format!( + "Received empty TransactionBatch for {} at position {}", + self.height_and_round, + self.parts.len() + ), + }, + )); + } + + self.transaction_batch_count += 1; + self.parts.push(part.clone()); + Ok(ValidationResult::Accepted) + } + + fn accept_executed_txn_count( + &mut self, + part: &ProposalPart, + ) -> Result { + if !self.has_block_info { + return Err(ProposalHandlingError::Recoverable( + ProposalError::UnexpectedProposalPart { + message: format!( + "Unexpected proposal ExecutedTransactionCount for {} at position {}", + self.height_and_round, + self.parts.len() + ), + }, + )); + } + + if self.has_executed_txn_count { + return Err(ProposalHandlingError::Recoverable( + ProposalError::UnexpectedProposalPart { + message: format!( + "Duplicate ExecutedTransactionCount for {}", + self.height_and_round, + ), + }, + )); + } + + self.has_executed_txn_count = true; + self.parts.push(part.clone()); + Ok(ValidationResult::Accepted) + } + + fn accept_fin( + &mut self, + part: &ProposalPart, + ) -> Result { + if self.has_fin { + return Err(ProposalHandlingError::Recoverable( + ProposalError::UnexpectedProposalPart { + message: format!("Duplicate ProposalFin for {}", self.height_and_round), + }, + )); + } + + // Empty proposal: Init + Fin + if self.parts.len() == 1 && self.has_init { + self.has_fin = true; + self.parts.push(part.clone()); + return Ok(ValidationResult::EmptyProposal); + } + + // Non-empty proposal: at least Init + BlockInfo + 2 content parts before Fin + if self.parts.len() >= 4 && self.has_block_info { + self.has_fin = true; + self.parts.push(part.clone()); + return Ok(ValidationResult::NonEmptyProposal); + } + + Err(ProposalHandlingError::Recoverable( + ProposalError::UnexpectedProposalPart { + message: format!( + "Unexpected proposal ProposalFin for {} at position {}", + self.height_and_round, + self.parts.len() + ), + }, + )) + } +} + +#[cfg(test)] +mod tests { + //! Proptests for [`ProposalPartsValidator`] structural validation. + //! + //! Goal: Verify that the validator correctly accepts well-formed proposal + //! part sequences and rejects malformed ones. + //! + //! These tests focus exclusively on structural rules: part ordering, + //! duplicates, empty batches. Execution and transaction mapping are covered + //! by the `p2p_task_tests` integration tests. + //! + //! How it works: + //! 1. We generate valid proposals (empty and non-empty). + //! 2. Apply random structural mutations (see [`Mutation`]) + //! 3. Assert that the validator rejects every mutated proposal. + //! + //! Every variant in [Mutation] documents what validation rule is being + //! targeted. + + use fake::Fake; + use p2p::consensus::HeightAndRound; + use p2p_proto::consensus::{ProposalPart, Transaction}; + use proptest::prelude::*; + use rand::seq::SliceRandom; + use rand::{Rng, SeedableRng}; + + use super::*; + + /// A single structural mutation to apply to a valid proposal to make it + /// invalid. Each variant targets a specific validation rule. + #[derive(Debug, Clone, Copy)] + enum Mutation { + /// Init must appear exactly once, first. + RemoveInit, + /// Init must appear exactly once, first. + DuplicateInit, + /// BlockInfo must appear exactly once, second (for non-empty + /// proposals). + RemoveBlockInfo, + /// BlockInfo must appear exactly once, second (for non-empty + /// proposals). + DuplicateBlockInfo, + /// Non-empty proposals need at least one transaction batch. + RemoveAllTransactionBatches, + /// Empty batches are rejected. + AddEmptyTransactionBatch, + /// At most one ExecutedTransactionCount allowed. + DuplicateExecutedTransactionCount, + /// Fin must appear at most once. + DuplicateFin, + /// Random reordering breaks the required part sequence. + ShuffleAll, + } + + const ALL_MUTATIONS: &[Mutation] = &[ + Mutation::RemoveInit, + Mutation::DuplicateInit, + Mutation::RemoveBlockInfo, + Mutation::DuplicateBlockInfo, + Mutation::RemoveAllTransactionBatches, + Mutation::AddEmptyTransactionBatch, + Mutation::DuplicateExecutedTransactionCount, + Mutation::DuplicateFin, + Mutation::ShuffleAll, + ]; + + /// Generates a valid empty proposal: `[Init, Fin]` + /// + /// All fields (proposer, valid_round, commitment) are randomly generated. + fn create_valid_empty_proposal(seed: u64) -> Vec { + let mut rng = rand_chacha::ChaCha12Rng::seed_from_u64(seed); + + vec![ + ProposalPart::Init(fake::Faker.fake_with_rng(&mut rng)), + ProposalPart::Fin(fake::Faker.fake_with_rng(&mut rng)), + ] + } + + /// Generates a valid non-empty proposal: + /// `[Init, BlockInfo, , Fin]` + /// + /// Content parts are 1..50 transactions split into randomly-sized batches, + /// plus one `ExecutedTransactionCount`, shuffled among each other. + fn create_valid_non_empty_proposal(seed: u64) -> Vec { + let mut rng = rand_chacha::ChaCha12Rng::seed_from_u64(seed); + + let mut parts = Vec::new(); + + parts.push(ProposalPart::Init(fake::Faker.fake_with_rng(&mut rng))); + parts.push(ProposalPart::BlockInfo(fake::Faker.fake_with_rng(&mut rng))); + + // Content parts in random order + let num_txns: usize = rng.gen_range(1..50); + let transactions: Vec = (0..num_txns) + .map(|_| fake::Faker.fake_with_rng(&mut rng)) + .collect(); + + let mut content_parts: Vec = split_random(&transactions, &mut rng) + .into_iter() + .map(ProposalPart::TransactionBatch) + .collect(); + + let executed_count: u64 = rng.gen_range(1..=num_txns).try_into().unwrap(); + content_parts.push(ProposalPart::ExecutedTransactionCount(executed_count)); + content_parts.shuffle(&mut rng); + + parts.extend(content_parts); + + parts.push(ProposalPart::Fin(fake::Faker.fake_with_rng(&mut rng))); + + parts + } + + /// Generates a structurally invalid proposal by taking a valid non-empty + /// proposal and applying one random mutation. If the chosen mutation + /// happens to not break validity (e.g. shuffle lands in a valid order), + /// the proposal is force-broken by removing Init or prepending Fin. + fn create_invalid_proposal(seed: u64) -> Vec { + let mut rng = rand_chacha::ChaCha12Rng::seed_from_u64(seed); + + // Use a different seed for the base proposal so they don't correlate + let mut parts = create_valid_non_empty_proposal(seed.wrapping_add(1)); + let mutation = ALL_MUTATIONS[rng.gen_range(0..ALL_MUTATIONS.len())]; + + apply_mutation(&mut parts, &mut rng, mutation); + + // If the mutation didn't actually break the proposal, force-break it + if !would_cause_error(&parts) { + if !parts.is_empty() && parts[0].is_proposal_init() { + parts.remove(0); + } else { + // Prepend a Fin so the first part isn't Init + parts.insert(0, ProposalPart::Fin(fake::Faker.fake_with_rng(&mut rng))); + } + } + + // If parts became empty from mutations, create a minimal invalid sequence + if parts.is_empty() { + parts.push(ProposalPart::Fin(fake::Faker.fake_with_rng(&mut rng))); + } + + parts + } + + fn apply_mutation(parts: &mut Vec, rng: &mut impl Rng, mutation: Mutation) { + match mutation { + Mutation::RemoveInit => { + parts.retain(|p| !p.is_proposal_init()); + } + Mutation::DuplicateInit => { + if let Some(init) = parts.iter().find(|p| p.is_proposal_init()).cloned() { + let pos = rng.gen_range(0..=parts.len()); + parts.insert(pos, init); + } + } + Mutation::RemoveBlockInfo => { + parts.retain(|p| !p.is_block_info()); + } + Mutation::DuplicateBlockInfo => { + if let Some(bi) = parts.iter().find(|p| p.is_block_info()).cloned() { + let pos = rng.gen_range(0..=parts.len()); + parts.insert(pos, bi); + } + } + Mutation::RemoveAllTransactionBatches => { + parts.retain(|p| !p.is_transaction_batch()); + } + Mutation::AddEmptyTransactionBatch => { + let pos = rng.gen_range(0..=parts.len()); + parts.insert(pos, ProposalPart::TransactionBatch(vec![])); + } + Mutation::DuplicateExecutedTransactionCount => { + if let Some(etc) = parts + .iter() + .find(|p| p.is_executed_transaction_count()) + .cloned() + { + let pos = rng.gen_range(0..=parts.len()); + parts.insert(pos, etc); + } + } + Mutation::DuplicateFin => { + if let Some(fin) = parts.iter().find(|p| p.is_proposal_fin()).cloned() { + let pos = rng.gen_range(0..=parts.len()); + parts.insert(pos, fin); + } + } + Mutation::ShuffleAll => { + parts.shuffle(rng); + } + } + } + + /// Checks whether the given parts would cause at least one validation + /// error when fed through a `ProposalPartsValidator`. + fn would_cause_error(parts: &[ProposalPart]) -> bool { + let mut validator = ProposalPartsValidator::new(HeightAndRound::new(0, 0)); + for part in parts { + if validator.accept_part(part).is_err() { + return true; + } + } + false + } + + /// Extracts the valid_round from the Init part of a proposal. + fn extract_valid_round(parts: &[ProposalPart]) -> Option { + match parts.first() { + Some(ProposalPart::Init(init)) => init.valid_round, + _ => panic!("first part should be Init"), + } + } + + fn part_name(part: &ProposalPart) -> &'static str { + match part { + ProposalPart::Init(_) => "Init", + ProposalPart::Fin(_) => "Fin", + ProposalPart::BlockInfo(_) => "BlockInfo", + ProposalPart::TransactionBatch(_) => "TransactionBatch", + ProposalPart::ExecutedTransactionCount(_) => "ExecutedTransactionCount", + } + } + + // An empty proposal [Init, Fin] must be fully accepted: Init returns + // Accepted, Fin returns EmptyProposal, and the proposer address is captured. + #[test] + fn valid_empty_proposal_is_accepted() { + let parts = create_valid_empty_proposal(42); + let mut validator = ProposalPartsValidator::new(HeightAndRound::new(0, 0)); + + let result = validator.accept_part(&parts[0]).unwrap(); + assert_eq!(result, ValidationResult::Accepted); + + let result = validator.accept_part(&parts[1]).unwrap(); + assert_eq!(result, ValidationResult::EmptyProposal); + + assert!(validator.proposer_address().is_some()); + assert_eq!(validator.valid_round(), extract_valid_round(&parts)); + assert_eq!(validator.parts().len(), 2); + } + + proptest! { + #![proptest_config(ProptestConfig::with_cases(200))] + + // A non-empty proposal [Init, BlockInfo, , Fin] with + // randomly-sized transaction batches and ExecutedTransactionCount in + // random order must be fully accepted: all intermediate parts return + // Accepted, Fin returns NonEmptyProposal, and all parts are stored. + #[test] + fn valid_non_empty_proposals_are_accepted(seed in any::()) { + let parts = create_valid_non_empty_proposal(seed); + let mut validator = ProposalPartsValidator::new(HeightAndRound::new(0, 0)); + let last_idx = parts.len() - 1; + for (i, part) in parts.iter().enumerate() { + let result = validator.accept_part(part) + .map_err(|e| TestCaseError::Fail( + format!( + "Part {} ({}) failed: {e}", + i, + part_name(part), + ).into() + ))?; + if i < last_idx { + prop_assert_eq!(result, ValidationResult::Accepted, + "Part {} ({}) should be Accepted", i, part_name(part)); + } else { + prop_assert_eq!(result, ValidationResult::NonEmptyProposal, + "Last part should be NonEmptyProposal"); + } + } + + prop_assert!(validator.proposer_address().is_some()); + prop_assert_eq!(validator.valid_round(), extract_valid_round(&parts)); + prop_assert_eq!(validator.parts().len(), parts.len()); + } + + // A valid non-empty proposal with one random structural mutation applied + // must be rejected: at least one call to `accept_part` must return an error. + #[test] + fn invalid_proposals_are_rejected(seed in any::()) { + let parts = create_invalid_proposal(seed); + let mut validator = ProposalPartsValidator::new(HeightAndRound::new(0, 0)); + let mut had_error = false; + for part in &parts { + match validator.accept_part(part) { + Ok(_) => {} + Err(_) => { + had_error = true; + break; + } + } + } + prop_assert!(had_error, + "Expected at least one validation error for invalid proposal: {:?}", + parts.iter().map(part_name).collect::>() + ); + } + } + + /// Splits a slice into random non-empty contiguous chunks by randomly + /// placing boundaries between elements. + /// + /// Example: `[A, B, C, D, E]` with a boundary at index 2 + /// => boundaries = `[0, 2, 5]` + /// => chunks `[A,B]`, `[C,D,E]` + fn split_random(v: &[T], rng: &mut impl Rng) -> Vec> { + if v.is_empty() { + return vec![]; + } + + // Always start at 0 + let mut boundaries = vec![0usize]; + + // Walk between elements, 30% chance of placing a cut + for i in 1..v.len() { + if rng.gen_bool(0.3) { + boundaries.push(i); + } + } + + // Always end at len + boundaries.push(v.len()); + + // Each pair of consecutive boundaries defines one chunk + boundaries + .windows(2) + .map(|w| v[w[0]..w[1]].to_vec()) + .collect() + } +} diff --git a/crates/pathfinder/src/consensus/inner/test_helpers.rs b/crates/pathfinder/src/consensus/inner/test_helpers.rs deleted file mode 100644 index c88b7fe093..0000000000 --- a/crates/pathfinder/src/consensus/inner/test_helpers.rs +++ /dev/null @@ -1,141 +0,0 @@ -//! Test helpers for consensus transaction testing -//! -//! This module provides utilities for creating realistic test transactions -//! and testing consensus scenarios with actual transaction execution. - -use p2p_proto::common::{Address, L1DataAvailabilityMode}; -use p2p_proto::consensus as proto_consensus; -use pathfinder_common::{ChainId, ContractAddress}; -use pathfinder_crypto::Felt; - -/// Creates a realistic L1Handler transaction for testing -pub fn create_l1_handler_transaction( - index: usize, - chain_id: ChainId, -) -> proto_consensus::Transaction { - let nonce = Felt::from_hex_str(&format!("0x{index}")).unwrap(); - let address = Felt::from_hex_str(&format!("0x{index:x}")).unwrap(); - let entry_point_selector = Felt::from_hex_str(&format!("0x{index}")).unwrap(); - let calldata = vec![Felt::from_hex_str(&format!("0x{index}")).unwrap()]; - - // Create the L1Handler transaction - let txn = p2p_proto::consensus::TransactionVariant::L1HandlerV0( - p2p_proto::transaction::L1HandlerV0 { - nonce, - address: Address(address), - entry_point_selector, - calldata: calldata.clone(), - }, - ); - - // Calculate the correct hash - let l1_handler = pathfinder_common::transaction::L1HandlerTransaction { - nonce: pathfinder_common::TransactionNonce(nonce), - contract_address: ContractAddress::new_or_panic(address), - entry_point_selector: pathfinder_common::EntryPoint(entry_point_selector), - calldata: vec![pathfinder_common::CallParam(calldata[0])], - }; - - let hash = l1_handler.calculate_hash(chain_id); - - proto_consensus::Transaction { - transaction_hash: p2p_proto::common::Hash(hash.0), - txn, - } -} - -/// Creates a batch of transactions for testing -pub fn create_transaction_batch( - start_index: usize, - count: usize, - chain_id: ChainId, -) -> Vec { - (start_index..start_index + count) - .map(|i| create_l1_handler_transaction(i, chain_id)) - .collect() -} - -/// Creates a test proposal with transactions -pub fn create_test_proposal( - _chain_id: ChainId, - height: u64, - round: u32, - proposer: ContractAddress, - _transactions: Vec, -) -> (proto_consensus::ProposalInit, proto_consensus::BlockInfo) { - let proposer_address = Address(proposer.0); - let timestamp = std::time::SystemTime::now() - .duration_since(std::time::UNIX_EPOCH) - .unwrap_or_default() - .as_secs(); - - let proposal_init = proto_consensus::ProposalInit { - block_number: height, - round, - valid_round: None, - proposer: proposer_address, - }; - - let block_info = proto_consensus::BlockInfo { - block_number: height, - timestamp, - builder: proposer_address, - l1_da_mode: L1DataAvailabilityMode::Calldata, - l2_gas_price_fri: 1, - l1_gas_price_wei: 1_000_000_000, - l1_data_gas_price_wei: 1, - eth_to_strk_rate: 1_000_000_000, - }; - - (proposal_init, block_info) -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_create_l1_handler_transaction() { - let chain_id = ChainId::SEPOLIA_TESTNET; - let tx = create_l1_handler_transaction(1, chain_id); - - // Verify the transaction has a valid hash - assert!(!tx.transaction_hash.0.is_zero()); - - // Verify it's an L1Handler transaction - match tx.txn { - proto_consensus::TransactionVariant::L1HandlerV0(_) => {} - _ => panic!("Expected L1Handler transaction"), - } - } - - #[test] - fn test_create_transaction_batch() { - let chain_id = ChainId::SEPOLIA_TESTNET; - let batch = create_transaction_batch(10, 5, chain_id); - - assert_eq!(batch.len(), 5); - - // Verify all transactions have different hashes - let hashes: std::collections::HashSet<_> = - batch.iter().map(|tx| tx.transaction_hash.0).collect(); - assert_eq!(hashes.len(), 5); // All unique - } - - #[test] - fn test_create_test_proposal() { - let chain_id = ChainId::SEPOLIA_TESTNET; - let height = 100; - let round = 1; - let proposer = ContractAddress::new_or_panic(Felt::from_hex_str("0x123").unwrap()); - let transactions = create_transaction_batch(1, 3, chain_id); - - let (proposal_init, block_info) = - create_test_proposal(chain_id, height, round, proposer, transactions); - - assert_eq!(proposal_init.block_number, height); - assert_eq!(proposal_init.round, round); - assert_eq!(block_info.block_number, height); - assert_eq!(block_info.builder.0, proposer.0); - } -} diff --git a/crates/pathfinder/src/devnet.rs b/crates/pathfinder/src/devnet.rs new file mode 100644 index 0000000000..f15db4fbff --- /dev/null +++ b/crates/pathfinder/src/devnet.rs @@ -0,0 +1,632 @@ +//! Utilities for initializing a devnet for development and testing purposes. +//! Heavily inspired by [starknet-devnet](https://github.com/0xSpaceShard/starknet-devnet) v0.7.1. +//! Unfortunately we cannot use `starknet-devnet` directly because it is not +//! state/storage API agnostic. + +use std::num::NonZeroU32; +use std::path::{Path, PathBuf}; +use std::sync::Arc; +use std::thread::available_parallelism; +use std::time::{Instant, SystemTime}; + +use anyhow::{Context, Ok}; +use p2p::sync::client::conv::ToDto as _; +use p2p_proto::common::{Address, Hash}; +use p2p_proto::consensus::{BlockInfo, ProposalInit, ProposalPart}; +use p2p_proto::sync::transaction::DeclareV3WithoutClass; +use pathfinder_block_commitments::compute_final_hash; +use pathfinder_common::state_update::StateUpdateData; +use pathfinder_common::transaction::{ + DataAvailabilityMode, + DeclareTransactionV3, + TransactionVariant, +}; +use pathfinder_common::{ + BlockHash, + BlockHeader, + BlockId, + BlockNumber, + BlockTimestamp, + ChainId, + ClassHash, + ConsensusFinalizedL2Block, + DecidedBlocks, + EventCommitment, + L1DataAvailabilityMode, + ReceiptCommitment, + SequencerAddress, + StarknetVersion, + StateCommitment, + Tip, + TransactionCommitment, + TransactionSignatureElem, +}; +use pathfinder_crypto::signature::ecdsa_sign; +use pathfinder_crypto::Felt; +use pathfinder_executor::{ConcurrentStateReader, ExecutorWorkerPool}; +use pathfinder_merkle_tree::starknet_state::update_starknet_state; +use pathfinder_storage::pruning::BlockchainHistoryMode; +use pathfinder_storage::{Storage, StorageBuilder, TriePruneMode}; +use pathfinder_validator::{ + ProdTransactionMapper, + ValidatorBlockInfoStage, + ValidatorTransactionBatchStage, + ValidatorWorkerPool, +}; + +pub use crate::devnet::account::Account; +use crate::devnet::class::{preprocess_sierra, PrepocessedSierra}; +use crate::devnet::fixtures::RESOURCE_BOUNDS; + +mod account; +mod class; +mod contract; +mod fixtures; +mod utils; + +use fixtures::GAS_PRICE; + +/// Initializes a devnet DB. The following contracts are predeclared, +/// predeployed and initialized if necessary: Cairo 1 account, ETH and STRK +/// ERC20s, and the UDC. The following contract is already declared but not +/// deployed: Hello Starknet. +pub fn init_db(db_dir: &Path, proposer: Address) -> anyhow::Result { + let stopwatch = Instant::now(); + + let timestamp = strictly_increasing_timestamp(None); + let db_file_path = db_dir.join("bootstrap.sqlite"); + + let storage = StorageBuilder::file(db_file_path.clone()) + .trie_prune_mode(Some(TriePruneMode::Archive)) + .blockchain_history_mode(Some(BlockchainHistoryMode::Archive)) + .migrate()? + .create_pool( + NonZeroU32::new(5 + available_parallelism().unwrap().get() as u32).expect(">0"), + )?; + + tracing::info!( + "Initialized devnet bootstrap DB in {}", + db_file_path.display(), + ); + + let mut db_conn = storage.connection()?; + let db_txn = db_conn.transaction()?; + let mut state_update = StateUpdateData::default(); + + let _account = predeploy_contracts(&db_txn, &mut state_update)?; + + let block_number = BlockNumber::GENESIS; + let (storage_commitment, class_commitment) = update_starknet_state( + &db_txn, + (&state_update).into(), + true, + block_number, + storage.clone(), + )?; + let state_commitment = StateCommitment::calculate( + storage_commitment, + class_commitment, + StarknetVersion::V_0_14_0, + ); + + let mut genesis_header = BlockHeader { + hash: BlockHash::ZERO, // Will be updated + parent_hash: BlockHash::ZERO, + number: block_number, + timestamp, + eth_l1_gas_price: GAS_PRICE, + strk_l1_gas_price: GAS_PRICE, + eth_l1_data_gas_price: GAS_PRICE, + strk_l1_data_gas_price: GAS_PRICE, + eth_l2_gas_price: GAS_PRICE, + strk_l2_gas_price: GAS_PRICE, + // Alice has this address in integration tests + sequencer_address: SequencerAddress(proposer.0), + starknet_version: StarknetVersion::V_0_14_0, + // No events in genesis, so the root of an empty tree is zero + event_commitment: EventCommitment(Felt::ZERO), + state_commitment, + // No transactions in genesis, so the root of an empty tree is zero + transaction_commitment: TransactionCommitment(Felt::ZERO), + transaction_count: 0, + event_count: 0, + l1_da_mode: L1DataAvailabilityMode::Calldata, + // No transactions (and hence no receipts) in genesis, so the root of an empty tree is zero + receipt_commitment: ReceiptCommitment(Felt::ZERO), + state_diff_commitment: state_update.compute_state_diff_commitment(), + state_diff_length: state_update.state_diff_length(), + }; + + genesis_header.hash = compute_final_hash(&genesis_header); + + db_txn.insert_block_header(&genesis_header).unwrap(); + db_txn + .insert_state_update_data(block_number, &state_update) + .unwrap(); + db_txn.commit().unwrap(); + + tracing::info!( + "Initialized devnet bootstrap DB genesis block in {} ms", + stopwatch.elapsed().as_millis(), + ); + + Ok(BootDb { + db_file_path, + num_boot_blocks: block_number.get() + 1, + }) +} + +/// Returns `Ok(true)` if the DB is bootstrapped and `Ok(false)` if it is not. +pub fn devnet_genesis_exists(db_txn: &pathfinder_storage::Transaction<'_>) -> anyhow::Result { + let Some(block_0_commitment) = db_txn.state_diff_commitment(BlockNumber::GENESIS)? else { + return Ok(false); + }; + + if block_0_commitment != fixtures::GENESIS_COMMITMENT { + return Ok(false); + } + + Ok(true) +} + +#[derive(Debug)] +pub struct BootDb { + pub db_file_path: PathBuf, + pub num_boot_blocks: u64, +} + +/// Declare a Cairo 1 class (sierra bytecode) via the DeclareV3 +/// transaction. +pub fn declare( + storage: Storage, + db_txn: pathfinder_storage::Transaction<'_>, + account: &Account, + serialized_sierra: &[u8], + proposer: Address, +) -> anyhow::Result<()> { + let stopwatch = Instant::now(); + + let PrepocessedSierra { + sierra_class_hash, + cairo1_class_p2p, + sierra_class_ser, + casm_hash_v2, + casm, + } = preprocess_sierra(serialized_sierra, None)?; + + let worker_pool: ValidatorWorkerPool = + ExecutorWorkerPool::::new(1).get(); + let latest_header = db_txn + .block_header(BlockId::Latest)? + .context("DB is empty")?; + let next_block_number = latest_header.number + 1; + + let (mut validator, _) = init_proposal_and_validator( + next_block_number, + 0, + proposer, + Some(latest_header.timestamp), + storage.clone(), + worker_pool.clone(), + )?; + + let declare = DeclareTransactionV3 { + class_hash: ClassHash(sierra_class_hash.0), + nonce: account.fetch_add_nonce(), + nonce_data_availability_mode: DataAvailabilityMode::L1, + fee_data_availability_mode: DataAvailabilityMode::L1, + resource_bounds: RESOURCE_BOUNDS, + tip: Tip(0), + paymaster_data: vec![], + signature: vec![/* Will be filled after signing */], + account_deployment_data: vec![], + sender_address: account.address(), + compiled_class_hash: casm_hash_v2, + }; + let mut variant = TransactionVariant::DeclareV3(declare); + let txn_hash = variant.calculate_hash(ChainId::SEPOLIA_TESTNET, false); + let (r, s) = ecdsa_sign(account.private_key(), txn_hash.0)?; + let TransactionVariant::DeclareV3(declare) = &mut variant else { + unreachable!(); + }; + declare.signature = vec![TransactionSignatureElem(r), TransactionSignatureElem(s)]; + + let variant = variant.to_dto(); + + let p2p_proto::sync::transaction::TransactionVariant::DeclareV3(DeclareV3WithoutClass { + common, + .. + }) = variant + else { + unreachable!(); + }; + + let declare = p2p_proto::transaction::DeclareV3WithClass { + common, + class: cairo1_class_p2p, + }; + let declare = p2p_proto::consensus::Transaction { + txn: p2p_proto::consensus::TransactionVariant::DeclareV3(declare), + transaction_hash: Hash(txn_hash.0), + }; + + validator.execute_batch::( + vec![declare], + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), + )?; + + let next_block = validator.consensus_finalize0()?; + + let (storage_commitment, class_commitment) = update_starknet_state( + &db_txn, + (&next_block.state_update).into(), + true, + next_block.header.number, + storage.clone(), + )?; + let state_commitment = StateCommitment::calculate( + storage_commitment, + class_commitment, + StarknetVersion::V_0_14_0, + ); + + let ConsensusFinalizedL2Block { + header, + state_update, + transactions_and_receipts, + events, + declared_classes, + } = next_block; + + assert_eq!(declared_classes.len(), 1); + let declared_class = &declared_classes[0]; + assert_eq!(declared_class.sierra_hash, sierra_class_hash); + assert_eq!(declared_class.casm_hash_v2, casm_hash_v2); + + let next_header = header.compute_hash(latest_header.hash, state_commitment, compute_final_hash); + + db_txn.insert_block_header(&next_header)?; + + // Insert classes before state update because the latter will trigger + // `upsert_declared_at` and insert a NULL definition + db_txn.insert_sierra_class_definition( + &sierra_class_hash, + &sierra_class_ser, + &casm, + &casm_hash_v2, + )?; + + db_txn.insert_state_update_data(next_header.number, &state_update)?; + db_txn.insert_transaction_data( + next_header.number, + &transactions_and_receipts, + Some(&events), + )?; + db_txn.commit()?; + + let worker_pool = Arc::into_inner(worker_pool).expect("Refcount is 1"); + worker_pool.join(); + + tracing::info!( + "Declared class {sierra_class_hash} in block {} in {} ms", + next_header.number, + stopwatch.elapsed().as_millis(), + ); + + Ok(()) +} + +/// Predeclare, predeploy, and initialize if necessary: Cairo 1 account, ETH and +/// STRK ERC20s, and the UDC. +fn predeploy_contracts( + db_txn: &pathfinder_storage::Transaction<'_>, + state_update: &mut StateUpdateData, +) -> Result { + fixtures::PREDECLARED_CLASSES + .iter() + .copied() + .try_for_each(|(class, sierra_hash)| { + class::predeclare(db_txn, state_update, class, Some(sierra_hash)) + })?; + fixtures::PREDEPLOYED_CONTRACTS + .iter() + .copied() + .try_for_each(|(contract_address, sierra_hash)| { + contract::predeploy(state_update, contract_address, sierra_hash) + })?; + fixtures::ERC20S + .iter() + .copied() + .try_for_each(|(contract_address, name, symbol)| { + contract::erc20_init(state_update, contract_address, name, symbol) + })?; + let account = Account::new_from_fixture(); + account.predeploy(state_update)?; + Ok(account) +} + +/// Returns the current UNIX timestamp, ensuring that it is strictly increasing +/// across calls, if the previous timestamp is provided. +pub fn strictly_increasing_timestamp(prev: Option) -> BlockTimestamp { + let current = BlockTimestamp::new_or_panic( + SystemTime::now() + .duration_since(SystemTime::UNIX_EPOCH) + .unwrap_or_default() + .as_secs(), + ); + match prev { + Some(prev) if current.get() <= prev.get() => BlockTimestamp::new_or_panic(prev.get() + 1), + _ => current, + } +} + +pub fn init_proposal_and_validator( + height: BlockNumber, + round: u32, + proposer: Address, + prev_timestamp: Option, + storage: Storage, + worker_pool: ValidatorWorkerPool, +) -> anyhow::Result<(ValidatorTransactionBatchStage, Vec)> { + let proposal_init = ProposalInit { + height: height.get(), + round, + valid_round: None, + proposer, + }; + let block_info = block_info(height, proposer, prev_timestamp); + let validator = ValidatorBlockInfoStage::new(ChainId::SEPOLIA_TESTNET, proposal_init.clone()) + .expect("valid block height"); + + let validator = validator.validate_block_info( + block_info.clone(), + storage.clone(), + DecidedBlocks::default(), + None, + None, + None, + worker_pool.clone(), + )?; + Ok(( + validator, + vec![ + ProposalPart::Init(proposal_init), + ProposalPart::BlockInfo(block_info), + ], + )) +} + +/// Block info for devnet blocks, sufficient for execution, provided that gas +/// prices are not validated against any oracle. +fn block_info( + height: BlockNumber, + proposer: Address, + prev_timestamp: Option, +) -> BlockInfo { + BlockInfo { + height: height.get(), + builder: proposer, + timestamp: strictly_increasing_timestamp(prev_timestamp).get(), + l1_gas_price_fri: GAS_PRICE.0, + l1_data_gas_price_fri: GAS_PRICE.0, + l2_gas_price_fri: GAS_PRICE.0, + l1_gas_price_wei: GAS_PRICE.0, + l1_data_gas_price_wei: GAS_PRICE.0, + l1_da_mode: p2p_proto::common::L1DataAvailabilityMode::Calldata, + } +} + +#[cfg(test)] +pub mod tests { + use std::num::NonZeroU32; + use std::sync::Arc; + use std::thread::available_parallelism; + + use p2p_proto::common::Address; + use pathfinder_block_commitments::compute_final_hash; + use pathfinder_common::{ + BlockHash, + BlockHeader, + BlockId, + ClassHash, + ConsensusFinalizedL2Block, + ContractAddress, + DeclaredClass, + StarknetVersion, + StateCommitment, + }; + use pathfinder_crypto::Felt; + use pathfinder_executor::{ConcurrentStateReader, ExecutorWorkerPool}; + use pathfinder_merkle_tree::starknet_state::update_starknet_state; + use pathfinder_storage::{Storage, StorageBuilder}; + use pathfinder_validator::{ProdTransactionMapper, ValidatorWorkerPool}; + use tempfile::TempDir; + + use crate::devnet::account::Account; + use crate::devnet::{fixtures, init_db, init_proposal_and_validator, BootDb}; + + #[test_log::test] + fn init_declare_deploy_invoke_hello_abi() { + // Block 0 - predeploys and initializes contracts, including the account we'll + // use for testing + let proposer = Address(Felt::ONE); + let db_dir = TempDir::new().unwrap(); + let BootDb { db_file_path, .. } = init_db(db_dir.path(), proposer).unwrap(); + + let storage = StorageBuilder::file(db_file_path) + .migrate() + .unwrap() + .create_pool( + NonZeroU32::new(5 + available_parallelism().unwrap().get() as u32).unwrap(), + ) + .unwrap(); + + let mut db_conn = storage.connection().unwrap(); + let db_txn = db_conn.transaction().unwrap(); + + let block_0_header = db_txn.block_header(BlockId::Latest).unwrap().unwrap(); + assert_eq!( + block_0_header.state_diff_commitment, + fixtures::GENESIS_COMMITMENT + ); + + let account = Account::from_storage(&db_txn).unwrap(); + drop(db_txn); + + let worker_pool: ValidatorWorkerPool = + ExecutorWorkerPool::::new(1).get(); + + // Block 1 - declare the Hello Starknet contract class + let block_1_number = block_0_header.number + 1; + let (mut validator, _) = init_proposal_and_validator( + block_1_number, + 0, + proposer, + Some(block_0_header.timestamp), + storage.clone(), + worker_pool.clone(), + ) + .unwrap(); + let declare = account.hello_starknet_declare().unwrap(); + validator + .execute_batch::( + vec![declare], + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), + ) + .unwrap(); + let block_1 = validator.consensus_finalize0().unwrap(); + + let db_txn = db_conn.transaction().unwrap(); + let (block_1_header, _) = + insert_block(storage.clone(), db_txn, block_1, block_0_header.hash); + + // Block 2 - deploy a Hello Starknet contract instance via the UDC + let block_2_number = block_1_header.number + 1; + let (mut validator, _) = init_proposal_and_validator( + block_2_number, + 0, + proposer, + Some(block_1_header.timestamp), + storage.clone(), + worker_pool.clone(), + ) + .unwrap(); + let deploy = account.hello_starknet_deploy().unwrap(); + validator + .execute_batch::( + vec![deploy], + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), + ) + .unwrap(); + let block_2 = validator.consensus_finalize0().unwrap(); + + let db_txn = db_conn.transaction().unwrap(); + let (block_2_header, hello_contract_address) = + insert_block(storage.clone(), db_txn, block_2, block_1_header.hash); + let hello_contract_address = hello_contract_address.unwrap(); + + // Block 3 - invoke increase_balance and get_balance on the deployed Hello + // Starknet instance + let block_3_number = block_2_header.number + 1; + let (mut validator, _) = init_proposal_and_validator( + block_3_number, + 0, + proposer, + Some(block_2_header.timestamp), + storage.clone(), + worker_pool.clone(), + ) + .unwrap(); + let increase_balance = + account.hello_starknet_increase_balance(hello_contract_address, 0xABCD); + let get_balance = account.hello_starknet_get_balance(hello_contract_address); + validator + .execute_batch::( + vec![increase_balance, get_balance], + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), + ) + .unwrap(); + let block_3 = validator.consensus_finalize0().unwrap(); + + let db_txn = db_conn.transaction().unwrap(); + insert_block(storage.clone(), db_txn, block_3, block_2_header.hash); + + let worker_pool = Arc::into_inner(worker_pool).unwrap(); + worker_pool.join(); + } + + fn insert_block( + storage: Storage, + db_txn: pathfinder_storage::Transaction<'_>, + block: ConsensusFinalizedL2Block, + parent_hash: BlockHash, + ) -> (BlockHeader, Option) { + let (storage_commitment, class_commitment) = update_starknet_state( + &db_txn, + (&block.state_update).into(), + true, + block.header.number, + storage.clone(), + ) + .unwrap(); + let state_commitment = StateCommitment::calculate( + storage_commitment, + class_commitment, + StarknetVersion::V_0_14_0, + ); + + let ConsensusFinalizedL2Block { + header, + state_update, + transactions_and_receipts, + events, + declared_classes, + } = block; + + declared_classes + .into_iter() + .try_for_each( + |DeclaredClass { + sierra_hash, + casm_hash_v2, + sierra_def, + casm_def, + }| { + db_txn.insert_sierra_class_definition( + &sierra_hash, + &sierra_def, + &casm_def, + &casm_hash_v2, + ) + }, + ) + .unwrap(); + + let hello_contract_address = + state_update + .contract_updates + .iter() + .find_map(|(contract_address, update)| { + update + .class + .is_some_and(|x| x.class_hash() == ClassHash(fixtures::HELLO_CLASS_HASH.0)) + .then_some(*contract_address) + }); + + let header = header.compute_hash(parent_hash, state_commitment, compute_final_hash); + + db_txn.insert_block_header(&header).unwrap(); + db_txn + .insert_state_update_data(header.number, &state_update) + .unwrap(); + db_txn + .insert_transaction_data(header.number, &transactions_and_receipts, Some(&events)) + .unwrap(); + db_txn.commit().unwrap(); + (header, hello_contract_address) + } +} diff --git a/crates/pathfinder/src/devnet/account.rs b/crates/pathfinder/src/devnet/account.rs new file mode 100644 index 0000000000..f92e59fb71 --- /dev/null +++ b/crates/pathfinder/src/devnet/account.rs @@ -0,0 +1,481 @@ +use std::sync::atomic::{AtomicU64, Ordering}; +use std::sync::RwLock; + +use anyhow::Context as _; +use num_bigint::BigUint; +use p2p::sync::client::conv::ToDto as _; +use p2p_proto::common::Hash; +use p2p_proto::sync::transaction::DeclareV3WithoutClass; +use p2p_proto::transaction::InvokeV3WithProof; +use pathfinder_common::state_update::StateUpdateData; +use pathfinder_common::transaction::{ + DataAvailabilityMode, + DeclareTransactionV3, + InvokeTransactionV3, + TransactionVariant, +}; +use pathfinder_common::{ + entry_point, + BlockId, + BlockNumber, + CallParam, + ChainId, + ClassHash, + ContractAddress, + EntryPoint, + PublicKey, + SierraHash, + Tip, + TransactionNonce, + TransactionSignatureElem, +}; +use pathfinder_crypto::signature::ecdsa_sign; +use pathfinder_crypto::Felt; +use pathfinder_executor::IntoStarkFelt as _; +use starknet_api::abi::abi_utils::get_storage_var_address; + +use crate::devnet::class::{preprocess_sierra, PrepocessedSierra}; +use crate::devnet::contract::predeploy; +use crate::devnet::fixtures; +use crate::devnet::fixtures::RESOURCE_BOUNDS; +use crate::devnet::utils::{get_storage_at, join_felts, set_storage_at, split_biguint}; + +pub struct Account { + sierra_hash: SierraHash, + private_key: Felt, + public_key: PublicKey, + address: ContractAddress, + strk_fee_token_address: ContractAddress, + // Account nonce + nonce: AtomicU64, + /// Used for consecutive hello_starknet deployments to avoid address + /// collisions + deployment_salt: AtomicU64, + /// Hello starknet deployments so far. + deployed: RwLock>, +} + +impl Account { + /// Creates a new account from fixture. + pub(super) fn new_from_fixture() -> Self { + Self { + sierra_hash: fixtures::CAIRO_1_ACCOUNT_CLASS_HASH, + private_key: fixtures::ACCOUNT_PRIVATE_KEY, + public_key: fixtures::ACCOUNT_PUBLIC_KEY, + address: fixtures::ACCOUNT_ADDRESS, + strk_fee_token_address: fixtures::STRK_ERC20_CONTRACT_ADDRESS, + nonce: AtomicU64::new(0), + deployment_salt: AtomicU64::new(0), + deployed: RwLock::new(Vec::new()), + } + } + + /// Creates a new account from fixture and recovers its nonce from storage. + pub fn from_storage(db_txn: &pathfinder_storage::Transaction<'_>) -> anyhow::Result { + let account = Self::new_from_fixture(); + account.update_nonce(db_txn)?; + Ok(account) + } + + /// Updates the account nonce and deployed contracts. The both need to be + /// updated from storage, because not all transactions produced by this + /// entity will end up in committed blocks. + pub fn update( + &self, + db_txn: &pathfinder_storage::Transaction<'_>, + latest_height: Option, + ) -> anyhow::Result<()> { + self.update_nonce(db_txn)?; + if let Some(latest_height) = latest_height { + let new_deployed = + db_txn.deployed_contracts(fixtures::HELLO_CLASS_HASH, latest_height)?; + self.deployed.write().unwrap().extend(new_deployed); + } + Ok(()) + } + + fn update_nonce(&self, db_txn: &pathfinder_storage::Transaction<'_>) -> anyhow::Result<()> { + let nonce = db_txn + .contract_nonce(self.address, BlockId::Latest)? + // If the account has not been used before, it won't have the nonce in storage yet, so + // we default to 0 + .unwrap_or_default(); + let nonce: u64 = nonce + .0 + .try_into() + .context("Nonce in storage does not fit into u64")?; + self.nonce.store(nonce, Ordering::Relaxed); + Ok(()) + } + + pub(super) fn predeploy(&self, state_update: &mut StateUpdateData) -> anyhow::Result<()> { + predeploy(state_update, self.address, self.sierra_hash)?; + self.set_initial_balance(state_update)?; + self.simulate_constructor(state_update) + } + + pub(super) fn address(&self) -> ContractAddress { + self.address + } + + pub(super) fn private_key(&self) -> Felt { + self.private_key + } + + pub(super) fn fetch_add_nonce(&self) -> TransactionNonce { + TransactionNonce(Felt::from_u64(self.nonce.fetch_add(1, Ordering::Relaxed))) + } + + fn fetch_add_deployment_salt(&self) -> CallParam { + CallParam(Felt::from_u64( + self.deployment_salt.fetch_add(1, Ordering::Relaxed), + )) + } + + /// Sets initial balance to u128::MAX + fn set_initial_balance(&self, state_update: &mut StateUpdateData) -> anyhow::Result<()> { + let initial_balance = u128::MAX; + let storage_var_address_low: starknet_api::state::StorageKey = + get_storage_var_address("ERC20_balances", &[self.address.0.into_starkfelt()]); + let storage_var_address_high = storage_var_address_low.next_storage_key()?; + + let total_supply_storage_address_low: starknet_api::state::StorageKey = + get_storage_var_address("ERC20_total_supply", &[]); + let total_supply_storage_address_high = + total_supply_storage_address_low.next_storage_key()?; + + let (high, low) = split_biguint(BigUint::from(initial_balance)); + + let total_supply_low = get_storage_at( + state_update, + self.strk_fee_token_address, + total_supply_storage_address_low, + ); + let total_supply_high = get_storage_at( + state_update, + self.strk_fee_token_address, + total_supply_storage_address_high, + ); + + let new_total_supply = + join_felts(total_supply_high, total_supply_low) + BigUint::from(initial_balance); + + let (new_total_supply_high, new_total_supply_low) = split_biguint(new_total_supply); + + // set balance in ERC20_balances + set_storage_at( + state_update, + self.strk_fee_token_address, + storage_var_address_low, + low, + )?; + set_storage_at( + state_update, + self.strk_fee_token_address, + storage_var_address_high, + high, + )?; + + // set total supply in ERC20_total_supply + set_storage_at( + state_update, + self.strk_fee_token_address, + total_supply_storage_address_low, + new_total_supply_low, + )?; + + set_storage_at( + state_update, + self.strk_fee_token_address, + total_supply_storage_address_high, + new_total_supply_high, + )?; + + Ok(()) + } + + // Simulate constructor logic (register interfaces and set public key), as done + // in https://github.com/OpenZeppelin/cairo-contracts/blob/89a450a88628ec3b86273f261b2d8d1ca9b1522b/src/account/account.cairo#L207-L211 + fn simulate_constructor(&self, state_update: &mut StateUpdateData) -> anyhow::Result<()> { + let interface_storage_var = get_storage_var_address( + "SRC5_supported_interfaces", + &[fixtures::ISRC6_ID.into_starkfelt()], + ); + set_storage_at(state_update, self.address, interface_storage_var, Felt::ONE)?; + + let public_key_storage_var = get_storage_var_address("Account_public_key", &[]); + set_storage_at( + state_update, + self.address, + public_key_storage_var, + self.public_key.0, + )?; + + Ok(()) + } + + /// Returns the addresses of hello starknet contract instances deployed so + /// far. + pub fn deployed(&self) -> Vec { + self.deployed.read().unwrap().clone() + } + + /// Create a transaction declaring the only instance of hello starknet + /// contract class + pub fn hello_starknet_declare(&self) -> anyhow::Result { + let PrepocessedSierra { + sierra_class_hash, + cairo1_class_p2p, + casm_hash_v2, + .. + } = preprocess_sierra(fixtures::HELLO_CLASS, None)?; + + let declare = DeclareTransactionV3 { + class_hash: ClassHash(sierra_class_hash.0), + nonce: self.fetch_add_nonce(), + nonce_data_availability_mode: DataAvailabilityMode::L1, + fee_data_availability_mode: DataAvailabilityMode::L1, + resource_bounds: RESOURCE_BOUNDS, + tip: Tip(0), + paymaster_data: vec![], + signature: vec![/* Will be filled after signing */], + account_deployment_data: vec![], + sender_address: self.address(), + compiled_class_hash: casm_hash_v2, + }; + let mut variant = TransactionVariant::DeclareV3(declare); + let txn_hash = variant.calculate_hash(ChainId::SEPOLIA_TESTNET, false); + let (r, s) = ecdsa_sign(self.private_key(), txn_hash.0)?; + let TransactionVariant::DeclareV3(declare) = &mut variant else { + unreachable!(); + }; + declare.signature = vec![TransactionSignatureElem(r), TransactionSignatureElem(s)]; + + let variant = variant.to_dto(); + + let p2p_proto::sync::transaction::TransactionVariant::DeclareV3(DeclareV3WithoutClass { + common, + .. + }) = variant + else { + unreachable!(); + }; + + let declare = p2p_proto::transaction::DeclareV3WithClass { + common, + class: cairo1_class_p2p, + }; + Ok(p2p_proto::consensus::Transaction { + txn: p2p_proto::consensus::TransactionVariant::DeclareV3(declare), + transaction_hash: Hash(txn_hash.0), + }) + } + + /// Create an invoke transaction deploying another instance of hello + /// starknet contract + pub fn hello_starknet_deploy(&self) -> anyhow::Result { + // Calldata structure for deployment via InvokeV3: + // https://github.com/software-mansion/starknet-rust/blob/8c6e5eef7b2b19256ee643eefe742119188092e6/starknet-rust-accounts/src/single_owner.rs#L141 + // + // Calldata structure for UDC: + // https://docs.openzeppelin.com/contracts-cairo/2.x/udc + // https://github.com/OpenZeppelin/cairo-contracts/blob/802735d432499124c684d28a5a0465ebf6c9cbdb/packages/presets/src/universal_deployer.cairo#L46 + // + // "calldata": [ + // /* Number of calls */ + // "0x1", + // /* UDC address */ + // "0x2ceed65a4bd731034c01113685c831b01c15d7d432f71afb1cf1634b53a2125", + // /* Selector for 'deployContract' */ + // "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + // /* Calldata length */ + // "0x4", + // /* UDC Calldata - class hash */ + // "0x0457EF47CFAA819D9FE1372E8957815CDBA2252ED3E42A15536A5A40747C8A00", + // /* UDC Calldata - salt */ + // "0x0", + // /* UDC Calldata - not_from_zero, 0 for origin independent deployment */ + // "0x0", + // /* UDC Calldata - calldata to pass to the target contract */ + // "0x0" + // ], + + let selector = EntryPoint::hashed(b"deployContract"); + assert_eq!( + selector, + entry_point!("0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d") + ); + + let invoke = InvokeTransactionV3 { + signature: vec![/* Will be filled after signing */], + nonce: self.fetch_add_nonce(), + nonce_data_availability_mode: DataAvailabilityMode::L1, + fee_data_availability_mode: DataAvailabilityMode::L1, + resource_bounds: fixtures::RESOURCE_BOUNDS, + tip: Tip(0), + paymaster_data: vec![], + account_deployment_data: vec![], + calldata: vec![ + // Number of calls + CallParam(Felt::ONE), + // UDC address + CallParam(fixtures::UDC_CONTRACT_ADDRESS.0), + // Selector for 'deployContract' + CallParam(selector.0), + // Calldata length + CallParam(Felt::from_u64(4)), + // UDC Calldata - class hash + CallParam(fixtures::HELLO_CLASS_HASH.0), + // UDC Calldata - salt + self.fetch_add_deployment_salt(), + // UDC Calldata - not_from_zero, 0 for origin independent deployment + CallParam::ZERO, + // UDC Calldata - calldata to pass to the target contract + CallParam::ZERO, + ], + sender_address: self.address(), + proof_facts: vec![], + }; + + let mut variant = TransactionVariant::InvokeV3(invoke); + let txn_hash = variant.calculate_hash(ChainId::SEPOLIA_TESTNET, false); + let (r, s) = ecdsa_sign(self.private_key(), txn_hash.0)?; + let TransactionVariant::InvokeV3(invoke) = &mut variant else { + unreachable!(); + }; + invoke.signature = vec![TransactionSignatureElem(r), TransactionSignatureElem(s)]; + + let variant = variant.to_dto(); + + let p2p_proto::sync::transaction::TransactionVariant::InvokeV3(invoke) = variant else { + unreachable!(); + }; + + Ok(p2p_proto::consensus::Transaction { + txn: p2p_proto::consensus::TransactionVariant::InvokeV3(InvokeV3WithProof { + invoke, + proof: Vec::new(), + }), + transaction_hash: Hash(txn_hash.0), + }) + } + + /// Create an invoke transaction that calls increase_balance function of a + /// hello starknet contract instance + pub fn hello_starknet_increase_balance( + &self, + contract_address: ContractAddress, + by_amount: u64, + ) -> p2p_proto::consensus::Transaction { + let selector = EntryPoint::hashed(b"increase_balance"); + assert_eq!( + selector, + entry_point!("0x362398bec32bc0ebb411203221a35a0301193a96f317ebe5e40be9f60d15320") + ); + + let invoke = InvokeTransactionV3 { + signature: vec![/* Will be filled after signing */], + nonce: self.fetch_add_nonce(), + nonce_data_availability_mode: DataAvailabilityMode::L1, + fee_data_availability_mode: DataAvailabilityMode::L1, + resource_bounds: RESOURCE_BOUNDS, + tip: Tip(0), + paymaster_data: vec![], + account_deployment_data: vec![], + calldata: vec![ + // Number of calls + CallParam(Felt::ONE), + // Hello contract address + CallParam(contract_address.0), + // Selector for 'increase_balance' + CallParam(selector.0), + // Calldata length + CallParam(Felt::ONE), + // Hello starknet increase_balance argument + CallParam(Felt::from_u64(by_amount)), + ], + sender_address: self.address(), + proof_facts: vec![], + }; + + let mut variant = TransactionVariant::InvokeV3(invoke); + let txn_hash = variant.calculate_hash(ChainId::SEPOLIA_TESTNET, false); + let (r, s) = ecdsa_sign(self.private_key(), txn_hash.0).unwrap(); + let TransactionVariant::InvokeV3(invoke) = &mut variant else { + unreachable!(); + }; + invoke.signature = vec![TransactionSignatureElem(r), TransactionSignatureElem(s)]; + + let variant = variant.to_dto(); + + let p2p_proto::sync::transaction::TransactionVariant::InvokeV3(invoke) = variant else { + unreachable!(); + }; + + p2p_proto::consensus::Transaction { + txn: p2p_proto::consensus::TransactionVariant::InvokeV3(InvokeV3WithProof { + invoke, + proof: Vec::new(), + }), + transaction_hash: Hash(txn_hash.0), + } + } + + /// Create an invoke transaction that calls get_balance function of a hello + /// starknet contract instance + pub fn hello_starknet_get_balance( + &self, + contract_address: ContractAddress, + ) -> p2p_proto::consensus::Transaction { + let selector = EntryPoint::hashed(b"get_balance"); + assert_eq!( + selector, + entry_point!("0x39e11d48192e4333233c7eb19d10ad67c362bb28580c604d67884c85da39695") + ); + + let invoke = InvokeTransactionV3 { + signature: vec![/* Will be filled after signing */], + nonce: self.fetch_add_nonce(), + nonce_data_availability_mode: DataAvailabilityMode::L1, + fee_data_availability_mode: DataAvailabilityMode::L1, + resource_bounds: RESOURCE_BOUNDS, + tip: Tip(0), + paymaster_data: vec![], + account_deployment_data: vec![], + calldata: vec![ + // Number of calls + CallParam(Felt::ONE), + // Hello contract address + CallParam(contract_address.0), + // Selector for 'get_balance' + CallParam(selector.0), + // Calldata length + CallParam(Felt::ZERO), + ], + sender_address: self.address(), + proof_facts: vec![], + }; + + let mut variant = TransactionVariant::InvokeV3(invoke); + let txn_hash = variant.calculate_hash(ChainId::SEPOLIA_TESTNET, false); + let (r, s) = ecdsa_sign(self.private_key(), txn_hash.0).unwrap(); + let TransactionVariant::InvokeV3(invoke) = &mut variant else { + unreachable!(); + }; + invoke.signature = vec![TransactionSignatureElem(r), TransactionSignatureElem(s)]; + + let variant = variant.to_dto(); + + let p2p_proto::sync::transaction::TransactionVariant::InvokeV3(invoke) = variant else { + unreachable!(); + }; + + p2p_proto::consensus::Transaction { + txn: p2p_proto::consensus::TransactionVariant::InvokeV3(InvokeV3WithProof { + invoke, + proof: Vec::new(), + }), + transaction_hash: Hash(txn_hash.0), + } + } +} diff --git a/crates/pathfinder/src/devnet/class.rs b/crates/pathfinder/src/devnet/class.rs new file mode 100644 index 0000000000..1e80ae5ce7 --- /dev/null +++ b/crates/pathfinder/src/devnet/class.rs @@ -0,0 +1,206 @@ +use pathfinder_class_hash::compute_sierra_class_hash; +use pathfinder_class_hash::json::SierraContractDefinition; +use pathfinder_common::class_definition::{ + SerializedCasmDefinition, + SerializedSierraDefinition, + Sierra, +}; +use pathfinder_common::{state_update, CasmHash, SierraHash}; +use pathfinder_compiler::{ + casm_class_hash_v2, + compile_sierra_to_casm_deser, + BlockifierLibfuncs, + ResourceLimits, +}; +use pathfinder_storage::Transaction; + +/// Predeclare a Cairo1 class: +/// - compile sierra bytecode into casm, +/// - compute casm hash v2, +/// - compute sierra class hash if `class_hash` is `None`, +/// - insert sierra and casm into the DB and update the state update, which +/// should be inserted into the DB when all predeclarations and predeployments +/// are done. +pub fn predeclare( + transaction: &Transaction<'_>, + state_update: &mut state_update::StateUpdateData, + sierra_class_ser: &[u8], + class_hash: Option, +) -> anyhow::Result<()> { + let PrepocessedSierra { + sierra_class_hash, + sierra_class_ser, + casm_hash_v2, + casm, + .. + } = preprocess_sierra(sierra_class_ser, class_hash)?; + + let overwritten = state_update + .declared_sierra_classes + .insert(sierra_class_hash, casm_hash_v2) + .is_some(); + anyhow::ensure!( + !overwritten, + "Predeclaring class with hash {sierra_class_hash} would overwrite an existing class \ + declaration" + ); + + transaction.insert_sierra_class_definition( + &sierra_class_hash, + &sierra_class_ser, + &casm, + &casm_hash_v2, + )?; + Ok(()) +} + +#[derive(Debug)] +pub struct PrepocessedSierra { + // Class hash + pub sierra_class_hash: SierraHash, + // Deserialized into a format compatible with p2p, and hence the validator (for execution) + pub cairo1_class_p2p: p2p_proto::class::Cairo1Class, + // Re-serialized into a storage-compatible format + pub sierra_class_ser: SerializedSierraDefinition, + // Casm hash v2 + pub casm_hash_v2: CasmHash, + // Casm - compiled from sierra + pub casm: SerializedCasmDefinition, +} + +/// Preprocess a Sierra class definition. Class hash is computed if not +/// provided. +pub fn preprocess_sierra( + sierra_class_ser: &[u8], + sierra_class_hash: Option, +) -> anyhow::Result { + let sierra_class_hash = sierra_class_hash.unwrap_or({ + let compat::SierraContractDefinition { + abi, + sierra_program, + contract_class_version, + entry_points_by_type, + } = serde_json::from_slice(sierra_class_ser).unwrap(); + let sierra_class_def = SierraContractDefinition { + abi: serde_json::to_string(&abi).unwrap().into(), + sierra_program, + contract_class_version, + entry_points_by_type, + }; + + SierraHash(compute_sierra_class_hash(sierra_class_def)?.0) + }); + + let compat::Sierra { + abi, + sierra_program, + contract_class_version, + entry_points_by_type, + } = serde_json::from_slice(sierra_class_ser).unwrap(); + let sierra_class_def = Sierra { + abi: serde_json::to_string(&abi).unwrap().into(), + sierra_program, + contract_class_version, + entry_points_by_type, + }; + + // Re-serialize into a storage-compatible format + let sierra_class_ser = + SerializedSierraDefinition::from_bytes(serde_json::to_vec(&sierra_class_def).unwrap()); + let cairo1_class_p2p = sierra_def_to_p2p_cairo1(&sierra_class_def); + let casm = compile_sierra_to_casm_deser( + sierra_class_def, + ResourceLimits::for_test(), + BlockifierLibfuncs::default(), + ) + .unwrap(); + + let casm_hash_v2 = casm_class_hash_v2(&casm).unwrap(); + + Ok(PrepocessedSierra { + sierra_class_hash, + cairo1_class_p2p, + sierra_class_ser, + casm_hash_v2, + casm, + }) +} + +fn sierra_def_to_p2p_cairo1(sierra: &Sierra<'_>) -> p2p_proto::class::Cairo1Class { + let Sierra { + abi, + sierra_program, + contract_class_version, + entry_points_by_type, + } = sierra; + p2p_proto::class::Cairo1Class { + abi: abi.clone().into_owned(), + entry_points: p2p_proto::class::Cairo1EntryPoints { + externals: entry_points_by_type + .external + .iter() + .map(|x| p2p_proto::class::SierraEntryPoint { + index: x.function_idx, + selector: x.selector.0, + }) + .collect(), + l1_handlers: entry_points_by_type + .l1_handler + .iter() + .map(|x| p2p_proto::class::SierraEntryPoint { + index: x.function_idx, + selector: x.selector.0, + }) + .collect(), + constructors: entry_points_by_type + .constructor + .iter() + .map(|x| p2p_proto::class::SierraEntryPoint { + index: x.function_idx, + selector: x.selector.0, + }) + .collect(), + }, + program: sierra_program.clone(), + contract_class_version: contract_class_version.clone().into_owned(), + } +} + +mod compat { + use std::borrow::Cow; + use std::collections::HashMap; + + use pathfinder_common::class_definition::{ + EntryPointType, + SelectorAndFunctionIndex, + SierraEntryPoints, + }; + use pathfinder_crypto::Felt; + use serde::Deserialize; + + /// Necessary for class hash computation, as the + /// [`compute_sierra_class_hash`](pathfinder_class_hash::compute_sierra_class_hash) function expects a different struct + /// than the one used for deserialization of the class definition. + #[derive(Debug, Deserialize)] + pub struct SierraContractDefinition<'a> { + #[serde(borrow)] + pub abi: Cow<'a, serde_json::value::RawValue>, + pub sierra_program: Vec, + #[serde(borrow)] + pub contract_class_version: Cow<'a, str>, + pub entry_points_by_type: HashMap>, + } + + /// Necessary for compilation into casm, as the + /// [`compile_sierra_to_casm_deser`](pathfinder_compiler::compile_sierra_to_casm_deser) function expects a different struct + /// than the one used for deserialization of the class definition. + #[derive(Debug, Deserialize)] + pub struct Sierra<'a> { + #[serde(borrow)] + pub abi: Cow<'a, serde_json::value::RawValue>, + pub sierra_program: Vec, + #[serde(borrow)] + pub contract_class_version: Cow<'a, str>, + pub entry_points_by_type: SierraEntryPoints, + } +} diff --git a/crates/pathfinder/src/devnet/contract.rs b/crates/pathfinder/src/devnet/contract.rs new file mode 100644 index 0000000000..2568097e4a --- /dev/null +++ b/crates/pathfinder/src/devnet/contract.rs @@ -0,0 +1,83 @@ +use pathfinder_common::state_update::StateUpdateData; +use pathfinder_common::{ClassHash, ContractAddress, SierraHash, StorageAddress, StorageValue}; +use pathfinder_crypto::Felt; +use pathfinder_executor::IntoFelt as _; +use starknet_api::abi::abi_utils::get_storage_var_address; + +use crate::devnet::fixtures::ACCOUNT_ADDRESS; +use crate::devnet::utils::cairo_short_string_to_felt; + +pub fn predeploy( + state_update: &mut StateUpdateData, + contract_address: ContractAddress, + sierra_hash: SierraHash, +) -> anyhow::Result<()> { + let overwritten = state_update + .contract_updates + .insert( + contract_address, + pathfinder_common::state_update::ContractUpdate { + class: Some( + pathfinder_common::state_update::ContractClassUpdate::Deploy(ClassHash( + sierra_hash.0, + )), + ), + ..Default::default() + }, + ) + .is_some(); + anyhow::ensure!( + !overwritten, + "Predeploying to address {contract_address} would overwrite an existing contract update" + ); + Ok(()) +} + +pub fn erc20_init( + state_update: &mut StateUpdateData, + contract_address: ContractAddress, + erc20_name: &str, + erc20_symbol: &str, +) -> anyhow::Result<()> { + let contract_update = state_update + .contract_updates + .entry(contract_address) + .or_default(); + + for (storage_var_name, storage_value) in [ + ("ERC20_name", cairo_short_string_to_felt(erc20_name)?), + ("ERC20_symbol", cairo_short_string_to_felt(erc20_symbol)?), + ("ERC20_decimals", Felt::from_u64(18)), + ("permitted_minter", ACCOUNT_ADDRESS.0), + ] { + let storage_var_address = + StorageAddress(get_storage_var_address(storage_var_name, &[]).into_felt()); + let storage_value = StorageValue(storage_value); + contract_update + .storage + .insert(storage_var_address, storage_value); + } + + Ok(()) +} + +#[cfg(test)] +pub fn compute_address( + sierra_hash: SierraHash, + public_key: pathfinder_common::PublicKey, +) -> anyhow::Result { + use pathfinder_executor::IntoStarkFelt as _; + + let address = ContractAddress( + starknet_api::core::calculate_contract_address( + Default::default(), + starknet_api::core::ClassHash(sierra_hash.0.into_starkfelt()), + &starknet_api::transaction::fields::Calldata(std::sync::Arc::new(vec![public_key + .0 + .into_starkfelt()])), + Default::default(), + )? + .into_felt(), + ); + Ok(address) +} diff --git a/crates/pathfinder/src/devnet/fixtures.rs b/crates/pathfinder/src/devnet/fixtures.rs new file mode 100644 index 0000000000..2ed801a2c1 --- /dev/null +++ b/crates/pathfinder/src/devnet/fixtures.rs @@ -0,0 +1,126 @@ +use pathfinder_common::transaction::{ResourceBound, ResourceBounds}; +use pathfinder_common::{ + contract_address, + felt, + public_key, + sierra_hash, + state_diff_commitment, + ContractAddress, + GasPrice, + PublicKey, + ResourceAmount, + ResourcePricePerUnit, + SierraHash, + StateDiffCommitment, +}; +use pathfinder_crypto::Felt; + +/// All classes that are predeclared in the devnet. +pub const PREDECLARED_CLASSES: &[(&[u8], SierraHash)] = &[ + (CAIRO_1_ACCOUNT_CLASS, CAIRO_1_ACCOUNT_CLASS_HASH), + (STRK_ERC20_CLASS, STRK_ERC20_CLASS_HASH), + (UDC_CLASS, UDC_CLASS_HASH), +]; + +/// Excludes accounts! +pub const PREDEPLOYED_CONTRACTS: &[(ContractAddress, SierraHash)] = &[ + (UDC_CONTRACT_ADDRESS, UDC_CLASS_HASH), + (STRK_ERC20_CONTRACT_ADDRESS, STRK_ERC20_CLASS_HASH), +]; + +pub const ERC20S: &[(ContractAddress, &str, &str)] = &[( + STRK_ERC20_CONTRACT_ADDRESS, + STRK_ERC20_NAME, + STRK_ERC20_SYMBOL, +)]; + +pub const CAIRO_1_ACCOUNT_CLASS: &[u8] = + include_bytes!("./fixtures/account/OpenZeppelin/1.0.0/Account.cairo/Account.sierra"); +pub const CAIRO_1_ACCOUNT_CLASS_HASH: SierraHash = + sierra_hash!("0x05b4b537eaa2399e3aa99c4e2e0208ebd6c71bc1467938cd52c798c601e43564"); + +pub const STRK_ERC20_CLASS: &[u8] = include_bytes!("./fixtures/system/erc20_strk.sierra"); +pub const STRK_ERC20_CLASS_HASH: SierraHash = + sierra_hash!("0x76791ef97c042f81fbf352ad95f39a22554ee8d7927b2ce3c681f3418b5206a"); +pub const STRK_ERC20_CONTRACT_ADDRESS: ContractAddress = + contract_address!("0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d"); + +// Original comment from starknet-rust-core: ERC20 contracts storage variables; available in source at https://github.com/starknet-io/starkgate-contracts +// Note (Chris): I wasn't able to find these values in the source +pub const STRK_ERC20_NAME: &str = "StarkNet Token"; +pub const STRK_ERC20_SYMBOL: &str = "STRK"; + +pub const UDC_CLASS: &[u8] = include_bytes!("./fixtures/system/udc_2.sierra"); +pub const UDC_CLASS_HASH: SierraHash = + sierra_hash!("0x01b2df6d8861670d4a8ca4670433b2418d78169c2947f46dc614e69f333745c8"); +pub const UDC_CONTRACT_ADDRESS: ContractAddress = + contract_address!("0x02ceed65a4bd731034c01113685c831b01c15d7d432f71afb1cf1634b53a2125"); + +// As simple as possible to keep ECDSA happy. +pub const ACCOUNT_PRIVATE_KEY: Felt = Felt::ONE; +pub const ACCOUNT_PUBLIC_KEY: PublicKey = + public_key!("0x01EF15C18599971B7BECED415A40F0C7DEACFD9B0D1819E03D723D8BC943CFCA"); +pub const ACCOUNT_ADDRESS: ContractAddress = + contract_address!("0x02334DE23F9C31EEF53826835D99537F5C3823B7DE60F5B605819BF2EA97C6CA"); + +/// +pub const ISRC6_ID: Felt = + felt!("0x2ceccef7f994940b3962a6c67e0ba4fcd37df7d131417c604f91e03caecc1cd"); + +pub const HELLO_CLASS: &[u8] = include_bytes!("./fixtures/hello_starknet.sierra"); +pub const HELLO_CLASS_HASH: SierraHash = + sierra_hash!("0x0457EF47CFAA819D9FE1372E8957815CDBA2252ED3E42A15536A5A40747C8A00"); +#[cfg(test)] +pub const HELLO_CASM_HASH: pathfinder_common::CasmHash = pathfinder_common::casm_hash!( + "0x0071411E420C6D4237454AD997676341D8FBFDE4256888B31F34204AB7ED912F" +); + +/// Some nonzero gas price +pub const GAS_PRICE: GasPrice = GasPrice(1_000_000_000); +/// Some nonzero resource bounds +pub const RESOURCE_BOUNDS: ResourceBounds = ResourceBounds { + l1_gas: ResourceBound { + max_amount: ResourceAmount(1_000_000), + max_price_per_unit: ResourcePricePerUnit(1_000_000_000), + }, + l2_gas: ResourceBound { + max_amount: ResourceAmount(1_000_000), + max_price_per_unit: ResourcePricePerUnit(1_000_000_000), + }, + l1_data_gas: None, +}; + +pub const GENESIS_COMMITMENT: StateDiffCommitment = + state_diff_commitment!("0x010237DE0F720E51B3BD9DE011D575DE1BF4DCF0F4527CC258D9EFB699817544"); + +#[cfg(test)] +mod tests { + use super::*; + use crate::devnet::class::{preprocess_sierra, PrepocessedSierra}; + use crate::devnet::contract::compute_address; + use crate::devnet::utils::compute_public_key; + + #[test] + fn derived_account_values_match_fixture() { + assert_eq!( + compute_public_key(ACCOUNT_PRIVATE_KEY).unwrap(), + ACCOUNT_PUBLIC_KEY, + ); + assert_eq!( + compute_address(CAIRO_1_ACCOUNT_CLASS_HASH, ACCOUNT_PUBLIC_KEY).unwrap(), + ACCOUNT_ADDRESS, + ); + } + + #[test] + fn derived_hello_contract_values_match_fixture() { + let PrepocessedSierra { + sierra_class_hash, + casm_hash_v2, + .. + } = preprocess_sierra(HELLO_CLASS, None).unwrap(); + + assert_eq!(sierra_class_hash, HELLO_CLASS_HASH); + assert_eq!(casm_hash_v2, HELLO_CASM_HASH); + } +} diff --git a/crates/pathfinder/src/devnet/fixtures/account/OpenZeppelin/1.0.0/Account.cairo/Account.sierra b/crates/pathfinder/src/devnet/fixtures/account/OpenZeppelin/1.0.0/Account.cairo/Account.sierra new file mode 100644 index 0000000000..6f0271b0f9 --- /dev/null +++ b/crates/pathfinder/src/devnet/fixtures/account/OpenZeppelin/1.0.0/Account.cairo/Account.sierra @@ -0,0 +1 @@ +{"sierra_program":["0x1","0x6","0x0","0x2","0x9","0x4","0x781","0x7f","0xfc","0x52616e6765436865636b","0x800000000000000100000000000000000000000000000000","0x436f6e7374","0x800000000000000000000000000000000000000000000002","0x1","0x3","0x2","0x4f7074696f6e3a3a756e77726170206661696c65642e","0x4563506f696e74","0x800000000000000700000000000000000000000000000000","0x66656c74323532","0x537472756374","0x800000000000000700000000000000000000000000000003","0x0","0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3","0x6","0x75313238","0x456e756d","0x1ca27f4a416836d321a19551a437aeb9946fde25373762126dda39b53c0bd11","0x426f78","0x800000000000000700000000000000000000000000000001","0x3f","0x800000000000000f00000000000000000000000000000001","0x1c85cfe38772db9df99e2b01984abc87d868a6ed1abf1013cf120a0f3457fe1","0x8","0x9","0x3635c7f2a7ba93844c0d064e18e487f35ab90f7c39d00f186a781fc3f0c2ca9","0x53746f7261676541646472657373","0x45635374617465","0xd","0x16a4c8d7c05909052238a862d8cc3e7975bf05a07b3a69c6b28951083a6d672","0x4172726179","0x800000000000000300000000000000000000000000000001","0x800000000000000300000000000000000000000000000003","0xf","0x10","0x11412d40a830083419e8025833f1de8fcac5a017eac1638416d24c79931d394","0xe","0x11","0x5668060aa49730b7be4801df46ec62de53ecd11abe43a32873000c36e8dc1f","0x1ef15c18599971b7beced415a40f0c7deacfd9b0d1819e03d723d8bc943cfca","0x4e6f6e5a65726f","0x33f235d9b542880cc4704c6ab38aa9c5924055ca75a1d91cbd4118573a9f6c4","0x15","0x800000000000010ffffffffffffffffb781126dcae7b2321e66a241adc64d2f","0x800000000000000700000000000000000000000000000002","0x18","0x3ae40d407f8074730e48241717c3dd78b7128d346cf81094e31806a3a5bdf","0x19","0x25e2ca4b84968c2d8b83ef476ca8549410346b00836ce79beaf538155990bb2","0x3288d594b9a45d15bb2fcb7903f06cdb06b27f0ba88186ec4cfaa98307cb972","0x1b","0x1c","0x2db340e6c609371026731f47050d3976552c89b4fbb012941663841c59d1af3","0xca58956845fecb30a8cb3efe23582630dbe8b80cc1fb8fd5d5e866b1356ad","0x38f6a5b87c23cee6e7294bcc3302e95019f70f81586ff3cac38581f5ca96381","0x536e617073686f74","0x1baeba72e79e9db2587cf44fedb2f3700b2075a5e8e39a562584862c4b71f62","0x22","0x23","0x2a594b95e3522276fe0ac7ac7a7e4ad8c47eaa6223bc0fd6991aa683b7ee495","0x24","0x800000000000000700000000000000000000000000000004","0x27","0x13d20f70b017632fd676250ec387876342924ff0d0d3c80e55961780f4e8f","0x28","0xb52d798ac3b06d3a3e8258ddc1bdee20db652b0228e807990c363822e0daf6","0x29","0x556e696e697469616c697a6564","0x800000000000000200000000000000000000000000000001","0x2a","0x248e8fae2f16a35027771ffd74d6a6f3c379424b55843563a18f566bba3d905","0x1166fe35572d4e7764dac0caf1fd7fc591901fd01156db2561a07b68ab8dca2","0x10e5fcd68658d0cf6ed280e34d0d0da9a510b7a6779230c9912806a2c939b9","0x2f3618711fa33f4e08a2dba9fddd490c8713ac801a5cbe24a84251bc6ba3e32","0x2d","0x90d0203c41ad646d024845257a6eceb2f8b59b29ce7420dd518053d2edeedc","0x53746f726167654261736541646472657373","0x18240364ded55c78de93050f62be2cc27407a3c8457feaf1e1f32aaf6cce2ca","0x1379ac0624b939ceb9dede92211d7db5ee174fe28be72245b0a1a2abd81c98f","0x68","0x2c68325127c36eb6d087614ee26f7224dba188a4019d340e22093a1b3ccaa79","0x35","0x753235365f616464204f766572666c6f77","0x12867ecd09c884a5cf1f6d9eb0193b4695ce3bb3b2d796a8367d0c371f59cb2","0x1c23f13a9cb6c4c7514861abd8e2b6d8ace824d3ebf38c2fafcd7914b17d485","0x36d10a19e25e7fb08e9fe0a0165350e891a6ee840ec5c4b1a4fb45c8302f498","0x28a1868d4e0a4c6ae678a74db4e55a60b628ba8668dc128cf0c8e418d0a7945","0x31","0xe9e783cb9c64c0fed68275c943c47db37d010f852f1b33b074f2a9d7d0ae90","0x436f6e747261637441646472657373","0x3693aea200ee3080885d21614d01b9532a8670f69e658a94addaadd72e9aca","0x3e","0x1cdd75fe5dffdfc383beba9a6aaf1254407dc2e15a81020bde7100f88354396","0x312b56c05a7965066ddbda31c016d8d05afc305071c0ca3cdc2192c3c2f1f0f","0x800000000000000300000000000000000000000000000004","0x13de9ef87a32da16bca1b5fd2f360d90cf89cec118638d426984e3056c4eb79","0x42","0x1ff2f602e42168014d405a94f75e8a93d640751d71d16311266e140d8b0a210","0x4163636f756e742e657865637574655f66726f6d5f6f757473696465","0x2c4be14f60c29d8dedd01a1091ea8c1572e3277b511cfff4179da99e219457e","0x2f6991575fd03d6908faab6890c04ca2a1756e6b467f57d4b085be8cc128475","0x28978a9a1b7b50e1bf71d1e2c04143c3b20ea0c3ec0a79abcb0909801c9b41c","0x2fe1537d7dffde0dbd94fc224408520c88ff07f0ccba33d6d1c9c547e1bd8f2","0x322190232f5f6591b78bfbe0182656eb01ef96a6ed2b904047de7d6fad0c90d","0x1dae0ba1f47a39607dc385c9306a152068b0f0e7941e4f856da9b44330722c9","0x4a","0x4b","0x6163636570745f6f776e657273686970","0x31448060506164e4d1df7635613bacfbea8af9c3dc85ea9a55935292a4acddc","0x145cc613954179acf89d43c94ed0e091828cbddcca83f5b408785785036d36d","0x4163636f756e743a20696e76616c6964207369676e6174757265","0x2ce4352eafa6073ab4ecf9445ae96214f99c2c33a29c01fcae68ba501d10e2c","0x51","0x800000000000000000000000000000000000000000000003","0x5","0x1e","0x88","0xfeece2ea7edbbbebeeb5f270b77f64c680a68a089b794478dd9eca75e0196a","0x55","0x2487213a2e92e8c6a8727c551b670514a7796fa30e2e4c9ef4309fa53c3c313","0xe10436dd440ec0e91a376c8f5922871cb9d26d76791f5a524a453d58ec8224","0x57","0x1d22a352715557182110f4272323c78ad4a032db2b2092359e68c2edc398ca9","0x85c0b6cdd3c15d8bf27694f6ba2eed20fedd4eb7fab49b23a18cc35f559081","0x5b","0xc382373503abde657c3ccca6a76b7e2acc281948401e99fe3a7f4131f8ce99","0x5c","0x52657475726e6564206461746120746f6f2073686f7274","0x161ee0e6962e56453b5d68e09d1cabe5633858c1ba3a7e73fee8c70867eced0","0x28420862938116cb3bbdbedee07451ccc54d4e9412dbef71142ad1980a30941","0x800000000000000700000000000000000000000000000005","0x19d660b7a84da9b5feda72dd8f714d782174a917128a57a994ee62f8613ea58","0x66","0x62","0x1597b831feeb60c71f259624b79cf66995ea4f7e383403583674ab9c33b9cec","0x63","0x753634","0x3342418ef16b3e2799b906b1e4e89dbb9b111332dd44f72458ce44f9895b508","0x65","0x537461726b4e6574204d657373616765","0x753332","0x80000000000000070000000000000000000000000000000e","0x348a62b7a38c0673e61e888d83a3ac1bf334ee7361a8514593d3d9532ed8b39","0x64","0x69","0x6a","0xa36a0a15af8cf1727a3a4fd9137671f23256b1f42299af56605a6910c522ce","0x6b","0x10a4ad544c3e0608b1a9e1ff69b5fdc230bace25740547273d3877854c8b722","0x6d","0x1505fa398a0473bdb0c11dce14b51258e23a4ccc030dc161b0fe35a628be8d4","0x2fffb69a24c0eccf3220a0a3685e1cefee1b1f63c6dcbe4030d1d50aa7a7b42","0x3808c701a5d13e100ab11b6c02f91f752ecae7e420d21b56c90ec0a475cc7e5","0x71","0x72","0xe688ac0888a7171e23d265a0ea68699a0ab1f7192e9651213e940c13b80319","0x73","0x357f22cfa0a31436fa9d89042e9ee63e7cd722921741927f2de8c1800f046a5","0x1e684fd3bee72c3656723b0bc980cd029ea1e4143525a224e491b1b7f0b5be5","0x75","0xec030359b131634f53c1a00da47d242bafe0503babffe4c2a565326923b0bb","0x3f918d17e5ee77373b56385708f855659a07f75997f365cf87748628532a055","0x10f06f5f7d9cba9f4dd245c18c66831051d8a65c943e1ccbbf9ab67a8466b4a","0x224048cd60ccd9331a6c375c1ec779c23207c1428cfeaba1216b78dcbaf9fa6","0x79","0x24f4f83594ca52de2cc9c856795a45de15d308dc8ffa4b0336678082e984bf1","0x33ba06960489795a4baef93514840dee302d6e5a774e8a68e12863e7d96e69c","0x29b4fe3b27d482aef4e4e11b74c3f0c20d993751b35bd000ff4274661a5ddf5","0x7c","0x3644662eecca2921eb8b242bd7c4f3ad4207505df8331924bb1bac2e8d19277","0x1f5d91ca543c7f9a0585a1c8beffc7a207d4af73ee640223a154b1da196a40d","0x7f","0x4163636f756e743a20696e76616c69642074782076657273696f6e","0x4163636f756e743a20696e76616c69642063616c6c6572","0x436c61737348617368","0x142ea2d2fd5397fde7c79b95d51ea4a79991de55600cb7c1e6148f4a627dbc0","0x84","0x358f4bf88951260abbc2ca3e111e2e32432b563fa321326f0a408b880755514","0x85","0xb64bb1ff65072c9cd6f20f94f06ce84f61e55eba99b89d4d67a2a7f8615a55","0x4c","0x3b","0x3a","0x86","0x800000000000000700000000000000000000000000000006","0x7d4d99e9ed8d285b5c61b493cedb63976bc3d9da867933d829f49ce838b5e7","0x2ca39cde64b91db1514d78c135ee79d71b3b57fffee52f1a3ef96618a34d8c8","0x89","0x1d1144bb2138366ff28d8e9ab57456b1d332ac42196230c3a602003c89872","0x2dffa838011e0b627cdad61326896ada87f6b5bf60fa68e2bb50656932e6ea9","0x800000000000000f00000000000000000000000000000003","0x8c","0x3c58de1ee81e91d39635d2f1ee2daea1adf435145c690c5c91df4a39a8d4cba","0x8d","0x2ceccef7f994940b3962a6c67e0ba4fcd37df7d131417c604f91e03caecc1cd","0x19d0e9bcb2051b2b662e3c3f558229b2668349da36f943c58e066d85480b0f2","0xa73d418ac7a1a889c0360f63df8d2494cebb6c8a4391fc80e90a68623050e","0x535243393a20696e76616c6964207369676e6174757265","0x56414c4944","0x1719cdf9193788d2c3beddfb44824598b3822f2e991e4557d09b32b1498f912","0x800000000000000300000000000000000000000000000002","0x2bcddf47e99bd2b365b672ce4ab3c5daf69bca568e14d0c1ccc9cee29ffaf43","0x95","0x535243393a206475706c696361746564206e6f6e6365","0x2b98c72c5b89ba195a1ad0f778d803d6382f14bb80ae3e39b8b70ea15a0be26","0x2abef7cfe9b2c32ad1733cb05023dd8487902f86244803ea3048a716c911368","0x535243393a206e6f77203e3d20657865637574655f6265666f7265","0x535243393a206e6f77203c3d20657865637574655f6166746572","0x1ee471fea880cdb75aff7b143b1653e4803b9dca47f4fcdd349d11fec9d7a16","0x9c","0x535243393a20696e76616c69642063616c6c6572","0x414e595f43414c4c4552","0x23517339cb5485fc98821b1350ed3163e438d9c223d74b37eb9e6bf6420c31d","0xa1","0x7533325f737562204f766572666c6f77","0x39a088813bcc109470bd475058810a7465bd632650a449e0ab3aee56f2e4e69","0x496e646578206f7574206f6620626f756e6473","0x15d2484e6e5b29395abc6df869ac24c074f0055e1be4e82c0455acc48146199","0x28f8d296e28032baef1f420f78ea9d933102ba47a50b1c5f80fc8a3a1041da","0xa7","0xa8","0x18508a22cd4cf1437b721f596cd2277fc0a5e4dcd247b107ef2ef5fd2752cf7","0xaa","0x8416421239ce8805ed9d27e6ddae62a97ab5d01883bb8f5246b4742a44b429","0xab","0x29d7d57c04a880978e7b3689f6218e507f3be17588744b58dc17762447ad0e7","0x101dc0399934cc08fa0d6f6f2daead4e4a38cabeea1c743e1fc28d2d6e58e99","0x436c61737320686173682063616e6e6f74206265207a65726f","0x4163636f756e743a20756e617574686f72697a6564","0x3e1934b18d91949ab9afdbdd1866a30ccca06c2b1e6581582c6b27f8b4f6555","0xb1","0x3c653a5f146791513de622e115df27073749019c83bd3b7168008a0bfa22488","0xb3","0x53e17f5a47859cec9ab24878fd6d5f3c47a26841bd13b1d569bd892f6a3fa4","0xb4","0x12f783394b7b346238d653496d8858dc849510195e4f229739612c9b6834e0b","0xb6","0x341d38eba34b7f63af136a2fa0264203bb537421424d8af22f13c0486c6bd62","0xb8","0x103a42e181f130718945bf95d02f3ba8a4b02e42a52022215a4b71dc9d7dc64","0xb9","0x156b6b29ca961a0da2cfe5b86b7d70df78ddc905131c6ded2cd9024ceb26b4e","0x3d37ad6eafb32512d2dd95a2917f6bf14858de22c27a1114392429f2e5c15d7","0xec8dfa2b6a2178fd9ae423cd62c36c006523b7bc6728e07b52750d12b52058","0xc1","0x144b3a8551772ae97e853e0256d084ba9e500f2004fa2262c744ca9b3c55b31","0xc2","0x3ab802bcce3a9ca953b0e1f31a5b29eb27a9b727c891e24300e1b5cc57387ba","0xc4","0x19b9ae4ba181a54f9e7af894a81b44a60aea4c9803939708d6cc212759ee94c","0x1354847dd909f9c299aa1275301f74fd0a986cacb09a04b548ae4619212e21","0x331fbcc00ddf7ec0a676f7b788dd9e43abcfad53b36ed0abca8fbd57e68fa8b","0xc9","0x2a778d8a8a303ea363d55515f3987293814bde039847782015cd22971c41c29","0xca","0x800000000000000f00000000000000000000000000000005","0xb8881489001c4d939e5545e69ea492baa9935afe2826b4a6cd5dedcba85258","0xcc","0x11243b58190433ec6d2c8d268d2750d4a42d499344a26ac461c4b52a9c0dca3","0xcd","0x86d08dd5b289dda0a0131dca2a8c44a34a8a60d3bac43c79144b5fc9fd7b6d","0xcf","0x377eb3e402cba4dd23c55c57f1319ebb7aa3636c0ebf68e1c442bafc5fc6323","0xd0","0x506f736569646f6e","0xd2","0x506564657273656e","0xd4","0xa853c166304d20fb0711becf2cbdf482dee3cac4e9717d040b7a7ab1df7eec","0xd6","0x1d49f7a4b277bf7b55a2664ce8cef5d6922b5ffb806b89644b9e0cdbbcac378","0xd8","0x13fdd7105045794a99550ae1c4ac13faa62610dfab62c16422bfcf5803baa6e","0xd9","0x4661696c656420746f20646573657269616c697a6520706172616d202333","0x4661696c656420746f20646573657269616c697a6520706172616d202332","0x17b6ecc31946835b0d9d92c2dd7a9c14f29af0371571ae74a1b228828b2242","0xdd","0x34f9bd7c6cb2dd4263175964ad75f1ff1461ddc332fbfb274e0fb2a5d7ab968","0xde","0x11c6d8087e00642489f92d2821ad6ebd6532ad1a3b6d12833da6d6810391511","0x10203be321c62a7bd4c060d69539c1fbe065baa9e253c74d2cc48be163e259","0x45634f70","0x74584e9f10ffb1a40aa5a3582e203f6758defc4a497d1a2d5a89f274a320e9","0xe4","0x25abf8fd76a01c7e2544d26b0a2e29212b05a36781e0330b46d878e43b307d1","0xe6","0x28f184fd9e4406cc4475e4faaa80e83b54a57026386ee7d5fc4fa8f347e327d","0xe8","0xc1f0cb41289e2f6a79051e9af1ead07112b46ff17a492a90b3944dc53a51c8","0xe9","0x53797374656d","0xeb","0x4661696c656420746f20646573657269616c697a6520706172616d202331","0x1e7cc030b6a62e51219c7055ff773a8dff8fb71637d893064207dc67ba74304","0xee","0x29c5453b6bc1a7e731a705f4dd1a70794b49b4b313928df5eeb3d90008ab2ce","0xef","0x4f7574206f6620676173","0x9931c641b913035ae674b400b61a51476d506bbe8bba2ff8a6272790aba9e6","0xf2","0x3d114dad69c5406a6909997d7018ea4e1f6b1274421f9e9845bf6b229c99317","0xf4","0x4275696c74696e436f737473","0x800000000000000f00000000000000000000000000000002","0xcc5e86243f861d2d64b08c35db21013e773ac5cf10097946fe0011304886d5","0xf7","0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473","0x11771f2d3e7dc3ed5afe7eae405dfd127619490dec57ceaa021ac8bc2b9b315","0x4761734275696c74696e","0x41b","0x7265766f6b655f61705f747261636b696e67","0x77697468647261775f676173","0x6272616e63685f616c69676e","0x73746f72655f74656d70","0x66756e6374696f6e5f63616c6c","0x656e756d5f6d61746368","0xfa","0x636f6e73745f61735f696d6d656469617465","0xf9","0xf8","0x64726f70","0x6765745f6275696c74696e5f636f737473","0xf6","0x77697468647261775f6761735f616c6c","0x12","0xfb","0x13","0xf5","0x14","0x736e617073686f745f74616b65","0x7374727563745f636f6e737472756374","0x656e756d5f696e6974","0xf3","0xf1","0x16","0xf0","0x7374727563745f6465636f6e737472756374","0xed","0x616c6c6f635f6c6f63616c","0x66696e616c697a655f6c6f63616c73","0x17","0xea","0x73746f72655f6c6f63616c","0xe7","0x1a","0xe5","0xec","0xe3","0xe2","0x1d","0xe0","0xdf","0x1f","0xdc","0xe1","0x20","0x21","0xdb","0xda","0x25","0x26","0xd7","0xd1","0x2b","0x2c","0xce","0xd5","0xd3","0x2e","0x636c6173735f686173685f7472795f66726f6d5f66656c74323532","0x61727261795f736e617073686f745f706f705f66726f6e74","0x2f","0x30","0x32","0x33","0x34","0xcb","0x61727261795f6e6577","0x36","0x64697361626c655f61705f747261636b696e67","0x37","0xc8","0x38","0x72656e616d65","0x39","0x647570","0x3c","0x3d","0x40","0x41","0x43","0x44","0x45","0x46","0x47","0x48","0xc7","0xc6","0x49","0xc5","0x4d","0xc3","0x4e","0x4f","0x50","0xc0","0x6a756d70","0xbf","0xbc","0x52","0xbb","0x53","0xba","0xbe","0xbd","0x54","0xb7","0x56","0x58","0x59","0xb5","0x626f6f6c5f6e6f745f696d706c","0x5a","0xb2","0xb0","0x5d","0xaf","0x7265706c6163655f636c6173735f73797363616c6c","0xae","0x5e","0x5f","0x61727261795f617070656e64","0xad","0x60","0x61","0xac","0x61727261795f6c656e","0x67","0xa6","0xa9","0x756e626f78","0x6c","0x6e","0x7533325f7472795f66726f6d5f66656c74323532","0x61727261795f736c696365","0xa5","0x7533325f6f766572666c6f77696e675f737562","0xa4","0xa3","0x6f","0x70","0x74","0x21adb5788e32c84f69a1863d85ef9394b7bf761a0ce1190f826984e5075c371","0x76","0x77","0x78","0x9f","0x9e","0x7a","0x9d","0x7b","0x9b","0x9a","0x7d","0x98","0x7e","0x97","0x80","0x81","0x96","0x94","0x82","0x93","0x656e61626c655f61705f747261636b696e67","0x92","0x83","0xa0","0xa2","0x90","0x87","0x8f","0x8a","0x8e","0x8b","0x636f6e74726163745f616464726573735f746f5f66656c74323532","0x91","0x66656c743235325f69735f7a65726f","0x66656c743235325f737562","0x7533325f746f5f66656c74323532","0x99","0x7536345f7472795f66726f6d5f66656c74323532","0x7536345f6f766572666c6f77696e675f737562","0x63616c6c5f636f6e74726163745f73797363616c6c","0x6765745f657865637574696f6e5f696e666f5f76325f73797363616c6c","0x636c6173735f686173685f746f5f66656c74323532","0x656d69745f6576656e745f73797363616c6c","0x68616465735f7065726d75746174696f6e","0xfd","0xfe","0xff","0x100","0x101","0x102","0x103","0x104","0x105","0x106","0x107","0x108","0x109","0x10a","0x10b","0x10c","0x10d","0x10e","0x10f","0x66656c743235325f616464","0x110","0x111","0x112","0x113","0x114","0x115","0x116","0x75313238735f66726f6d5f66656c74323532","0x117","0x118","0x119","0x7533325f6571","0x11a","0x11b","0x11c","0x11d","0x11e","0x11f","0x120","0x121","0x122","0x123","0x124","0x125","0x73746f726167655f616464726573735f66726f6d5f62617365","0x73746f726167655f726561645f73797363616c6c","0x126","0x127","0x128","0x129","0xad292db4ff05a993c318438c1b6c8a8303266af2da151aa28ccece6726f1f1","0x12a","0x12b","0xb","0x12c","0xa","0x12d","0x73746f726167655f77726974655f73797363616c6c","0x12e","0x753132385f6f766572666c6f77696e675f737562","0x7","0x12f","0x753132385f6571","0x753132385f6f766572666c6f77696e675f616464","0x61727261795f676574","0x65635f706f696e745f66726f6d5f785f6e7a","0x65635f706f696e745f7472795f6e65775f6e7a","0x65635f73746174655f696e6974","0x65635f73746174655f6164645f6d756c","0x65635f73746174655f7472795f66696e616c697a655f6e7a","0x130","0x4","0x65635f73746174655f616464","0x131","0x65635f6e6567","0x132","0x133","0x134","0x7536345f746f5f66656c74323532","0x135","0x65635f706f696e745f756e77726170","0x756e777261705f6e6f6e5f7a65726f","0x65635f706f696e745f69735f7a65726f","0x706564657273656e","0x626f6f6c5f746f5f66656c74323532","0x1d08","0xffffffffffffffff","0xc","0x16e","0x166","0x154","0x14b","0x139","0x143","0x15e","0x178","0x212","0x1ff","0x1f6","0x1e3","0x1d9","0x1c6","0x1be","0x1d1","0x1ee","0x20a","0x21d","0x2b7","0x2a4","0x29b","0x288","0x27e","0x26b","0x263","0x276","0x293","0x2af","0x2c2","0x330","0x31e","0x315","0x303","0x2fb","0x30d","0x328","0x33a","0x3dd","0x3cb","0x3b8","0x3a4","0x399","0x385","0x37d","0x391","0x3b0","0x3c3","0x3d5","0x3e7","0x437","0x430","0x420","0x419","0x429","0x441","0x4d6","0x4c3","0x4b9","0x4a5","0x49a","0x486","0x47d","0x491","0x4b0","0x4cd","0x4e0","0x531","0x52a","0x51a","0x513","0x523","0x53b","0x5d0","0x5bd","0x5b3","0x59f","0x594","0x580","0x577","0x58b","0x5aa","0x5c7","0x5da","0x649","0x637","0x62e","0x61c","0x614","0x626","0x641","0x653","0x725","0x719","0x703","0x6f6","0x6df","0x6d1","0x6ba","0x6b1","0x6a8","0x6c8","0x6ed","0x710","0x732","0x7a1","0x78f","0x786","0x774","0x76c","0x77e","0x799","0x7ab","0x812","0x800","0x7f7","0x7e5","0x7dd","0x7ef","0x80a","0x81c","0x836","0x82f","0x845","0x856","0x85e","0x889","0x880","0x8b0","0x8ea","0x8ff","0x97b","0x974","0x96d","0x965","0x95f","0x998","0x9be","0x9d7","0x9db","0xa48","0xa3c","0xa30","0xa24","0xa1a","0xa0e","0xa6d","0xaa8","0xa9d","0xae0","0xad9","0xb0f","0xaf8","0xafd","0xb07","0xb21","0xb26","0xb2f","0xb79","0xb6f","0xb67","0x136","0xb5d","0x137","0x138","0x13a","0x13b","0x13c","0x13d","0x13e","0x13f","0x140","0x141","0xbcc","0x142","0x144","0xbc2","0x145","0xbbb","0x146","0x147","0x148","0x149","0x14a","0x14c","0x14d","0xc19","0xc0f","0xc05","0x14e","0x14f","0x150","0x151","0x152","0x153","0x155","0xc53","0x156","0x157","0x158","0x159","0xc62","0x15a","0xc6b","0x15b","0x15c","0xc7a","0x15d","0xc7e","0x15f","0x160","0x161","0x162","0x163","0x164","0x165","0x167","0x168","0xcb8","0x169","0xcb1","0x16a","0x16b","0x16c","0xcca","0x16d","0x16f","0xcfb","0xcf5","0xced","0x170","0x171","0x172","0x173","0x174","0x175","0x176","0x177","0x179","0x17a","0x17b","0x17c","0x17d","0x17e","0x17f","0xd1f","0xd36","0xec8","0x180","0xeb2","0x181","0x182","0xe9c","0x183","0x184","0x185","0x186","0x187","0xe85","0x188","0xe6f","0x189","0x18a","0x18b","0x18c","0x18d","0x18e","0xe59","0x18f","0xe43","0x190","0xe2e","0xe19","0x191","0x192","0x193","0xe0b","0x194","0x195","0x196","0xdfe","0x197","0x198","0x199","0x19a","0xdf3","0x19b","0x19c","0xdba","0xdc0","0x19d","0xde7","0x19e","0x19f","0xddd","0x1a0","0x1a1","0x1a2","0x1a3","0x1a4","0x1a5","0x1a6","0x1a7","0x1a8","0x1a9","0x1aa","0x1ab","0x1ac","0x1ad","0xf01","0x1ae","0x1af","0x1b0","0x1b1","0x1b2","0x1b3","0x1b4","0x1b5","0x1b6","0x1b7","0xf21","0x1b8","0x1b9","0x1ba","0x1bb","0x1bc","0x1bd","0xf41","0x1bf","0x1c0","0x1c1","0x1c2","0x1c3","0xf5d","0x1c4","0x1c5","0x1c7","0x1c8","0x1c9","0x1ca","0x1cb","0x1cc","0x1cd","0xf76","0x1ce","0x1cf","0x1d0","0xf92","0x1d2","0x1d3","0x1d4","0x1d5","0x1d6","0xfaa","0x1d7","0x1d8","0xfbc","0x1da","0xff2","0xfea","0xfe3","0xfda","0x1db","0x1dc","0x1dd","0x1de","0x1df","0x1e0","0x1e1","0x1e2","0x1041","0x1e4","0x1e5","0x1039","0x1e6","0x1031","0x1e7","0x1029","0x1e8","0x1e9","0x1ea","0x1eb","0x1ec","0x1ed","0x1056","0x1ef","0x105b","0x1f0","0x1f1","0x1064","0x1f2","0x1f3","0x1f4","0x1f5","0x1f7","0x1f8","0x1f9","0x1fa","0x1fb","0x10a2","0x1096","0x109a","0x1fc","0x1fd","0x1fe","0x200","0x201","0x202","0x203","0x204","0x205","0x206","0x207","0x10d4","0x208","0x209","0x10db","0x20b","0x20c","0x113d","0x20d","0x20e","0x20f","0x210","0x211","0x213","0x1131","0x214","0x1125","0x215","0x216","0x217","0x111b","0x218","0x219","0x117c","0x21a","0x21b","0x21c","0x1190","0x21e","0x21f","0x220","0x221","0x11b2","0x222","0x223","0x224","0x225","0x226","0x227","0x228","0x229","0x22a","0x11be","0x22b","0x22c","0x11c2","0x22d","0x22e","0x22f","0x230","0x231","0x232","0x233","0x234","0x235","0x236","0x237","0x238","0x239","0x23a","0x23b","0x1231","0x23c","0x23d","0x23e","0x23f","0x240","0x241","0x242","0x243","0x244","0x245","0x246","0x247","0x248","0x249","0x24a","0x24b","0x24c","0x24d","0x1228","0x24e","0x24f","0x250","0x251","0x124f","0x252","0x253","0x254","0x255","0x256","0x257","0x12a6","0x258","0x259","0x25a","0x1276","0x25b","0x25c","0x127b","0x25d","0x25e","0x129e","0x128c","0x25f","0x1296","0x260","0x261","0x262","0x264","0x265","0x266","0x12c4","0x267","0x268","0x269","0x26a","0x26c","0x26d","0x26e","0x26f","0x270","0x271","0x12e2","0x272","0x273","0x274","0x1304","0x275","0x277","0x278","0x279","0x1324","0x27a","0x27b","0x27c","0x27d","0x1336","0x27f","0x133b","0x280","0x281","0x282","0x283","0x284","0x285","0x286","0x287","0x289","0x28a","0x28b","0x28c","0x28d","0x1369","0x136e","0x1378","0x28e","0x13cd","0x28f","0x290","0x291","0x292","0x13ad","0x294","0x295","0x296","0x13be","0x297","0x298","0x13c5","0x299","0x29a","0x13f2","0x13e8","0x143e","0x1436","0x29c","0x142e","0x1463","0x29d","0x29e","0x29f","0x2a0","0x2a1","0x2a2","0x2a3","0x2a5","0x2a6","0x2a7","0x2a8","0x2a9","0x2aa","0x2ab","0x2ac","0x2ad","0x14c8","0x14bf","0x2ae","0x14e7","0x2b0","0x2b1","0x2b2","0x2b3","0x2b4","0x1508","0x2b5","0x2b6","0x2b8","0x2b9","0x2ba","0x1519","0x2bb","0x2bc","0x2bd","0x2be","0x2bf","0x2c0","0x2c1","0x2c3","0x2c4","0x2c5","0x2c6","0x2c7","0x2c8","0x2c9","0x2ca","0x2cb","0x2cc","0x2cd","0x2ce","0x156d","0x2cf","0x2d0","0x2d1","0x2d2","0x2d3","0x2d4","0x2d5","0x2d6","0x2d7","0x2d8","0x2d9","0x2da","0x2db","0x2dc","0x2dd","0x2de","0x15f5","0x2df","0x2e0","0x2e1","0x2e2","0x2e3","0x15ed","0x2e4","0x160c","0x2e5","0x2e6","0x1635","0x162b","0x2e7","0x2e8","0x2e9","0x2ea","0x165b","0x2eb","0x2ec","0x1693","0x2ed","0x2ee","0x1689","0x2ef","0x1680","0x2f0","0x2f1","0x2f2","0x2f3","0x2f4","0x2f5","0x2f6","0x2f7","0x2f8","0x2f9","0x2fa","0x2fc","0x2fd","0x2fe","0x2ff","0x300","0x301","0x302","0x304","0x305","0x306","0x307","0x308","0x16ea","0x309","0x16f7","0x30a","0x30b","0x30c","0x30e","0x30f","0x310","0x1713","0x1719","0x171f","0x311","0x312","0x313","0x314","0x316","0x317","0x318","0x319","0x31a","0x31b","0x1741","0x31c","0x31d","0x31f","0x174a","0x320","0x321","0x322","0x1767","0x323","0x324","0x178d","0x325","0x1784","0x326","0x327","0x329","0x32a","0x32b","0x32c","0x32d","0x32e","0x32f","0x331","0x332","0x333","0x334","0x335","0x336","0x337","0x338","0x339","0x33b","0x33c","0x33d","0x33e","0x33f","0x340","0x341","0x342","0x343","0x344","0x345","0x346","0x347","0x348","0x349","0x34a","0x34b","0x34c","0x34d","0x34e","0x34f","0x350","0x351","0x352","0x353","0x354","0x355","0x1853","0x356","0x1849","0x357","0x1840","0x358","0x359","0x35a","0x35b","0x35c","0x35d","0x35e","0x35f","0x360","0x361","0x1880","0x362","0x363","0x364","0x365","0x366","0x367","0x189e","0x18a3","0x368","0x369","0x36a","0x36b","0x36c","0x36d","0x36e","0x36f","0x370","0x371","0x372","0x373","0x374","0x18eb","0x375","0x376","0x377","0x378","0x379","0x37a","0x37b","0x37c","0x37e","0x1909","0x37f","0x380","0x381","0x382","0x383","0x384","0x1931","0x386","0x192a","0x387","0x388","0x1948","0x389","0x38a","0x38b","0x38c","0x1958","0x38d","0x38e","0x196c","0x38f","0x390","0x392","0x1a77","0x393","0x1a69","0x1a5b","0x394","0x395","0x1a4e","0x1a40","0x396","0x397","0x398","0x1a31","0x39a","0x39b","0x39c","0x39d","0x39e","0x39f","0x1a22","0x3a0","0x1a16","0x3a1","0x3a2","0x19e0","0x19d3","0x19e3","0x3a3","0x3a5","0x3a6","0x1a0f","0x3a7","0x1a04","0x19fa","0x1a07","0x3a8","0x3a9","0x3aa","0x3ab","0x3ac","0x3ad","0x3ae","0x1a98","0x3af","0x3b1","0x3b2","0x1aa4","0x3b3","0x3b4","0x3b5","0x3b6","0x3b7","0x3b9","0x3ba","0x3bb","0x3bc","0x3bd","0x3be","0x3bf","0x1ad4","0x3c0","0x3c1","0x3c2","0x3c4","0x1ae0","0x3c5","0x1afc","0x3c6","0x3c7","0x1b38","0x3c8","0x1ba5","0x3c9","0x1b95","0x1b82","0x3ca","0x1b6d","0x1b7b","0x3cc","0x3cd","0x3ce","0x3cf","0x3d0","0x3d1","0x3d2","0x1bbc","0x3d3","0x3d4","0x1bc1","0x3d6","0x1bca","0x3d7","0x3d8","0x3d9","0x3da","0x3db","0x3dc","0x3de","0x3df","0x1be8","0x3e0","0x3e1","0x3e2","0x3e3","0x3e4","0x1c07","0x3e5","0x3e6","0x1c0b","0x3e8","0x3e9","0x3ea","0x1c17","0x3eb","0x1c26","0x1c2c","0x1c33","0x3ec","0x3ed","0x3ee","0x1c3d","0x3ef","0x1c4d","0x3f0","0x3f1","0x3f2","0x3f3","0x3f4","0x1c5e","0x3f5","0x3f6","0x3f7","0x3f8","0x1c69","0x3f9","0x3fa","0x3fb","0x3fc","0x1c7c","0x3fd","0x3fe","0x3ff","0x400","0x401","0x402","0x403","0x1c97","0x404","0x405","0x406","0x407","0x1ca1","0x408","0x409","0x40a","0x40b","0x40c","0x40d","0x40e","0x40f","0x410","0x411","0x412","0x1ce5","0x413","0x414","0x415","0x416","0x417","0x418","0x1cf9","0x41a","0x448","0x4e9","0x542","0x5e3","0x65b","0x73b","0x7b3","0x824","0x83c","0x84b","0x862","0x868","0x894","0x897","0x89a","0x8a2","0x8b8","0x8ba","0x8c2","0x8d2","0x8da","0x8df","0x8f1","0x907","0x910","0x919","0x921","0x92b","0x931","0x982","0x9a2","0x9a8","0x9c8","0x9d0","0x9e0","0xa54","0xa56","0xa77","0xa7f","0xab3","0xab6","0xab8","0xaba","0xabc","0xabe","0xae6","0xb17","0xb1a","0xb36","0xb39","0xb88","0xb8d","0xb94","0xb97","0xb9e","0xba1","0xbdb","0xbe2","0xbe5","0xc28","0xc30","0xc38","0xc3f","0xc48","0xc4d","0xc59","0xc70","0xc74","0xc84","0xc86","0xc8f","0xc94","0xc9d","0xca6","0xcbe","0xcd0","0xd03","0xd05","0xede","0xee3","0xf09","0xf2b","0xf4a","0xf63","0xf7c","0xf88","0xf8c","0xf98","0xfb1","0xfc2","0xff9","0xffc","0xfff","0x1049","0x104c","0x104f","0x106b","0x107b","0x1082","0x10aa","0x10b2","0x10b9","0x10c2","0x10cd","0x10e3","0x1149","0x1154","0x115d","0x1162","0x1167","0x118a","0x1196","0x1199","0x119c","0x11a1","0x11b8","0x11c6","0x11c8","0x11ca","0x11d6","0x11e3","0x123e","0x1255","0x12ae","0x12cb","0x12cd","0x12cf","0x12db","0x12e7","0x12e9","0x12eb","0x130d","0x132d","0x132f","0x1340","0x1343","0x134a","0x134d","0x134f","0x137f","0x1386","0x13d4","0x13d7","0x1400","0x1447","0x144a","0x146d","0x146f","0x1471","0x147f","0x1482","0x1484","0x1486","0x1494","0x14d5","0x14ee","0x14f0","0x14f2","0x14f5","0x150e","0x1511","0x1520","0x1526","0x152b","0x1540","0x1554","0x1557","0x155a","0x1573","0x1576","0x157e","0x1583","0x158e","0x1593","0x15fe","0x1618","0x1643","0x1645","0x1655","0x1661","0x1664","0x1667","0x16a2","0x16a5","0x16ab","0x16b0","0x16c5","0x16c7","0x16c9","0x16d8","0x16f1","0x16fd","0x1700","0x170a","0x170c","0x1725","0x1729","0x1731","0x1736","0x174f","0x1796","0x1799","0x179f","0x17a7","0x17b4","0x17b6","0x17bc","0x17c4","0x17d1","0x17d4","0x17d7","0x17dd","0x17e0","0x17e2","0x17e6","0x17eb","0x17f1","0x17fe","0x180b","0x1810","0x181c","0x1823","0x1863","0x1868","0x1887","0x188a","0x188d","0x1890","0x1895","0x18a8","0x18ab","0x18af","0x18b4","0x18ba","0x18c7","0x18cd","0x18da","0x18dd","0x18e0","0x18f5","0x18f6","0x18f7","0x1902","0x190e","0x193c","0x1950","0x195d","0x1971","0x1a85","0x1a8a","0x1a90","0x1a9e","0x1aaa","0x1aaf","0x1ab5","0x1ab8","0x1abf","0x1ac6","0x1ada","0x1ae6","0x1aef","0x1b08","0x1b40","0x1b47","0x1bb5","0x1bd1","0x1bd8","0x1bdf","0x1bee","0x1bf4","0x1bfa","0x1c01","0x1c0f","0x1c1c","0x1c46","0x1c58","0x1c64","0x1c6e","0x1c70","0x1c73","0x1c77","0x1c81","0x1c87","0x1c8a","0x1ca5","0x1ca9","0x1cb0","0x1cb4","0x1cbb","0x1cc0","0x1cc3","0x1ccc","0x1ccf","0x1cd2","0x1cd5","0x1cdd","0x1cec","0x1cf0","0x1cf3","0x1cfd","0x1d03","0x1d06","0x107b5","0x180600a0180280f01c0340600a0160280480800e0180280400600800800","0x7017018058028150280400281000a04c0700d0240280880500e04002804","0x700d0180280e80a03806c0380600a0100181a00a0640281801c0340900f","0x902400a08c0280f01c0880600600a0841001f01c05c0601a00a0780280f","0x28150540a40380600a0100182800e0180280400609c0282600a09407022","0x702e018018028150280b40380600a0100181a00a0b00282b01c03409007","0x700d0240400281000a0c80700d01809c0283100a0c0070220240bc0280f","0x28040060380381000a0100183500a0d00280f01c0340601a00a06802833","0x702e018090028150720e00380600a0100183700e018028040060d803806","0x703f01809c0283e00a0f4070220240180283c00a03c0700d0180ec0283a","0x604200a1040702e01810002815072058028210400180280600a0180280f","0x284901c0b80602400a0d40284801c0880904700a1182284400a10c0702e","0x2702400a0180284d01c0880904c00a12c0702e0181280380600a01001806","0x702e0180140385100a0100185000e018028040061300284f01c0b80600a","0x380600a0100180700e1440280400609c0285300a148070220240180280f","0x285801c0b80605701c0540905601c0540901a00a0d00285501c03409054","0x700d0240f00280600a1740285c01c0fc0600a0b61300285a01c0b806059","0x901a00a0900284700a03c0706001817c0380600a0100181a00a0580285e","0x280400601c0380600a0100186300e0180280400609c0286200a18407022","0x606700e018028040061300286601c0b80605900a1940702e01819003806","0x28040061b00286b00a1a80700d0240180286901c0b80600600a1a00702e","0x607000e018028040061640286f01c0b80605900a1b80702e0181b403806","0x187500a1d00283400a1cc0182700a1c80287101c0880903400a03c0702e","0x702e0180900287800a1dc070220241d8028150281d00287500a0d002873","0x28210401300287d01c0b80607c01c05c0607b00a1e80702e01801802879","0x280400609c0288000a1fc070220240680287e00a11c0280f01c1800603c","0x288501c2100608300e018028040060900283c00a2080702202420403806","0x4508900a2200702e01821c02815072218028210400180280600a01802806","0x708f0180284708d00e018028040060400288c00a0180288b01c0fc0600a","0x283c00a0400289100a0180280600a0180283c00a0400285d00a01802890","0x289500a2500702202424c0280f01c0b80609200a0540a03c00a14402851","0x289801c0b80609700a1182283500a0180280600a0180289601c21006027","0x28150281740288c00a2300289a01c0fc0608c00a2300289901c0340904c","0x600600a27c0702e01809c0289e00a274070220242700280f01c0b80609b","0x600600a2900702e01828c0380600a010018a201c05c060a100a2800702e","0x60aa00a2a40702e018018028a801c0b8060a701c05c060a600a2940702e","0x18ae00e01802804006068028ad00a2b00700d0240f0028150282ac07017","0x28b301c0b8090b200a2c40702e0180285800600a054150af00e01802804","0x289300a270028bb01c2e8060b900a2e0028b700a2d8028b501c210090b4","0x280400609c028bd00a2f0070220241e00280f01c0b80600600a1740285d","0x28c300a30807022024068028c100a03c070c00182fc070170182f803806","0x380600a010018c601c05c060a100a3140702e0183100380600a01001827","0x70220240900280f01c3280605d00a3240702e0183200380600a010018c7","0x18cf01c05c0607b00a3380702e0183340380600a0100182700a330028cb","0x28d201c0880908c00a03c0702e0183440380600a010018d000e01802804","0x70ba01814c0284608a3540380600a010018d400e0180280400609c028d3","0x90d800e0180280400635c0284608a1100288c00a2300280600a174028d6","0x1c81a00a0f0028db01c034090da00e018028040061440285100a3640700d","0x601a00a058028df01c034090de00a118228dd00a3700702e0181f802815","0x282f00a38c0700d02409c028e200a384070220243800283c00a03c0700d","0x60e600e018028040063940380600a0100182400a068028e401c0880901a","0x280f01c300060e901c05c0602700a3a0028e701c0880905d00a03c0702e","0x70220241f8028ea00a03c0702201809c028ec00a3ac07022024068028ea","0x90f000a0f00280f01c0340601a00a110028ef01c0340902700a3b8028ed","0x285d00a3d00700d0240680288c00a3cc0700d02409c028f200a3c407022","0x600e00e018028040060140380600a0100188c00a1182285d00a1182281a","0x702e01809c028f800a3dc07022024068028f600a03c070c00183d407017","0x28fb01c0340900e00e1440280400609c028fa00a3e4070220241440280f","0x28fe00a03c070c00183f4070170180680280600a3f00700d02406802851","0x60fe00a3a8028c100a3d80290201c4040602700a400028ff01c0880901a","0x28d700a4180700d02409c0290500a410070220241f80290300a03c07022","0x284608a0088502700a4240290801c0880910700a0f00280f01c0340601a","0x902700a43c0290e01c0880903500a03c0702e0184340284608a0088610b","0x291300a448070220244440283c00a03c0700d0180680283c00a4400700d","0x601a00a0900291601c0880911500e018028040064500380600a01001827","0x280600a4680700d02409c0291900a4600702202445c0283c00a03c07022","0x282400a03c070220180088e02700a14c0291b01c0880900600a1182281a","0x292000a47c070220241f80280f01c3280602700a4780291d01c0880901a","0x292301c0880912200a0f00280f01c0880601a00a1000292101c08809027","0x702e0184a00701502449c0380600a0100192600a1182280224a09c02924","0x280f01c0b80612c00e0180280400609c0292b00a4a8070220244a40280f","0x292f01c0880901a00a40c0280f01c3000602700a4b80292d01c0880903c","0x280400609c0293400a4cc070220240680280f01c4c80600a26209c02930","0x293c01c4ec0713a01c4e49c00226e068028b200a4d80700d0244d403806","0xa080500a5001200600a4f49f80500a4f81180600a4f41e00500a4f007005","0xa280500a4f007144268014029432840140293e04e0180293d00c0140293c","0xa480600a4f45900500a4f09300500a4f0a400500a4f0a380600a4f407146","0x293d048014029430480140294c2960180293d260014029432940140293e","0x280729e0140394e29e0140293c01c01ca780500e5389700500a53416006","0x293e256014029532a40140293e2a20180293d2a00140294016401402943","0x293d01c5589300500a554aa00500a5001e00500a50c0d00500a50c94805","0x8180500a5301780600a4f49100500a4f89200500a54cac00500a4f8ab806","0x29532b40140293e24c014029590620180293d0800140293c20601402943","0xad80600a4f41200500a4f06e80500a4f03f00500a50c3f00500a53090005","0x293c080014029432ba014029430760140293c23c014029532b80140293e","0x300500a50c0300500a5302980500a54caf80500a4f81a00600a4f4af005","0x293d00c014029592c20140293e2c00180293d00c0140295506a0180293d","0xb200500a500b180600a4f48b80500a4f88c80500a54cb100500a4f83a806","0x293d2d0014029400760180293d2ce0180293d2cc0180293d2ca01402943","0x8580500a4f08880500a4f88980500a54cb480500a4f81f00600a4f41e006","0x293e0840180293d21a0140293c0800180293d2d60180293d2d40180293d","0x2200600a4f41a80500a4f01a80500a50c1a80500a5308780500a54cb6005","0x293e212014029532da0140293e08e0180293d2160140295521a01402955","0x8580500a5648680500a564b780600a4f46b80500a4f0b700600a4f483805","0x293d1ae014029432e4014029432e20140294320a014029532e00140293e","0xd00500a5349f80500a4f00700727e0140394e01c5d0b980600a4f426006","0x1780500a50c1d80500a50c0300500a5d41e00500a54c0280727e0140394e","0x294d06a0140293e2ec0180293d00a01c1a80500e5380700706a0140394e","0xbb80600a4f4028072840140394e2840140293c01c01ca100500e5389a005","0x294c206014029532060140294d2f20180293d2f00180293d0b20180293d","0x9800500a5348000500a54cbd80500a4f82980600a4f4bd00600a4f47b005","0x6080500a50c7500500a50c7b00500a50ca500500a4f0070072940140394e","0xbe80600a4f41e00500a5340300500a5f07f00500a50c028072940140394e","0x293d01c5f8a900500a4f0028072a40140394e04e0140294d0460140294d","0x9100500e538c180600a4f40300500a608c080600a4f4c000500a4f8bf806","0x293d1700180293d2b00140293c01c01cac00500e5389200500a53402807","0xc300600a4f42880500a50c2880500a530c280600a4f46e80500a6105b806","0x293d05e0140293c30e0180293d02c0180293d1bc0140293c0ba0180293d","0x3100600a4f4028072c20140394e2c20140293c01c01cb080500e538c4006","0x293d2c40140293c01c01cb100500e5388c80500a5340280722e0140394e","0xc700600a4f4c680600a4f4c600600a4f4c580600a4f4c500600a4f4c4806","0x293d0a2014029840a20140293c078014029843200140294031e0140293e","0x7d00500a54cc900500a4f83600600a4f43580600a4f4a780500a4f8c8806","0x293c01c01cb480500e5388980500a534070072220140394e25c01402953","0x5b00600a4f4028072220140394e00a01cb480500e5389700500a50cb4805","0x293d32c0180293d32a0180293d1f0014029533280140293e3260180293d","0x2955118014029553340140294001c664cc00500a5001a80500a608cb806","0xce80500a4f8ce00600a4f42e80500a564cd80500a4f83900600a4f42e805","0x294d1e00140293e1e40140295333e0140293e33c0180293d11801402959","0xb680500a4f0070072da0140394e2120140294d01c01c8380500e5386b805","0x294300a01cb680500e5380280720e0140394e118014029430ba01402943","0x7700500a54cd180500a4f83c00600a4f4d100600a4f4d080500a50cd0005","0x293d00a01cb800500e538b800500a4f0070072e00140394e20a0140294d","0x7600500a54cd380500a4f8d300600a4f4d280600a4f43d80600a4f4d2006","0x7f00500a5347500500a5346080500a5347b00500a534071a81f001402943","0x293c0ba0140294c1d0014029530fc0180293d3540140293e3520180293d","0xd600600a4f45900500a5307400500a50cd580500a5004000600a4f42e805","0x394e35e0140293c01c01cd780500e538071ae1640140298435a01402940","0x394e3620180293d1680140293c1680140294d3600180293d00a01cd7805","0xd980500a4f0070073660140394e00c014029b22f60140293c00a01cbd805","0x394e3000140293c01c01cc000500e538d980500a4f8028073660140394e","0x295336c0140293e36a0180293d3680180293d02c0140297c00a01cc0005","0xac00500e5384480600a4f44380600a4f40b00500a4f07000500a4f871005","0x293d0a201402982078014029b71220180293d01c01c9100500e53802807","0xdc80500a4f86f00500a564dc00600a4f46f00500a5544300600a4f446006","0x8f00500a534ae00500a4f0028072b80140394e1bc014029430a20180293d","0x8b80500e5380300500a6ec4900600a4f4dd00500a50c070072b80140394e","0x293d3780180293d12a0180293d1260180293d00a01cb100500e53807007","0xc780500e538c780500a4f00700731e0140394e01c6f8de80600a4f44b806","0x70073840140394e01c7040300500a6dce000500a5000300500a6fc02807","0xc900500a4f0e200600a4f4e180500a500028073840140394e3840140293c","0x293d38c0180293d13c0180293d1380180293d1360180293d38a0180293d","0x293d00a01ccd80500e538cd80500a4f0070073360140394e01c71c50806","0x293d0840140293c0800140294c00a01cce80500e538ce80500a4f0e4006","0xcf80500a4f00700733e0140394e1e40140294d01c01c7800500e538e4806","0x29530a6014029551ae0140295500a01ccf80500e538028071e00140394e","0xe600500a5005300600a4f4e580500a500e500600a4f42e80500a6106b805","0x293d1180140293c118014029841a60140295339c0140293e39a0180293d","0xe980500a54ce900600a4f45500600a4f4e880500a500e800500a500e7806","0x295915a0180293d3aa014029403a80180293d00c014029840f60140293c","0xec00500a4f8eb80600a4f42980500a564eb00600a4f46b80500a5306b805","0x71dc3b6014029403b40180293d3b20140293c3b20140294d19801402953","0x70073460140394e1dc0140294d3bc0180293d0880140293c3ba01402940","0xf000500a50cef80500a50c2980500a50c028073460140394e3460140293c","0x293c3c2014029531680180293d1640180293d1d40140294c08801402943","0x293c01c01cb600500e5388780500a534f100600a4f45c80600a4f450805","0x293d3c60140294017a0180293d0ec0180293d00a01cb600500e538b6005","0xca00500e538ca00500a4f0f300600a4f46180500a50cf280500a4f8f2006","0x293c01c01cd380500e5387600500a534f300500a5006080600a4f402807","0x293c17a014029533c80140293e1860180293d00a01cd380500e538d3805","0x7400500a5344980500a50c4e00500a50c3b00500a54cf280600a4f43c005","0x71e70ba0140298200a01cd500500e538d500500a4f0070073540140394e","0x30073c40140394e3d00180293d3c20180293d35e0140293e3c60180293d","0x294301c7a4070072f60140394e2000140294d3ba0180293d3c40140293c","0x700736c0140394e1c40140294d01c01c7000500e5380b00500a534ef005","0x71ea02c014029b200a01cdb00500e538028071c00140394e36c0140293c","0x28072b40140394e3ae014029403b20180293d3b4014029403b60180293d","0xeb00500e5381e00500a5d46f00500a54c6f00500a534071eb2b40140293c","0x293d15a0140293c3ac0140293e00a01ceb00500e538eb00500a4f007007","0x1e00500a608028073720140394e3720140293c01c01cdc80500e53866006","0x394e0a60140294d3d80180293d3a60180293d3aa0180293d3b00180293d","0xe800600a4f4e880600a4f4028072be0140394e2be0140293c01c01caf805","0x293e1a60180293d1540140293c154014029431540140294c3a401402953","0x394e39c0180293d04e0140295301c01cc900500e5387d00500a534e1005","0x294314c0140294c39a014029533960180293d3980180293d00a01cc9005","0x3600500a4f03600500a5346b80600a4f4ef80600a4f45300500a4f053005","0x29533840180293d3860180293d394014029401820140294c3c00180293d","0xe300500a4f8dc80600a4f4e000600a4f40700733a0140394e01c7b4e4005","0x394e1a60140294d136014029531ba0180293d1380140293c13c01402953","0x700738a0140394e01c7b80280739c0140394e39c0140293c01c01ce7005","0xdd00600a4f4f600500a5346f00600a4f40280738a0140394e38a0140293c","0x293d1c40180293d3880140293c1c00180293d0f6014029430f60140294c","0xde00500a4f8d680600a4f4d780600a4f4d980600a4f44b80500a554db006","0x293c370014029401d00180293d3560180293d1260140293c12a01402953","0xda80500a5344880500a50c0800500a50c4900500a54cd500600a4f44b805","0x29591d80180293d1d40180293d36a0140293c36a0140294336a0140294c","0xd180600a4f4de80500a50c4b80500a50c7700600a4f4d380600a4f44b805","0x293d00a01cec00500e538ec00500a4f0070073b00140394e1980140294d","0x70073620140394e01c7bcda00500a500ec80500a54c7900600a4f478006","0xec80500a50cd800500a500cf80600a4f4028073620140394e3620140293c","0x293e3420180293d0fc0140293c08e0140293c3360180293d33a0180293d","0x293d01c01cad00500e5389000500a5342380500a50c4000500a54cd6005","0xd480500a4f0cc00600a4f45080500a50c5080500a530cd00600a4f4d0006","0x394e1860140294d34a014029533280180293d1f00180293d1ec0180293d","0x3580500a5347d00600a4f4028073ca0140394e3ca0140293c01c01cf2805","0x394e3480140293c01c01cd200500e538071f03240180293d0d60140293c","0x71f11640140298231e0180293d3c80140293c3200180293d00a01cd2005","0xf100500a5307f00600a4f45c80500a4f0070071720140394e3000180293d","0xd100500a500bd80600a4f49a00500a54c071f22000180293d3c401402943","0x298220a0180293d33c014029402060180293d0680140293c06801402984","0x1e00500a6ec1a00500a50c3900500a54cce00500a4f8b800600a4f407005","0x294c2160180293d2da0180293d2120180293d20e0180293d32e01402940","0xe780500a5348680600a4f4b900600a4f4cb00500a4f0cb00500a50ccb005","0x293d32a0140293c32a0140294332a0140294c21e0180293d2e20180293d","0x394e1f00140294d01c01cf100500e5388880600a4f4c980500a500b6006","0x394e13c0140294d0880140294d2d20180293d2260180293d01c01cca005","0xe280500a4f8b400600a4f40280738c0140394e38c0140293c01c01ce3005","0x293c3a60140294d0f60140294d322014029403d8014029432c80180293d","0xc700500a50cc700500a5308c80600a4f48b80600a4f43d80500a54ce9805","0x293d31a0140293c31a0140294331a0140294c2c40180293d31c0140293c","0xde00500e5384a80500a534c580500a500c600500a500b280600a4f4b0806","0x294d1240140293c124014029bb00a01cde00500e538de00500a4f007007","0x8f00600a4f4af00600a4f4da80500a608c500500a500af80600a4f44b805","0x2982310014029403120140293e2b80180293d088014029821ae01402984","0x9100600a4f44b80500a54cad00600a4f43100500a54c9000600a4f446005","0x1e00500a5f0d880500a4f8ac00600a4f41d80500a6109200600a4f4071f3","0x394e2a80180293d2ba0180293d30e0140293e24c0180293d08e0140294d","0xf400500a534070073580140394e1000140294d3580140293c00a01cd6005","0x293d142014029533c20140293c3c20140294d1420140294d3d001402943","0xa900600a4f4c300500a4f0c300500a50cc300500a5309580600a4f494806","0x293d34c0140294d2a00180293d30a0140293c30a0140294330a0140294c","0xf200500e5385e80500a534d200500a4f89800600a4f4a780600a4f497006","0x293e2940180293d0ec0140293c0ec014029bb00a01cf200500e53807007","0x5c00500a4f09a00600a4f45b80500a4f0a280600a4f45b00500a4f0f1005","0x293e0000180293d2900180293d27e0180293d2820180293d2840180293d","0x394e302014029403380140293c01c01cce00500e5383900500a534c1805","0x29402fa0140293e3ea0180293d3e80180293d2fe0140294000a01cce005","0x5500500a534bc80500a500ea00500a50cea00500a534fb00600a4f4bd005","0x293c2f0014029432f00140294c3ee0180293d3a40140293c3a40140294d","0xfc80600a4f42c80500a4f02c80500a608cb00500a54cfc00600a4f4bc005","0x293d39a0140293c39a0140294d14c0140294d39e014029433f40180293d","0xca80500a54cfe00600a4f4bb00500a4f0bb00500a50cbb00500a530fd806","0xe400500a534b980500a500e480500a50ce480500a5340280716c0140394e","0x293d3880140294d3fa0180293d1360140293c136014029bb3900140293c","0x10000600a4f4c680500a54cc680500a534ff80600a4f4c700500a608ff006","0x295908e0140295536a014029534060180293d4040180293d4020180293d","0x394e0c40140294d3120140293c00a01cc480500e5390200600a4f423805","0x293d2d60140293c2d60140294d40a0180293d2dc0140294301c01cc4805","0x29824100180293d08e0140295301c81c1f00500a54cb500500a4f903006","0xc300500a6090480600a4f4d480500a5341e00500a6c80b00500a54c0b005","0x293c34a0140294d34c0140294330a0140295330a0140294d4140180293d","0x293d2ce0140294016c0140293e01c01c5b00500e5390580600a4f4d2805","0x5c80500a4f85c00500a4f85b80500a4f90680600a4f4b300500a50106006","0x1a00500a54c1a00500a5343a80500a5000720f41c0180293d2c601402940","0x293d4220180293d0200140294c4200180293d0200140293c02001402984","0x28073060140394e3060140293c01c01cc180500e538b000500a54d09006","0x293c01c01cbe80500e5381880500a54cad80500a4f90a00600a4f407213","0x29402a20140293e42a0180293d2ae0140294000a01cbe80500e538be805","0x10c00600a4f40f00500a5310b80600a4f50b00600a4f4a480500a500a5805","0x29844360180293d4340180293d4320180293d0580140293c03c0140293c","0xa380500a4f90e80600a4f41600500a50c0f00500a50d0e00600a4f416005","0x294d43e0180293d2f00140298243c0180293d1540140295304c01402953","0x28072ee0140394e2ee0140293c01c01cbb80500e5380722101c880cb005","0x294d4460180293d2ec014029824440180293d14c014029532ee0140293e","0xc700500a5351200600a4f4e200500a54c2600500a4f02600500a534ca805","0x293c01c01cb780500e5391380600a4f40722644a0180293d31c01402953","0x2984452014029404500180293d2de0140293e00a01cb780500e538b7805","0xb500500e538a280500a50ca280500a610b580500a54d1500600a4f40b005","0x29532d60140294301c01cb500500e5381f00500a534b500500a4f002807","0x28074560140394e4560140293c01c01d1580500e5380b00500a5d422005","0xc380500a4f00700730e0140394e4580180293d0320140293c4560140293e","0x295301c8b4c300500a54cc300500a534d480500a54c0280730e0140394e","0x70074600140394e01c8bd1700600a4f45a00500a54c3600500a54c35805","0x723301c8c80800500a6091880600a4f4028074600140394e4600140293c","0x394e0620140294d00c01402a340e8014029402c00140293c2c00140294d","0x70072a20140394e01c8d4028072b60140394e2b60140293c01c01cad805","0x723901c8e00f00500a6080723701c8d8028072a20140394e2a20140293c","0x293d00e0140293c01c8f91e80600a4f40723c476014029534740180293d","0x394e00a0140294028e0140293c01c01ca380500e5381300500a5351f806","0x293d2ec014029532ec0140294d2f0014029532f00140294d00a01ca3805","0x293d4600140293e02c014029bb01c9092080600a4f42600500a54d20006","0x724801c91c0724600e01402a454760140293c4760140294d01c91121806","0x723002001cd307447601d2500700a0380380501c0392500501c03807249","0x700600a9280280600a8ec0723b00a92802a3b00a0180700e49401407007","0x724b00a6391480549401d158050200391581a0320192500500c8ec03874","0x701e00a9280281a00a8c00701a00a9280281a00a8ec0700e49401407007","0x2a4a00a0980f00745603813005494014130050340381300549401407019","0x120054960380724a00a0380380e04e014c382400a9280382300a8a407023","0xc806046038a3805494014a380504c038a38054940140701e01c03925005","0x12500501c0900700e4940140700701c544160072ec52ca480749401ca3874","0x114805292038038054940140380528e038a5805494014a580504e038ab805","0x294900a0180715b0620bc0324a00a8a4ab8072968eca580e45201525005","0xa880e01c9280280e00e0381a8050840d002a4a00e56c0282c01c52402a4a","0x71630ea01d250052c00141780e2c00152500501c55c0700e4940141a005","0xb3805494014b3005068038b3005494014b18052b60380724a00a1d402831","0x12500505e0141380e292015250052920140300e076015250052ce0141a80e","0x179494760141d8054940141d8052c0038188054940141880528e03817805","0x1250052920140300e0780152500506a0143a80e01c9280280e00e0381d831","0x1e0052c0038188054940141880528e038178054940141780504e038a4805","0x125005452014b180e01c9280280e00e0381e03105e5251d80507801525005","0x12500507c014b380e07c0152500507c0140d00e07c0152500501c5980700e","0x704000a60cb580549401cb5005076038160054940141600500c038b5005","0x280e00e0380704200a0f80704200a9280296b00a0f00700e49401407007","0xa880504e038160054940141600500c03822005494014200050ea0380724a","0x11d80508801525005088014b000e00e0152500500e014a380e2a201525005","0x282700a1d40700e494015148052c60380724a00a0380380e08801ca882c","0x294701c1d002a4a00a1d00282701c06402a4a00a0640280601c11c02a4a","0x700701c11c038740328ec0284700a9280284700a5800700700a92802807","0x12500501c1000700e4940140d0052d60380724a00a92c0296a01c03925005","0xb7805076038b7805494014b70052ce038b7005494014b7005034038b7005","0x717600a9280284c00a0f00700e4940140700701c5cc0299c09801525007","0xc80500c038bb805494014b98050ea0380724a00a0380380e01c5d80283e","0xb000e00e0152500500e014a380e0e8015250050e80141380e03201525005","0x30052d60380724a00a0380380e2ee01c3a019476014bb805494014bb805","0x2c8052ce0382c8054940142c8050340382c8054940140716601c03925005","0x28892f2015250072f00141d80e020015250050200140300e2f001525005","0x380e01c14c0283e01c14c02a4a00a5e40283c01c0392500501c01c0717a","0x1380e020015250050200140300e2fa015250052f40143a80e01c9280280e","0xbe805494014be8052c0038038054940140380528e0391800549401518005","0x700e01c0392500501c1100707400a9280280e084038be8074600411d805","0x12500501c01c0701a03201cac23002001d2500700a0380380501c03925005","0x280600a8ec0723000a92802a3000a09c0701000a9280281000a0180700e","0x2a4a00e92c0296e01c92d14a2b00c928028064600400304701c01802a4a","0x284c01c090118074940140f0052de0380724a00a0380380e04c014af81e","0x11805494014118054760380724a00a0380380e28e0148482700a92803824","0x2a4a00a52c0281a01c52c02a4a00a0380c80e292015250050460151800e","0x715700a63ca880549401c1600545203816005494014a594900e8ac0714b","0x282601c0bc02a4a00a0380f00e01c9280295100a92c0700e49401407007","0x380e06a0d0039a72b60c403a4a00e0bd14a2b00c08c0702f00a9280282f","0xbb80e2c61d403a4a00a5800297601c58002a4a00a038b980e01c9280280e","0x715b00a9280295b00a09c0703100a9280283100a0180700e4940143a805","0xb18072b60c43a17801c09c02a4a00a09c0285901c01c02a4a00a01c02947","0x383b00a5e80723b00a92802a3b0e801cbc80e0768ecb396647692802827","0x285301c5a802a4a00a038ab80e01c9280280e00e0381f00535e0f002a4a","0x700e494014200052fe0382104000e9280296b00a5f40716b00a9280283c","0x2a4a00a1080298101c59c02a4a00a59c0282701c59802a4a00a59802806","0xb7047088019250052d4108b39664762e00716a00a9280296a00a60c07042","0x296f00a6140700e4940140700701c130028dd2de015250072dc0145b80e","0x1880e0b25dc03a4a00a5cc0282f01c039250052ec014b500e2ec5cc03a4a","0x717800a9280285900a56c0705900a9280285900a6180700e494014bb805","0x2a4a00a1100280601c5e802a4a00a5e40283501c5e402a4a00a5e002834","0x297a00a5800723b00a92802a3b00a51c0704700a9280284700a09c07044","0x2a4a00a1300287501c0392500501c01c0717a47611c2223b00a5e802a4a","0x2a3b00a51c0704700a9280284700a09c0704400a9280284400a01807053","0x12500501c01c0705347611c2223b00a14c02a4a00a14c0296001c8ec02a4a","0x296700a09c0716600a9280296600a0180717d00a9280283e00a1d40700e","0xb323b00a5f402a4a00a5f40296001c8ec02a4a00a8ec0294701c59c02a4a","0x12500504e0140b00e01c9280287400a1740700e4940140700701c5f51d967","0x1250052fe014b380e2fe015250052fe0140d00e2fe0152500501c5980700e","0x70b800a660c180549401cc08050760381a0054940141a00500c038c0805","0x280e00e038070b700a0f8070b700a9280298300a0f00700e49401407007","0x1a80504e0381a0054940141a00500c038c28054940145c0050ea0380724a","0x11d80530a0152500530a014b000e00e0152500500e014a380e06a01525005","0x282700a0580700e4940143a0050ba0380724a00a0380380e30a01c1a834","0x11480504e039158054940151580500c038c3005494014ab8050ea0380724a","0x11d80530c0152500530c014b000e00e0152500500e014a380e45201525005","0x287400a1740700e494014a38052d40380724a00a0380380e30c01d14a2b","0x1250050ba0140d00e0ba0152500501c1000700e494014118052d60380724a","0x718800a5a0c380549401c0b0050760380b0054940142e8052ce0382e805","0x280e00e0380706200a0f80706200a9280298700a0f00700e49401407007","0x11480504e039158054940151580500c038c4805494014c40050ea0380724a","0x11d80531201525005312014b000e00e0152500500e014a380e45201525005","0x282600a1d40700e4940143a0050ba0380724a00a0380380e31201d14a2b","0x294701c8a402a4a00a8a40282701c8ac02a4a00a8ac0280601c62802a4a","0x700701c62803a294568ec0298a00a9280298a00a5800700700a92802807","0x12500501c5980700e494014030052d60380724a00a1d00285d01c03925005","0xc80500c038c6005494014c58052ce038c5805494014c5805034038c5805","0x700e4940140700701c6380294a31a015250073180141d80e03201525005","0xc70050ea0380724a00a0380380e01c6440283e01c64402a4a00a6340283c","0xa380e034015250050340141380e032015250050320140300e0d601525005","0x700e0d601c0d01947601435805494014358052c00380380549401403805","0x280e00e0380ca3000e9300807400e9280380701c01c0280e01c9280280e","0x11d805476038080054940140800504e0383a0054940143a00500c0380724a","0x125007452014b700e4528ac0d0064940151d8100e80182380e47601525005","0x2600e04609803a4a00a92c0296f01c0392500501c01c0701e00a93525805","0x2a4a00a09802a3b01c0392500501c01c0702700a9381200549401c11805","0x1250052920140d00e2920152500501c0640714700a9280282600a8c007026","0xa880549e0b002a4a00e52c02a2901c52c02a4a00a524a3807456038a4805","0x1300e2ae0152500501c0780700e494014160054960380724a00a0380380e","0x70342b601d2803105e01d250072ae8ac0d006046038ab805494014ab805","0x70752c001d2500506a014bb00e06a0152500501c5cc0700e49401407007","0x28054940140280530e038178054940141780500c0380724a00a58002977","0x1250050480142c80e00c0152500500c014a380e062015250050620141380e","0x286201c0f01d9672cc58c3a24a00a0903a8060620141781031003812005","0x716b00a9280280e2ae0380724a00a0380380e2d40151e83e00a9280383c","0x125005084014c580e08810803a4a00a1000298a01c10002a4a00a0f802989","0xb584400e6300716b00a9280296b00a60c0704400a9280284400a0680700e","0xad80e01c9280296e00a0c40716f2dc01d2500508e0141780e08e01525005","0xbb005494014b980506a038b98054940142600506803826005494014b7805","0x1250052ce0141380e2cc015250052cc014c380e2c6015250052c60140300e","0xb31630e8014bb005494014bb0052c00381d8054940141d80528e038b3805","0x296300a0180717700a9280296a00a1d40700e4940140700701c5d81d967","0x294701c59c02a4a00a59c0282701c59802a4a00a5980298701c58c02a4a","0x380e2ee0ecb39662c61d00297700a9280297700a5800703b00a9280283b","0x2c8050340382c8054940140716601c039250050480140b00e01c9280280e","0x1d80e2b6015250052b60140300e2f0015250050b2014b380e0b201525005","0x2a4a00a5e40283c01c0392500501c01c0717a00a944bc80549401cbc005","0x300e2fa015250052f40143a80e01c9280280e00e0380705300a0f807053","0x1a0054940141a00504e038028054940140280530e038ad805494014ad805","0x303400a56c3a0052fa015250052fa014b000e00c0152500500c014a380e","0xbf805494014a88050ea0380724a00a0900281601c0392500501c01c0717d","0x1250054560141380e00a0152500500a014c380e034015250050340140300e","0x281a0e8014bf805494014bf8052c0038030054940140300528e03915805","0x12500504c014b580e01c9280282700a5a80700e4940140700701c5fc0322b","0x125005302014b380e302015250053020140d00e3020152500501c1000700e","0x283c01c0392500501c01c070b700a9485c00549401cc1805076038c1805","0x12500516e0143a80e01c9280280e00e0380718500a0f80718500a928028b8","0x11580504e038028054940140280530e0380d0054940140d00500c038c3005","0x3a00530c0152500530c014b000e00c0152500500c014a380e45601525005","0x280601c17402a4a00a0780287501c0392500501c01c0718600c8ac0281a","0x722b00a92802a2b00a09c0700500a9280280500a61c0701a00a9280281a","0x2e8064560140d07400a17402a4a00a1740296001c01802a4a00a01802947","0xd00e02c0152500501c5980700e4940151d8052d60380724a00a0380380e","0x1180054940151800500c038c38054940140b0052ce0380b0054940140b005","0x298800a0f00700e4940140700701c18802a533100152500730e0141d80e","0xc5005494014310050ea0380724a00a0380380e01c6240283e01c62402a4a","0x1250050320141380e00a0152500500a014c380e460015250054600140300e","0x2a300e8014c5005494014c50052c0038030054940140300528e0380c805","0x724a00a0380700e01c9280280e088038080054940140718d01c62803019","0x11d80e01c9280280e00e0391581a00e9500ca3000e9280380701c01c0280e","0x2a4a00a8c00280601c92d148074940151d80531c0391d8054940151d805","0x11800500c0380724a00a0380380e03c0152a87400a92803a4b00a64407230","0x3580e452015250054520151d80e032015250050320141380e46001525005","0x28b601c0901182600c92802a290328c00306c01c1d002a4a00a1d008007","0xa4807494014138053260380724a00a0380380e28e0152b02700a92803824","0xa48054760380724a00a0380380e2a20152b82c00a9280394b00a6540714b","0x281a01c0bc02a4a00a0380c80e2ae015250052920151800e29201525005","0xad80549401c18805452038188054940141795700e8ac0702f00a9280282f","0x2a4a00a0380f00e01c9280295b00a92c0700e4940140700701c0d002a58","0x3a590ea58003a4a00e0d41182600c08c0703500a9280283500a09807035","0x3a4a00a59c0297601c59c02a4a00a038b980e01c9280280e00e038b3163","0x280500a61c0716000a9280296000a0180700e4940141d8052ee0381e03b","0x281a01c01802a4a00a0180294701c1d402a4a00a1d40282701c01402a4a","0x3a03c00c1d4029604606580702c00a9280282c00a60c0707400a92802874","0x380e08e0152d04400a9280384200a188070420805acb503e0e89280282c","0x298a01c5bc02a4a00a1100298901c5b802a4a00a038ab80e01c9280280e","0x717300a9280297300a0680700e49401426005316038b984c00e9280296f","0x1250052ec0141780e2ec015250052dc5cc0398c01c5b802a4a00a5b802983","0xbc005068038bc0054940142c8052b60380724a00a5dc0283101c164bb807","0xc380e07c0152500507c0140300e2f4015250052f20141a80e2f201525005","0x200054940142000528e038b5805494014b580504e038b5005494014b5005","0x700e4940140700701c5e82016b2d40f83a0052f4015250052f4014b000e","0x2a4a00a5a80298701c0f802a4a00a0f80280601c14c02a4a00a11c02875","0x285300a5800704000a9280284000a51c0716b00a9280296b00a09c0716a","0x1250050580141880e01c9280280e00e038298402d65a81f07400a14c02a4a","0x2a4a00a5f40281a01c5f402a4a00a038b300e01c9280287400a62c0700e","0x397f00a0ec0716300a9280296300a0180717f00a9280297d00a59c0717d","0x1f00e170015250053020141e00e01c9280280e00e038c18054b660402a4a","0x296300a018070b700a9280298300a1d40700e4940140700701c0385c005","0x294701c59802a4a00a5980282701c01402a4a00a0140298701c58c02a4a","0x380e16e018b30052c61d0028b700a928028b700a5800700600a92802806","0x1a0050ea0380724a00a1d00298b01c039250050580141880e01c9280280e","0x1380e00a0152500500a014c380e04c0152500504c0140300e30a01525005","0xc2805494014c28052c0038030054940140300528e0381180549401411805","0xb580e01c9280295100a5a80700e4940140700701c6140302300a0983a005","0x281a01c61802a4a00a038cb80e01c9280287400a62c0700e494014a4805","0x12e01600a9280385d00a0ec0705d00a9280298600a59c0718600a92802986","0x700e3100141f00e3100152500502c0141e00e01c9280280e00e038c3805","0x702600a9280282600a0180706200a9280298700a1d40700e49401407007","0x2a4a00a0180294701c08c02a4a00a08c0282701c01402a4a00a01402987","0x724a00a0380380e0c40181180504c1d00286200a9280286200a58007006","0x2a4a00a0980280601c62402a4a00a51c0287501c039250050e8014c580e","0x280600a51c0702300a9280282300a09c0700500a9280280500a61c07026","0x280e00e038c48060460141307400a62402a4a00a6240296001c01802a4a","0x1250050200143900e01c92802a2900a5ac0700e4940140f0052d40380724a","0x125005314014b380e314015250053140140d00e3140152500501c1000700e","0x283c01c0392500501c01c0718d00a974c600549401cc5805076038c5805","0x12500531a0143a80e01c9280280e00e0380718e00a0f80718e00a9280298c","0xc80504e038028054940140280530e039180054940151800500c038c8805","0x3a00532201525005322014b000e00c0152500500c014a380e03201525005","0x80050e40380724a00a8ec0296b01c0392500501c01c0719100c06402a30","0x358052ce0383580549401435805034038358054940140716601c03925005","0x2a5e16c015250070d80141d80e034015250050340140300e0d801525005","0x380e01c6540283e01c65402a4a00a2d80283c01c0392500501c01c07193","0xc380e034015250050340140300e32c015250053260143a80e01c9280280e","0x30054940140300528e039158054940151580504e0380280549401402805","0x80054940140718d01c6580322b00a0683a00532c0152500532c014b000e","0xca3000e9280380701c01c0280e01c9280280e01c0380724a00a0382200e","0x11d80531c0391d8054940151d8054760380724a00a0380380e45606803a5f","0x13007400a92803a4b00a6440723000a92802a3000a0180724b45201d25005","0x1250050320141380e460015250054600140300e01c9280280e00e0380f005","0x306c01c1d002a4a00a1d0080070d603914805494015148054760380c805","0x380e28e0153082700a9280382400a2d8070240460980324a00a8a40ca30","0x13102c00a9280394b00a6540714b29201d2500504e014c980e01c9280280e","0x1250052920151800e292015250052920151d80e01c9280280e00e038a8805","0x1795700e8ac0702f00a9280282f00a0680702f00a9280280e032038ab805","0x700e4940140700701c0d002a632b6015250070620151480e06201525005","0x703500a9280283500a0980703500a9280280e03c0380724a00a56c02a4b","0xb980e01c9280280e00e038b316300e9903a96000e9280383504609803023","0x700e4940141d8052ee0381e03b00e9280296700a5d80716700a9280280e","0x2a4a00a1d40282701c01402a4a00a0140298701c58002a4a00a58002806","0x282c00a60c0707400a9280287400a0680700600a9280280600a51c07075","0x70420805acb503e0e89280282c0e80f00307500a5811819c01c0b002a4a","0x2a4a00a038ab80e01c9280280e00e038238054ca11002a4a00e10802862","0x26005316038b984c00e9280296f00a6280716f00a9280284400a6240716e","0x398c01c5b802a4a00a5b80298301c5cc02a4a00a5cc0281a01c03925005","0x724a00a5dc0283101c164bb807494014bb00505e038bb005494014b7173","0x1250052f20141a80e2f2015250052f00141a00e2f0015250050b2014ad80e","0xb580504e038b5005494014b500530e0381f0054940141f00500c038bd005","0x3a0052f4015250052f4014b000e08001525005080014a380e2d601525005","0x280601c14c02a4a00a11c0287501c0392500501c01c0717a0805acb503e","0x716b00a9280296b00a09c0716a00a9280296a00a61c0703e00a9280283e","0x298402d65a81f07400a14c02a4a00a14c0296001c10002a4a00a10002947","0xb300e01c9280287400a62c0700e494014160050620380724a00a0380380e","0x717f00a9280297d00a59c0717d00a9280297d00a0680717d00a9280280e","0x280e00e038c18054cc60402a4a00e5fc0283b01c58c02a4a00a58c02806","0x700e4940140700701c0385c00507c0385c005494014c08050780380724a","0x2a4a00a0140298701c58c02a4a00a58c0280601c2dc02a4a00a60c02875","0x28b700a5800700600a9280280600a51c0716600a9280296600a09c07005","0x1250050580141880e01c9280280e00e0385b8062cc014b187400a2dc02a4a","0x12500504c0140300e30a015250050680143a80e01c9280287400a62c0700e","0x300528e038118054940141180504e038028054940140280530e03813005","0x700701c6140302300a0983a00530a0152500530a014b000e00c01525005","0x287400a62c0700e494014a48052d60380724a00a5440296a01c03925005","0x298600a59c0718600a9280298600a0680718600a9280280e32e0380724a","0x1e00e01c9280280e00e038c38054ce05802a4a00e1740283b01c17402a4a","0x298700a1d40700e4940140700701c038c400507c038c40054940140b005","0x282701c01402a4a00a0140298701c09802a4a00a0980280601c18802a4a","0x286200a9280286200a5800700600a9280280600a51c0702300a92802823","0x287501c039250050e8014c580e01c9280280e00e0383100604601413074","0x700500a9280280500a61c0702600a9280282600a0180718900a92802947","0x2a4a00a6240296001c01802a4a00a0180294701c08c02a4a00a08c02827","0x700e4940140f0052d40380724a00a0380380e3120181180504c1d002989","0xd00e3140152500501c1000700e494014080050e40380724a00a8a40296b","0xc600549401cc5805076038c5805494014c50052ce038c5005494014c5005","0x718e00a0f80718e00a9280298c00a0f00700e4940140700701c63402a68","0x1180054940151800500c038c8805494014c68050ea0380724a00a0380380e","0x12500500c014a380e032015250050320141380e00a0152500500a014c380e","0x12500501c01c0719100c06402a300e8014c8805494014c88052c003803005","0x358054940140716601c039250050200143900e01c92802a3b00a5ac0700e","0x1250050340140300e0d8015250050d6014b380e0d6015250050d60140d00e","0x283c01c0392500501c01c0719300a9a45b00549401c360050760380d005","0x1250053260143a80e01c9280280e00e0380719500a0f80719500a928028b6","0x11580504e038028054940140280530e0380d0054940140d00500c038cb005","0x3a00532c0152500532c014b000e00c0152500500c014a380e45601525005","0x1350100e801d2500700e0380380501c0392500501c0380719600c8ac0281a","0x2a3b00a6380723b00a92802a3b00a8ec0700e4940140700701c06518007","0x2a6b45201525007456014c880e0e8015250050e80140300e45606803a4a","0x2a4a00a06802a3001c06802a4a00a06802a3b01c0392500501c01c0724b","0x282603c01d1580e04c0152500504c0140d00e04c0152500501c0640701e","0x12580e01c9280280e00e038138054d809002a4a00e08c02a2901c08c02a4a","0x1180e28e0152500528e0141300e28e0152500501c0780700e49401412005","0x717301c0392500501c01c0715105801d3694b29201d2500728e0403a006","0x300e01c9280282f00a5dc0703105e01d250052ae014bb00e2ae01525005","0xa5805494014a580504e038028054940140280530e038a4805494014a4805","0xa5805292040cf00e452015250054520140d00e00c0152500500c014a380e","0xb30054dc58c02a4a00e1d40286201c1d4b003506856c3a24a00a8a418806","0x703b00a9280296300a6240716700a9280280e2ae0380724a00a0380380e","0x2a4a00a0f80281a01c03925005078014c580e07c0f003a4a00a0ec0298a","0xb500505e038b5005494014b383e00e6300716700a9280296700a60c0703e","0x1a00e08401525005080014ad80e01c9280296b00a0c4070402d601d25005","0xad805494014ad80500c038238054940142200506a0382200549401421005","0x1250052c0014a380e06a0152500506a0141380e06801525005068014c380e","0x12500501c01c070472c00d41a15b0e801423805494014238052c0038b0005","0x283400a61c0715b00a9280295b00a0180716e00a9280296600a1d40700e","0x296001c58002a4a00a5800294701c0d402a4a00a0d40282701c0d002a4a","0x1148053160380724a00a0380380e2dc5801a8342b61d00296e00a9280296e","0xb78052ce038b7805494014b7805034038b78054940140716601c03925005","0x2a6f2e6015250070980141d80e058015250050580140300e09801525005","0x380e01c5dc0283e01c5dc02a4a00a5cc0283c01c0392500501c01c07176","0xc380e058015250050580140300e0b2015250052ec0143a80e01c9280280e","0x30054940140300528e038a8805494014a880504e0380280549401402805","0x700e4940140700701c1640315100a0b03a0050b2015250050b2014b000e","0x3a0054940143a00500c038bc005494014138050ea0380724a00a8a40298b","0x12500500c014a380e020015250050200141380e00a0152500500a014c380e","0x12500501c01c0717800c040028740e8014bc005494014bc0052c003803005","0xbc8054940140704001c03925005034014b580e01c92802a4b00a5a80700e","0x1250072f40141d80e2f4015250052f2014b380e2f2015250052f20140d00e","0x283e01c5fc02a4a00a14c0283c01c0392500501c01c0717d00a9c029805","0x1250050e80140300e302015250052fa0143a80e01c9280280e00e0380717f","0x300528e038080054940140800504e038028054940140280530e0383a005","0x700701c6040301000a1d03a00530201525005302014b000e00c01525005","0x298300a0680718300a9280280e2cc0380724a00a8ec0296b01c03925005","0x283b01c8c002a4a00a8c00280601c2e002a4a00a60c0296701c60c02a4a","0xc30054940145b8050780380724a00a0380380e30a015388b700a928038b8","0x280601c17402a4a00a6140287501c0392500501c01c0700e30c0141f00e","0x701900a9280281900a09c0700500a9280280500a61c0723000a92802a30","0x2e8060320151807400a17402a4a00a1740296001c01802a4a00a01802947","0x380e0328c003a720201d003a4a00e01c0700700a0380724a00a0380700e","0x722b03401d25005476014c700e476015250054760151d80e01c9280280e","0x280e00e039258054e68a402a4a00e8ac0299101c1d002a4a00a1d002806","0x299101c0980f0074940140d00531c0380d0054940140d0054760380724a","0xf0054940140f0054760380724a00a0380380e0480153a02300a92803826","0x380e2960153a94900a9280394700a6440714704e01d2500503c014c700e","0xc80e0580152500504e0151800e04e0152500504e0151d80e01c9280280e","0xab805494014a882c00e8ac0715100a9280295100a0680715100a9280280e","0x282f00a92c0700e4940140700701c0c402a7605e015250072ae0151480e","0x807400c08c0715b00a9280295b00a0980715b00a9280280e03c0380724a","0x2a4a00a038b980e01c9280280e00e0383a96000e9dc1a83400e9280395b","0x283400a0180700e494014b30052ee038b396600e9280296300a5d807163","0x294701c0d402a4a00a0d40282701c01402a4a00a0140298701c0d002a4a","0x702300a9280282300a0680722900a92802a2900a0680700600a92802806","0x1d874494014a482345259c0303500a0d00c9a201c52402a4a00a5240281a","0x700e4940140700701c10802a78080015250072d60143100e2d65a81f03c","0xb70074940142380531403823805494014200053120382200549401407157","0x125005088014c180e2de015250052de0140d00e01c9280296e00a62c0716f","0x1880e2ec5cc03a4a00a1300282f01c13002a4a00a110b780731803822005","0x705900a9280297700a0d00717700a9280297600a56c0700e494014b9805","0x2a4a00a0f00298701c0ec02a4a00a0ec0280601c5e002a4a00a16402835","0x297800a5800716a00a9280296a00a51c0703e00a9280283e00a09c0703c","0x1250050840143a80e01c9280280e00e038bc16a07c0f01d87400a5e002a4a","0x1f00504e0381e0054940141e00530e0381d8054940141d80500c038bc805","0x3a0052f2015250052f2014b000e2d4015250052d4014a380e07c01525005","0x118053160380724a00a5240298b01c0392500501c01c071792d40f81e03b","0x297a00a0680717a00a9280280e2cc0380724a00a8a40298b01c03925005","0x283b01c58002a4a00a5800280601c14c02a4a00a5e80296701c5e802a4a","0xc0805494014be8050780380724a00a0380380e2fe0153c97d00a92803853","0x280601c60c02a4a00a5fc0287501c0392500501c01c0700e3020141f00e","0x707500a9280287500a09c0700500a9280280500a61c0716000a92802960","0xc18060ea014b007400a60c02a4a00a60c0296001c01802a4a00a01802947","0xc580e01c9280282300a62c0700e494014a48053160380724a00a0380380e","0x707400a9280287400a018070b800a9280283100a1d40700e49401514805","0x2a4a00a0180294701c04002a4a00a0400282701c01402a4a00a01402987","0x724a00a0380380e170018080050e81d0028b800a928028b800a58007006","0x700e494014118053160380724a00a09c0296b01c03925005296014b500e","0x70b700a928028b700a068070b700a9280280e0f00380724a00a8a40298b","0x280e00e0382e8054f461802a4a00e6140283b01c61402a4a00a2dc02967","0x700e4940140700701c0380b00507c0380b005494014c30050780380724a","0x2a4a00a0140298701c1d002a4a00a1d00280601c61c02a4a00a17402875","0x298700a5800700600a9280280600a51c0701000a9280281000a09c07005","0x125005048014b500e01c9280280e00e038c38060200143a07400a61c02a4a","0xc40054940140719701c03925005452014c580e01c9280281e00a5ac0700e","0x1250070c40141d80e0c401525005310014b380e310015250053100140d00e","0x283e01c62c02a4a00a6240283c01c0392500501c01c0718a00a9ecc4805","0x1250050e80140300e318015250053140143a80e01c9280280e00e0380718b","0x300528e038080054940140800504e038028054940140280530e0383a005","0x700701c6300301000a1d03a00531801525005318014b000e00c01525005","0x12500501c1000700e4940140d0052d60380724a00a92c0296a01c03925005","0xc7005076038c7005494014c68052ce038c6805494014c6805034038c6805","0x706c00a9280299100a0f00700e4940140700701c1ac02a7c32201525007","0x3a00500c0385b005494014358050ea0380724a00a0380380e01c1b00283e","0xa380e020015250050200141380e00a0152500500a014c380e0e801525005","0x70b600c040028740e80145b0054940145b0052c00380300549401403005","0x281a01c64c02a4a00a038b300e01c92802a3b00a5ac0700e49401407007","0x723000a92802a3000a0180719500a9280299300a59c0719300a92802993","0x12500532c0141e00e01c9280280e00e038cb8054fa65802a4a00e6540283b","0x719c00a9280299700a1d40700e4940140700701c0383900507c03839005","0x2a4a00a0640282701c01402a4a00a0140298701c8c002a4a00a8c002806","0xc8054601d00299c00a9280299c00a5800700600a9280280600a51c07019","0x11801000e9f83a23b00e9280380501c01c0280e01c9280280e01c038ce006","0xc8054940140300546003803005494014030054760380724a00a0380380e","0x12500503406403a2b01c06802a4a00a0680281a01c06802a4a00a0380c80e","0x724b00a9fd1480549401d158054520391d8054940151d80500c03915805","0x282601c07802a4a00a0380f00e01c92802a2900a92c0700e49401407007","0x380e04e09003a8004609803a4a00e0783a23b00c08c0701e00a9280281e","0xbb80e29652403a4a00a51c0297601c51c02a4a00a038b980e01c9280280e","0x702300a9280282300a09c0702600a9280282600a0180700e494014a4805","0x702f2ae5441623b494014a58070460991d9a401c01c02a4a00a01c02947","0x2a4a00a038ab80e01c9280280e00e038ad8055020c402a4a00e0bc02862","0xb00053160383a96000e9280283500a6280703500a9280283100a62407034","0x398c01c0d002a4a00a0d00298301c1d402a4a00a1d40281a01c03925005","0x724a00a5980283101c59cb3007494014b180505e038b18054940141a075","0x1250050780141a80e078015250050760141a00e076015250052ce014ad80e","0xab80528e038a8805494014a880504e038160054940141600500c0381f005","0x280e00e0381f1572a20b11d80507c0152500507c014b000e2ae01525005","0xa880504e038160054940141600500c038b5005494014ad8050ea0380724a","0x11d8052d4015250052d4014b000e2ae015250052ae014a380e2a201525005","0x296b00a0680716b00a9280280e2cc0380724a00a0380380e2d455ca882c","0x283b01c09002a4a00a0900280601c10002a4a00a5ac0296701c5ac02a4a","0x23805494014210050780380724a00a0380380e0880154104200a92803840","0x280601c5b802a4a00a1100287501c0392500501c01c0700e08e0141f00e","0x700700a9280280700a51c0702700a9280282700a09c0702400a92802824","0x287501c0392500501c01c0716e00e09c1223b00a5b802a4a00a5b802960","0x707400a9280287400a09c0723b00a92802a3b00a0180716f00a92802a4b","0x716f00e1d11da3b00a5bc02a4a00a5bc0296001c01c02a4a00a01c02947","0x281a01c13002a4a00a038b300e01c9280280600a5ac0700e49401407007","0x701000a9280281000a0180717300a9280284c00a59c0704c00a9280284c","0x1250052ec0141e00e01c9280280e00e038bb8055065d802a4a00e5cc0283b","0x717800a9280297700a1d40700e4940140700701c0382c80507c0382c805","0x2a4a00a01c0294701c8c002a4a00a8c00282701c04002a4a00a04002806","0x700e4940140700e01c5e003a300208ec0297800a9280297800a58007007","0x2a3b01c0392500501c01c0701a03201d4223002001d2500700c03803805","0x80054940140800500c03914a2b00e9280287400a6380707400a92802874","0x281000a0180700e4940140700701c07802a8549601525007452014c880e","0x702304c01d250054560400387b01c8ac02a4a00a8ac02a3b01c04002a4a","0x125005048014d300e01c9280280e00e0381380550c09002a4a00e08c029a5","0x11d80e01c9280280e00e0381600550e52c02a4a00e524029a901c524a3807","0x715700a9280280e032038a8805494014a3805460038a3805494014a3805","0x12500705e0151480e05e015250052ae54403a2b01c55c02a4a00a55c0281a","0x280e03c0380724a00a0c402a4b01c0392500501c01c0715b00aa2018805","0xb003500e928038344600980302301c0d002a4a00a0d00282601c0d002a4a","0x283500a0180716600a9280280e2e60380724a00a0380380e2c61d403a89","0x287e01c58002a4a00a5800282701c01402a4a00a0140298701c0d402a4a","0x724b00a92802a4b00a0680723b00a92802a3b00a51c0700700a92802807","0xb3810494014a5a4b2cc8ec0396000a0d40c88001c52c02a4a00a52c02a3b","0x724a00a0380380e0840154504000a9280396b00a0b00716b2d40f81e03b","0x238074940142200505e038220054940140715701c03925005080014a880e","0x1250052de0141a00e2de015250052dc014ad80e01c9280284700a0c40716e","0x1d80530e038b3805494014b380500c038b98054940142600506a03826005","0xa380e078015250050780141380e07c0152500507c0143f00e07601525005","0xb996a0780f81d967020014b9805494014b98052c0038b5005494014b5005","0xb3805494014b380500c038bb005494014210050ea0380724a00a0380380e","0x1250050780141380e07c0152500507c0143f00e07601525005076014c380e","0x1d967020014bb005494014bb0052c0038b5005494014b500528e0381e005","0x2a4b00a62c0700e494014a58052d60380724a00a0380380e2ec5a81e03e","0x297700a59c0717700a9280297700a0680717700a9280280e2cc0380724a","0xbc8055165e002a4a00e1640283b01c1d402a4a00a1d40280601c16402a4a","0x700701c038bd00507c038bd005494014bc0050780380724a00a0380380e","0x298701c1d402a4a00a1d40280601c14c02a4a00a5e40287501c03925005","0x716300a9280296300a09c0700700a9280280700a1f80700500a92802805","0x11d96300e0143a81000a14c02a4a00a14c0296001c8ec02a4a00a8ec02947","0x700e494015258053160380724a00a52c0296b01c0392500501c01c07053","0x2a4a00a0140298701c09802a4a00a0980280601c5f402a4a00a56c02875","0x2a3b00a51c0723000a92802a3000a09c0700700a9280280700a1f807005","0x700701c5f51da3000e0141301000a5f402a4a00a5f40296001c8ec02a4a","0x2a4b00a62c0700e494014a38052d60380724a00a0b00296a01c03925005","0x297f00a59c0717f00a9280297f00a0680717f00a9280280e32e0380724a","0x1e00e01c9280280e00e0385c00551860c02a4a00e6040283b01c60402a4a","0x28b800a1d40700e4940140700701c0385b80507c0385b805494014c1805","0x287e01c01402a4a00a0140298701c09802a4a00a0980280601c61402a4a","0x723b00a92802a3b00a51c0723000a92802a3000a09c0700700a92802807","0x700e4940140700701c6151da3000e0141301000a61402a4a00a61402960","0x130054940141300500c038c3005494014138050ea0380724a00a92c0298b","0x1250054600141380e00e0152500500e0143f00e00a0152500500a014c380e","0x2826020014c3005494014c30052c00391d8054940151d80528e03918005","0x2a2b00a5ac0700e4940140f0052d40380724a00a0380380e30c8ed18007","0x285d00a59c0705d00a9280285d00a0680705d00a9280280e0800380724a","0x1e00e01c9280280e00e038c400551a61c02a4a00e0580283b01c05802a4a","0x298800a1d40700e4940140700701c0383100507c03831005494014c3805","0x287e01c01402a4a00a0140298701c04002a4a00a0400280601c62402a4a","0x723b00a92802a3b00a51c0723000a92802a3000a09c0700700a92802807","0x700e4940140700701c6251da3000e0140801000a62402a4a00a62402960","0x718a00a9280298a00a0680718a00a9280280e2cc0380724a00a1d00296b","0x2a4a00e62c0283b01c06402a4a00a0640280601c62c02a4a00a62802967","0xc700507c038c7005494014c60050780380724a00a0380380e31a0154718c","0x2a4a00a0640280601c64402a4a00a6340287501c0392500501c01c0700e","0x281a00a09c0700700a9280280700a1f80700500a9280280500a61c07019","0xc81000a64402a4a00a6440296001c8ec02a4a00a8ec0294701c06802a4a","0x14787447601d2500700a0380380501c0392500501c0380719147606803805","0x280600a8c00700600a9280280600a8ec0700e4940140700701c8c008007","0xc8074560380d0054940140d0050340380d0054940140701901c06402a4a","0x14822900a92803a2b00a8a40723b00a92802a3b00a0180722b00a9280281a","0xf0054940140701e01c039250054520152580e01c9280280e00e03925805","0x1200752208c1300749401c0f0744760181180e03c0152500503c0141300e","0xa4807494014a38052ec038a38054940140717301c0392500501c01c07027","0x1250050460141380e04c0152500504c0140300e01c9280294900a5dc0714b","0xa882c4769280294b00e08c1323b358038038054940140380528e03811805","0x715701c0392500501c01c0715b00aa481880549401c178050c403817957","0x70752c001d2500506a014c500e06a01525005062014c480e06801525005","0x1a0054940141a0053060383a8054940143a8050340380724a00a5800298b","0xb3005062038b396600e9280296300a0bc0716300a928028340ea01cc600e","0x283501c0f002a4a00a0ec0283401c0ec02a4a00a59c0295b01c03925005","0x715100a9280295100a09c0702c00a9280282c00a0180703e00a9280283c","0x703e2ae5441623b00a0f802a4a00a0f80296001c55c02a4a00a55c02947","0x702c00a9280282c00a0180716a00a9280295b00a1d40700e49401407007","0x2a4a00a5a80296001c55c02a4a00a55c0294701c54402a4a00a54402827","0xd00e2d60152500501c5980700e4940140700701c5a8ab9510588ec0296a","0x120054940141200500c03820005494014b58052ce038b5805494014b5805","0x284200a0f00700e4940140700701c11002a93084015250070800141d80e","0xb7005494014220050ea0380724a00a0380380e01c11c0283e01c11c02a4a","0x12500500e014a380e04e0152500504e0141380e048015250050480140300e","0x724a00a0380380e2dc01c13824476014b7005494014b70052c003803805","0x1250050e80141380e476015250054760140300e2de015250054960143a80e","0x3a23b476014b7805494014b78052c0038038054940140380528e0383a005","0x260054940140716601c0392500500c014b580e01c9280280e00e038b7807","0x1250050200140300e2e601525005098014b380e098015250050980140d00e","0x283c01c0392500501c01c0717700aa50bb00549401cb980507603808005","0x1250052ee0143a80e01c9280280e00e0380705900a0f80705900a92802976","0x380528e039180054940151800504e038080054940140800500c038bc005","0x280e01c038bc0074600411d8052f0015250052f0014b000e00e01525005","0x724a00a0380380e03406403a9546004003a4a00e0180700700a0380724a","0x281000a0180722945601d250050e8014c700e0e8015250050e80151d80e","0x300e01c9280280e00e0380f00552c92c02a4a00e8a40299101c04002a4a","0x3a4a00a8ac080070f603915805494015158054760380800549401408005","0x29a601c0392500501c01c0702700aa5c1200549401c1180534a03811826","0x12500501c01c0702c00aa60a580549401ca4805352038a494700e92802824","0x12500501c0640715100a9280294700a8c00714700a9280294700a8ec0700e","0x2a2901c0bc02a4a00a55ca8807456038ab805494014ab805034038ab805","0x700e494014188054960380724a00a0380380e2b60154c83100a9280382f","0x1250070688c0130060460381a0054940141a00504c0381a0054940140701e","0x300e2cc0152500501c5cc0700e4940140700701c58c3a8075345801a807","0xb0005494014b000504e038028054940140280530e0381a8054940141a805","0x1250054960140d00e47601525005476014a380e00e0152500500e0143f00e","0x294b4965991d8072c00141a819360038a5805494014a580547603925805","0x700701c10802a9b080015250072d60141600e2d65a81f03c07659c0824a","0x284400a0bc0704400a9280280e2ae0380724a00a1000295101c03925005","0x283401c5bc02a4a00a5b80295b01c0392500508e0141880e2dc11c03a4a","0x716700a9280296700a0180717300a9280284c00a0d40704c00a9280296f","0x2a4a00a0f00282701c0f802a4a00a0f80287e01c0ec02a4a00a0ec02987","0x1f03b2ce0400297300a9280297300a5800716a00a9280296a00a51c0703c","0x296700a0180717600a9280284200a1d40700e4940140700701c5ccb503c","0x282701c0f802a4a00a0f80287e01c0ec02a4a00a0ec0298701c59c02a4a","0x297600a9280297600a5800716a00a9280296a00a51c0703c00a9280283c","0xc580e01c9280294b00a5ac0700e4940140700701c5d8b503c07c0ecb3810","0xb380e2ee015250052ee0140d00e2ee0152500501c5980700e49401525805","0xbc00549401c2c8050760383a8054940143a80500c0382c805494014bb805","0x717a00a0f80717a00a9280297800a0f00700e4940140700701c5e402a9c","0x3a8054940143a80500c03829805494014bc8050ea0380724a00a0380380e","0x1250052c60141380e00e0152500500e0143f00e00a0152500500a014c380e","0x287502001429805494014298052c00391d8054940151d80528e038b1805","0x2a4b00a62c0700e494014a58052d60380724a00a0380380e0a68ecb1807","0x280530e038130054940141300500c038be805494014ad8050ea0380724a","0xa380e460015250054600141380e00e0152500500e0143f00e00a01525005","0xbea3b46001c02826020014be805494014be8052c00391d8054940151d805","0xc580e01c9280294700a5ac0700e494014160052d40380724a00a0380380e","0xb380e2fe015250052fe0140d00e2fe0152500501c65c0700e49401525805","0x12500501c01c070b800aa74c180549401cc0805076038c0805494014bf805","0x3a80e01c9280280e00e038070b700a0f8070b700a9280298300a0f00700e","0x28054940140280530e038130054940141300500c038c28054940145c005","0x125005476014a380e460015250054600141380e00e0152500500e0143f00e","0x280e00e038c2a3b46001c02826020014c2805494014c28052c00391d805","0x282600a0180718600a9280282700a1d40700e494015258053160380724a","0x282701c01c02a4a00a01c0287e01c01402a4a00a0140298701c09802a4a","0x298600a9280298600a5800723b00a92802a3b00a51c0723000a92802a30","0xb580e01c9280281e00a5a80700e4940140700701c6191da3000e01413010","0xb380e0ba015250050ba0140d00e0ba0152500501c1000700e49401515805","0x12500501c01c0718800aa78c380549401c0b0050760380b0054940142e805","0x3a80e01c9280280e00e0380706200a0f80706200a9280298700a0f00700e","0x28054940140280530e038080054940140800500c038c4805494014c4005","0x125005476014a380e460015250054600141380e00e0152500500e0143f00e","0x280e00e038c4a3b46001c02810020014c4805494014c48052c00391d805","0x1250053140140d00e3140152500501c5980700e4940143a0052d60380724a","0xc58050760380c8054940140c80500c038c5805494014c50052ce038c5005","0x718e00a9280298c00a0f00700e4940140700701c63402a9f31801525007","0xc80500c038c8805494014c68050ea0380724a00a0380380e01c6380283e","0x1380e00e0152500500e0143f00e00a0152500500a014c380e03201525005","0xc8805494014c88052c00391d8054940151d80528e0380d0054940140d005","0x3a4a00e01c0280700a0380724a00a0380700e3228ec0d00700a06408005","0xc700e476015250054760151d80e01c9280280e00e0380ca3000ea8008074","0x2a4a00e8ac0299101c1d002a4a00a1d00280601c8ac0d0074940151d805","0xd0054600380d0054940140d0054760380724a00a0380380e49601550a29","0x3a2b01c09802a4a00a0980281a01c09802a4a00a0380c80e03c01525005","0x12500501c01c0702700aa881200549401c11805452038118054940141301e","0x2a4a00a51c0282601c51c02a4a00a0380f00e01c9280282400a92c0700e","0x724a00a0380380e2a20b003aa329652403a4a00e51c0807400c08c07147","0x12500505e014bb80e0620bc03a4a00a55c0297601c55c02a4a00a038b980e","0x280e00a6c40714b00a9280294b00a09c0714900a9280294900a0180700e","0x81b401c8a402a4a00a8a40281a01c01802a4a00a0180294701c03802a4a","0xb180549401c3a80536a0383a96006a0d0ad8744940151483100c038a5949","0x1250052c60144380e2ce0152500501c55c0700e4940140700701c59802aa4","0x1f0051180380724a00a0f00289101c0f81e0074940141d8051120381d805","0x716a00a9280296707c01c4300e2ce015250052ce014c180e07c01525005","0x2a4a00a1000295b01c039250052d60141880e0805ac03a4a00a5a80282f","0x283500a6c40704700a9280284400a0d40704400a9280284200a0d007042","0x294701c0d002a4a00a0d00282701c56c02a4a00a56c0280601c0d402a4a","0x380e08e5801a15b06a1d00284700a9280284700a5800716000a92802960","0x300e06a0152500506a014d880e2dc015250052cc0143a80e01c9280280e","0xb0005494014b000528e0381a0054940141a00504e038ad805494014ad805","0x700e4940140700701c5b8b00342b60d43a0052dc015250052dc014b000e","0x716f00a9280296f00a0680716f00a9280280e2cc0380724a00a8a40298b","0x2a4a00e1300283b01c0b002a4a00a0b00280601c13002a4a00a5bc02967","0xbb80507c038bb805494014b98050780380724a00a0380380e2ec01552973","0x2a4a00a038029b101c16402a4a00a5d80287501c0392500501c01c0700e","0x280600a51c0715100a9280295100a09c0702c00a9280282c00a0180700e","0x280e00e0382c8062a20b00707400a16402a4a00a1640296001c01802a4a","0x280e00a6c40717800a9280282700a1d40700e494015148053160380724a","0x294701c04002a4a00a0400282701c1d002a4a00a1d00280601c03802a4a","0x380e2f00180807401c1d00297800a9280297800a5800700600a92802806","0x280e0800380724a00a0680296b01c03925005496014b500e01c9280280e","0x283b01c5e802a4a00a5e40296701c5e402a4a00a5e40281a01c5e402a4a","0xbf805494014298050780380724a00a0380380e2fa0155305300a9280397a","0x29b101c60402a4a00a5f40287501c0392500501c01c0700e2fe0141f00e","0x701000a9280281000a09c0707400a9280287400a0180700e00a9280280e","0xc08060201d00707400a60402a4a00a6040296001c01802a4a00a01802947","0xd00e3060152500501c5980700e4940151d8052d60380724a00a0380380e","0x1180054940151800500c0385c005494014c18052ce038c1805494014c1805","0x28b700a0f00700e4940140700701c61402aa716e015250071700141d80e","0x2e805494014c28050ea0380724a00a0380380e01c6180283e01c61802a4a","0x1250050320141380e460015250054600140300e01c0152500501c014d880e","0x11800e0e80142e8054940142e8052c0038030054940140300528e0380c805","0x12500501c1440701a00a9280280e08403918005494014071b801c17403019","0x3a4a00e0180280700a0380724a00a0380700e01c9280280e08803914805","0x1380e496015250054960140300e01c9280280e00e0381182600eaa00f24b","0x1250050e8079258061240383a0054940143a0054760380f0054940140f005","0x700e4940140700701c52c02aa92920152500728e0144980e28e09c12006","0x700701c0bc02aaa2ae015250072a2014de00e2a20b003a4a00a52402895","0x387b01c0b002a4a00a0b002a3b01c09002a4a00a0900280601c03925005","0x280e00e0381a8055560d002a4a00e56c029a501c56c1880749401416024","0xb300555858c02a4a00e1d4029a901c1d4b00074940141a00534c0380724a","0xb3805494014b0005460038b0005494014b00054760380724a00a0380380e","0x12500507659c03a2b01c0ec02a4a00a0ec0281a01c0ec02a4a00a0380c80e","0x2a4b01c0392500501c01c0716a00aab41f00549401c1e0054520381e005","0x302301c5ac02a4a00a5ac0282601c5ac02a4a00a0380f00e01c9280283e","0x280e12e0380724a00a0380380e08e11003aae08410003a4a00e5ac13831","0x29b101c10802a4a00a1080282701c10002a4a00a1000280601c5b802a4a","0x723b00a92802a3b00a51c0700700a9280280700a1f80700e00a9280280e","0x380e0841000c9c401c58c02a4a00a58c02a3b01c55c02a4a00a55c029bd","0x80054940140823000e714071730328ac0804c2de041250052c655cb723b","0xb98051380380c8054940140c81a00e5e40722b00a92802a2b45201c4d80e","0x4f00e0b20152500501c55c0700e4940140700701c5dc02aaf2ec01525007","0xbd007494014bc8052fa0380724a00a5e00297701c5e4bc007494014bb005","0x1250050980141380e2de015250052de0140300e01c9280297a00a5fc07053","0xb7a3b1700382c8054940142c805306038298054940142980530203826005","0x380e1700155818300a9280398100a2dc071812fe5f40324a00a1642984c","0x1780e01c9280298500a5a80718516e01d25005306014c280e01c9280280e","0x2e8054940142e80530c0380724a00a6180283101c174c30074940145b805","0x12500530e0141a80e30e0152500502c0141a00e02c015250050ba014ad80e","0x1158050fc038be805494014be80500c0380800549401408005362038c4005","0xb000e03201525005032014a380e2fe015250052fe0141380e45601525005","0x3a80e01c9280280e00e038c40192fe8acbe810020014c4005494014c4005","0xbe805494014be80500c0380800549401408005362038310054940145c005","0x125005032014a380e2fe015250052fe0141380e456015250054560143f00e","0x280e00e038310192fe8acbe81002001431005494014310052c00380c805","0xb780500c0380800549401408005362038c4805494014bb8050ea0380724a","0xa380e098015250050980141380e456015250054560143f00e2de01525005","0xc48190988acb7810020014c4805494014c48052c00380c8054940140c805","0x2e80e01c92802a2900a2840700e4940151800538c0380724a00a0380380e","0x716601c039250052ae014e400e01c9280296300a5ac0700e4940140d005","0x300e31601525005314014b380e314015250053140140d00e31401525005","0x12500501c01c0718d00aac4c600549401cc58050760382200549401422005","0x3a80e01c9280280e00e0380718e00a0f80718e00a9280298c00a0f00700e","0x220054940142200500c0380700549401407005362038c8805494014c6805","0x125005476014a380e08e0152500508e0141380e00e0152500500e0143f00e","0x280e00e038c8a3b08e01c2200e020014c8805494014c88052c00391d805","0x1250050340142e80e01c92802a2900a2840700e4940151800538c0380724a","0x2a4a00a5a80287501c039250052ae014e400e01c9280296300a5ac0700e","0x280700a1f80703100a9280283100a0180700e00a9280280e00a6c40706b","0x296001c8ec02a4a00a8ec0294701c09c02a4a00a09c0282701c01c02a4a","0x296a01c0392500501c01c0706b47609c0383101c0400286b00a9280286b","0xd0050ba0380724a00a8a4028a101c03925005460014e300e01c92802966","0x12500501c65c0700e494014ab8053900380724a00a5800296b01c03925005","0x5b0050760385b005494014360052ce038360054940143600503403836005","0x719600a9280299300a0f00700e4940140700701c65402ab232601525007","0x7005362038cb805494014ca8050ea0380724a00a0380380e01c6580283e","0x1380e00e0152500500e0143f00e062015250050620140300e01c01525005","0xcb805494014cb8052c00391d8054940151d80528e0381380549401413805","0x700e4940151800538c0380724a00a0380380e32e8ec1380706203808005","0x3a80e01c9280295700a7200700e4940140d0050ba0380724a00a8a4028a1","0x188054940141880500c0380700549401407005362038390054940141a805","0x125005476014a380e04e0152500504e0141380e00e0152500500e0143f00e","0x280e00e0383923b04e01c1880e02001439005494014390052c00391d805","0x1250054520145080e01c92802a3000a7180700e494014178052d40380724a","0xce0054940140704001c03925005058014b580e01c9280281a00a1740700e","0x12500733c0141d80e33c01525005338014b380e338015250053380140d00e","0x283e01c69002a4a00a6880283c01c0392500501c01c0707800aaccd1005","0x12500501c014d880e0f6015250050f00143a80e01c9280280e00e038071a4","0x1380504e03803805494014038050fc038120054940141200500c03807005","0x80050f6015250050f6014b000e47601525005476014a380e04e01525005","0x28a101c03925005460014e300e01c9280280e00e0383da3b04e01c1200e","0x29b101c69402a4a00a52c0287501c039250050340142e80e01c92802a29","0x700700a9280280700a1f80702400a9280282400a0180700e00a9280280e","0x2a4a00a6940296001c8ec02a4a00a8ec0294701c09c02a4a00a09c02827","0x724a00a8c0029c601c0392500501c01c071a547609c0382401c040029a5","0x700e4940143a0052d60380724a00a0680285d01c039250054520145080e","0xd4805494014d30052ce038d3005494014d3005034038d300549401407166","0x700701c20002ab40fc015250073520141d80e04c0152500504c0140300e","0x724a00a0380380e01c6b00283e01c6b002a4a00a1f80283c01c03925005","0x12500504c0140300e01c0152500501c014d880e360015250051000143a80e","0x11d80528e038118054940141180504e03803805494014038050fc03813005","0x700e3608ec1180704c0380800536001525005360014b000e47601525005","0x280e00e0380ca3000ead40807400e9280380700a01c0280e01c9280280e","0x280601c8ac0d0074940151d80531c0391d8054940151d8054760380724a","0x724a00a0380380e4960155b22900a92803a2b00a6440707400a92802874","0x2a4a00a0380c80e03c015250050340151800e034015250050340151d80e","0x11805452038118054940141301e00e8ac0702600a9280282600a06807026","0xf00e01c9280282400a92c0700e4940140700701c09c02ab704801525007","0x3a4a00e51c0807400c08c0714700a9280294700a0980714700a9280280e","0x297601c55c02a4a00a0384b80e01c9280280e00e038a882c00eae0a5949","0x714900a9280294900a0180700e494014178052ee0381882f00e92802957","0x2a4a00a0180294701c03802a4a00a038029b101c52c02a4a00a52c02827","0xad8744940151483100c038a59490207240722900a92802a2900a06807006","0x700e4940140700701c59802ab92c6015250070ea014da80e0ea5801a834","0x1e0074940141d8051120381d805494014b180510e038b380549401407157","0x1250052ce014c180e07c0152500507c0144600e01c9280283c00a2440703e","0x1880e0805ac03a4a00a5a80282f01c5a802a4a00a59c1f00710c038b3805","0x704400a9280284200a0d00704200a9280284000a56c0700e494014b5805","0x2a4a00a56c0280601c0d402a4a00a0d4029b101c11c02a4a00a11002835","0x284700a5800716000a9280296000a51c0703400a9280283400a09c0715b","0x1250052cc0143a80e01c9280280e00e0382396006856c1a87400a11c02a4a","0x1a00504e038ad805494014ad80500c0381a8054940141a805362038b7005","0x3a0052dc015250052dc014b000e2c0015250052c0014a380e06801525005","0x280e2cc0380724a00a8a40298b01c0392500501c01c0716e2c00d0ad835","0x280601c13002a4a00a5bc0296701c5bc02a4a00a5bc0281a01c5bc02a4a","0x724a00a0380380e2ec0155d17300a9280384c00a0ec0702c00a9280282c","0x287501c0392500501c01c0700e2ee0141f00e2ee015250052e60141e00e","0x702c00a9280282c00a0180700e00a9280280e00a6c40705900a92802976","0x2a4a00a1640296001c01802a4a00a0180294701c54402a4a00a54402827","0x700e494015148053160380724a00a0380380e0b2018a882c01c1d002859","0x2a4a00a1d00280601c03802a4a00a038029b101c5e002a4a00a09c02875","0x297800a5800700600a9280280600a51c0701000a9280281000a09c07074","0x125005496014b500e01c9280280e00e038bc0060201d00707400a5e002a4a","0x2a4a00a5e40281a01c5e402a4a00a0382000e01c9280281a00a5ac0700e","0x380e2fa0155d85300a9280397a00a0ec0717a00a9280297900a59c07179","0x12500501c01c0700e2fe0141f00e2fe015250050a60141e00e01c9280280e","0x287400a0180700e00a9280280e00a6c40718100a9280297d00a1d40700e","0x296001c01802a4a00a0180294701c04002a4a00a0400282701c1d002a4a","0x11d8052d60380724a00a0380380e3020180807401c1d00298100a92802981","0xc18052ce038c1805494014c1805034038c18054940140716601c03925005","0x2abc16e015250071700141d80e460015250054600140300e17001525005","0x380e01c6180283e01c61802a4a00a2dc0283c01c0392500501c01c07185","0x300e01c0152500501c014d880e0ba0152500530a0143a80e01c9280280e","0x30054940140300528e0380c8054940140c80504e0391800549401518005","0x700e4940140700e01c174030194600383a0050ba015250050ba014b000e","0x2a3b01c0392500501c01c0701946001d5e8100e801d2500700e01403805","0x3a0054940143a00500c0391581a00e92802a3b00a6380723b00a92802a3b","0x281a00a8ec0700e4940140700701c92c02abe45201525007456014c880e","0x13005034038130054940140701901c07802a4a00a06802a3001c06802a4a","0x15f82400a9280382300a8a40702300a9280282603c01d1580e04c01525005","0xa38054940140701e01c039250050480152580e01c9280280e00e03813805","0x1600758052ca480749401ca38100e80181180e28e0152500528e0141300e","0xa4805494014a480500c038ab8054940140702401c0392500501c01c07151","0x12500500c014a380e01c0152500501c014d880e296015250052960141380e","0x3a24a00a8a4ab80601c52ca4810394039148054940151480503403803005","0x724a00a0380380e0ea0156096000a9280383500a0b00703506856c1882f","0xb3007494014b180505e038b18054940140715701c039250052c0014a880e","0x1250050760141a00e076015250052ce014ad80e01c9280296600a0c407167","0x1780500c038ad805494014ad8053620381f0054940141e00506a0381e005","0xb000e06801525005068014a380e062015250050620141380e05e01525005","0x287501c0392500501c01c0703e0680c41795b0e80141f0054940141f005","0x702f00a9280282f00a0180715b00a9280295b00a6c40716a00a92802875","0x2a4a00a5a80296001c0d002a4a00a0d00294701c0c402a4a00a0c402827","0x700e494015148053160380724a00a0380380e2d40d01882f2b61d00296a","0x20005494014b58052ce038b5805494014b5805034038b580549401407166","0x700701c11002ac2084015250070800141d80e058015250050580140300e","0x724a00a0380380e01c11c0283e01c11c02a4a00a1080283c01c03925005","0x1250050580140300e01c0152500501c014d880e2dc015250050880143a80e","0xb70052c0038030054940140300528e038a8805494014a880504e03816005","0x2a2900a62c0700e4940140700701c5b8031510580383a0052dc01525005","0x3a00500c0380700549401407005362038b7805494014138050ea0380724a","0xb000e00c0152500500c014a380e020015250050200141380e0e801525005","0x296a01c0392500501c01c0716f00c0403a00e0e8014b7805494014b7805","0x26005034038260054940140704001c03925005034014b580e01c92802a4b","0x2ac32ec015250072e60141d80e2e601525005098014b380e09801525005","0x380e01c1640283e01c16402a4a00a5d80283c01c0392500501c01c07177","0x300e01c0152500501c014d880e2f0015250052ee0143a80e01c9280280e","0x30054940140300528e038080054940140800504e0383a0054940143a005","0x700e4940140700701c5e0030100e80383a0052f0015250052f0014b000e","0x717900a9280297900a0680717900a9280280e2cc0380724a00a8ec0296b","0x2a4a00e5e80283b01c8c002a4a00a8c00280601c5e802a4a00a5e402967","0xbf80507c038bf805494014298050780380724a00a0380380e2fa01562053","0x2a4a00a038029b101c60402a4a00a5f40287501c0392500501c01c0700e","0x280600a51c0701900a9280281900a09c0723000a92802a3000a0180700e","0x2805476038c08060328c00707400a60402a4a00a6040296001c01802a4a","0x162a3b00a9280380600a6440700600e01d2500500a014c700e00a01525005","0x701900ab191801000e92803a3b01c01c5300e01c9280280e00e0383a005","0x701000a9280281000a0180701a00a92802a3000a7340700e49401407007","0x380e03401c0800600a06802a4a00a068029cf01c01c02a4a00a01c02a3b","0x280601c8a402a4a00a8ac029d201c8ac02a4a00a0385500e01c9280280e","0x2a2900a92802a2900a73c0700700a9280280700a8ec0701900a92802819","0x700500c039258054940143a0053a40380724a00a0380380e45201c0c806","0x300549601525005496014e780e00e0152500500e0151d80e01c01525005","0x2ac700c01c03a4a00e014028ad01c01402a4a00a038029d401c92c0380e","0x700e494014030053ae0380724a00a01c029d601c0392500501c01c0723b","0x800549401408005118038080054940143a0053b40383a005494014070aa","0x2a4a00a0385500e01c92802a3b00a7580700e4940140700701c04002805","0x4600e0320140281900a9280281900a2300701900a92802a3000a77807230","0x300549401c0380516803803805494014070051640380700549401407005","0x12500500a014c580e01c9280280600a5a80700e4940140700701c8ec02ac8","0x125005020014f100e020015250050e80145c80e0e80152500501c2a80700e","0x296a01c0392500501c01c0723000a01518005494015180050ec03918005","0x1d80e0320152500500a014b380e00a0152500500a0140d00e01c92802a3b","0x2a4a00a0680283c01c0392500501c01c0722b00ab240d00549401c0c805","0x3b00e496015250054560145e80e01c9280280e00e0380722900a0f807229","0x2a4a00a038f300e01c0152500501c7900724b00a0152580549401525805","0x300700a0391d9e501c01802a4a00a0386180e00e0152500501c30407005","0x11d8053c2039180100e88ed1da4a00a01c029e301c8ec0280547601525005","0x700500a9280280500a51c0700e00a9280280e00a09c0701a03201d25005","0x1300559407802a4a00e92c02a2901c92d14a2b00c9280281a00a038031e8","0x722b00a92802a2b00a09c0700e4940140f0054960380724a00a0380380e","0x32304528ad1d9dd01c01802a4a00a0180294901c8a402a4a00a8a402947","0x12500501c01c0714900ab2ca380549401c138053b60381382404601925005","0x3a0194767940700e494014160052d40381614b00e9280294700a7640700e","0x17805494014ab95100e3300715700a9280280e154038a8805494014a5810","0x125005048014a380e046015250050460141380e0620152500505e014ec00e","0x700e4940140700701c0c41202300c01418805494014188053aa03812005","0xe800e01c9280287400a7440700e494014080053d80380724a00a064029d3","0x120054940141200528e038118054940141180504e038ad805494014a4805","0x29ec01c0392500501c01c0715b04808c030052b6015250052b6014ea80e","0x30052c60380724a00a064029d301c039250050e8014e880e01c92802810","0x11580504e0381a005494014130053a00380724a00a8c0028d301c03925005","0x300506801525005068014ea80e45201525005452014a380e45601525005","0x700e00a014070054940140700530603807005494014071ce01c0d114a2b","0x280e2ae0380280500a01402a4a00a01402a3b01c01402a4a00a038029cc","0xef80e00e0152500501c014039cb01c03802a4a00a0380281a01c01402a4a","0x3a0054940151d8053c00391d8054940140380600e35c0700600a9280280e","0x280700a8ec0700e494014071c201c1d0028050e8015250050e8014e180e","0x2acc0e801525007476014dc80e47601803a4a00a01c029c001c01c02a4a","0xc8054940143a0051bc03918005494014070dd01c0392500501c01c07010","0x12500500c0151d80e00a0152500500a0141380e01c0152500501c0140300e","0x70743740380c8054940140c80503403918005494015180050b203803005","0x700e4940140700701c8a51581a00c01514a2b034019250050328c003005","0x12500503c014db00e03c01525005496018038e201c92c02a4a00a040028e0","0x13005366038028054940140280504e038070054940140700500c03813005","0x71c201c0380280501c0152500501c0900702600a0380300504c01525005","0x282701c03802a4a00a0380280601c1d002a4a00a018029af01c03925005","0x723b00a92802a3b00a1640700700a9280280700a51c0700500a92802805","0xe100e034065180104760140d0194600411da4a00a8ec3a00700a0383a1ad","0x723b00a92802a3b00a6040723b00e01d2500500e014d580e01c9280280e","0x1250050200147500e46004003a4a00a1d0029aa01c1d002a4a00a8ec028e8","0x38053020380c8054940140323000e3b00700600a9280280600a60c0700e","0x1380e01c0152500501c0140300e0340152500500e014d380e00e01525005","0xc8054940140c8053060380d0054940140d0051dc0380280549401402805","0x11d80535e03925a2945601802a4b4528ac0324a00a0640d00501c8ecd180e","0x1380e00a0152500500a014c380e01c0152500501c0140300e02001525005","0x3a0054940143a0050b2038030054940140300528e0380380549401403805","0xd0194601d002a294560680ca300e8928028740200180380501c0407800e","0x3805034038028054940140280530603803805494014070051bc03914a2b","0x12500501c014ea00e00c0140280600a9280280700a01ce580e00e01525005","0x7900e01c9280280e00e0391d80559a0180380749401c0280515a03802805","0x80054940143a0051bc0383a0054940140300533e0380300549401403005","0x1250050320151d80e0320152500500e014e600e46001525005020014ce80e","0x5500e01c9280280e00e0391801900e01518005494015180053360380c805","0x722900a92802a3b00a7300722b00a9280281a00a6840701a00a9280280e","0x71c201c8ad1480700a8ac02a4a00a8ac0299b01c8a402a4a00a8a402a3b","0xdc80e47601803a4a00a01c029c001c01c02a4a00a01c02a3b01c03925005","0x1180054940140715701c0392500501c01c0701000ab383a00549401d1d805","0x12500500a0141380e01c0152500501c0140300e032015250050e80146f00e","0xc8050340391800549401518005306038030054940140300547603802805","0x11581a00c01514a2b034019250050328c00300501c1d0d000e03201525005","0x1250054960180399801c92c02a4a00a0400299a01c0392500501c01c07229","0x280504e038070054940140700500c038130054940140f0051ec0380f005","0x2a3b00a6bc0702600a0380300504c0152500504c0147c00e00a01525005","0x282701c01402a4a00a0140298701c03802a4a00a0380280601c8c002a4a","0x707400a9280287400a0680700600a9280280600a51c0700700a92802807","0xd0190e8928028100e88c00300700a0391819401c04002a4a00a04002983","0x700500c039180054940151d80535e03925a294560680c87400a92d14a2b","0xa380e00e0152500500e0141380e00a0152500500a014c380e01c01525005","0x8005494014080053060383a0054940143a0050340380300549401403005","0xd0190e801525a294560680c874494014080744600180380501c8c07d00e","0x298701c03802a4a00a0380280601c04002a4a00a8ec029af01c92d14a2b","0x700600a9280280600a51c0700700a9280280700a09c0700500a92802805","0xd0194601d1250050e80400300700a0380819201c1d002a4a00a1d00281a","0x280e00a0180701900a92802a3b00a6bc072294560680ca300e801514a2b","0x294701c01c02a4a00a01c0282701c01402a4a00a0140298701c03802a4a","0x701000a9280281000a0680707400a9280287400a0680700600a92802806","0xd074494015180100e80640300700a0380c99001c8c002a4a00a8c00281a","0x280601c8ec02a4a00a018029af01c07925a294560683a00503c92d14a2b","0x700700a9280280700a51c0700500a9280280500a09c0700e00a9280280e","0x2a3b01c065180100e88ec028194600403a23b4940151d80700a0391d98f","0x11d80549401c030053720380300700e9280280500a7000700500a92802805","0x280e00a0180701000a92802a3b00a3780700e4940140700701c1d002acf","0x701946001d250050200380398001c04002a4a00a0400281a01c03802a4a","0x2a4a00a0388000e01c9280280e00e039158055a006802a4a00e064028fe","0x1258054760392580700e9280280700a5ec0723000a92802a3000a01807229","0x701e03401d250050340148280e452015250054520148180e49601525005","0x290701c08c130074940140f2294968c11d97001c07802a4a00a07802903","0x3807494014038052f60380724a00a0380380e04e0156882400a92803823","0x282600a0180714900a9280294700a4240714700a9280294700a8ec07147","0x8180e29606803a4a00a0680290501c52402a4a00a5240290301c09802a4a","0x395100a42c0715105801d25005296524130062da038a5805494014a5805","0x300e062015250052ae014b900e01c9280280e00e038178055a455c02a4a","0xd0054940140d00520603803805494014038054760381600549401416005","0x8380e06856c03a4a00a0c40d0070588ecb800e062015250050620148180e","0x2a4a00a0900290d01c0392500501c01c0716000ab4c1a80549401c1a005","0xb316300e43c0716600a9280287500a5c40716300a9280283500a43407075","0x8880e2b6015250052b60140300e076015250052ce014b600e2ce01525005","0x1250050480148980e01c9280280e00e0381d95b00e0141d8054940141d805","0x283c00a4440715b00a9280295b00a0180703c00a9280296000a5a40700e","0x7500e01c9280282400a44c0700e4940140700701c0f0ad80700a0f002a4a","0x300e07c0152500505e014b480e01c9280280700a5ac0700e4940140d005","0x280e00e0381f02c00e0141f0054940141f0052220381600549401416005","0x12500504e014b480e01c9280281a00a3a80700e494014038052d60380724a","0xb502600e014b5005494014b5005222038130054940141300500c038b5005","0x2a4a00a5ac0380721e038b5805494015158052d00380724a00a0380380e","0x284200a4440723000a92802a3000a0180704200a9280284000a5b007040","0x704400a9280287400a5a00700e4940140700701c1091800700a10802a4a","0x12500501c0140300e2dc0152500508e014b600e08e0152500508801c0390f","0xc8074940143a0052c8038b700e00e014b7005494014b700522203807005","0x280700a09c0700500a9280280500a61c0700e00a9280280e00a0180701a","0x281a01c8ec02a4a00a8ec0294701c01802a4a00a0180287e01c01c02a4a","0xd23b00c01c0280e03245c0723000a92802a3000a8ec0701000a92802810","0x138055a809002a4a00e08c0291901c08c1301e4968a51581049401518010","0x724a00a51c029d301c524a3807494014120052c40380724a00a0380380e","0x2a2b00a0180702c00a9280294b00a7600714b00a9280294903201c6600e","0x287e01c92c02a4a00a92c0282701c8a402a4a00a8a40298701c8ac02a4a","0x282c00a9280282c00a7540702600a9280282600a51c0701e00a9280281e","0xe800e01c9280281900a5dc0700e4940140700701c0b01301e4968a515810","0x1148054940151480530e039158054940151580500c038a880549401413805","0x12500504c014a380e03c0152500503c0143f00e496015250054960141380e","0x300535e038a882603c92d14a2b020014a8805494014a88053aa03813005","0xa380e00a0152500500a0141380e01c0152500501c0140300e47601525005","0x11d8050328c00807447692802a3b00e0140723b2c20380380549401403805","0x700e00a9280280e00a0180701a03201d250050e8014b200e0328c008074","0x2a4a00a0180287e01c01c02a4a00a01c0282701c01402a4a00a01402987","0x2a3000a8ec0701000a9280281000a0680723b00a92802a3b00a51c07006","0x1301e4968a515810494015180100348ec0300700a0380c96501c8c002a4a","0x120052c40380724a00a0380380e04e0156a82400a9280382300a46407023","0x714b00a9280294903201c6600e01c9280294700a74c0714928e01d25005","0x2a4a00a8a40298701c8ac02a4a00a8ac0280601c0b002a4a00a52c029d8","0x282600a51c0701e00a9280281e00a1f80724b00a92802a4b00a09c07229","0x700701c0b01301e4968a51581000a0b002a4a00a0b0029d501c09802a4a","0x11580500c038a8805494014138053a00380724a00a0640297701c03925005","0x3f00e496015250054960141380e45201525005452014c380e45601525005","0xa8805494014a88053aa038130054940141300528e0380f0054940140f005","0x12500501c0140300e02001525005476014d780e2a20980f24b4528ac08005","0x300528e0380380549401403805362038028054940140280504e03807005","0x28740200180380501c040af80e0e8015250050e80140d00e00c01525005","0x3805494014070052bc03914a2b0340651807400a8a51581a0328c03a24a","0x280600a5a80700e4940140700701c8ec02ad600c0152500700e0145a00e","0x16b80501c5700701000a9280287400a0680707400a9280280e23c0380724a","0x723000a9280280e2400380724a00a8ec0296a01c0392500501c01c0700e","0x125005032014c580e03406403a4a00a0400298a01c04002a4a00a8c00281a","0x722b00a015158054940140281a00e6300700500a9280280500a60c0700e","0x9100e0320152500501c6340701000a9280280e2b40391d8054940140715a","0x280e00a0180700e494014071c201c0392500501c1100722b00a9280280e","0xf24b4520192500500e0380392401c01c02a4a00a01c02a3b01c03802a4a","0x2a4b00a8ec0700e4940140700701c09802ad80340152500703c014ac00e","0x701a00a9280281a45601c9300e04808c03a4a00a92c0298e01c92c02a4a","0x1250054520140300e01c9280280e00e038138055b28c002a4a00e09002991","0x714b29251c0324a00a08d148072ba038118054940141180547603914805","0x700701c0b002ada0e801525007296014aa00e460015250054600640386b","0x395d01c52402a4a00a52402a3b01c51c02a4a00a51c0280601c03925005","0x382f00a5500707400a9280287402001c9480e05e55ca8806494014a4947","0x1380e2a2015250052a20140300e01c9280280e00e038188055b601802a4a","0x2a4a00a0191d807252038ab805494014ab8054760380280549401402805","0x16e16000a9280383500a5480703506856c0324a00a55c0295100c4ac07006","0x396600a4b8071662c601d250052c0014a800e01c9280280e00e0383a805","0x1250052ce0183a2300341d0a780e01c9280280e00e0381d8055ba59c02a4a","0x294501c5a802a4a00a0f8b18072940381f0054940141e0052600381e005","0x703400a9280283400a09c0715b00a9280295b00a0180716b00a9280296a","0xd0052840380724a00a0380380e2d60d0ad80600a5ac02a4a00a5ac02934","0x2a3000a62c0700e4940143a0052820380724a00a0180294101c03925005","0x294501c10802a4a00a100b1807294038200054940141d80527e0380724a","0x703400a9280283400a09c0715b00a9280295b00a0180704400a92802842","0x1180053160380724a00a0380380e0880d0ad80600a11002a4a00a11002934","0x287400a5040700e494014030052820380724a00a0680294201c03925005","0x1a00504e038ad805494014ad80500c038238054940143a8052900380724a","0x12500501c01c0704706856c0300508e0152500508e0149a00e06801525005","0x724a00a0680294201c03925005460014c580e01c9280287400a5040700e","0x1250052dc55c0394a01c5b802a4a00a0c40293f01c039250054760140000e","0x280504e038a8805494014a880500c03826005494014b780528a038b7805","0x12500501c01c0704c00a54403005098015250050980149a00e00a01525005","0x724a00a8ec0280001c03925005034014a100e01c92802a3000a62c0700e","0x1250052e65240394a01c5cc02a4a00a0b00293f01c039250050200140000e","0x280504e038a3805494014a380500c038bb805494014bb00528a038bb005","0x12500501c01c0717700a51c030052ee015250052ee0149a00e00a01525005","0x724a00a8ec0280001c03925005034014a100e01c9280281000a0000700e","0x1250050b208c0394a01c16402a4a00a09c0293f01c039250050320143900e","0x280504e039148054940151480500c038bc805494014bc00528a038bc005","0x12500501c01c0717900a8a4030052f2015250052f20149a00e00a01525005","0x724a00a0640287201c039250054760140000e01c9280281000a0000700e","0x1250052f492c0394a01c5e802a4a00a0980293f01c03925005456014fa00e","0x280504e039148054940151480500c038be8054940142980528a03829805","0x12500501c0900717d00a8a4030052fa015250052fa0149a00e00a01525005","0x300e03406403a4a00a1d0029f501c0392500501c7080700e00a01407005","0x380549401403805362038028054940140280504e0380700549401407005","0x125005020014de80e47601525005476014a380e00c0152500500c0143f00e","0x2a300200691d80600e014070193ec039180054940151800547603808005","0x700701c09c02ade04801525007046014fb80e0460980f24b4528ac0824a","0x39f901c0392500528e014f600e29251c03a4a00a090029f801c03925005","0x1158054940151580500c03816005494014a58053f4038a5805494014a4819","0x12500503c0143f00e49601525005496014d880e452015250054520141380e","0x114a2b02001416005494014160053f6038130054940141300528e0380f005","0x282700a7f00700e4940140c8052ee0380724a00a0380380e0580980f24b","0x29b101c8a402a4a00a8a40282701c8ac02a4a00a8ac0280601c54402a4a","0x702600a9280282600a51c0701e00a9280281e00a1f80724b00a92802a4b","0x2a4a00a8ec029fd01c5441301e4968a51581000a54402a4a00a544029fb","0x280700a6c40700500a9280280500a09c0700e00a9280280e00a01807010","0x81fe01c1d002a4a00a1d00281a01c01802a4a00a0180294701c01c02a4a","0x72294560680ca300e801514a2b034065180744940143a01000c01c0280e","0x280504e038070054940140700500c0380d0194600411da4a00a8ec029e3","0xd00e00c0152500500c014a380e00e0152500500e014d880e00a01525005","0xf24b4528ac3a24a00a1d00800600e014070103fe0383a0054940143a005","0x11580500c0380724a00a0380380e0480156f82300a9280382600a46407026","0xa380e49601525005496014d880e452015250054520141380e45601525005","0x1614b29251c138744940140c81e4968a5158744000380f0054940140f005","0x282300a5880700e4940140700701c55c02ae02a2015250070580150080e","0xb500e06856c03a4a00a54402a0201c03925005062014b500e0620bc03a4a","0x2a4a00a0385500e06a0152500503456d1802f4767940700e4940141a005","0x1380500c038b18054940143a8053b00383a805494014b003500e33007160","0xa380e29201525005292014d880e28e0152500528e0141380e04e01525005","0x7163296524a38270e8014b1805494014b18053aa038a5805494014a5805","0x29d101c039250050460150180e01c9280281a00a34c0700e49401407007","0x1380e04e0152500504e0140300e2cc015250052ae014e800e01c92802a30","0xa5805494014a580528e038a4805494014a4805362038a3805494014a3805","0x700e4940140700701c598a594928e09c3a0052cc015250052cc014ea80e","0xe800e01c9280281900a7b00700e4940140d0051a60380724a00a8c0029d1","0x1148054940151480504e039158054940151580500c038b380549401412005","0x1250052ce014ea80e03c0152500503c014a380e49601525005496014d880e","0x280500a2300700500a9280280e00a8100716703c92d14a2b0e8014b3805","0x2a4a00a0390300e01c0140280e00a9280280e40a0380280500a01402a4a","0x280e00a9280280e4120380700500a03802a4a00a0390400e01c0140280e","0x280500a51c0700e00a9280280e00a09c0700e494014038053a603807005","0x800549401c3a0054160383a23b00c0192500500a03803a0a01c01402a4a","0x2a3b00a51c0700600a9280280600a09c0700e4940140700701c8c002ae1","0x11480549401d158054160391581a0320192500547601803a0c01c8ec02a4a","0x2a2900a8340701e00a9280281000a8340700e4940140700701c92c02ae2","0x2a0e01c03925005046014a100e04808c03a4a00a09802a0e01c09802a4a","0x702400a9280282400a8400700e49401413805284038a382700e9280281e","0x2a4a00a0390900e2920152500528e09003a1101c51c02a4a00a51c02a10","0xc80504e03816005494014a594900e8ac0714b00a9280294b00a0680714b","0x3005058015250050580143b00e03401525005034014a380e03201525005","0x1250054960145e80e01c9280281000a8500700e4940140700701c0b00d019","0xa88050ec0380d0054940140d00528e0380c8054940140c80504e038a8805","0x2a4a00a8c0028bd01c0392500501c01c07151034064030052a201525005","0x295700a1d80723b00a92802a3b00a51c0700600a9280280600a09c07157","0x287400a5240707447601d2500500c0150a80e2ae8ec0300600a55c02a4a","0x118005034039180054940140721701c04002a4a00a1d002a1601c1d002a4a","0x17181a00a9280381900a8a40701900a92802a3002001d1580e46001525005","0x3a4a00a8ec02a1801c039250050340152580e01c9280280e00e03915805","0x280e00e0381202304c0197201e49601d250074520140700643203914a3b","0x2a4b00a09c0714700a9280282700a8680702700a9280280e1540380724a","0x715c01c0b002a4a00a51c02a1b01c52c02a4a00a0780294701c52402a4a","0x282600a09c0715100a9280282400a8700700e4940140700701c03972805","0x2a1d01c0b002a4a00a54402a1b01c52c02a4a00a08c0294701c52402a4a","0x724a00a0380380e0620157302f00a9280395700a8a40715700a9280282c","0x2a4a00a5240282701c56c02a4a00a8ec02a1e01c0392500505e0152580e","0xa59494768880715b00a9280295b00a87c0714b00a9280294b00a51c07149","0x28d301c0392500501c01c0716006a0d0030052c00d41a006494014ad807","0x282701c1d402a4a00a0c402a2301c03925005476014b180e01c92802807","0x287500a9280287500a8900714b00a9280294b00a51c0714900a92802949","0x280700a34c0700e4940151d8052c60380724a00a0380380e0ea52ca4806","0x280528e038070054940140700504e038b1805494015158054460380724a","0x280e00e8940716300a038030052c6015250052c60151200e00a01525005","0x2a4a00a038029d401c01c0280500e0152500500e014c180e00e01525005","0x2a2701c0392500501c01c0723b00ab9c0300700e9280380500a2b407005","0x723000a9280287400a8a00701000a9280280700a6180707400a92802806","0xc8054540380c805494014070aa01c0392500501c01c0700e5d00140715c","0xe600e460015250050340151400e02001525005476014c300e03401525005","0x12500501c01c0724b00aba51480549401d180054580391580549401408005","0x281e00a8b80701e00a92802a2900a67c0722900a92802a2900a3c80700e","0x11580700a09802a4a00a09802a3101c8ac02a4a00a8ac02a3b01c09802a4a","0x702300a9280280e1540380724a00a92c0296a01c0392500501c01c07026","0x2a4a00a09002a3101c8ac02a4a00a8ac02a3b01c09002a4a00a08c02a3a","0x280501c0152500501c0142c80e01c0152500501c8f40702445601c02824","0x701946001d750100e801d2500700a0380380501c0392500501c7080700e","0x722900a9280280e23c0391581a00e92802a3b00a6280700e49401407007","0x2a4a00a8ac0281a01c03925005496014c580e03c92c03a4a00a8a40298a","0x3a00500c038130054940140f22b00e8fc0701e00a9280281e00a0680722b","0x700e4940140700701c09002aeb0460152500704c0145a00e0e801525005","0x3805494014038054760383a0054940143a00500c0380724a00a08c0296a","0x714b00abb0a480549401ca3805482038a382700e928028070e801d2000e","0xab80549401ca88055da038a882c00e9280294900a90c0700e49401407007","0x295700abbc0700600a9280280600a1640700e4940140700701c0bc02aee","0x281a01c56c02a4a00a0389000e062015250052ae01803af001c55c02a4a","0x1a005494014ad81a00e9400715b00a9280295b00a0680701a00a9280281a","0x1250050580151d80e020015250050200141380e04e0152500504e0140300e","0x138743740381a0054940141a00503403818805494014188050b203816005","0x700e4940140700701c1d4b003500c0143a96006a019250050680c416010","0x716300a9280282f00a3800700e4940140300502c0380724a00a0680298b","0x12500504e0140300e2ce015250052cc014db00e2cc015250052c60b0038e2","0x802700c014b3805494014b3805366038080054940140800504e03813805","0x700e4940140300502c0380724a00a0680298b01c0392500501c01c07167","0x2a4a00a0400282701c09c02a4a00a09c0280601c0ec02a4a00a52c02af1","0xb500e01c9280280e00e0381d81004e0180283b00a9280283b00a6cc07010","0x7100e0780152500500c0157900e01c9280281a00a62c0700e49401412005","0x2a4a00a1d00280601c5a802a4a00a0f8029b601c0f802a4a00a0f003807","0xb50100e80180296a00a9280296a00a6cc0701000a9280281000a09c07074","0xb00e01c92802a3b00a62c0700e494014038052d60380724a00a0380380e","0x281a01c10002a4a00a038b300e2d60152500501c7380700e49401403005","0x704400a9280280e3be038210054940142016b00e8940704000a92802840","0x1250054600140300e2dc0152500508e0157880e08e01525005084110038d7","0xca3000c014b7005494014b70053660380c8054940140c80504e03918005","0x3a4a00a014029e101c01402a4a00a038f200e01c9280280e00a5dc0716e","0x700500c0380724a00a038e100e00c0140280e494014038053a603803007","0x2c80e00e0152500500e014a380e00a0152500500a0141380e01c01525005","0x28194600403a23b4940151d80600e014070745e60391d8054940151d805","0x280500a9280280500a40c0700500a9280280e00abd0070194600403a23b","0x38055ec038038054940140380520603803805494014070055ea03802805","0xe580e00c0152500500c0140d00e00a0152500500a014c180e00c01525005","0x70055ee03807005494014070053020391d80500a8ec02a4a00a01802807","0xe100e01c9280280e0880383a005494014072f801c0140280500a01525005","0x280e00e0380d01900ebe51801000e9280380501c01c0280e01c9280280e","0x280601c8ad1d807494014038055f403803805494014038051dc0380724a","0x11480549401d158055f60391d8054940151d87400e9440701000a92802810","0x2a3000a09c0701000a9280281000a0180700e4940140700701c92c02afc","0x11dafd01c01802a4a00a0180298301c8a402a4a00a8a402a3b01c8c002a4a","0x702700abf81200549401c1180516e0381182603c0192500500c8a518010","0x700e494014a48052d4038a494700e9280282400a6140700e49401407007","0x2a4a00a8ec028ee01c09802a4a00a0980282701c07802a4a00a07802806","0xa882c2960192500528e8ec1301e47668c0714700a9280294700a60c0723b","0x138056000380724a00a8ec02aff01c0392500501c01c0715105852c03005","0x18080e04c0152500504c0141380e03c0152500503c0140300e2ae01525005","0x2a4b00a5a80700e4940140700701c55c1301e00c014ab805494014ab805","0x282f00c01d8100e05e0152500501c2a80700e4940151d8055fe0380724a","0x282701c04002a4a00a0400280601c56c02a4a00a0c402b0301c0c402a4a","0x280e00e038ada300200180295b00a9280295b00ac040723000a92802a30","0x12500500e0157f80e01c9280280600a0c40700e4940143a00549e0380724a","0x2a4a00a0d40281a01c0d402a4a00a038b300e0680152500501c7380700e","0xb007500e35c0707500a9280280e3be038b00054940141a83400e89407035","0x1380e032015250050320140300e2cc015250052c60158000e2c601525005","0x280601c5980d01900c014b3005494014b30056020380d0054940140d005","0x700700a9280280700a09c0700500a9280280500a61c0700e00a9280280e","0x300700a0380830401c1d002a4a00a1d00285901c01802a4a00a01802947","0x280e00ac140722b034065180100e80151581a0328c0080744940143a23b","0x280e01c9280280e3840380280500a01402a4a00a0140281a01c01402a4a","0x11d8053140380724a00a0380380e0328c003b060201d003a4a00e01407007","0x701e49601d25005452014c500e4520152500501c4780722b03401d25005","0xf0054940140f00503403915805494015158050340380724a00a92c0298b","0x382600a2d00707400a9280287400a0180702600a9280281e45601d1f80e","0x2a3b01c03925005046014b500e01c9280280e00e0381200560e08c02a4a","0xa480549401ca3805322038a382700e9280280700a6380700700a92802807","0x294900a0680700600a9280280600a60c0700e4940140700701c52c02b08","0x281a01c54402a4a00a0389000e05801525005292018039cb01c52402a4a","0xab805494014a881a00e9400715100a9280295100a0680701a00a9280281a","0x12500504e0151d80e020015250050200141380e0e8015250050e80140300e","0x3a074340038ab805494014ab805034038160054940141600530603813805","0x700e4940140700701c56c1882f00c014ad83105e019250052ae0b013810","0x703400a9280294b00a6680700e494014030050620380724a00a0680298b","0x1250050e80140300e2c00152500506a0147b00e06a0152500506809c03998","0x807400c014b0005494014b00051f0038080054940140800504e0383a005","0x700e4940140d0053160380724a00a0900296a01c0392500501c01c07160","0x1250052c60147b00e2c6015250050ea01c0399801c1d402a4a00a01802b09","0xb30051f0038080054940140800504e0383a0054940143a00500c038b3005","0x724a00a8ec0298b01c0392500501c01c071660201d0030052cc01525005","0x716700a9280280e39c0380724a00a0180283101c0392500500e014b580e","0x2a4a00a0ecb380744a0381d8054940141d8050340381d80549401407166","0x296a00ac280716a00a9280283c07c01c6b80e07c0152500501c77c0703c","0x28f801c06402a4a00a0640282701c8c002a4a00a8c00280601c5ac02a4a","0x280530e038070054940140700500c038b58194600180296b00a9280296b","0xd00e00c0152500500c014a380e00e0152500500e0141380e00a01525005","0x11d80600e0140723061603808005494014080053060383a0054940143a005","0x280e00a018072294560680ca300e801514a2b0340651807449401408074","0x294701c01c02a4a00a01c0282701c01402a4a00a0140298701c03802a4a","0x701000a9280281000a60c0707400a9280287400a0680700600a92802806","0xd0194601d002a294560680ca300e8928028100e88ec0300700a0391830c","0x380504e038028054940140280530e038070054940140700500c03914a2b","0x18680e0e8015250050e80140d00e00c0152500500c014a380e00e01525005","0x11581a0328c00807400a8ac0d0194600403a24a00a1d11d80600e01407010","0x12500500e0141380e00a0152500500a014c380e01c0152500501c0140300e","0x80050340383a0054940143a005034038030054940140300528e03803805","0x80744760180380501c0658700e460015250054600140d00e02001525005","0x12500501c0140300e4968a51581a0321d002a4b4528ac0d0190e892802a30","0x723b49c038038054940140380528e038028054940140280504e03807005","0x380501c01d8780e4600403a23b476015180100e88ed1da4a00a01803805","0x707400a9280280600ac440700e4940140700701c8ec02b1000c01c03a4a","0x700701c1d00380700a1d002a4a00a1d002b1201c01c02a4a00a01c02806","0x11d80500c039180054940140800562603808005494014070aa01c03925005","0x12500500a014ea00e4608ec03805460015250054600158900e47601525005","0x12500501c01c0723000ac540807400e9280380600e8ec0723b6280391d805","0x281a00a0d40701a00a9280281900a0d00701900a9280281000a7300700e","0x3a00700a8ac02a4a00a8ac0296001c1d002a4a00a1d00280601c8ac02a4a","0x11480549401514805034039148054940140731601c0392500501c01c0722b","0x1250074960141d80e460015250054600140300e49601525005452014b380e","0x283e01c08c02a4a00a0780283c01c0392500501c01c0702600ac5c0f005","0x1250054600140300e0480152500504c0143a80e01c9280280e00e03807023","0x2805494014070053a80381223000e01412005494014120052c003918005","0x331901c01c0280500e0152500500e0148180e00e0152500500a0158c00e","0x11d8056360380724a00a0380380e0201d003b1a47601803a4a00e01c0280e","0xae00e034015250054600152900e0320152500500c0140300e46001525005","0x3a00500c039158054940140800563a0380724a00a0380380e01cc700280e","0x281a01c8a402a4a00a0398f00e034015250054560152900e03201525005","0xc8054940140c80500c039258054940151481a00ec7c0722900a92802a29","0x700700a01402a4a00a038f200e49606403805496015250054960159000e","0x280700a09c0700500a9280280500a61c0700e00a9280280e00a01807005","0x281a01c8ec02a4a00a8ec0294701c01802a4a00a0180287e01c01c02a4a","0x3a23b00c01c0280e032c840723000a92802a3000a8ec0701000a92802810","0x280601c07925a294560680c81000a07925a294560680c81049401518010","0x700700a9280280700a51c0700500a9280280500a09c0700e00a9280280e","0x280601c8c0080744768ec02a300201d11da3b4940140300700a0391db22","0x700700a9280280700a09c0700500a9280280500a61c0700e00a9280280e","0x2a4a00a0400281a01c8ec02a4a00a8ec0294701c01802a4a00a0180287e","0x1250054600403a23b00c01c0280e032c8c0723000a92802a3000a8ec07010","0x2a4a00a8ec02a4d01c07925a294560680c81000a07925a294560680c810","0x280500a09c0700e00a9280280e00a0180723000a9280281000ac9007010","0x281a01c01802a4a00a0180294701c01c02a4a00a01c029b101c01402a4a","0x125a294560680c8744940143a23000c01c0280e020c940707400a92802874","0x3a4a00a0140298e01c01402a4a00a01402a3b01c92d14a2b0340643a005","0x3b2701c0392500501c01c0707400ac991d80549401c0300532203803007","0x1250054600159480e01c9280280e00e0380c8056508c00800749401d1d80e","0xd0056540380380549401403805476038080054940140800500c0380d005","0x115805494014070aa01c0392500501c01c0701a00e0400300503401525005","0x12500500e0151d80e032015250050320140300e452015250054560159580e","0x700e4940140700701c8a40381900c015148054940151480565403803805","0x2a4a00a01c02a3b01c03802a4a00a0380280601c92c02a4a00a1d002b2b","0x2805494014028054760392580701c01802a4b00a92802a4b00aca807007","0x380e0e80159623b00a9280380600a6e40700600e01d2500500a014e000e","0xd00e01c0152500501c0140300e020015250054760146f00e01c9280280e","0x1250054600140300e0328c003a4a00a0400700765a0380800549401408005","0x3a3000c0140c8054940140c805498038038054940140380547603918005","0x2a4a00a0380280601c06802a4a00a1d002b2e01c0392500501c01c07019","0xd00701c0180281a00a9280281a00a9300700700a9280280700a8ec0700e","0x30074940140380538003803805494014038054760380724a00a038e100e","0x280e47a0380724a00a0380380e0200159787400a92803a3b00a6e40723b","0x282701c03802a4a00a0380280601c06402a4a00a1d0028de01c8c002a4a","0x723000a92802a3000a1640700600a9280280600a8ec0700500a92802805","0x72294560680324a00a0651800600a0383a1ba01c06402a4a00a0640281a","0x125005496014b780e01c9280280e00e0380f00566092c02a4a00e8a40296e","0x19900e01c9280280e00e0381380566209002a4a00e08c0284c01c08c13007","0xa4805494014a48056660380724a00a51c0281601c524a380749401412005","0x282c04c01d9b00e058015250052960159a80e296015250052920159a00e","0x282701c06802a4a00a0680280601c55c02a4a00a54402b3701c54402a4a","0x280e00e038aba2b0340180295700a9280295700ace00722b00a92802a2b","0x2b3701c0c402a4a00a0bc1300766c03817805494014138056720380724a","0x722b00a92802a2b00a09c0701a00a9280281a00a0180715b00a92802831","0xf0054a60380724a00a0380380e2b68ac0d00600a56c02a4a00a56c02b38","0x19c00e456015250054560141380e034015250050340140300e06801525005","0x281000ace40700e4940140700701c0d11581a00c0141a0054940141a005","0x300e0ea015250052c00159b80e2c00152500506a01803b3601c0d402a4a","0x3a8054940143a805670038028054940140280504e0380700549401407005","0x2a4a00a038dc00e00a0380380500a0152500501c3040707500a03803005","0x118054940140712201c07802a4a00a0399d00e4520152500501c1440701a","0xe100e01c9280280e088038a48054940140704201c09c02a4a00a0399d80e","0x1250052960159e80e05e55ca882c2961d1250050200159e00e01c9280280e","0x298a01c56c02a4a00a0c402b3e01c0c402a4a00a0c402a1001c0c4a5807","0xc500e2c00152500501ccfc0700e4940141a0053160381a83400e9280295b","0xb1805494014b18050340380724a00a1d40298b01c58c3a807494014b0005","0x380e076015a096700a9280396600a2d00716600a9280296306a01da000e","0x294701c0f002a4a00a0140282701c039250052ce014b500e01c9280280e","0x700701c039a100501c5700716a00a9280294b00a8400703e00a92802a3b","0x11d80528e038028054940140280504e0380724a00a0ec0296a01c03925005","0x2a4a00e10802a0b01c1082016b00c92802a3b00a01d0500e47601525005","0x2a0d01c5bcb7007494014a580541c0380724a00a0380380e08e015a1844","0x700e494014b9805284038bb17300e9280284c00a8380704c00a92802844","0x1250052de5d803a1101c5bc02a4a00a5bc02a1001c5d802a4a00a5d802a10","0x2c97700e8ac0705900a9280285900a0680705900a9280280e688038bb805","0x700e4940140700701c5e802b452f2015250072f00151480e2f001525005","0x1f0054940142000528e0381e005494014b580504e0380724a00a5e402a4b","0x12500507c014a380e078015250050780141380e2d4015250052dc0150800e","0x1a418100a9280397f00ad1c0717f2fa14c0324a00a0f81e00768c0381f005","0x12500501c0140300e17001525005302015a480e01c9280280e00e038c1805","0x2b4a01c2dc02a4a00a2dc02b4b01c2dca8807494014a880569403807005","0x12500530a2dc07006698038c2805494014c2805696038c28b800e928028b8","0x2e8074560380b0054940140b0050340380b0054940140734d01c174c3007","0x724a00a0380380e0c4015a718800a9280398700a8a40718700a92802816","0x2a4a00a2e002b4b01c61802a4a00a6180280601c039250053100152580e","0xc3006698038c4805494014c4805696038c495700e9280295700ad28070b8","0xc6005494014c6005034038c60054940140734f01c62cc5007494014c48b8","0x380e322015a818e00a9280398d00a8a40718d00a9280298c31601d1580e","0x1a900e0d81ac03a4a00a1d002b5101c0392500531c0152580e01c9280280e","0xc5005494014c500500c038c98054940145b0056a60385b00549401436005","0x1250052fa014a380e00e0152500500e014d880e0a6015250050a60141380e","0x281a01c65416007494014160056aa038c9805494014c98056a8038be805","0xcf19c0e465ccb074494014ca9932fa01c2998a020d580719500a92802995","0x29a200a21c0700e4940140700701c1e002b573440152500733c014da80e","0x735801c1ec02a4a00a690028b201c69002a4a00a6900288c01c69002a4a","0x71a600a928029a50f601d1580e34a0152500534a0140d00e34a01525005","0x1250053520152580e01c9280280e00e0383f0056b26a402a4a00e69802a29","0xd80056a6038d8005494014d60056a4038d608000e9280286b00ad440700e","0x280601c6d402a4a00a6d0029de01c6d002a4a00a0385500e36201525005","0x707200a9280287200a6c40719700a9280299700a09c0719600a92802996","0x3a4a00a0b002b5501c6c402a4a00a6c402b5401c67002a4a00a67002947","0xcb2306b4038da805494014da80511803843805494014438050340384382c","0x2a4a00a0640d00738a0384308c03224444874494014da88736267039197","0xdc0054960380724a00a0380380e0a2015ad9b800a9280388600a8a407019","0x3a0c01c23002a4a00a2300294701c24402a4a00a2440282701c03925005","0x700701c25c02b5c3780152500712a0150580e12a24c4900649401446091","0x12500549607803b5d01c92c02a4a00a0bcab9510585a83a14f01c03925005","0x280601c09802a4a00a6f002a0d01c710de807494015258056bc03925805","0x700600a9280280600a1f80709200a9280289200a09c0708900a92802889","0x3a4a00a09802b3d01c71002a4a00a710029bd01c24c02a4a00a24c02947","0x835f01c09802a4a00a0981180724c038e2805494014e2805420038e2826","0x2a4a00a8ad148071360384f1474562704d874494014e29c412601849089","0x71c600ad801200549401c4f0050c4038a3805494014a394900e5e40722b","0x709c00a9280289c00a09c0709b00a9280289b00a0180700e49401407007","0x11809c136019b100e0480152500504809c03b6101c8c002a4a00a8c002a3b","0x12500501c01c070a600ad90e500549401ce48056c6038e49c814201925005","0x282600ad98071cf00a928029ca00ad94071cd00a9280282400a6240700e","0x294701c72002a4a00a7200282701c28402a4a00a2840280601c2a802a4a","0x71cd00a928029cd00a068070aa00a928028aa00ad9c0714700a92802947","0x569d43a48ed2500539e734551473902840836801c73c02a4a00a73c02983","0xeb8053120380724a00a0380380e3b4015b49d700a928039d600a188071d6","0xc500e1720152500501cda8070b416401d250053bc014c500e3bc01525005","0x5a0054940145a0050340380724a00a7880298b01c1d8f10074940145c805","0x12500501cdac070bd00a9280287616801d1f80e0ec015250050ec0140d00e","0xf20052d40380724a00a0380380e3cc015b61e400a928038bd00a2d00700e","0x712001c03925005182014c580e18630403a4a00a2c80298a01c03925005","0xd00e01c928029e300a62c071e13c601d250053ca014c500e3ca01525005","0x2a4a00a7846180747e038f0805494014f08050340386180549401461805","0x700e4940140700701c039b680501c570071dd00a928029e800a578071e8","0xef00e3b60152500501c2a80700e494014590053160380724a00a7980296a","0x70cc00a9280280e6dc038ee805494014ec805118038ec805494014ed805","0x1250073b00151480e3b00152500519877403a2b01c33002a4a00a3300281a","0x29d500a92c0700e494014071c201c0392500501c01c071d300adbcea805","0x700e494014f6005284038e70d33a0744f6074494014de8056780380724a","0x300e01c928028d300a5040700e494014e80052820380724a00a7440298b","0x568054940145680528e038ea005494014ea00504e038e9005494014e9005","0x6b9df3967311da4a00a738569d43a48edb880e39c0152500539c015b800e","0x29e000a14c0700e4940140700701c70c02b723c0015250071ae014bd00e","0x300e37201525005380015ba00e3800152500538420003b7301c70802a4a","0xc8054940140c805362038e5805494014e580504e038e6005494014e6005","0x125005372015ba80e3be015250053be014a380e456015250054560143f00e","0x125005100014f600e01c9280280e00e038dc9df456064e59cc020014dc805","0x29cb00a09c071cc00a928029cc00a018070dd00a928029c300add80700e","0x294701c8ac02a4a00a8ac0287e01c06402a4a00a064029b101c72c02a4a","0x70dd3be8ac0c9cb398040028dd00a928028dd00add4071df00a928029df","0xde8053900380724a00a200029ec01c0392500501c7080700e49401407007","0x282701c74802a4a00a7480280601c37802a4a00a74c02b7601c03925005","0x722b00a92802a2b00a1f80701900a9280281900a6c4071d400a928029d4","0x56a2b032750e901000a37802a4a00a37802b7501c2b402a4a00a2b402947","0x700e494014de8053900380724a00a200029ec01c0392500501c01c070de","0x2a4a00a7500282701c74802a4a00a7480280601c6e802a4a00a76802b76","0x28ad00a51c0722b00a92802a2b00a1f80701900a9280281900a6c4071d4","0x700701c6e856a2b032750e901000a6e802a4a00a6e802b7501c2b402a4a","0x282600a5080700e494014de8053900380724a00a200029ec01c03925005","0x28a100a018070e000a928028a600add80700e494014120056ee0380724a","0x287e01c06402a4a00a064029b101c72002a4a00a7200282701c28402a4a","0x28e000a928028e000add40714700a9280294700a51c0722b00a92802a2b","0xe400e01c9280288000a7b00700e4940140700701c380a3a2b03272050810","0x2b7801c03925005460014b580e01c9280282600a5080700e494014de805","0x1380e136015250051360140300e1c40152500538c015bb00e01c92802827","0x115805494015158050fc0380c8054940140c8053620384e0054940144e005","0x11581913826c080051c4015250051c4015ba80e28e0152500528e014a380e","0x724a00a09c02b7801c03925005100014f600e01c9280280e00e03871147","0x700e494015148051420380724a00a8c00296b01c039250052d4014a100e","0x1bd00e01c9280281e00ade40700e494014118053e80380724a00a5240285d","0x298b01c039250052a2014a080e01c9280295700a5040700e49401417805","0x1380e112015250051120140300e36c0152500512e015bb00e01c9280282c","0x3005494014030050fc0380c8054940140c8053620384900549401449005","0x30191242240800536c0152500536c015ba80e12601525005126014a380e","0x724a00a09c02b7801c03925005100014f600e01c9280280e00e038db093","0x700e494015148051420380724a00a8c00296b01c039250052d4014a100e","0xa080e01c9280282c00a62c0700e494014118053e80380724a00a5240285d","0x294101c0392500505e015bd00e01c9280281e00ade40700e494014a8805","0x1380e112015250051120140300e366015250050a2015bb00e01c92802957","0x3005494014030050fc0380c8054940140c8053620384880549401448805","0x30191222240800536601525005366015ba80e11801525005118014a380e","0x724a00a09c02b7801c039250052ae014a080e01c9280280e00e038d988c","0x700e494015180052d60380724a00a0bc02b7a01c039250052d4014a100e","0xc580e01c9280282300a7d00700e494014a48050ba0380724a00a8a4028a1","0x29c601c0392500503c015bc80e01c9280295100a5040700e49401416005","0x280601c6bc02a4a00a1f802b7601c039250050d6014f600e01c9280281a","0x707200a9280287200a6c40719700a9280299700a09c0719600a92802996","0x2a4a00a6bc02b7501c67002a4a00a6700294701c01802a4a00a0180287e","0x724a00a55c0294101c0392500501c01c071af3380183919732c040029af","0x700e494014178056f40380724a00a5a80294201c0392500504e015bc00e","0xfa00e01c9280294900a1740700e494015148051420380724a00a8c00296b","0x2b7901c039250052a2014a080e01c9280282c00a62c0700e49401411805","0x3c0056ec0380724a00a1ac029ec01c03925005034014e300e01c9280281e","0xd880e32e0152500532e0141380e32c0152500532c0140300e35a01525005","0xce005494014ce00528e03803005494014030050fc0383900549401439005","0x724a00a0380380e35a6700307232e6580800535a0152500535a015ba80e","0x700e494014b50052840380724a00a09c02b7801c039250052ae014a080e","0x2e80e01c92802a2900a2840700e494015180052d60380724a00a0bc02b7a","0x294101c03925005058014c580e01c9280282300a7d00700e494014a4805","0x3a0053d80380724a00a068029c601c0392500503c015bc80e01c92802951","0x282701c62802a4a00a6280280601c6ac02a4a00a64402b7601c03925005","0x700600a9280280600a1f80700700a9280280700a6c40705300a92802853","0xbe80600e14cc501000a6ac02a4a00a6ac02b7501c5f402a4a00a5f402947","0x700e494014138056f00380724a00a55c0294101c0392500501c01c071ab","0x5080e01c92802a3000a5ac0700e494014178056f40380724a00a5a802942","0x298b01c03925005046014fa00e01c9280294900a1740700e49401514805","0xd00538c0380724a00a07802b7901c039250052a2014a080e01c9280282c","0x286200add80700e4940145c0052820380724a00a1d0029ec01c03925005","0x29b101c14c02a4a00a14c0282701c61802a4a00a6180280601c3a002a4a","0x717d00a9280297d00a51c0700600a9280280600a1f80700700a92802807","0x700e4940140700701c3a0be80600e14cc301000a3a002a4a00a3a002b75","0x1bd00e01c9280296a00a5080700e494014138056f00380724a00a55c02941","0x285d01c039250054520145080e01c92802a3000a5ac0700e49401417805","0xa88052820380724a00a0b00298b01c03925005046014fa00e01c92802949","0x287400a7b00700e4940140d00538c0380724a00a07802b7901c03925005","0x2980504e038070054940140700500c038d5005494014c18056ec0380724a","0xa380e00c0152500500c0143f00e00e0152500500e014d880e0a601525005","0xd517d00c01c2980e020014d5005494014d50056ea038be805494014be805","0x1bd00e01c9280282700ade00700e494014ab8052820380724a00a0380380e","0x285d01c039250054520145080e01c92802a3000a5ac0700e49401417805","0xa88052820380724a00a0b00298b01c03925005046014fa00e01c92802949","0x287400a7b00700e4940140d00538c0380724a00a07802b7901c03925005","0x280e00a018070ea00a9280297a00add80700e494014b70052840380724a","0x287e01c01c02a4a00a01c029b101c5ac02a4a00a5ac0282701c03802a4a","0x28ea00a928028ea00add40704000a9280284000a51c0700600a92802806","0x1bc00e01c9280295700a5040700e4940140700701c3a82000600e5ac07010","0x28a101c03925005460014b580e01c9280282f00ade80700e49401413805","0x160053160380724a00a08c029f401c039250052920142e80e01c92802a29","0x281a00a7180700e4940140f0056f20380724a00a5440294101c03925005","0x12500508e015bb00e01c9280294b00a5080700e4940143a0053d80380724a","0x3805362038b5805494014b580504e038070054940140700500c03876005","0x1ba80e08001525005080014a380e00c0152500500c0143f00e00e01525005","0x700e494014070052ee0387604000c01cb580e0200147600549401476005","0x724a00a01c029ec01c01803807494014028056f603802805494014070c1","0x2b7e01c8c002a4a00a04002b7d01c04002a4a00a8ec02b7c01c01802805","0x700500a9280280500a09c0700e00a9280280e00a0180701900a92802a30","0x2a4a00a06402b7f01c01802a4a00a0180294701c01c02a4a00a01c029b1","0xd0744940143a01900c01c0280e020e000707400a9280287400a06807019","0x700e4940140700701c08c02b8104c0152500703c014da80e03c92d14a2b","0x12500504e0144880e28e09c03a4a00a0900288901c09002a4a00a09802887","0x1250052960144480e29601525005292014ed00e2920152500501c2a80700e","0xa8805118038a3805494014a38051180380724a00a0b00289101c54416007","0x702f00a9280295700ae0c0715700a9280295128e01dc100e2a201525005","0x2a4a00a8ac0282701c06802a4a00a0680280601c0c402a4a00a0bc02b84","0x283100ae140724b00a92802a4b00a51c0722900a92802a2900a6c40722b","0x125005046015c300e01c9280280e00e03818a4b4528ac0d07400a0c402a4a","0x114805362039158054940151580504e0380d0054940140d00500c038ad805","0x3a0052b6015250052b6015c280e49601525005496014a380e45201525005","0xc807494015180057100391801000e92802a3b00ae1c0715b4968a51581a","0x2a4a00a0380280601c8ac02a4a00a039c480e01c9280281900a5dc0701a","0x280600a51c0700700a9280280700a6c40700500a9280280500a09c0700e","0x1250054560680300700a0380838a01c8ac02a4a00a8ac0281a01c01802a4a","0x12500501c01c0702700ae301200549401c118057160381182603c92d14874","0x1250054960141380e452015250054520140300e01c9280282400ae340700e","0x11487471c0383a0054940143a005034038130054940141300528e03925805","0x282701c51c02a4a00a51c0280601c0b0a594928e8ed250050e80401324b","0x714b00a9280294b00a51c0701e00a9280281e00a6c40714900a92802949","0xc580e01c9280280e00e0381614b03c524a387400a0b002a4a00a0b002b8f","0x300e2a20152500504e015c800e01c9280281000a74c0700e4940143a005","0xf0054940140f005362039258054940152580504e0391480549401514805","0x1301e4968a43a0052a2015250052a2015c780e04c0152500504c014a380e","0x297701c06518007494014080057100380807400e92802a3b00ae4407151","0x282701c03802a4a00a0380280601c06802a4a00a039c900e01c92802a30","0x700600a9280280600a51c0700700a9280280700a6c40700500a92802805","0x125a294561d1250050340640300700a0380838a01c06802a4a00a0680281a","0x2b8d01c0392500501c01c0702400ae4c1180549401c130057160381301e","0x1ca00e28e0152500504e1d003a5a01c09c02a4a00a0385500e01c92802823","0x1148054940151480504e039158054940151580500c038a4805494014a3805","0x125005292015ca80e03c0152500503c014a380e49601525005496014d880e","0x724a00a1d0029ec01c0392500501c01c0714903c92d14a2b0e8014a4805","0x1250054520141380e456015250054560140300e29601525005048015cb00e","0xa580572a0380f0054940140f00528e039258054940152580536203914805","0x294701c03802a4a00a0380282701c52c0f24b4528ac3a00529601525005","0x125007476015cc00e476018038064940140280e00ee5c0700500a92802805","0x2b9b01c8c002a4a00a1d002b9a01c0392500501c01c0701000ae643a005","0x11581a0e89280281900ae700701900a92802a3000a9640723000a92802a30","0x2a4b00a5080700e4940151580573c0380724a00a06802b9d01c07925a29","0x282600ae800702600a92802a2900ae7c0700e4940140f0053160380724a","0x2ba101c01802a4a00a0180294701c01c02a4a00a01c0282701c08c02a4a","0x125005020015d100e01c9280280e00e0381180600e0180282300a92802823","0x12005742038030054940140300528e038038054940140380504e03812005","0x280500a51c0700e00a9280280e00a09c0702400c01c0300504801525005","0x3a00549401d1d8057300391d80600e0192500500a03803b9701c01402a4a","0x2a3000ae6c0723000a9280287400ae680700e4940140700701c04002ba3","0x125a294560683a24a00a06402b9c01c06402a4a00a8c002a5901c8c002a4a","0x724a00a8a40294201c03925005456015cf00e01c9280281a00ae740701e","0x2a4a00a09802ba001c09802a4a00a92c02b9f01c0392500503c014c580e","0x282300ae840700600a9280280600a51c0700700a9280280700a09c07023","0x12005494014080057440380724a00a0380380e0460180380600a08c02a4a","0x125005048015d080e00c0152500500c014a380e00e0152500500e0141380e","0x2a4a00a01c02ba501c01c02a4a00a03802ba401c0900300700c01412005","0x280600a6280707400a92802a3b00ae940723b00a9280280500ae9007006","0xc580e03406403a4a00a1d00298a01c03925005020014c580e46004003a4a","0x701a00a9280281a00a0680723000a92802a3000a0680700e4940140c805","0x2ba601c03802a4a00a0380294901c8ac02805456015250050348c003a3f","0x12500701c0152d80e00e0140280700a9280280500a2c80700500a9280280e","0x29e201c01802a4a00a014028b901c0392500501c01c0700700ae9c02805","0x724a00a0380380e47601402a3b00a92802a3b00a1d80723b00a92802806","0x1250050200145e80e0200152500500e1d0038d701c1d002a4a00a038ef80e","0x700600a9280280600a87c0723000a01518005494015180050ec03918005","0x125005476015d500e0201d003a4a00a01c02ba901c8ec02a4a00a01802ba8","0x118005756038028054940140280528e038070054940140700504e03918005","0x3a2b00a0b00722b0340640324a00a8c00800501c8edd600e46001525005","0x70aa01c03925005452014a880e01c9280280e00e0392580575a8a402a4a","0x702300a9280282600aebc0702600a9280281e0e801dd700e03c01525005","0x2a4a00a08c02a2401c06802a4a00a0680294701c06402a4a00a06402827","0x2a2301c039250050e80146980e01c9280280e00e0381181a03201802823","0x701a00a9280281a00a51c0701900a9280281900a09c0702400a92802a4b","0x6f00e00e0152500501c0146f00e0480680c80600a09002a4a00a09002a24","0x30054940140300503403803805494014038050340380300549401402805","0x700701c1d002bb001c92803a3b00a9600723b00a9280280600e01d2800e","0x11800511803918005494014080053bc03808005494014070aa01c03925005","0x5500e01c9280287400aec40700e4940140700701c8c00280546001525005","0x281a00a9280281a00a2300701a00a9280281900a7680701900a9280280e","0x70072480380280549401402805476038070054940140700500c0380d005","0x280e00e038080057641d002a4a00e8ec0295801c8ec0300700c92802805","0x299101c065180074940140300531c03803005494014030054760380724a","0x38054940140380500c0380724a00a0380380e456015d981a00a92803819","0x12580534a03925a2900e92802a3000e01c3d80e460015250054600151d80e","0x1202300e9280281e00a6980700e4940140700701c09802bb403c01525007","0xd07400ced80700e4940140700701c51c02bb504e01525007048014d480e","0x16005494014a582300eee00714b00a9280294900aedc0714900a92802827","0x1250052a2015dd00e452015250054520140300e2a201525005058015dc80e","0x298b01c039250050e8014a100e01c9280280e00e038a8a2900e014a8805","0x702f00a9280295704601ddc00e2ae0152500528e015dd80e01c9280281a","0x2a4a00a0c402bba01c8a402a4a00a8a40280601c0c402a4a00a0bc02bb9","0x3a0052840380724a00a0680298b01c0392500501c01c0703145201c02831","0x2bba01c8a402a4a00a8a40280601c56c02a4a00a09802bbc01c03925005","0x724a00a1d00294201c0392500501c01c0715b45201c0295b00a9280295b","0x283500aee40703500a9280283446001ddc00e06801525005456015dd80e","0x380700a58002a4a00a58002bba01c01c02a4a00a01c0280601c58002a4a","0x1250050ea01803bb801c1d402a4a00a04002bbb01c0392500501c01c07160","0xb3005774038038054940140380500c038b3005494014b1805772038b1805","0x280700a1640700700a9280280501c01dde80e2cc01c038052cc01525005","0x2a4a00a01c0281a01c01c02a4a00a014070074ae0380380500a01c02a4a","0x280500a09c0700e494014030053a60380724a00a038e100e00e01402807","0x1180100e80192500500e01403a0a01c01c02a4a00a01c0294701c01402a4a","0x281900a8340700e4940140700701c06802bbe032015250074600150580e","0x2a1001c03925005452014a100e4968a403a4a00a8ac02a0e01c8ac02a4a","0xd00e04c0152500501cf000701e00a92802a4b00aefc0724b00a92802a4b","0x2a4a00e08c02a2901c08c02a4a00a0980f0074560381300549401413005","0x280e00a0180700e494014120054960380724a00a0380380e04e015e0824","0x33c201c04002a4a00a0400294701c1d002a4a00a1d00282701c03802a4a","0x715700af0ca880549401c1600536a0381614b29251d1da4a00a0403a00e","0x4600e0620152500501cf100702f00a9280295100a21c0700e49401407007","0x2a4a00a0c41780745603818805494014188050340381780549401417805","0x1a0054960380724a00a0380380e06a015e283400a9280395b00a8a40715b","0x2b3301c039250052c00140b00e0ea58003a4a00a8ec02b3201c03925005","0x714700a9280294700a0180716300a9280287500acd00707500a92802875","0x2a4a00a58c02b7001c52c02a4a00a52c0294701c52402a4a00a52402827","0x703c07659cb323b00a0f01d9672cc8ed250052c652ca4947476dc407163","0x300e07c0152500506a015e300e01c92802a3b00a0580700e49401407007","0xa5805494014a580528e038a4805494014a480504e038a3805494014a3805","0xb00e01c9280280e00e0381f14b29251d1d80507c0152500507c015e380e","0x714700a9280294700a0180716a00a9280295700af180700e4940151d805","0x2a4a00a5a802bc701c52c02a4a00a52c0294701c52402a4a00a52402827","0x1e300e01c92802a3b00a0580700e4940140700701c5a8a594928e8ec0296a","0x3a0054940143a00504e038070054940140700500c038b580549401413805","0xb58100e80391d8052d6015250052d6015e380e02001525005020014a380e","0x704000a9280281a00af180700e4940151d80502c0380724a00a0380380e","0x2a4a00a0400294701c1d002a4a00a1d00282701c03802a4a00a03802806","0x2a4a00a03802bc801c1000807401c8ec0284000a9280284000af1c07010","0x7700e00a0152500501c015e480e00a0140280500a9280280500a06807005","0x380500af2c0700500a9280280e00af280700500a0140280549401402805","0x707400a9280280600a9700700e4940140700701c8ec02bcc00c01c03a4a","0x700e79c0140715c01c8c002a4a00a1d002bcd01c04002a4a00a01c02981","0xc080e03401525005032015e780e0320152500501c2a80700e49401407007","0x11580549401408005792039180054940140d00579a038080054940151d805","0x2a2900af480700e4940140700701c92c02bd145201525007460015e800e","0x28ee01c09802a4a00a07802bd401c07802a4a00a8a402bd301c8a402a4a","0x12500501c01c0702645601c0282600a9280282600af540722b00a92802a2b","0x2a4a00a08c02a5601c08c02a4a00a0385500e01c92802a4b00a5a80700e","0x702445601c0282400a9280282400af540722b00a92802a2b00a3b807024","0x3a0054940151d8057ac0391d80700e9280280700a5ec0700e494014071c2","0x125005020014d500e020015250050e80148480e0e8015250050e80151d80e","0xc8071d803803005494014030053060380724a00a8c0028ea01c06518007","0x700e00a9280280e00a0180722b00a9280280700af580701a00a92802806","0x2a4a00a0680298301c8ac02a4a00a8ac02a3b01c01402a4a00a01402827","0x281601c07925a2900c0140f24b452019250050348ac0280e476f5c0701a","0x1380e00a0152500500a014c380e01c0152500501c0140300e01c92802874","0x11d80600e014070747b0038030054940140300528e0380380549401403805","0x3a4a00a0400282f01c8ac0d0194600403a0054560680ca300201d125005","0x281900af640701900a9280281900a6180700e494015180050620380ca30","0x282701c01402a4a00a0140298701c03802a4a00a0380280601c06802a4a","0x707400a9280287400a0680700600a9280280600a51c0700700a92802807","0x114a2b0e89280281a0e88ec0300700a039183da01c06802a4a00a06802a3b","0x4380e01c9280280e00e038120057b608c02a4a00e098029b501c0980f24b","0x12500501c01c0714900af70a380549401c138051680381380549401411805","0x2a4a00a52c0281a01c52c02a4a00a0388f00e01c9280294700a5a80700e","0x1b500e01c9280294900a5a80700e4940140700701c039ee80501c5700702c","0x715700a9280282c00af780702c00a9280295100a0680715100a9280280e","0x2a4a00a8a40298701c8ac02a4a00a8ac0280601c0bc02a4a00a55c02bdf","0x282f00af800701e00a9280281e00a51c0724b00a92802a4b00a09c07229","0x1250050480152a80e01c9280280e00e0381781e4968a51587400a0bc02a4a","0x12580504e039148054940151480530e039158054940151580500c03818805","0x3a00506201525005062015f000e03c0152500503c014a380e49601525005","0x700500a9280280500a61c0700e00a9280280e00a0180703103c92d14a2b","0x2a4a00a1d00281a01c01802a4a00a0180294701c01c02a4a00a01c02827","0x3a24a00a0403a23b00c01c0280e460c2c0701000a9280281000a60c07074","0x280601c039250050e8014c580e4528ac0d0194601d002a294560680ca30","0x700700a9280280700a09c0700500a9280280500a61c0700e00a9280280e","0xd0194600403a24a00a8ec0300700a0383a3d801c01802a4a00a01802947","0x724a00a0400298b01c039250050e8014c580e4560680ca300201d002a2b","0x2a4a00a0140298701c03802a4a00a0380280601c03925005460014c580e","0x280e0e8f600700600a9280280600a51c0700700a9280280700a09c07005","0x30057c203925a294560680c87400a92d14a2b0340643a24a00a8ec03007","0x1f200e020015250050e8015f180e0e801525005476015f100e47601525005","0x70054940140700500c0380724a00a8c002be501c0651800749401408005","0x125005032015f300e00e0152500500e014a380e00a0152500500a0141380e","0x125a294560691d8054968a51581a4769280281900e0140723b7ce0380c805","0x280500a62c0700e4940140700701c01802be900e0152500701c015f400e","0x3a0056400383a0054940151d8057d60391d805494014038057d40380724a","0x700500a9280280500a0680700e4940140700701c1d0028050e801525005","0x280e00e0380c8057d88c002a4a00e0400283b01c04002a4a00a01402967","0x700e4940140700701c0380d00507c0380d005494015180050780380724a","0x2a2b00c01df680e00c0152500500c0148180e4528ac03a4a00a06402a5d","0x19000e04c0152500503c015f700e03c0152500545292c038d701c92c02a4a","0x380504e0380d01900e9280287400a7840702600a0141300549401413005","0x1158064940140d23b00e018f400e47601525005476014a380e00e01525005","0x2a4b01c0392500501c01c0702600afbc0f00549401d2580545203925a29","0x702700a9280282400afc40702404601d25005032015f800e01c9280281e","0x125005292015fa00e29652403a4a00a51c02bf301c51c02a4a00a09c02bf2","0x2a2900a51c0722b00a92802a2b00a09c0700e00a9280280e00a0180700e","0x1623b494014a5a294560391dbf501c52c02a4a00a52c02a5401c8a402a4a","0xf080e01c9280280e00e038ad8057ec0c402a4a00e0bc0286201c0bcab951","0x2a4a00a0b00280601c58002a4a00a0c40298901c0d41a00749401411805","0x280600a1f80715100a9280295100a09c0700500a9280280500a61c0702c","0xd00e0ea58003a4a00a58002b5501c55c02a4a00a55c0294701c01802a4a","0x2a4a00a58c0281a01c58c08007494014080056aa0383a8054940143a805","0x2a302c61d41a95700c5440282c034fdc0723000a92802a3000a8ec07163","0x700701c10002bf82d6015250072d40151480e2d40f81e03b2ce5980824a","0x1d80504e03821005494014b00057f20380724a00a5ac02a4b01c03925005","0x1fd80e08401525005084015fd00e07c0152500507c014a380e07601525005","0x260057f85bc02a4a00e5b80291901c5b82384400c928028420680f81da3b","0x724a00a5d80296a01c5d8b9807494014b78052c40380724a00a0380380e","0x12500508e014a380e088015250050880141380e2cc015250052cc0140300e","0xbba3b4940140817308e110b307471c038080054940140800503403823805","0x282701c59c02a4a00a59c0298701c5dc02a4a00a5dc0280601c5e4bc059","0x717800a9280297800a51c0703c00a9280283c00a1f80705900a92802859","0x700e4940140700701c5e4bc03c0b259cbb81000a5e402a4a00a5e402b8f","0xb3005494014b300500c038bd005494014260057200380724a00a0400298b","0x1250050780143f00e088015250050880141380e2ce015250052ce014c380e","0xb3966020014bd005494014bd00571e038238054940142380528e0381e005","0x283400a74c0700e494014080053160380724a00a0380380e2f411c1e044","0x296600a0180705300a9280284000ae400700e494014b00053160380724a","0x287e01c0ec02a4a00a0ec0282701c59c02a4a00a59c0298701c59802a4a","0x285300a9280285300ae3c0703e00a9280283e00a51c0703c00a9280283c","0xc580e01c9280282300a74c0700e4940140700701c14c1f03c07659cb3010","0x300e2fa015250052b6015c800e01c92802a3000a5ac0700e49401408005","0xa8805494014a880504e038028054940140280530e0381600549401416005","0x1250052fa015c780e2ae015250052ae014a380e00c0152500500c0143f00e","0x125005020014c580e01c9280280e00e038be95700c5440282c020014be805","0x2a4a00a09802b9001c03925005032014e980e01c92802a3000a5ac0700e","0x2a2b00a09c0700500a9280280500a61c0700e00a9280280e00a0180717f","0x2b8f01c8a402a4a00a8a40294701c01802a4a00a0180287e01c8ac02a4a","0x723b00a9280280600af840717f4520191580501c0400297f00a9280297f","0x3a4a00a04002be401c04002a4a00a1d002be301c1d002a4a00a8ec02be2","0x280500a09c0700e00a9280280e00a0180700e494015180057ca0380ca30","0x11dbe701c06402a4a00a06402be601c01c02a4a00a01c0294701c01402a4a","0x280e00a0180724b4528ac0d23b00a92d14a2b0348ed2500503201c0280e","0x287e01c01c02a4a00a01c0282701c01402a4a00a0140298701c03802a4a","0x701000a9280281000a0680723b00a92802a3b00a51c0700600a92802806","0xc810494015180100e88ec0300700a0380cb2101c8c002a4a00a8c002a3b","0x1200e01c9280280e00a74c0701e4968a51581a0320400281e4968a51581a","0x280e494014038052ee0380300700e9280280500a5d80700500a9280280e","0x12500500a015fe80e00a0152500501c7980700e494014070052ee03803005","0x11801000e9280287400a6280700600a0140724a00a01c029d101c01803807","0x125005034014c580e45606803a4a00a0640298a01c06402a4a00a039ff00e","0x115a3000e8fc0722b00a92802a2b00a0680723000a92802a3000a0680700e","0x700e4940140700701c07802bff496015250074520145a00e45201525005","0x1180549401413005802038130054940151d8058000380724a00a92c0296a","0x12500500a0141380e01c0152500501c0140300e048015250050460160100e","0x120056fe038030054940140300528e038038054940140380536203802805","0x28100480180380501c041c000e020015250050200140d00e04801525005","0xb500e01c9280280e00e0381614b29251c1387400a0b0a594928e09c3a24a","0x70aa01c03925005476014e880e01c9280281000a62c0700e4940140f005","0x1c200e05e015250052ae015c180e2ae015250052a2014ef00e2a201525005","0x28054940140280504e038070054940140700500c0381880549401417805","0x125005062015c280e00c0152500500c014a380e00e0152500500e014d880e","0x11d8058060180380749401c0280e00e9780703100c01c0280e0e801418805","0x38054940140380500c0383a005494014030058080380724a00a0380380e","0x280e1540380724a00a0380380e0e801c038050e8015250050e80152600e","0x2a4c01c8ec02a4a00a8ec0280601c8c002a4a00a04002b2e01c04002a4a","0x280e00b0140700e00a9280280e00accc0723047601c02a3000a92802a30","0x280549401402805034038028054940140700574a0380280500a01402a4a","0x3a3f01c01402a4a00a0140281a01c03802a4a00a0380281a01c01402805","0x280e00a09c0700600a0140300549401403805164038038054940140280e","0x11d80600e0192500500a03803c0601c01402a4a00a0140294701c03802a4a","0x287400b0240700e4940140700701c04002c080e8015250074760160380e","0x2c0c01c06402a4a00a8c002c0b01c8c002a4a00a8c002c0a01c8c002a4a","0x700e494015148052840380724a00a0680294101c8a51581a00c92802819","0x2a4a00a01c0282701c07802a4a00a92c02c0e01c92c02a4a00a8ac02c0d","0xf00600e0180281e00a9280281e00b03c0700600a9280280600a51c07007","0x38054940140380504e03813005494014080058200380724a00a0380380e","0x702600c01c0300504c0152500504c0160780e00c0152500500c014a380e","0x20980e01c9280280e00e0380807400f0491d80600e9280380700a03803411","0xd005494015180058280380c8054940140300500c039180054940151d805","0x300e456015250050200160b00e01c9280280e00e0380741500a038ae00e","0x1148054940140d00582e0380d005494015158058280380c8054940143a005","0x20c00e45206403805452015250054520144600e032015250050320140300e","0x20d00e00a0140280500a9280280e00b0640700501c01c0280500a9280280e","0x118005494015180056a80380724a00a04002c1b01c8c0080074940151d805","0x12500500a0141380e01c0152500501c0140300e032015250054600160e00e","0xc80583a038030054940140300528e038038054940140380536203802805","0x28740320180380501c0420f00e0e8015250050e80140d00e03201525005","0x1180074940151d8058340380f24b4528ac0d07400a07925a294560683a24a","0x1250050320160e00e03201525005032015aa00e01c92802a3000b06c07019","0x3805362038028054940140280504e038070054940140700500c0380d005","0xd00e034015250050340160e80e00c0152500500c014a380e00e01525005","0xd00600e0140723083e03808005494014080051180383a0054940143a005","0x12500501d0800702603c92d14a2b0e80141301e4968a51587449401408074","0x700e494014071c201c0392500501c1100701a00a9280280e08403918005","0x700500a9280280500a09c0722900a9280280e8440391580549401407421","0xd0072f20380f0194960192500500c01403c2301c01802a4a00a01802947","0x724a00a0380380e0460161282600a9280381e00b0900701900a92802819","0x1250050480161400e048015250050480161380e0480152500504c0161300e","0x12500500e0143f00e2920152500501d0a80714700a9280280e85203813805","0x3806858038a4805494014a4805034038a3805494014a380585603803805","0xb003506856c1882f2ae5440f24a00a09c02c2d01c0b0a5807494014a4947","0x2c2e01c039250052ae014a100e01c9280295100a62c0703b2ce598b1875","0x1a8053160380724a00a56c0298b01c03925005062014b580e01c9280282f","0x296300a5ac0700e4940143a80585c0380724a00a58002c2f01c03925005","0x125005076014b580e01c9280296700a3a80700e494014b30051d40380724a","0x2c3101c0f802a4a00a0f01a2294568ee1800e0780152500501c4800700e","0x714b00a9280294b00a1f80700e494014b5005864038b596a00e9280283e","0x284000a1f80704208001d250052d652c03c3401c5ac02a4a00a5ac02c33","0x342c01c10802a4a00a1080281a01c0b002a4a00a0b002c2b01c10002a4a","0x3a04708801a1a80e0e8015250050e80150800e08e11003a4a00a10816040","0x724b00a92802a4b00a09c0700e00a9280280e00a018070102dc01d25005","0x1250050208c003c3601c8ec02a4a00a8ec029bd01c5b802a4a00a5b80287e","0x1250072ec0143100e2ec5cc2616f47692802a3b2dc92c0723b86e03808005","0x287e01c5e002a4a00a5dc0298901c0392500501c01c0705900b0e0bb805","0x717800a9280297800a0680701000a9280281000b0ac0717300a92802973","0x1ef00e2fa14c03a4a00a5e8bc807872038bd17900e928029780205cc0342c","0xb7805494014b780500c038c0805494014bf8057be038bf805494014be805","0x125005032014a380e0a6015250050a60143f00e098015250050980141380e","0x12500501c01c0718103214c2616f0e8014c0805494014c08057c00380c805","0x1250052de0140300e306015250050b20152a80e01c9280281000b0e80700e","0xc80528e038b9805494014b98050fc038260054940142600504e038b7805","0x700701c60c0c9730985bc3a00530601525005306015f000e03201525005","0x287400a5080700e494015180058760380724a00a8ec029c801c03925005","0x1250050460152a80e01c92802a2b00a62c0700e494015148053160380724a","0x38050fc039258054940152580504e038070054940140700500c0385c005","0x3a00517001525005170015f000e03201525005032014a380e00e01525005","0x700500c038030054940140715701c0392500501c708070b803201d2580e","0x11d80e00c0152500500c014c180e00a0152500500a0141380e01c01525005","0x28b701c0403a23b00c9280280700c0140723b8780380380549401403805","0xd0074940151800530a0380724a00a0380380e0320161ea3000a92803810","0x1250054520161f80e452015250050340161f00e01c92802a2b00a5a80722b","0x1258058800383a0054940143a00504e0391d8054940151d80500c03925805","0x2a4a00a06402c4101c0392500501c01c0724b0e88ec0300549601525005","0x281e00b1000707400a9280287400a09c0723b00a92802a3b00a0180701e","0x701000a9280280e8840380724a00a038e100e03c1d11d80600a07802a4a","0x2a4a00a0640281a01c03925005460014c580e0328c003a4a00a8ec0298a","0x3a00505e0380d0054940140801900e6300701000a9280281000a60c07019","0x1380e01c0152500501c0140300e01c92802a2b00a0c40722945601d25005","0xd0054940140d005306039148054940151480530c0380280549401402805","0x22202300a9280382600a2dc0702603c92c0324a00a0691480501c8ee2180e","0x294700a5a80714704e01d25005046014c280e01c9280280e00e03812005","0xa580530c0380724a00a5240283101c52ca48074940141380505e0380724a","0x22300e2a20152500500c0162280e05801525005296014ad80e29601525005","0x3a44701c55c02a4a00a55c0281a01c0392500501cdac0715700a9280280e","0x724a00a0380380e2c00d41a00689056c1882f00c9280382c2ae5440381e","0x125005062014a380e2c60152500505e0141380e0ea015250052b60162480e","0x724a00a0380380e01d12c0280e2b8038b38054940143a805894038b3005","0x12500506a014a380e2c6015250050680141380e076015250052c00162600e","0x1e00520e0381e005494014b380589a038b38054940141d805894038b3005","0x716b00a9280283e00a4340700e4940140700701c5a802c4e07c01525007","0x125005080014b580e08410003a4a00a5ac0298e01c5ac02a4a00a5ac02a3b","0x280e3840380724a00a0380380e08e0162784400a9280384200a6440700e","0x12580500c038b7805494014b70057be038b7005494014220057bc0380724a","0x1f000e2cc015250052cc014a380e2c6015250052c60141380e49601525005","0x238052d40380724a00a0380380e2de598b1a4b476014b7805494014b7805","0x260052ce0382600549401426005034038260054940140745001c03925005","0x700e4940140700701c5dc02c512ec015250072e60141d80e2e601525005","0x280e00e0380705900a0f80705900a9280297600a0f00700e494014071c2","0x1250054960140300e2f0015250052ee0152a80e01c9280280e3840380724a","0xbc0057c0038b3005494014b300528e038b1805494014b180504e03925805","0x724a00a038e100e01c9280280e00e038bc1662c692d1d8052f001525005","0x1250052c60141380e496015250054960140300e2f2015250052d40152a80e","0xb1a4b476014bc805494014bc8057c0038b3005494014b300528e038b1805","0x2a4a00a09002a5501c0392500500c0162900e01c9280280e00e038bc966","0x280700a51c0701e00a9280281e00a09c0724b00a92802a4b00a0180717a","0x12500501c7080717a00e07925a3b00a5e802a4a00a5e802be001c01c02a4a","0x12500500c0162a00e00c0152500500c015b800e4760152500501d14c0700e","0x380528e038028054940140280504e038070054940140700500c0383a005","0x22b00e476015250054760162a80e0e8015250050e80153280e00e01525005","0x22c22b00a9280381a00b15c0701a0328c00823b4940151d87400e01407074","0x1258058b40381301e496019250054560162c80e01c9280280e00e03914805","0x118058b8038118054940140f0058b60380724a00a0980296a01c03925005","0xa380e460015250054600141380e020015250050200140300e04801525005","0x380e04806518010476014120054940141200578e0380c8054940140c805","0x1380e020015250050200140300e04e01525005452015e300e01c9280280e","0x138054940141380578e0380c8054940140c80528e0391800549401518005","0x280e00b1740700500a01402805494014070054c8038138194600411d805","0x724a00a04002c5f01c8c0080074940151d8058bc0380280500a01402a4a","0x12500501c0140300e032015250054600163000e46001525005460015bf80e","0x300528e0380380549401403805362038028054940140280504e03807005","0x23100e0e8015250050e80140d00e032015250050320163080e00c01525005","0xf24b4528ac0d07400a07925a294560683a24a00a1d00c80600e01407010","0x280700a5a80700e4940140700701c01802c6300e0152500701c0145a00e","0x11d8051640391d8054940151d8051180391d805494014028052bc0380724a","0xaf00e01c9280280600a5a80700e4940140700701c1d0028050e801525005","0x12500501c0900701000a01408005494014080051180380800549401402805","0x2a3b00b1900700501c01c0280500a9280280e3cc0380280e00e01402805","0x5500e034015250050320163300e032015250054600163280e46004003a4a","0x700e00a9280280e00a0180722900a92802a2b00a7780722b00a9280280e","0x2a4a00a0180294701c01c02a4a00a01c029b101c01402a4a00a01402827","0x2a2900a2300707400a9280287400a0680701a00a9280281a00ad5007006","0x70240460980f24b0e892802a290e80680300700a0391835a01c8a402a4a","0x12500504e0152580e01c9280280e00e038a38058ce09c02a4a00e09002a29","0x294b00a9980714b00a9280294902001e3400e2920152500501c2a80700e","0x29b101c07802a4a00a0780282701c92c02a4a00a92c0280601c0b002a4a","0x282c00a9280282c00b1a40702300a9280282300a51c0702600a92802826","0x2c6a01c03925005020014e880e01c9280280e00e0381602304c07925874","0x701e00a9280281e00a09c0724b00a92802a4b00a0180715100a92802947","0x2a4a00a54402c6901c08c02a4a00a08c0294701c09802a4a00a098029b1","0x281000afc4070100e801d2500500c015f800e2a208c1301e4961d002951","0x282701c03802a4a00a0380280601c06402a4a00a8c002bf201c8c002a4a","0x701900a9280281900a9500700700a9280280700a51c0700500a92802805","0x380501c1d23580e034015250050340140d00e0348ec03a4a00a8ec02b55","0x380e0460163602600a9280381e00a8a40701e4968a515a3b4940140d019","0x282701c09002a4a00a8ec02c6d01c0392500504c0152580e01c9280280e","0x702400a9280282400b1b80724b00a92802a4b00a51c0722900a92802a29","0x1380e456015250054560140300e29251c13806494014120744968a51dc6f","0xa4805494014a480571e038a3805494014a380528e0381380549401413805","0x298b01c039250050e8014e980e01c9280280e00e038a494704e8ad1d805","0x1380e456015250054560140300e29601525005046015c800e01c92802a3b","0xa5805494014a580571e039258054940152580528e0391480549401514805","0x280e00f1c00700501c01c0280500a9280280e048038a5a4b4528ad1d805","0x2a3b00a98c0700e4940140700701c8c00807400d1c51d80600e01925007","0x2c7201c8ac02a4a00a0180294701c06802a4a00a01c0282701c06402a4a","0x2a3000b1d00700e4940140700701c03a3980501c5700722900a92802819","0x2c7201c8ac02a4a00a0400294701c06802a4a00a1d00282701c92c02a4a","0x701a00a9280281a00a09c0701e00a92802a2900b1d40722900a92802a4b","0x1cd80e03c8ac0d00600a07802a4a00a07802c7601c8ac02a4a00a8ac02947","0x280e00b1e00700500a01402805494014070058ee0380700549401407005","0xc580e47601803a4a00a01c0298a01c01c02a4a00a01402c7901c01402a4a","0x287400a92802a3b00b1e80723b00a92802a3b00a0680700e49401403005","0x700500a01402805494014028054c403802805494014070058f60383a005","0x30058f803803005494014030057560380280e00e0140280549401407024","0x11d8058fa038080054940140744201c1d002a4a00a03a2100e47601525005","0xc180e03201525005032015d580e01c92802a3000b1f80701946001d25005","0x1250050201d00c8068fe03808005494014080053060383a0054940143a005","0x298601c039250054520141880e4968a403a4a00a0680282f01c8ac0d007","0x1182600e92802a2b00a0bc0701e00a92802a4b00a56c0724b00a92802a4b","0x2a4a00a08c0295b01c08c02a4a00a08c0298601c0392500504c0141880e","0x280e00e0381614b29201a4094704e01d250070480780280e47720007024","0x282700a09c0715700a9280295100a8680715100a9280280e1540380724a","0x715c01c56c02a4a00a55c02a1b01c0c402a4a00a51c0294701c0bc02a4a","0x294900a09c0703400a9280282c00a8700700e4940140700701c03a41005","0x2a1d01c56c02a4a00a0d002a1b01c0c402a4a00a52c0294701c0bc02a4a","0x724a00a0380380e0ea0164196000a9280383500a8a40703500a9280295b","0x296600a7600716600a9280296300e01c6600e2c6015250052c00164200e","0x29d501c0c402a4a00a0c40294701c0bc02a4a00a0bc0282701c59c02a4a","0x12500500e014bb80e01c9280280e00e038b383105e0180296700a92802967","0x283100a51c0702f00a9280282f00a09c0703b00a9280287500a7400700e","0x12500501c015d200e0760c41780600a0ec02a4a00a0ec029d501c0c402a4a","0x298b01c8ec0300749401403805314038038054940140280574a03802805","0x28050e8015250054760163d00e476015250054760140d00e01c92802806","0x380500f08c0700700a9280280700a51c0700500a9280280500a09c07074","0x12500501c01c0723000b2140800549401c3a0058480383a23b00c01925005","0x281900b0a00701900a9280281900b09c0701900a9280281000b0980700e","0x1614b29251c138240460980f24b4528ac0f24a00a06802c2d01c06802a4a","0x724a00a0780296b01c039250054960161700e01c92802a2900a50807151","0x700e494014120053160380724a00a08c0298b01c0392500504c014c580e","0x7500e01c9280294900a5ac0700e494014a380585c0380724a00a09c02c2f","0x280601c039250052a2014b580e01c9280282c00a3a80700e494014a5805","0xab8074940151580e00f2180722b00a92802a2b00a0680700e00a9280280e","0x283100b2240715b05e01d2500505e0164400e0620152500501d21c0702f","0xb000549401c1a8051680381a83400e928028312b655c0326701c0c402a4a","0x2a4a00a03a4580e01c9280296000a5a80700e4940140700701c1d402c8a","0x282f00b2240716300a9280296300b2240703400a9280283400a01807163","0x1d805494014b300591a038b396600e9280282f2c60d00348c01c0bc02a4a","0xb500e01c9280280e00e0380748e00a038ae00e078015250052ce014af00e","0x280601c5a802a4a00a03a4580e07c0152500501d21c0700e4940143a805","0x716a00a9280296a00b2240703e00a9280283e00b2240703400a92802834","0x704400b2442100549401c200059200382016b00e9280296a07c0d00348f","0x716b00a9280296b00a0180704700a9280284200b2480700e49401407007","0x282f08e5ac0348c01c0bc02a4a00a0bc02c8901c11c02a4a00a11c02c89","0x1c180e078015250052de014af00e076015250052dc0164680e2de5b803a4a","0x1d8054940141d80500c038b980549401426005708038260054940141e005","0x1250052e6015c280e47601525005476014a380e00c0152500500c0141380e","0x700e494014178059260380724a00a0380380e2e68ec0303b476014b9805","0x2a4a00a0180282701c5ac02a4a00a5ac0280601c5d802a4a00a11002b86","0x11d8062d68ec0297600a9280297600ae140723b00a92802a3b00a51c07006","0x2a4a00a0380280601c5dc02a4a00a8c002b8601c0392500501c01c07176","0x297700ae140723b00a92802a3b00a51c0700600a9280280600a09c0700e","0x280500a8ec0700500a9280280e00a984071774760180723b00a5dc02a4a","0x3a23b00e9280380501c01c0280e01c9280280e3840380280500a01402a4a","0x380538003803805494014038054760380724a00a0380380e46004003c94","0x24aa2b00a9280381a00a6e40723b00a92802a3b00a0180701a03201d25005","0x12500500c014c180e456015250054560140d00e01c9280280e00e03914805","0x282701c8ec02a4a00a8ec0280601c92c02a4a00a0191580731803803005","0x724b00a92802a4b00a60c0701900a9280281900a8ec0707400a92802874","0x12500501c01c0702304c078030050460980f006494015258190e88ed1dbd7","0x12005494014070aa01c03925005032014b580e01c92802a2900a5a80700e","0x2a3b00a0180714700a9280282700ac0c0702700a9280282400c01d8100e","0x11d80600a51c02a4a00a51c02b0101c1d002a4a00a1d00282701c8ec02a4a","0x724a00a0180283101c0392500500e014b580e01c9280280e00e038a3874","0xa5805494014a5805034038a58054940140716601c52402a4a00a038e700e","0x282c2a201c6b80e2a20152500501c77c0702c00a9280294b29201d1280e","0x282701c04002a4a00a0400280601c0bc02a4a00a55c02b0001c55c02a4a","0x380504e03817a300200180282f00a9280282f00ac040723000a92802a30","0x807400c9280280600e01e1180e00c0152500500c014a380e00e01525005","0xc80584c0380724a00a0380380e0340164b01900a92803a3000b09007230","0x21680e452015250054560161400e456015250054560161380e45601525005","0x125805316038179572a20b0a594928e09c1202304c0792581e49401514805","0x282700a62c0700e4940141300585c0380724a00a0780294201c03925005","0x1250052960161700e01c9280294900b0bc0700e494014a38053160380724a","0x724a00a55c028ea01c039250052a20147500e01c9280282c00a5ac0700e","0x2a4a00a0140298701c03802a4a00a0380280601c0392500505e014b580e","0x282400a0680701000a9280281000a51c0707400a9280287400a09c07005","0x28230488ec0807400a039183da01c08c02a4a00a08c02a3b01c09002a4a","0x280e00e038b180592e1d402a4a00e580029b501c5801a8342b60c43a24a","0x296600a2300716700a9280280e930038b30054940143a80510e0380724a","0x11480e076015250052ce59803a2b01c59c02a4a00a59c0281a01c59802a4a","0x724a00a0f002a4b01c0392500501c01c0703e00b2641e00549401c1d805","0x2a4a00a5ac02bdf01c5ac02a4a00a5a802bde01c5a802a4a00a039b500e","0x283400a09c0715b00a9280295b00a61c0703100a9280283100a01807040","0x1887400a10002a4a00a10002be001c0d402a4a00a0d40294701c0d002a4a","0x1880500c038210054940141f0054aa0380724a00a0380380e0800d41a15b","0xa380e068015250050680141380e2b6015250052b6014c380e06201525005","0x704206a0d0ad8310e801421005494014210057c00381a8054940141a805","0x703100a9280283100a0180704400a9280296300a9540700e49401407007","0x2a4a00a0d40294701c0d002a4a00a0d00282701c56c02a4a00a56c02987","0x724a00a0380380e0880d41a15b0621d00284400a9280284400af8007035","0x2a4a00a0380280601c11c02a4a00a06802a5501c03925005476014e980e","0x281000a51c0707400a9280287400a09c0700500a9280280500a61c0700e","0x700530c038238100e80140707400a11c02a4a00a11c02be001c04002a4a","0x2a4a00a8ec02be101c0140280500a0152500501c014ad80e01c01525005","0x281a00af900701a00a9280281900af8c0701900a92802a3000af8807230","0x282701c03802a4a00a0380280601c03925005456015f280e4528ac03a4a","0x722900a92802a2900af980700600a9280280600a51c0700700a92802807","0x24d02400a9280382300a1880702304c07925a3b4940151480600e0391dbe7","0x1250054960140300e28e01525005048014c480e01c9280280e00e03813805","0xa38050340383a0054940143a005034038028054940140280530e03925805","0x12500502051c3a0054961d24d80e020015250050200151d80e28e01525005","0x1380e29601525005296014c380e292015250052920140300e05852ca4806","0x160054940141600570a038130054940141300528e0380f0054940140f005","0xc580e01c9280281000a5ac0700e4940140700701c0b01301e2965243a005","0x724b00a92802a4b00a0180715100a9280282700ae180700e4940143a005","0x2a4a00a0980294701c07802a4a00a0780282701c01402a4a00a01402987","0x12500501c0164e00e2a20980f0054961d00295100a9280295100ae1407026","0x12500501c0140300e00a0140280500a9280280e00b2740700500a01402805","0x24f80e0e88ec03a4a00a0180700793c03803005494014030057cc03807005","0x28054940140280504e0380724a00a04002ca001c8c0080074940143a005","0x11800700a0193000e460015250054600165080e00e0152500500e014a380e","0xc8054940140c80504e0391d8054940151d80500c0391581a03201925005","0x11581a0328ed1d80545601525005456015f000e03401525005034014a380e","0x280e9460380280500a0392500501c0165100e01c0152500501c0148180e","0x700500c0380280500a01402a4a00a03802ca401c0140700700a01402a4a","0x3a23b00e9280280601c01e5280e00c0152500500c0152a00e01c01525005","0x12500500a0141380e01c9280281000b29c0723002001d250050e80165300e","0x28069520391800549401518005950038038054940140380528e03802805","0x1250050320141380e476015250054760140300e4560680c80649401518007","0xca3b47601515805494015158057c00380d0054940140d00528e0380c805","0x2a4a00a03a1500e0340152500501d0a40700e4940143a0053a60391581a","0x2a2b00a0680701a00a9280281a00b0ac0700600a9280280600a1f80722b","0x701e00a9280280e95403925a2900e92802a2b0340180342c01c8ac02a4a","0x380504e0381182600e9280281e4968a40342c01c07802a4a00a0780281a","0x1382400c92802a3b00e01d0600e47601525005476014a380e00e01525005","0xa480541a0380724a00a0380380e2960165594900a9280394700a82c07147","0x10800e046015250050460161580e04c0152500504c0143f00e05801525005","0x281000a068071572a201d2500505808c1300686a0381600549401416005","0x3a4a00a0c4178078720381882f00e928028102ae5440342c01c04002a4a","0x1a005034038028054940140280530e038070054940140700500c0381a15b","0x24d80e032015250050320151d80e460015250054600140d00e06801525005","0x2cac2c6015250070ea014da80e0ea5801a8064940140ca3006801407074","0x1d8054940140749801c59c02a4a00a58c0288701c0392500501c01c07166","0x283b2ce01d1580e076015250050760140d00e2ce015250052ce0144600e","0x282701c58002a4a00a5800298701c0d402a4a00a0d40280601c0f002a4a","0x702700a9280282700a51c0715b00a9280295b00a1f80702400a92802824","0x700e4940140700701c0f01395b0485801a81000a0f002a4a00a0f002876","0x2a4a00a5800298701c0d402a4a00a0d40280601c0f802a4a00a598028bd","0x282700a51c0715b00a9280295b00a1f80702400a9280282400a09c07160","0x700701c0f81395b0485801a81000a0f802a4a00a0f80287601c09c02a4a","0x281000a62c0700e494015180053160380724a00a0640296b01c03925005","0x280e00a0180716a00a9280294b00a2f40700e494014118058740380724a","0x287e01c09002a4a00a0900282701c01402a4a00a0140298701c03802a4a","0x296a00a9280296a00a1d80702700a9280282700a51c0702600a92802826","0x2a4a00a01802cad01c01802a4a00a01802bfa01c5a81382604801407010","0x700504e039180054940151d8054d00380807400e9280280700ae1c0723b","0x1d600e46001525005460015d580e00a0152500500a014a380e01c01525005","0x12580595c8a402a4a00e8ac0282c01c8ac0d01900c92802a300200140723b","0x25780e03c0152500501c2a80700e494015148052a20380724a00a0380380e","0x2a4a00a0640282701c08c02a4a00a09802cb001c09802a4a00a0783a007","0x1181a0320180282300a9280282300ae3c0701a00a9280281a00a51c07019","0x702400a92802a4b00ae400700e4940143a0053a60380724a00a0380380e","0x2a4a00a09002b8f01c06802a4a00a0680294701c06402a4a00a06402827","0x280e00b2c80700500a01402805494014070059620381201a03201802824","0x2805494014028056e003802805494014070059660380280500a01402a4a","0x3b9701c01402a4a00a0140294701c03802a4a00a0380282701c01402805","0x700701c04002cb40e801525007476015cc00e476018038064940140280e","0x2a5901c8c002a4a00a8c002b9b01c8c002a4a00a1d002b9a01c03925005","0x2a2b00ae780701e4968a51581a0e89280281900ae700701900a92802a30","0x12500503c014c580e01c92802a4b00a5080700e494015148052840380724a","0x280700a09c0702300a9280282600b2d80702600a9280281a00b2d40700e","0x380600a08c02a4a00a08c02a5f01c01802a4a00a0180294701c01c02a4a","0x12500500e0141380e048015250050200165b80e01c9280280e00e03811806","0x300700c01412005494014120054be038030054940140300528e03803805","0x25c80e00a0140280500a9280280e00b2e00700e00a9280280e00b02807024","0x2a4a00a01402b4b01c0392500501c01c0700700b2e80280549401c07005","0x2a4a00a018029da01c01802a4a00a0385500e01c9280280500b2ec07005","0x38056960380724a00a0380380e47601402a3b00a92802a3b00a2300723b","0x3a0053bc0383a005494014070aa01c0392500500e0165d80e00e01525005","0x724a00a03802cbc01c04002805020015250050200144600e02001525005","0x2a4a00a01c02cbf01c01c02a4a00a01402cbe01c01402a4a00a03a5e80e","0x6f00e00a0152500501c0166080e00c0140280600a9280280600b30007006","0x3005494014038054d203803805494014038050340380380549401402805","0x281a01c8ec02a4a00a8ec02c1d01c01c02a4a00a01c029b101c01802805","0x1250054600166180e46004003a4a00a1d11d80700d3080707400a92802874","0xd00598a038070054940140700500c0380724a00a06402cc401c0680c807","0x1258074940151480598e03914a2b00e9280281a01c01e6300e03401525005","0x12500500c014a380e00a0152500500a0141380e01c92802a4b00b3200701e","0x1202304c0192500503c018028069940380f0054940140f00599203803005","0x125005020014d880e04c0152500504c0141380e456015250054560140300e","0x1322b0e8014120054940141200570a038118054940141180528e03808005","0x281a01c8ec02a4a00a8ec02c1d01c01c02a4a00a01c029b101c09011810","0x1250050320166180e0328c003a4a00a1d11d80700d3080707400a92802874","0x11580598a038070054940140700500c0380724a00a06802cc401c8ac0d007","0x28054940140280504e03925a2900e92802a2b01c01e6300e45601525005","0x1250050200144600e496015250054960166480e00c0152500500c014a380e","0x2a4a00a8a40280601c08c1301e00c9280281049601802a3b99603808005","0x282600a51c0723000a92802a3000a6c40701e00a9280281e00a09c07229","0x280e998038118264600791487400a08c02a4a00a08c0287601c09802a4a","0x700e00a9280280e99a0380700500a03802a4a00a0380281a01c03802a4a","0x280528e038070054940140700504e0380700500a03802a4a00a0380281a","0x2a4a00e8ec02b9801c8ec0300700c9280280501c01dcb80e00a01525005","0x118005736039180054940143a0057340380724a00a0380380e02001667074","0x114a2b0341d125005032015ce00e032015250054600152c80e46001525005","0x125005496014a100e01c92802a2900a5080700e4940140d00573a0380f24b","0x12500504c0166800e04c015250054560166780e01c9280281e00a62c0700e","0x118059a2038030054940140300528e038038054940140380504e03811805","0x2a4a00a04002cd201c0392500501c01c0702300c01c0300504601525005","0x282400b3440700600a9280280600a51c0700700a9280280700a09c07024","0x12500500a0166a00e00a0152500501c0166980e0480180380600a09002a4a","0x711e01c01402a4a00a0388f00e01c0152500501c4780700500a01402805","0x11dcd501c8ec02a4a00a018029da01c01802a4a00a0385500e00e01525005","0x287e01c1d0028050e8015250050e80161580e0e80152500547601c0280e","0x700700a9280280700a0680700500a9280280500b0ac0700e00a9280280e","0x700700a9280280e8520391d80600e0151d80600e9280280700a038034d6","0x38054940140380585603807005494014070050fc03803005494014074d7","0x2cd801c1d11d8074940140300701c01a1600e00c0152500500c0140d00e","0x3a4a00a0403a23b00d3640701000a9280281000b0cc0701000a92802805","0x12500501c0143f00e4560680380545606803a4a00a065180078720380ca30","0x70069b40380380549401403805420038028054940140280585603807005","0x280e0880383a0054940140742001c8ec0300700a8ec0300749401403805","0x3a4a00a01802cdb01c04002a4a00a038ab80e01c9280280e3840380724a","0x700e4940140c80528403925a294560680c8744940151800567803918006","0x26e00e01c92802a2900a5040700e494015158052820380724a00a0680298b","0x130054940140f0058a80380f0054940140f0056e00380f00549401525805","0x12500500e0143f00e00a0152500500a0141380e01c0152500501c0140300e","0x70749ba038080054940140800530603813005494014130054ca03803805","0xa58059be52402a4a00e51c02cde01c51c138240468ed2500502009803805","0x3f00e2a20152500501d3800702c00a9280280e8520380724a00a0380380e","0xa8805494014a880503403816005494014160058560381380549401413805","0x19e00e06201803a4a00a01802cdb01c0bcab807494014a882c04e01a1600e","0x283500a5040700e4940141a0053160383a96006a0d0ad87449401418805","0x1250052b6015d200e01c9280287500ade80700e494014b00052820380724a","0x71672cc01d250052c60bcab80686a038b1805494014b1805420038b1805","0xa100e0805acb503e0781d1250050760159e00e07601803a4a00a01802cdb","0x2b7a01c039250052d6014a080e01c9280296a00a5040700e4940141e005","0x21600e084015250050840140d00e0840152500507c0146f00e01c92802840","0xb7005678038b700600e9280280600b36c0704708801d2500508459cb3006","0x724a00a1300298b01c039250052de014a100e2ee5d8b984c2de1d125005","0x2c805494014b98059c20380724a00a5dc02b7a01c039250052ec014a080e","0x2b3c01c5e4bc0074940142c84708801a7100e0b2015250050b2015a580e","0x1250050a6014c580e01c9280297a00a508071812fe5f42997a0e892802806","0x2a4a00a5fc02ce101c03925005302015bd00e01c9280297d00a5040700e","0x27180e4762e003a4a00a60cbc97800d3880718300a9280298300ad2c07183","0x724a00a6180296a01c0392500516e0162d00e30c6145b806494014a4805","0x12500502c014c300e01c9280285d00a0c4070160ba01d2500530a0141780e","0x1200504e038118054940141180500c038c38054940140b0057b20380b005","0x21b00e30e0152500530e0151d80e170015250051700143f00e04801525005","0x718a312188c423b494014c38b804808d1dce401c8ec02a4a00a8ec3a007","0x125005316014c480e01c9280280e00e038c60059ca62c02a4a00e62802862","0xc68050340391d8054940151d805856038c4805494014c48050fc038c6805","0x12500532263803c3901c644c7007494014c6a3b31201a1600e31a01525005","0x280601c64c02a4a00a2d802bdf01c2d802a4a00a1b002bde01c1b035807","0x706b00a9280286b00a1f80706200a9280286200a09c0718800a92802988","0x2c3a01c0392500501c01c071930d6188c423b00a64c02a4a00a64c02be0","0x1380e310015250053100140300e32a015250053180152a80e01c92802a3b","0xca805494014ca8057c0038c4805494014c48050fc0383100549401431005","0x29c801c039250050e80161d80e01c9280280e00e038ca9890c46211d805","0x1380e046015250050460140300e32c015250052960152a80e01c92802806","0xcb005494014cb0057c003813805494014138050fc0381200549401412005","0x387400a2d00707447601803a3b494014028059cc038cb02704808d1d805","0x712001c03925005020014b500e01c9280280e00e039180059ce04002a4a","0x27400e032015250050320140d00e00e0152500500e0140d00e03201525005","0x701e4968a515a3b4940151d8060340391dce901c06802a4a00a06403807","0x722b00a92802a2b00a1f80700e4940140f0053160380724a00a92c0298b","0x2a3000a5a80700e4940140700701c8a51580700a8a402a4a00a8a40281a","0x282600a0680700600a9280280600a0680702600a9280280e2400380724a","0x11da4a00a8ec1180701c8ee7480e0460152500504c01803ce801c09802a4a","0x120050fc0380724a00a5240298b01c0392500528e014c580e29251c13824","0x724a00a038e100e04e0900380504e0152500504e0140d00e04801525005","0x11d80e01c9280280e00e0391801000f3a83a23b00e9280380501c01c0280e","0x2a4a00a8ec0280601c0680c807494014030053800380300549401403005","0x1158050340380724a00a0380380e45201675a2b00a9280381a00a6e40723b","0xd00e00e0152500500e014c180e496015250054560167600e45601525005","0x2a4a00a8ec0280601c07802a4a00a92c038073960392580549401525805","0x281900a8ec0701e00a9280281e00a60c0707400a9280287400a09c0723b","0x70240460980300504808c130064940140c81e0e88ed1dc3c01c06402a4a","0x70aa01c03925005032014b580e01c92802a2900a5a80700e49401407007","0x714900a9280294700ac0c0714700a9280282700e01d8100e04e01525005","0x2a4a00a52402b0101c1d002a4a00a1d00282701c8ec02a4a00a8ec02806","0x296b01c0392500500e0141880e01c9280280e00e038a487447601802949","0x16005034038160054940140716601c52c02a4a00a038e700e01c92802806","0x6b80e2ae0152500501c77c0715100a9280282c29601d1280e05801525005","0x2a4a00a0400280601c0c402a4a00a0bc02b0001c0bc02a4a00a544ab807","0x18a300200180283100a9280283100ac040723000a92802a3000a09c07010","0x12500500e0167680e01c9280280e3840380700500a03802a4a00a038ab80e","0x29aa01c1d002a4a00a8ec02cee01c8ec02a4a00a8ec0298601c8ec03807","0x700600a9280280600a60c0700e494014080051d40391801000e92802874","0x12500500e015ec80e00e0152500500e014c300e0320152500500c8c0038ec","0xd005476038028054940140280504e038070054940140700500c0380d005","0x324a00a0640d00501c8edeb80e03201525005032014c180e03401525005","0x700701c01c02cf000a0152500701c0167780e4968a51580600a92d14a2b","0x296001c8ec02a4a00a0180283501c01802a4a00a0140283401c03925005","0x707400a9280280e3be0380724a00a0380380e47601402a3b00a92802a3b","0x125005460014b000e460015250050200143a80e0200152500500e1d0038d7","0x280501c0152500501c0162a80e01c0152500501d3c40723000a01518005","0xe100e00a0140280500a9280280500a9940700500a9280280e00b3c80700e","0x280e00e0380ca3000f3cc0807400e9280380501c01c0280e01c9280280e","0x280601c8ac0d007494014030059e803803005494014030054ca0380724a","0x724a00a0380380e4960167b22900a92803a2b00b3d40707400a92802874","0x1250054520157780e00e0152500500e014a380e020015250050200141380e","0x1200549401c1180520e0381182603c0192500545201c080069ee03914805","0x2a3b00b1540714700a9280282400a4340700e4940140700701c09c02cf8","0x300e2920152500528e8ec03cf901c51c02a4a00a51c02a3b01c8ec02a4a","0x130054940141300528e0380f0054940140f00504e0383a0054940143a005","0x1301e0e81d22b00e292015250052920162a80e034015250050340153280e","0x700e4940140700701c55ca882c2968ec029572a20b0a5a3b494014a481a","0x702f00a9280282700b3e80700e4940151d8052fe0380724a00a06802c5a","0x2a4a00a0980294701c07802a4a00a0780282701c1d002a4a00a1d002806","0x700e4940140700701c0bc1301e0e88ec0282f00a9280282f00b3ec07026","0x2a4a00a0c51d81a00d3f00703100a9280280e1540380724a00a92c0296a","0x281000a09c0707400a9280287400a0180703400a9280295b00b3f40715b","0x3a23b00a0d002a4a00a0d002cfb01c01c02a4a00a01c0294701c04002a4a","0x125005476014bf80e01c9280280600b1680700e4940140700701c0d003810","0x2a4a00a5800281a01c58002a4a00a038b300e06a0152500501c7380700e","0x3a96300e35c0716300a9280280e3be0383a805494014b003500e89407160","0x1380e460015250054600140300e2ce015250052cc0167d00e2cc01525005","0xb3805494014b38059f6038038054940140380528e0380c8054940140c805","0x280500a0152500501d3f80700e494014070053d8038b38070328c11d805","0x2a4a00a01402d0001c01402a4a00a03a5e80e01c9280280e00b3fc07005","0x28180e00c0140280600a9280280600b4080700600a9280280700b40407007","0x38054940140380503403803805494014028051bc0380280549401407005","0x2c6101c01c02a4a00a01c029b101c0180280500c0152500500e0153700e","0x3a4a00a1d11d80700d4100707400a9280287400a0680723b00a92802a3b","0x700500c0380724a00a06402d0601c0680c80749401518005a0a03918010","0x114a2b00e9280281a01c01e8400e034015250050340168380e01c01525005","0x12500500a0141380e01c92802a4b00b4280701e49601d250054520168480e","0x2806a160380f0054940140f0054da038030054940140300528e03802805","0x12500504c0141380e456015250054560140300e04808c130064940140f006","0x1200570a038118054940141180528e038080054940140800536203813005","0x280e00e014028054940140750c01c0901181004c8ac3a00504801525005","0x1fa00e0201d003a4a00a01802bf301c0140280500a0152500501c0168680e","0x701000a9280281000a9500700e00a9280280e00a0180700e4940143a005","0x280700a51c0700500a9280280500a09c0701946001d2500502003803ca5","0x11dd0e01c8ec02a4a00a8ec0281a01c06402a4a00a06402ca801c01c02a4a","0xd00504e039180054940151800500c03914a2b0340192500547606403805","0x11d805452015250054520143b00e45601525005456014a380e03401525005","0x1c380e4760152500500c0168780e00c0152500500c0163700e4528ac0d230","0x2a4a00a0380282701c8c002a4a00a8ec02a6801c0403a00749401403805","0x280e476eb00723000a92802a3000aeac0700500a9280280500a51c0700e","0x700701c92c02d10452015250074560141600e4560680c80649401518010","0xf07400f2bc0701e00a9280280e1540380724a00a8a40295101c03925005","0xa380e032015250050320141380e0460152500504c0165800e04c01525005","0x700701c08c0d01900c014118054940141180571e0380d0054940140d005","0xc80504e03812005494015258057200380724a00a1d0029d301c03925005","0x300504801525005048015c780e03401525005034014a380e03201525005","0x28980e01c9280280e00e03803805a2401402a4a00e03802d1101c0900d019","0x11d8054940151d8058ec0391d80549401403005a280380300549401402805","0x28070e801c6b80e0e80152500501c77c0700e4940140700701c8ec02805","0x11800500a8c002a4a00a8c002c7601c8c002a4a00a04002d1501c04002a4a","0x751701c0140280500a0152500500a0168b00e00a0152500501c0153780e","0x723b00c01d2500500e014c500e00e0152500501c0146f00e00a01525005","0x724a00a1d00298b01c0403a007494014028053140380724a00a0180298b","0x281047601d1f80e020015250050200140d00e476015250054760140d00e","0x11d80e00b4600700e00a01407005494014070057560391800500a8c002a4a","0x3005a380380724a00a0380380e0200168d87400b4691d805a3201802a4a","0x28e80e00e0152500500e014c180e00a0152500500a014c180e00c01525005","0x2d1e01c0392500501c01c0701946001c0281946001d2500500e01403006","0x700700a9280280700a60c0700500a9280280500a60c0723b00a92802a3b","0x13600e01c9280280e00e0391581a00e0151581a00e9280280700a8ec0351f","0x38054940140380530603802805494014028053060383a0054940143a005","0x700e4940140700701c92d1480700a92d14807494014038050e801a9000e","0x2a4a00a01c0298301c01402a4a00a0140298301c04002a4a00a04002a62","0x12500501c0140300e04c0780380504c07803a4a00a01c0281000d48407007","0x380500c01c03a4a00a01407007a44038028054940140280503403807005","0x38059120380280549401402805912038070054940140700500c03803007","0x2a4a00a8ec028b201c8ec030074940140380501c01a9180e00e01525005","0x707400c01c0287400a9280287400a2300700600a9280280600a01807074","0x2a4a00a01402c8901c01c02a4a00a01c02c8901c03802a4a00a03802806","0x12500501c0140300e4760180380547601803a4a00a0140380e00c99c07005","0x7006a480380380549401403805912038028054940140280591203807005","0x280e00e03808005a4c1d002a4a00e8ec02d2501c8ec0300749401403805","0x300500c0380c80549401518005a50039180054940143a005a4e0380724a","0x724a00a0380380e03201803805032015250050320153580e00c01525005","0xd0054940140d0050340380d0054940140752901c03925005020014b500e","0x700701c92c02d2a452015250074560141d80e45601525005034014b380e","0x724a00a0380380e01c0780283e01c07802a4a00a8a40283c01c03925005","0x12500504c0153580e00c0152500500c0140300e04c015250054960169580e","0x2a4a00a1d002a3b01c1d11d8074940151d8052f60381300600e01413005","0x1180051d40380ca3000e9280281000a6a80701000a9280287400a42407074","0x28ea01c8a5158074940140d0053540380d0054940140752c01c03925005","0x724b00a92802a2903201e9680e452015250054520148180e01c92802a2b","0x12500503c014b500e01c9280280e00e03813005a5c07802a4a00e92c028b4","0x724a00a01c0298b01c0392500500c014c580e01c92802a3b00a5ac0700e","0x2a4a00a09002b8301c09002a4a00a08c029da01c08c02a4a00a0385500e","0x280500a61c0700e00a9280280e00a0180714700a9280282700ae1007027","0x724a00a0380380e28e0140700600a51c02a4a00a51c02b8501c01402a4a","0x70054940140700500c038a48054940140710001c0392500504c014b500e","0x294900a40c0714b00a9280294b00a8ec0714b47601d25005476014bd80e","0xab80549401ca8805a60038a882c00e928029492960380352f01c52402a4a","0x1250050580140300e0620152500501d4c80700e4940140700701c0bc02d31","0x16006a5e03818805494014188052060391d8054940151d80547603816005","0x280e00e038b0005a660d402a4a00e0d002d3001c0d0ad80749401418a3b","0x1a805312038b18054940143a8051bc0383a805494014ab8053120380724a","0xc380e2b6015250052b60140300e2ce015250052cc0146f00e2cc01525005","0x30054940140300503403803805494014038050340380280549401402805","0x38052b60429a00e2ce015250052ce0140d00e2c6015250052c60140d00e","0x1bb80e01c9280280e00e0381f03c0760180283e0780ec0324a00a59cb1806","0x2b8601c0392500500e014c580e01c9280280600a62c0700e494014ab805","0x700500a9280280500a61c0715b00a9280295b00a0180716a00a92802960","0x11d8052d60380724a00a0380380e2d4014ad80600a5a802a4a00a5a802b85","0x282f00ae180700e494014038053160380724a00a0180298b01c03925005","0x2b8501c01402a4a00a0140298701c0b002a4a00a0b00280601c5ac02a4a","0x12500501d4d40700e494014070053a6038b58050580180296b00a9280296b","0x2d3701c01402a4a00a03a9b00e01c9280280e00a9c00700500a01402805","0x280600a9280280600b4e40700600a9280280700b4e00700700a92802805","0x3805a760380380549401402805a7403802805494014028057cc03803005","0x13500e01c0152500501c0140300e01c9280280600b4f00723b00c01d25005","0x8000e0201d0038050201d003a4a00a8ec07007a7a0391d8054940151d805","0x707400a92802a3b00b4fc0723b00a9280280700b4f80700600a9280280e","0x2a4a00a0180290301c01402a4a00a0140294701c03802a4a00a03802827","0xca30020019250050e80180280e4775040707400a9280287400b50007006","0x125005460014a380e020015250050200141380e03401525005032016a100e","0x724a00a038028ea01c0691801000c0140d0054940140d0057c003918005","0x12500500a016a200e00a0152500501d4d80700e49401407005a8603807005","0x700600a01403005494014030054e20380300549401403805a8a03803805","0x3a4a00a01c02d4701c01c02a4a00a01402d4601c01402a4a00a01402a54","0x2a3b00b5240700e00a9280280e00a0180700e49401403005a900391d806","0x12500501c400070100e801c028100e801d2500547603803d4a01c8ec02a4a","0x700504e0383a0054940151d805a7e0391d80549401403805a9603803005","0x2a000e00c0152500500c0148180e00a0152500500a014a380e01c01525005","0x2d4201c0651801000c9280287400c0140723ba820383a0054940143a005","0x723000a92802a3000a51c0701000a9280281000a09c0701a00a92802819","0x28e00e00a0152500501c016a600e0348c00800600a06802a4a00a06802be0","0x2a4a00a03aa680e01c9280280e00a7440700500a0140280549401402805","0x2805a00038028054940140754f01c0392500501c016a700e00a01402805","0x280500c0152500500c016a880e00c0152500500e016a800e00e01525005","0xa080e00a0140280500a9280280500b54c0700500a9280280e00b54807006","0x2a4a00a03802d5401c03802a4a00a0380281a01c0380280e49401407005","0x20e80e01c0152500501c014d880e00e0140280700a9280280500b55407005","0x12500500e01407006aac03803805494014038050340380280549401402805","0x2a4a00a0380280601c01c02a4a00a01402d5701c8ec0300700a8ec03007","0x2d5901c8ec030074940140380e00f5600700700a9280280700b3140700e","0x12500500e016ad00e00c0152500501c4000707400c01c0287400a92802a3b","0x280528e038070054940140700504e0383a0054940151d805a7e0391d805","0x2ad80e0e8015250050e8016a000e00c0152500500c0148180e00a01525005","0x282701c06802a4a00a06402d5c01c0651801000c9280287400c0140723b","0x281a00a9280281a00ae140723000a92802a3000a51c0701000a92802810","0x282701c1d002a4a00a01c02d5a01c8ec02a4a00a0388000e0348c008006","0x723b00a92802a3b00a40c0700500a9280280500a51c0700e00a9280280e","0x3a23b00a0383a55d01c01802a4a00a0180288c01c1d002a4a00a1d002d40","0x2a4a00a0400282701c06802a4a00a06402a1d01c0651801000c92802806","0xd2300200180281a00a9280281a00a1d80723000a92802a3000a51c07010","0x12500500e0140d00e00a0152500500a0161580e01c0152500501c0143f00e","0x280700b57c0723b00c01c02a3b00c01d2500500e01407006abc03803805","0x28054940140280585603807005494014070050fc038080744760191da4a","0x281a01c065180074940140300501c01a6b00e00c0152500500c0140d00e","0x1250050e80140d00e45606803a4a00a8ec0ca3000d3580723b00a92802a3b","0x701000a9280281000a0680724b45201d250050e88ac0d0069ac0383a005","0x3805494014038054200381301e00e0141301e00e928028104968a4034d6","0x12500500a0161580e01c0152500501c0143f00e00c0152500500e0159f00e","0x287447601d2500500c01407006abc038030054940140300503403802805","0x724a00a038e100e01c9280280e088038080054940140756001c1d11d807","0x13280e01c9280280e00e0391581a00f5840ca3000e9280380501c01c0280e","0x2a4a00a8c00280601c8a43a007494014030059e80380300549401403005","0x701e00b58d2580549401d148059ea0383a0054940143a01000f58807230","0x701900a9280281900a09c0723000a92802a3000a0180700e49401407007","0x1258070328c11dd6401c92c02a4a00a92c02aef01c01c02a4a00a01c0287e","0x280e00e038a4805aca51c02a4a00e09c0286201c09c1202304c8ed25005","0xa58050340391d8054940151d805306038a5805494014a38053120380724a","0x702600a9280282600a0180702c00a9280294b47601ce580e29601525005","0x2a4a00a1d002a6501c09002a4a00a0900287e01c08c02a4a00a08c02827","0xab9514769280282c0e8090118260e93740702c00a9280282c00a60c07074","0x700e4940143a0058b40380724a00a0380380e0620bcab9514760141882f","0x130054940141300500c038ad805494014a4805acc0380724a00a8ec02831","0x1250052b6016b380e048015250050480143f00e046015250050460141380e","0x700e4940140f0052d40380724a00a0380380e2b609011826476014ad805","0x12500506a016b480e06a015250050688ec3a006ad00381a005494014070aa","0x38050fc0380c8054940140c80504e039180054940151800500c038b0005","0x280e00e038b00070328c11d8052c0015250052c0016b380e00e01525005","0x12500500c0162d00e01c9280281000b5a80700e4940151d8050620380724a","0x2a4a00a58c0281a01c58c02a4a00a038b300e0ea0152500501c7380700e","0xb316700e35c0716700a9280280e3be038b3005494014b187500e89407163","0x1380e034015250050340140300e07801525005076016b300e07601525005","0x1e0054940141e005ace03803805494014038050fc0391580549401515805","0x28054940140280585603807005494014070050fc0381e0074560691d805","0x300700a8ec030074940140380501c01ab580e00e0152500500e015a580e","0x707400a9280280e23c0391d8054940140701e01c0392500501c7080723b","0x2a4a00a8c00807400d5b00723000a9280280e23c038080054940140711e","0x280700a1f80700500a9280280500a09c0700e00a9280280e00a01807019","0x2a3b01c06402a4a00a06402d6d01c8ec02a4a00a8ec0282601c01c02a4a","0x724b4528ac0d23b4940140301947601c0280e0215b80700600a92802806","0x12500503c016b880e01c9280280e00e03813005ae007802a4a00e92c02d6f","0x138057be03813805494014120057bc0380724a00a08c0296b01c09011807","0x3f00e456015250054560141380e034015250050340140300e28e01525005","0x380e28e8a51581a476014a3805494014a38057c00391480549401514805","0x1380e034015250050340140300e2920152500504c0152a80e01c9280280e","0xa4805494014a48057c003914805494015148050fc0391580549401515805","0x2a4a00a01c0281a01c01c02a4a00a01407007ae4038a4a294560691d805","0x280500a0152500500a0140d00e00a0152500501c0146f00e00e01402807","0x2b980e00a0140280500a9280280500a40c0700500a9280280e00ac6007005","0x380749401402805ae803802805494014028056e00380280549401407005","0x700600a9280280700b5d40700647601c02a3b00a9280280700b3c807006","0xca3000c928038100e88ec0280e0e911c070100e88ec0324a00a01802d76","0x1380e03c015250050340162480e01c9280280e00e03925a2945601abb81a","0x120054940140f005894038118054940140c80528e0381300549401518005","0x1380e04e015250054960162600e01c9280280e00e0380757800a038ae00e","0x1200549401413805894038118054940151480528e0381300549401515805","0x125005046014a380e04c0152500504c0141380e28e015250050480162680e","0x12500500a03803d7901c51c1182600c014a3805494014a38052c003811805","0x700e00a9280280e00a0680700700a01403805494014038058aa03803805","0x70053620380380500a01c02a4a00a01402d7a01c01402a4a00a03802d54","0x2bd80e00e0152500500e0140d00e00a0152500500a0163080e01c01525005","0x700700a9280280500b5f00723b00c01c02a3b00c01d2500500e01407006","0x12500500e03803d7d01c01c02a4a00a01c02d0701c03802a4a00a03802806","0x30054940140710001c1d00300700a1d002a4a00a8ec02d7e01c8ec03007","0x12500501c0141380e0e8015250054760169f80e4760152500500e016bf80e","0x3a005a800380300549401403005206038028054940140280528e03807005","0x281900b570070194600400324a00a1d00300501c8eead80e0e801525005","0x2b8501c8c002a4a00a8c00294701c04002a4a00a0400282701c06802a4a","0x12500501d53c0700e49401407005b000380d2300200180281a00a9280281a","0x3005b040380300549401403805b02038038054940140280597c03802805","0x3a00549401403805a960391d8054940140710001c0180280500c01525005","0x1250054760148180e00a0152500500a014a380e01c0152500501c0141380e","0x7074b0603803005494014030050340383a0054940143a005a800391d805","0x800504e0380d0054940140c80543a0380ca300200192500500c1d11d805","0x3005034015250050340143b00e46001525005460014a380e02001525005","0x280500a01402a4a00a01402d1c01c01402a4a00a03802d8401c06918010","0x7005b0a0380700500a03802a4a00a0380281a01c03802a4a00a0388f00e","0xc180e0e80152500501d61c0700e4940140700701c8ec02d8600c01525007","0x2a4a00a1d0028073960383a0054940143a0050340380280549401402805","0x280700a60c0701000a9280281000a60c0700600a9280280600b1b807010","0x280e00e0380ca3000e0140ca3000e928028070200180358801c01c02a4a","0x281a00a0680700500a9280280500a60c0701a00a9280280eb120380724a","0xc180e47601525005476015fd00e45601525005034014039cb01c06802a4a","0x12500500e8ad1d806b1403803805494014038053060391580549401515805","0x280e00b6340700e01c016c600e01c03802d8b01c92d1480700a92d14807","0x12500500a014c180e4760152500501d6380700e4940140700701c01802a4a","0x2a1f01c1d002a4a00a8ec028073960391d8054940151d80503403802805","0x700700a9280280700a60c0707400a9280287400a60c0700600a92802806","0x3a4a00e01407007b1e0391801000e0151801000e928028070e801803278","0x2c900e4600152500501d6440700e4940140700701c0403a23b00d64003007","0x2a4a00a06402c8901c01c02a4a00a01c0280601c06402a4a00a8c003007","0x300e034015250050e804003d9201c0392500501c01c0701900e01c02819","0x2805b260380d23b00e0140d0054940140d0059120391d8054940151d805","0x70054940140700500c0380807400e9280280700b64c0723b00c01d25005","0x281000b6500723000a92802a3000b6540723047601d25005476016ca00e","0xd0074940140ca3001c01acb00e03201525005032016ca80e03204003a4a","0x1148052d40380724a00a0380380e496016cba2900a92803a2b00a2d00722b","0x2a7701c0392500503c0161700e04c07803a4a00a8ec02a7701c03925005","0x702600a9280282600b6540700e4940141180585c0381202300e92802810","0x12500704e0145a00e04e0152500504809803d9801c09002a4a00a09002d95","0x3a00585c0380724a00a51c0296a01c0392500501c01c0714900b664a3805","0x294b00a7680714b00a9280280e1540380724a00a01802c2e01c03925005","0xd00700a0b002a4a00a0b00288c01c06802a4a00a0680280601c0b002a4a","0xd0054940140d00500c0380724a00a5240296a01c0392500501c01c0702c","0x3a00603401acb00e0e8015250050e8016ca80e00c0152500500c016ca80e","0x724a00a92c0296a01c0392500501c01c071572a201c029572a201d25005","0x700e4940140800585c0380724a00a01802c2e01c039250050e80161700e","0x703100a9280282f00a7780702f00a9280280e1540380724a00a8ec02c2e","0x280601c0c40d00700a0c402a4a00a0c40288c01c06802a4a00a06802806","0x700700a9280280700b2240700500a9280280500b2240700e00a9280280e","0x28b401c0403a0074940151d805b360391d80600e9280280700a0380359a","0x700e494015180052d40380724a00a0380380e032016ce23000a92803810","0x2a4a00a06802d9e01c01802a4a00a0180280601c06802a4a00a1d002d9d","0x3a0059260380724a00a0640296a01c0392500501c01c0701a00c01c0281a","0x300500c0391480549401515805b3e03915805494014070aa01c03925005","0x12500501c0157a80e4520180380545201525005452016cf00e00c01525005","0x380e01d6840724a00e01803807b4003803005494014028055ea03803805","0x288c01c1d002a4a00a8ec029da01c8ec02a4a00a0385500e01c9280280e","0x701000a9280280e1540380724a00a0380380e0e80140287400a92802874","0x28053a80391800500a8c002a4a00a8c00288c01c8c002a4a00a040029de","0x8180e00c0152500500c014c300e01c0152500501c0140300e00c01525005","0x387400b68c0707447601d2500500e01807006b440380380549401403805","0x7900e03201525005020016d280e01c9280280e00e03918005b4804002a4a","0x1158054940140d0057bc0380d0054940140c80533e0380c8054940140c805","0x1250054520153c80e476015250054760140300e45201525005456016d300e","0x300e49601525005460016d380e01c9280280e00e03914a3b00e01514805","0x3a00531403925a3b00e01525805494015258054f20391d8054940151d805","0x722b03401d25005032014c500e0320152500501c4780723002001d25005","0x1158054940151580503403918005494015180050340380724a00a0680298b","0x380e03c016d424b00a92803a2900a2d00722900a92802a2b46001d1f80e","0x2d480e04609803a4a00a0400298a01c03925005496014b500e01c9280280e","0x700e49401413805316038a382700e9280282400a6280702400a9280280e","0x12500528e08c03a3f01c51c02a4a00a51c0281a01c08c02a4a00a08c0281a","0x296a01c0392500501c01c0702c00b6a8a580549401ca4805168038a4805","0xc500e05e0152500501d6a4071572a201d25005476014c500e01c9280294b","0xab805494014ab8050340380724a00a0c40298b01c56c1880749401417805","0x383400a2d00703400a9280295b2ae01d1f80e2b6015250052b60140d00e","0x280601c0392500506a014b500e01c9280280e00e038b0005b560d402a4a","0x3a8074940140300e00f6b00700600a9280280600a0680700e00a9280280e","0x3a80500c0380724a00a0380380e2ce016d716600a9280396300b6b407163","0x703b00a9280283b00a0680703b2a201d250052a2015aa80e0ea01525005","0x380e2d6016d796a00a9280383e00b6b40703e07801d250050761d403dac","0x2000503403821005494014075b101c10002a4a00a03ad800e01c9280280e","0x704400a9280284208001ed900e084015250050840140d00e08001525005","0x2a4a00a0393b00e01c9280280e00e038b7005b6611c02a4a00e11002dad","0x280530e038bb005494014b9805b6a038b984c00e9280296f00b6d00716f","0x2db80e04c0152500504c0140d00e2ec015250052ec016db00e00a01525005","0x2c805b720382c97700e9280296a04c5d802a3bb70038b5005494014b5005","0x700e4940140700701c5e802dba2f2015250072f0016d680e2f001525005","0x3a4a00a13002db401c14c02a4a00a5e402dbb01c5e402a4a00a5e402db7","0xbb80530e038c0805494014bf805b6a038bf805494014bf805b6c038bf97d","0x2db80e00e0152500500e0140d00e30201525005302016db00e2ee01525005","0xc180530e0385c18300e9280284700e604bba3bb700382380549401423805","0x2db80e2a2015250052a20140d00e2fa015250052fa016db00e30601525005","0xc2805b72038c28b700e928029662a25f4c1a3bb70038b3005494014b3005","0x700e4940140700701c05802dbc0ba0152500730c016d680e30c01525005","0x125005310016da80e31001525005310016db00e31061c03a4a00a2e002db4","0x3dbe01c62402a4a00a62402db701c6242e8074940142e805b7a03831005","0xc600549401cc5805b5a038c5805494014c5005b72038c5005494014c4862","0x298c00b6ec0718c00a9280298c00b6dc0700e4940140700701c63402dbf","0x70b60d801d2500531c014c500e0d664403a4a00a14c0298a01c63802a4a","0x2a4a00a1ac5b00747e03835805494014358050340380724a00a1b00298b","0xca8052d40380724a00a0380380e32c016e019500a9280399300a2d007193","0x12500501c01c0700eb820140715c01c65c02a4a00a6440281a01c03925005","0x724a00a17402a7501c0392500530e016e100e01c9280299600a5a80700e","0xce005494014390053bc03839005494014070aa01c03925005322014c580e","0x1250050780140300e3440152500533c015c200e33c01525005338015c180e","0x5b83c00c014d1005494014d100570a0385b8054940145b80530e0381e005","0xcb805494014298050340380724a00a6340296a01c0392500501c01c071a2","0x285d30e01ee180e0ba015250050ba016db80e30e0152500530e016db00e","0x2e300e01c9280280e00e0383d805b8a69002a4a00e1e002dc401c1e002a4a","0xd2805494014d2805b6c0380724a00a6980296a01c698d2807494014d2005","0x700701c20002dc70fc01525007352016d680e3520152500534a016dc80e","0x298a01c6b002a4a00a1f802dbb01c1f802a4a00a1f802db701c03925005","0xda9b400e9280299700a6280700e494014d8005316038d89b000e928029ac","0x12500536a6c403a3f01c6d402a4a00a6d40281a01c03925005368014c580e","0x296a01c0392500501c01c0709100b7204480549401c4380516803843805","0x125005122014b500e01c9280280e00e038075c900a038ae00e01c92802889","0x12500510c015c180e10c01525005118014ef00e1180152500501c2a80700e","0x5b80530e0381e0054940141e00500c03828805494014dc005708038dc005","0x12500501c01c0705116e0f0030050a2015250050a2015c280e16e01525005","0x49005494014070aa01c0392500532e014c580e01c9280288000a5a80700e","0x12500512a015c200e12a01525005126015c180e12601525005124014ed00e","0xde00570a0385b8054940145b80530e0381e0054940141e00500c038de005","0x724a00a65c0298b01c0392500501c01c071bc16e0f00300537801525005","0x12500516e014c380e078015250050780140300e12e015250050f6015c300e","0x700e4940140700701c25c5b83c00c0144b8054940144b80570a0385b805","0x5500e01c928028b800b7080700e494014298053160380724a00a0580296a","0x71c500a928029c400ae0c071c400a928029bd00a768071bd00a9280280e","0x2a4a00a2dc0298701c0f002a4a00a0f00280601c26c02a4a00a71402b84","0xb500e01c9280280e00e0384d8b70780180289b00a9280289b00ae14070b7","0x298b01c039250052cc0153a80e01c9280284c00b7080700e494014bd005","0x280e1540380724a00a01c0298b01c0392500508e0153a80e01c92802951","0x2b8401c71802a4a00a27802b8301c27802a4a00a270029da01c27002a4a","0x717700a9280297700a61c0703c00a9280283c00a018070a100a928029c6","0xb70052d40380724a00a0380380e1425dc1e00600a28402a4a00a28402b85","0x295100a62c0700e494014b30054ea0380724a00a01c0298b01c03925005","0x2a4a00a0385500e01c9280296a00a9d40700e494014130053160380724a","0x29ca00ae10071ca00a928029c900ae0c071c900a928029c800a768071c8","0x2b8501c01402a4a00a0140298701c0f002a4a00a0f00280601c29802a4a","0x1250052d6014b500e01c9280280e00e03853005078018028a600a928028a6","0x724a00a5440298b01c039250052cc0153a80e01c9280280700a62c0700e","0xe7805494014e68053b4038e6805494014070aa01c0392500504c014c580e","0x1250050780140300e3a401525005154015c200e1540152500539e015c180e","0x283c00c014e9005494014e900570a038028054940140280530e0381e005","0x700e494014130053160380724a00a59c0296a01c0392500501c01c071d2","0xed00e3a80152500501c2a80700e494014a88053160380724a00a01c0298b","0xeb805494014eb005708038eb0054940145680570603856805494014ea005","0x1250053ae015c280e00a0152500500a014c380e0ea015250050ea0140300e","0xc580e01c9280296000a5a80700e4940140700701c75c0287500c014eb805","0x298b01c039250052a2014c580e01c9280280700a62c0700e49401413005","0x2b8301c77802a4a00a768029da01c76802a4a00a0385500e01c92802806","0x700e00a9280280e00a018070b400a928028b200ae10070b200a928029de","0x380e1680140700600a2d002a4a00a2d002b8501c01402a4a00a01402987","0x38053160380724a00a0980298b01c03925005058014b500e01c9280280e","0x12500501c2a80700e4940151d8053160380724a00a0180298b01c03925005","0x3b0057080383b005494014f1005706038f10054940145c8053b40385c805","0x1c280e00a0152500500a014c380e01c0152500501c0140300e17a01525005","0x281e00a5a80700e4940140700701c2f40280e00c0145e8054940145e805","0x12500500c014c580e01c9280280700a62c0700e4940151d8053160380724a","0x2a4a00a790029da01c79002a4a00a0385500e01c9280281000a62c0700e","0x280e00a018070c300a928028c100ae10070c100a928029e600ae0c071e6","0x700600a30c02a4a00a30c02b8501c01402a4a00a0140298701c03802a4a","0x380503403803805494014028051bc0380280549401407005b9403861805","0x2a4a00a01402dcc01c0180280500c0152500500e016e580e00e01525005","0x380e00f7340700700a9280280700a9a80700e00a9280280e00a01807007","0x280600b73c0707400c01c0287400a92802a3b00b7380723b00c01d25005","0x722b034064035d14600403a00649401d1d80700a0391ddd001c8ec02a4a","0x707400a9280287400a09c0722900a92802a3000b7480700e49401407007","0x380e4520403a00600a8a402a4a00a8a402a7a01c04002a4a00a04002947","0xa380e032015250050320141380e49601525005456016e980e01c9280280e","0x2dd401c92c0d01900c01525805494015258054f40380d0054940140d005","0x3005494014028057bc0380724a00a0380380e00e016ea80500a9280380e","0x700701c8ec0280547601525005476015f000e4760152500500c015ef80e","0x2a5501c04002a4a00a01c3a0071ae0383a005494014071df01c03925005","0x12500501c016eb00e46001402a3000a92802a3000af800723000a92802810","0x3805bae038038054940140380503403803805494014028051bc03802805","0x2a4a00a0380280601c01c02a4a00a01402dd801c0180280500c01525005","0x2dda01c8ec030074940140380e00f7640700700a9280280700b5240700e","0x280500b76c0700500a9280280e00a9d00707400c01c0287400a92802a3b","0x7005494014070053620380300549401402805bb80380280500a01402a4a","0x380601c01aee80e00e0152500500e0140d00e00c0152500500c016ed80e","0x280500b77c0701047601c0281000a9280287400b7780707447601d25005","0x3de101c01802a4a00a01c02de001c01c02a4a00a01c02ddb01c01c02a4a","0x2a4a00a1d002d4001c8ec02a4a00a8ec0280601c1d11d8074940140300e","0x700500a9280280500a51c0700e00a9280280e00a09c0707447601c02874","0x300700a0391dd4101c01802a4a00a01802d4001c01c02a4a00a01c02903","0x12500501c01c0701900b7891800549401c08005ba80380807447601925005","0x281a00b7900701a00a92802a3000b78c0723000a92802a3000a0680700e","0x2de501c1d002a4a00a1d00294701c8ec02a4a00a8ec0282701c8ac02a4a","0x1250050320153d80e01c9280280e00e0391587447601802a2b00a92802a2b","0x114805bca0383a0054940143a00528e0391d8054940151d80504e03914805","0x380e00e016f380500a9280380e00b798072290e88ec0300545201525005","0x1c280e4760152500500c015c200e00c0152500500a015c180e01c9280280e","0x3a005494014071df01c0392500501c01c0723b00a0151d8054940151d805","0x2a3000ae140723000a9280281000ae180701000a928028070e801c6b80e","0x3a0054940151d805bd00391d8054940151d8051180391800500a8c002a4a","0x12500500e0148180e00a0152500500a014a380e01c0152500501c0141380e","0x7074b060383a0054940143a0050340380300549401403005a8003803805","0x11da4a00a01402ce601c0651801000c0140ca30020019250050e801803805","0x700e4940140700701c06402de9460015250070200145a00e0201d11d806","0x38054940140380503403803005494014030050340380724a00a8c00296a","0x125005456014ef00e4560152500501c2a80701a00a9280280700c01e7400e","0x700e00a9280280e00a1f80724b00a92802a290e88ec0d23b9aa03914805","0x281900a5a80700e4940140700701c92c0700700a92c02a4a00a92c02c2b","0x11d8079d003803805494014038050340391d8054940151d8050340380724a","0x70aa01c09c1202304c8ed250050e80780300e4773a40701e00a92802807","0x2a4a00a524138240468ee6a80e2920152500528e014ed00e28e01525005","0x714b04c01c0294b00a9280294b00b0ac0702600a9280282600a1f80714b","0x280e8520380724a00a038e100e01c9280280e0880383a00549401407420","0x800585603803805494014038050fc03918005494014075ea01c04002a4a","0xc8074940151801000e01a1600e460015250054600140d00e02001525005","0xc580e03c92d1480649401515805aec0391580600e9280280600b7ac0701a","0x10800e04c01525005452015d200e01c9280281e00a5ac0700e49401525805","0x280600b7ac0702404601d2500504c0680c80686a0381300549401413005","0x700e494014a3805284038a594928e0192500504e016bb00e04e01803a4a","0x160054940141600503403816005494014a48051bc0380724a00a52c0296b","0x703105e55c0324a00a01802d7601c8eca88074940141602404601a1600e","0x715b00a9280283100af580700e494014178053160380724a00a55c02942","0x2a4a00a5440287e01c01402a4a00a0140282701c03802a4a00a03802806","0x723b9c80391d8054940151d87400f0d80715b00a9280295b00a8ec07151","0x716600b7b0b180549401c3a8050c40383a96006a0d11da4a00a56ca8805","0x716000a9280296000a1f80716700a9280296300a6240700e49401407007","0x29674765800342c01c59c02a4a00a59c0281a01c8ec02a4a00a8ec02c2b","0xb5805494014b50057bc038b503e00e9280283c07601e1c80e0780ec03a4a","0x12500506a0141380e068015250050680140300e080015250052d6015ef80e","0x1a83447601420005494014200057c00381f0054940141f0050fc0381a805","0x2a4a00a59802a5501c039250054760161d00e01c9280280e00e0382003e","0x296000a1f80703500a9280283500a09c0703400a9280283400a01807042","0x280700ad2c070422c00d41a23b00a10802a4a00a10802be001c58002a4a","0x2c2b01c03802a4a00a0380287e01c01802a4a00a01c02ded01c01c02a4a","0x3a4a00a0180280e00d5780700600a9280280600a0680700500a92802805","0x11801000e9280380501c01c0280e01c9280280e3840383a23b00e0143a23b","0x3a0053800383a0054940143a0054760380724a00a0380380e03406403dee","0x2a4a00a0400280601c0980f24b00c92802a3b00b7bc0722945601d25005","0x1158054760380724a00a0380380e048016f802300a92803a2900a6e407010","0x714900a9280282300a3780714704e01d25005456014e000e45601525005","0x1250054960140d00e01c9280280e00e03816005be252c02a4a00e51c029b9","0x28de01c54402a4a00a525258079d0038a4805494014a480503403925805","0x715700a9280295700a0680701e00a9280281e00a0680715700a9280294b","0x1a8342b60c51da4a00a0981795100e8ee7480e05e015250052ae07803ce8","0x295b00a0680703100a9280283100a1f80716000c01d2500500c016f900e","0x302301c0d402a4a00a0d40281a01c0d002a4a00a0d00281a01c56c02a4a","0xad806ad80380724a00a0380380e2ce59803df32c61d403a4a00e58118010","0xb1805494014b180504e0383a8054940143a80500c0381d8054940141a834","0x125005076016b680e00c0152500500c0141300e062015250050620143f00e","0x11da4a00a09c1d80606258c3a810adc03813805494014138054760381d805","0x12500504e014b580e01c9280280e00e038b596a07c0f11d8052d65a81f03c","0x724a00a0d00298b01c0392500500c0153980e01c9280295b00a62c0700e","0x2000549401420005034038200054940140716601c0392500506a014c580e","0x1250070840141d80e2cc015250052cc0140300e08401525005080014b380e","0x283e01c5b802a4a00a1100283c01c0392500501c01c0704700b7d022005","0x1250052cc0140300e2de0152500508e016fa80e01c9280280e00e0380716e","0xb7805bec03818805494014188050fc038b3805494014b380504e038b3005","0x125005058014b500e01c9280280e00e038b78312ce5991d8052de01525005","0x1250052920140d00e496015250054960140d00e01c9280280600a9cc0700e","0xb98053bc038b9805494014070aa01c13002a4a00a525258079d0038a4805","0x2a4a00a01c0287e01c5dc02a4a00a5d81301e0988ee6a80e2ec01525005","0x3df701c5e02c807494014bb80700f0e40717700a9280297700b0ac07007","0x80054940140800500c038bd005494014bc805bf0038bc805494014bc027","0x1250052f4016fb00e0b2015250050b20143f00e460015250054600141380e","0x700e494014120052d40380724a00a0380380e2f416518010476014bd005","0x717d00a9280285300a7680705300a9280280e1540380724a00a01802a73","0xbf80585603803805494014038050fc038bf805494014be82603c92d1dcd5","0x2a4a00a60d15807bee038c198100e9280297f00e01e1c80e2fe01525005","0x2a3000a09c0701000a9280281000a018070b700a928028b800b7e0070b8","0x823b00a2dc02a4a00a2dc02df601c60402a4a00a6040287e01c8c002a4a","0x12500500c0153980e01c92802a3b00b7e40700e4940140700701c2dcc0a30","0xc30054940140716601c61402a4a00a038e700e01c9280287400a5ac0700e","0x12500501c77c0705d00a9280298630a01d1280e30c0152500530c0140d00e","0x280601c62002a4a00a61c02df501c61c02a4a00a1740b0071ae0380b005","0x700700a9280280700a1f80701a00a9280281a00a09c0701900a92802819","0x700500a9280280e00b7e80718800e0680ca3b00a62002a4a00a62002df6","0x280600b7f40700e4940140700701c8ec02dfc00c01c03a4a00e01402dfb","0x715c01c8c002a4a00a1d002dfe01c04002a4a00a01c02b3301c1d002a4a","0x1250050320153e00e0320152500501c2a80700e4940140700701c03aff805","0x8005966039180054940140d005bfc038080054940151d8056660380d005","0x700e4940140700701c92c02e01452015250074600170000e45601525005","0x2a4a00a07802e0401c07802a4a00a8a402e0301c8a402a4a00a8a402e02","0x702645601c0282600a9280282600b8140722b00a92802a2b00adc007026","0x2e0601c08c02a4a00a0385500e01c92802a4b00a5a80700e49401407007","0x282400a9280282400b8140722b00a92802a2b00adc00702400a92802823","0x2ddb01c03802a4a00a038029b101c01802a4a00a01402e0701c09115807","0x3a4a00a01c0300e00d7740700700a9280280700a0680700600a92802806","0x380549401402805c100380823b00e014080054940143a0054e40383a23b","0x280601c01ef080e00c0152500500e016f000e00e0152500500e016ed80e","0x38050e8015250050e8016a000e476015250054760140300e0e88ec03a4a","0x800749401d1d87400e01407074c120383a00549401403005b9e0383a23b","0x2a1a01c8a402a4a00a0385500e01c9280280e00e0391581a03201b05230","0x723000a92802a3000a51c0701000a9280281000a09c0724b00a92802a29","0x1158054380380724a00a0380380e4968c00800600a92c02a4a00a92c02a1b","0x10d80e03401525005034014a380e032015250050320141380e03c01525005","0x281a01c01802a4a00a03802e0b01c0780d01900c0140f0054940140f005","0x11d8054940140280600e6300700500a9280280500a60c0700600a92802806","0xd00e00c0152500501c0170600e00e8ec0380500e0152500500e014c180e","0x2a4a00a0140300731803802805494014028053060380300549401403005","0x700600a9280280e00b8340700747601c0280700a9280280700a60c0723b","0x12500500e01803e0e01c01c02a4a00a01c0298301c01802a4a00a01802949","0x11d80500e0151d8054940151d80530603802805494014028053060391d805","0x700e4940140700701c0403a007c208ec0300749401c0380501c01b0780e","0x2a4a00a8c002e1201c06402a4a00a0180280601c8c002a4a00a8ec02e11","0x722b00a9280281000a9f40700e4940140700701c03b0980501c5700701a","0x2a4a00a06802e1401c06802a4a00a8ac02e1201c06402a4a00a1d002806","0x722903201c02a2900a92802a2900a2300701900a9280281900a01807229","0x12500700c01c03e1601c01802a4a00a01402e1501c01c02a4a00a03802e15","0x125005476014ed00e4760152500501c2a80700e4940140700701c03b0b80e","0x70aa01c0392500501c01c0707400a0143a0054940143a0051180383a005","0x2805460015250054600144600e46001525005020014ef00e02001525005","0x361801c0403a00749401403805b260391d80600e9280280500b64c07230","0x280e1540380724a00a0380380e45606803e190328c003a4a00e0411d80e","0x2d9501c07802a4a00a8c00280601c92c02a4a00a8a4029da01c8a402a4a","0x700701c03b0d00501c5700702300a92802a4b00a2300702600a92802819","0xd00500c03813805494014120053bc03812005494014070aa01c03925005","0x30c00e0460152500504e0144600e04c01525005456016ca80e03c01525005","0x3d9201c0392500501c01c0702c29601f0d94928e01d250070e80180f006","0x2a4a00a51c0280601c55c02a4a00a08ca8807c38038a880549401413149","0x761e01c0392500501c01c0715728e01c0295700a9280295700b87407147","0x1880749401c1782629601b0c00e05e0152500505e016ca80e05e01525005","0x30e00e2c0015250052b60b003d9201c0392500501c01c0703506801f0f95b","0x2a4a00a1d402e1d01c0c402a4a00a0c40280601c1d402a4a00a08cb0007","0x280e1540380724a00a08c0289101c0392500501c01c0707506201c02875","0x30e00e2ce0152500506a0b003d9201c59802a4a00a58c029de01c58c02a4a","0x2a4a00a0ec02e1d01c0d002a4a00a0d00280601c0ec02a4a00a598b3807","0x700701c1d002e2147601803a4a00e01c0280e00d8800703b06801c0283b","0x280601c8c002a4a00a04002e2301c04002a4a00a8ec02e2201c03925005","0x12500501c01c0723000c01c02a3000a92802a3000b8900700600a92802806","0x2a4a00a0680281a01c06802a4a00a0398b00e0320152500501c55c0700e","0x115a2900e35c0722900a9280280e3be039158054940140d01900e72c0701a","0x31200e0e8015250050e80140300e03c015250054960171280e49601525005","0x2e2700c01c03a4a00e01407007c4c0380f07400e0140f0054940140f005","0x2a4a00a01c0280601c1d002a4a00a01802e2801c0392500501c01c0723b","0x70aa01c0392500501c01c0707400e01c0287400a9280287400b8a407007","0x31480e476015250054760140300e460015250050200171500e02001525005","0x700ec5801c02a4a00e01407007c560391823b00e0151800549401518005","0x280600a9280280600b8a40700600a9280280700b8a00700e49401407007","0x2a4a00a8ec02e2a01c8ec02a4a00a0385500e01c9280280e00e03803005","0x700500a03802a4a00a03b1680e0e80140287400a9280287400b8a407074","0x11de2f01c0140280500a0152500500a016db00e00a0152500501c0171700e","0x287400b6d80723b00a92802a3b00a61c0707447601d2500500c01c0280e","0x12500501c01c0700ec6201402a4a00e03802e3001c1d11d80700a1d002a4a","0x380e00e0140280700a9280280700b8a40700700a9280280500b8a00700e","0x2e2901c8ec02a4a00a01802e2a01c01802a4a00a0385500e01c9280280e","0x12500501c0171900e01c0152500501c016db80e47601402a3b00a92802a3b","0x38050340380724a00a0180298b01c0180380749401402805c6603802805","0x12500500e016db00e00e0152500500a03803e3401c01c0280500e01525005","0x700700a9280280500b8d40700500a9280280500b6dc0700700a01403805","0x2a4a00a01802e3801c01802a4a00a01802e3701c01802a4a00a01c02e36","0x7007c680380724a00a0380380e0200171c87400a92803a3b00b6b40723b","0x701a00a9280281946001f1d00e0320152500501c2a80723000a92802874","0x280e00e0391580500a8ac02a4a00a8ac02e3c01c8ac02a4a00a06802e3b","0x2a4a00a03b1e80e01c9280280e00b7080700e494014080052d40380724a","0x3a4b00a0ec0724b00a92802a2900a59c0722900a92802a2900a06807229","0x1f00e0460152500503c0141e00e01c9280280e00e03813005c7c07802a4a","0x282400b8f00702400a9280282600b8fc0700e4940140700701c03811805","0x280549401407005aa803807005494014070050340381200500a09002a4a","0x2ddb01c01c02a4a00a01402e4101c01c0280500e0152500500a0172000e","0x11d8074940140300e00f7840700600a9280280700b7800700700a92802807","0x707447601c0287400a9280287400b5000723b00a92802a3b00a01807074","0x2a4a00a01402e4201c01402a4a00a03802d5401c03802a4a00a0380281a","0x2f000e00e0152500500e016ed80e00e0152500500a0172180e00e01402807","0x1250054760140300e0e88ec03a4a00a01807007bc20380300549401403805","0x7005494014070053620383a23b00e0143a0054940143a005a800391d805","0x380501c01b2200e00e0152500500e0140d00e00a0152500500a016ed80e","0x280500a0680700500a9280280e00b9140723b00c01c02a3b00c01d25005","0x724a00a0140298b01c01c02807494014070053140380280500a01402a4a","0x125005476014c580e0e88ec03a4a00a0180298a01c01802a4a00a0388f00e","0x3a00700ed000707400a9280287400a0680700700a9280280700a0680700e","0x2a4a00a03802e4601c03802a4a00a0380288c01c0400280502001525005","0x280500a0152500500a0140d00e00a0152500501c0172380e00a01402805","0x23c00e00a0140280500a9280280500abbc0700500a9280280e00b92007005","0x11d8074940140300531403803005494014038058f20380380549401407005","0x12500500a014c180e0e8015250050e80140d00e01c92802a3b00a62c07074","0x280549401c07005c920380800500a04002a4a00a0143a00731803802805","0x280500b92c0700500a9280280500b6540700e4940140700701c01c02e4a","0x2a3b00a2300723b00a9280280600a7680700600a9280280e1540380724a","0x32580e00e0152500500e016ca80e01c9280280e00e0391d80500a8ec02a4a","0x4600e020015250050e8014ef00e0e80152500501c2a80700e49401403805","0x2807c9a0380380500e9280280e00b9300701000a0140800549401408005","0x12500501c0172780e00c0140280600a9280280600b9380700600a92802807","0x2e5101c9280380e00b9400700500a0140280549401402805c6e03802805","0x300549401403805c5403803805494014070aa01c0392500501c01c07005","0x280500b8a00700e4940140700701c0180280500c0152500500c0171480e","0x300549401402805c8a0391d80500a8ec02a4a00a8ec02e2901c8ec02a4a","0x29b101c04002a4a00a1d002a7401c1d11d8074940140380601c0194080e","0x280e00b9480701047601c0281000a9280281000b76c0723b00a92802a3b","0x280e4940140700585c0380280500a01402a4a00a0140281a01c01402a4a","0x1e1262900391d80e00c01c0280e29e498a400e4760f09314801c8ed7680e","0xa792629057807074078498a415e01c1d04980600e0140714f24c5200723b","0x300700a038a792629057807074078498a415e01c1d00023b00c01c0280e","0x70748188ec0300700a038a792629057807074078498a415e01c1d1a223b","0x1e126290578070749928ec0300700a038a792629057807074078498a415e","0xa79262900391d83c24c5200723ba9a8ec0300700a038a792629057807074","0x380501c53c9314821657807010078498a410b2bc0380862000c01c0280e","0xaf00e0219500300700a038a79262900391d83c24c5200723bca61d11d806","0xa400e21a1d32a8744760180380501c53c9314821657807010078498a410b","0x803c24c5208580e21a0432b23b00c01c0280e29e498a400e21a1d01e126","0x710d0e80f09314801c4343a6570e88ec0300700a038a792629042c0710d","0x714f24c5200710d0e80f09314801c4343a6584760180380501c53c93148","0x3e5b01c0d40283c00b9680280e27e0f00700607803803e5947601803805","0x280e294498a400616440c931484779748180501d9700280e28401403035","0xa400e00d9840715200a01802e6001c0f00283b00b97c1200501d97803007","0xa400e476100819262900383a6632060140766200e014071582900380303c","0x33280600e0140715c290038030241ba5200723bcc88ec0300700a038ad126","0x3007ccc1d11d80600e0140715f24c520af00e0e81008192629057807010","0x71622900380303c2900380366801c5841e0070780173380501c09002824","0x11d80600e0140715f24c520af00e0e80900310324c520af00e4619a403805","0x11d80600e0140715f24c520af00e0e80900310324c520af00e4619a808074","0x3a23b00c01c0280e2be498a415e01c1d00310324c520af00e0219ac08074","0x3a23b00c01c0280e2be498a415e01c1d00300600c40c931482bc0380ce6c","0x383c01c01f3700600e0140715f24c5200723b206498a400e4779b518010","0x714a24c42ca415e01c0401e006206498859482bc0380ce6f00a038b480e","0x300700a038af9262900391d90324c5200723bce08c00807447601803805","0x11d80600e0140714a24c42ca415e01c0401e006206498859482bc0380ce71","0x11d80600e0140716c24c434a400e0e80188192621a52007010ce48c008074","0x33a80700a038b694801c0181e14801c01b3a00501c0900282406a01f39874","0x280e2e04988590d2900380803c1ae40c9310b21a52007019cec40c0280e","0x280e2d84988694801c1d00310324c434a400e0219dd180100e88ec03007","0x300700a038a512621a5200707400c40c9310d290038086780e88ec03007","0x767d1d40140767c1820140767b1ec0140767a01c0d40283500b9e43a23b","0xa40061643f8931484779fc0380501c5089314800c3d89314800d9f87f005","0x34100e3000f00383c00ba040280e0480140302400fa000300700a038bd926","0x81805d088ec0300700a038ac14801c0180304007852007074d061000280e","0x2e864760180380501c5689314801c8ec200f624c52007074d0a0387b005","0xa400e477a24070de00a37402e8800a0381200504814403e8701c144028dd","0xa415e01c1d0200f624c520af00e021a280300700a038ae14801c018120de","0x30060480f0a400e0e9a300700600a0bc02e8b0e88ec0300700a038af926","0x931482bc0383a02400c3d8931482bc0391868d4760180380501c588a400e","0x931482bc0383a02400c3d8931482bc0391868e0201d11d80600e0140715f","0xaf9262905780707400c3d8931482bc0380868f0201d11d80600e0140715f","0xaf9262905780707400c018030f624c520af00e033a403a23b00c01c0280e","0x380501c57c9314801c8ec7b1262900391de914600403a23b00c01c0280e","0x380501c53c070070a21441e00e477a4c0280e31e0380380601c01f49006","0x390300ba580380501c648070070a214407006d2a038288050780174a006","0x280e328498859482bc0380803c00c3d89310b29057807019d2e0387b103","0x34c80600e0140715f24c5200723b1ec498a400e477a61180100e88ec03007","0x3a23b00c01c0280e328498859482bc0380803c00c3d89310b29057807019","0x3a23b00c01c0280e2d84988694801c1d0030f624c434a400e021a6918010","0x369d00a038ce83c01c0181e00e00fa700280e3360f00700607803803e9b","0x8694801c0674f80e1d440c0390300ba780380501c67ca400e00c0f0a400e","0x2ea04600403a23b00c01c0280e3464988590d2900380803c1ae3a89310b","0x300700a038b612621a5200707400c3a89310d290038086a101c3a802903","0x3a23b00c01c0280e3284988694801c1d0030f624c434a400e021a883a23b","0x9314800fa911d80600e014071a724c434a400e0e83a89310d2900383a6a3","0x1a8050ba17403ea600a038d51262900189314800fa940280e354498a4006","0xa40061683f893148477aa40714200a6bc02ea801c0d4028b200ba9c0280e","0x71b601c01c1e00e00faac0280e06a0140300600faa80300700a038bd926","0x9314801c1d35700501c0180280600c01f5680501c1000281608001f56005","0x28dd00bac00700600a14402eaf4760180380501c5689314801c8ec200f6","0x380501c570a400e00c0901e14801c8ef5900e372378038de00bac4070de","0x35a0744760180380501c57c931482bc0383a0401ec498a415e01c04359806","0x35a8100e88ec0300700a038af926290578070740480187b12629057807230","0x35b0100e88ec0300700a038af926290578070740480187b12629057807230","0x7019d6e1d11d80600e0140715f24c520af00e0e80187b12629057807010","0x35c2300201d11d80600e0140715f24c520af00e0e8018030061ec498a415e","0x280e324014031c200fae40300700a038af9262900391d8f624c5200723b","0x11d80600e0140719424c42ca415e01c0401e0061ec498859482bc0380ceba","0xaf00e033af00300700a038af9262900391d8f624c5200723bd768c008074","0x35ea300201d11d80600e0140719424c42ca415e01c0401e0061ec49885948","0xa400e0e80186092621a52007010d7e038608052060175f00e2060147b005","0x284200bb040280e33a0380380601c01f600744760180380501c5b09310d","0xa400624c52003ec400a0381a80500c01803ec301c0180285d00bb0807044","0x71ec1d401c75005d8c01c0280e06a0380388c118038036c500a038e7126","0x280e2d84988694801c1d00307b24c434a400e021b20071d300a7b002ec7","0x380501c5089310d2900383a03500c1ec9310d290039186c90e88ec03007","0x300700a038af926216520070740ba35c9310b290038086ca0201d11d806","0x120063b2498a400e021b300380501c760a400e00c0f0a400e00db2c3a23b","0xad1262900391d84424c5200723bd9a1d11d80600e0140715f24c5200723b","0x9310d290038086d001c784029e800bb3c071e800a3a802ece00c01c0280e","0x280e06a0141a83500fb443a23b00c01c0280e2d84988694801c1d0030a1","0x30c124c434a400e021b50070c120601c81805da6038818f600e3d802ed2","0xa400e4760187b1262900383a6d50e88ec0300700a038f292621a52007074","0xf21262900189314800fb5c071031d401c75005dac8ec0300700a038ca126","0x2edb01c2e4028b400bb680703500a2c802ed901c1d80287800bb600280e","0x2e805dba0180380501c5289314800c788819262908ef6e00e2063f8038fe","0x703c00a2b402edf00e0140716c24c5200723b24c52007006dbc0381a805","0x3a0f624c520af00e0e9b840300700a038ae14801c0181203c2900391dee0","0x931482bc039186e301c0f00283b00bb891d80600e0140715f24c520af00e","0x71d400a3d802ee40201d11d80600e0140716c24c520af00e0e80f0030f6","0x37380600e0140715f24c5200723b154498a400e477b98071d200a75002ee5","0x11deea01c734029cf00bba4071cf1ec01c7b005dd00140702300a08c28807","0x30f624c42ca415e01c06b7580600e0140715f24c5200723b14c498a400e","0x93148477bb00ca300201d11d80600e0140714224c42ca415e01c0401e006","0x71c800a72402eee01c724028c100bbb40300700a038ca126290018360f6","0x709b00a27002ef100a038e31262900189314800fbc00704400a10802eef","0xa400e021bd4071c400a1ec02ef401c74c029ec00bbcc0703500a71402ef2","0x9310d290039186f60e88ec0300700a038b612621a5200707400c7109310d","0x76f800c014076f70201d11d80600e0140714224c434a400e0e80d4031c4","0x4b80501dbec0709200a24c02efa00a038de1262900189314800fbe403005","0x36fe00a0380310b00e6d485807dfa01c0280e12e42c0380612e42c036fc","0x280e2be42ca400e47635c8594801c8ef7f80700a0384b90b00e1744b90b","0x715c2900380303c0485200723be020140700621601c4b90b00fc0003007","0x38200600e0140715c290038030240765200723be060900280ee0401803805","0x3f04724c52007074e0e038238050880178307e00a03b8280e29e014d8805","0x71e100a7a002f0901c7a0028ea00bc211d80600e014071ac24c5200723b","0x280e2d84988694801c1d0031a924c434a400e021c2c071a900a28402f0a","0x9314801c1d38700e34a014d3005e1a038d30c100e30402f0c0e88ec03007","0xca126290018358f624c5211df0f4760180380501c5089314801c8ec030a6","0x703500a01802f1201c1d80287800bc44071e400a69002f1000c01c0280e","0x380601c01f8a80700a0381202400e090121e200dc50071e200a78802f13","0x70070680d007006e2e01c0280e06a038038340680380371600a0381a00e","0x1e00600c57807074e3201c0280e338038038340680380371800e01407035","0x38e00e3a4014ea005e36038ea0051ec0178d23b00c01c0280e2d857807006","0x2f1e00e0140715f24c5200319624c5200371d00a038cb00e00e2a807007","0x9314800dc840280e32a038038a601c01f9000e39a014e7805e3e03807051","0x2f2401c724028c100bc8c070b600a1b002f2200e0140715f24c52003195","0x39400e38801403005e4e0380708c00bc980709b00a27002f2501c720029c9","0xa4006e540140718d01c01cc700e00fca40380501c6388680700c71086806","0x380501c5089314800c0d4c69262908ef9580700a038b6126290018c6926","0x280e12e42c039b512e42c0372d00e0140709721601c0309721601b96006","0xa400e4760902390b2900383a72f00e0140709721601c2e89721601b97007","0xa400e477cc40380501c25c8580711825c85806e608ec0300700a038c490b","0x3005e660140700600a01803007e640180380501c57c8594801c8ec1e10b","0x301624c5200373601c61c2380708e0179a80e0a20141d805e6803803005","0x373901c6a40280600bce00280e0fc0141e07e00fcdc0380501c53c93148","0x9314800dcec0280e30a0380398601c01f9d00700a038c310d00e018d490d","0xa400600c65493148477cf4071a500a69802f3c00e0140716c24c52003185","0x38240482d80374000c0140773f01c2d80286b00bcf80300700a038a1126","0x38240482e00374200e0140702404801c1202416e01ba080700a03812024","0x700700c03803f4400e0140702404801c1202417201ba180700a03812024","0xc180e00e0d01a00e00dd180380501c0d4070070680d007006e8a01407034","0x380501c5f4070070a20f007006e900140703500a14428807e8e01c0280e","0x28aa00bd283a23b00c01c0280e2d85780700600c018030062bc03808749","0x717724c520030590a2498a423be980140719601c01cbc00e00fd2c07178","0xca80e00e5d807007e9e038bb00514c017a700e2be014bb805e9a01803805","0x7007ea401c0280e31c434038063884340375101c1300280600bd400280e","0x2f5400c01c0280e2de498a40060b214493148477d4c0280e0b20380398e","0x37564760180380501c6bc9314800c0d42c85124c5203a75501c5b00296f","0x280e2be42ca400e4760588594801c8efab80700a0384b90b00e0184b90b","0x11d83c2d65148594801c043ac80700a0384b90b00e2304b90b00dd6003007","0x31a921a01bad80e30e1100384400bd683a23b00c01c0280e2d442ca400e","0x30590a2498a4074eba0140705901c01cc300e00fd700380501c61886807","0x375f00e0140702404801c120240d601baf23b00c01c0280e35e498a4006","0x376100e0140702404801c1202416801bb000700a0381202400e0901206c","0x1a03401c01bb180501c0d40281002001fb100700a0381a80e00e0400800e","0x380601c01fb280700a038ad80e00e1441d80e00dd900380501c58007007","0x701e00a07802f6803c0140776700a038a880500c01803f6600a038a880e","0x16005ed6038a880503c017b500600e0140701e2bc01c1600603c5791df69","0x3005edc0140714700a0b00f007eda0140701e00a0b00f007ed803803005","0xbb00e00fdc40717600a01802f7000a0382c80e00e5e007007ede038bc005","0x700600a13002f7300e0140704c21a01c0304c21a01bb900501c16407007","0x281900bddc0700600a23002f7601c0180283500bdd40703500a01802f74","0x723b00a0b002f7a01c0d402a3000bde40280e048014120b200fde007016","0x280e098434038060984340377d01c5440280700bdf00700700a0b002f7b","0x78001c03808005efe0380300506a017bf007"],"sierra_program_debug_info":{"type_names":[[0,"RangeCheck"],[1,"Const"],[2,"EcPoint"],[3,"felt252"],[4,"Tuple"],[5,"Const"],[6,"u128"],[7,"core::result::Result::"],[8,"Box"],[9,"Unit"],[10,"core::option::Option::>"],[11,"Const"],[12,"StorageAddress"],[13,"EcState"],[14,"Tuple"],[15,"core::panics::Panic"],[16,"Array"],[17,"Tuple>"],[18,"core::panics::PanicResult::<(core::ec::EcState, ())>"],[19,"Const"],[20,"Const"],[21,"NonZero"],[22,"core::option::Option::>"],[23,"Const"],[24,"Box"],[25,"Tuple>"],[26,"core::panics::PanicResult::<(core::box::Box::<@core::felt252>,)>"],[27,"core::integer::u256"],[28,"core::bool"],[29,"Tuple"],[30,"Const"],[31,"Const"],[32,"Const"],[33,"Const"],[34,"Snapshot>"],[35,"core::array::Span::"],[36,"Tuple, felt252>"],[37,"core::panics::PanicResult::<(core::array::Span::, core::felt252)>"],[38,"Tuple"],[39,"Array"],[40,"Snapshot>"],[41,"core::array::Span::"],[42,"core::array::SpanIter::"],[43,"Uninitialized>"],[44,"core::result::Result::>"],[45,"core::pedersen::HashState"],[46,"Const"],[47,"core::starknet::storage::StoragePath::>"],[48,"core::result::Result::>"],[49,"StorageBaseAddress"],[50,"core::starknet::storage::StoragePath::"],[51,"Const"],[52,"Const"],[53,"Tuple"],[54,"core::panics::PanicResult::<(@core::felt252,)>"],[55,"Const"],[56,"Const"],[57,"core::option::Option::"],[58,"openzeppelin_account::extensions::src9::src9::SRC9Component::Event"],[59,"openzeppelin_introspection::src5::SRC5Component::Event"],[60,"core::starknet::storage::StoragePointer0Offset::"],[61,"core::starknet::storage::StoragePath::"],[62,"ContractAddress"],[63,"core::starknet::account::Call"],[64,"core::option::Option::<@core::starknet::account::Call>"],[65,"Const"],[66,"Tuple, Array, Unit>"],[67,"core::panics::PanicResult::<(core::array::SpanIter::, core::array::Array::, ())>"],[68,"Const"],[69,"Const"],[70,"Const"],[71,"core::starknet::storage::StoragePointer0Offset::>"],[72,"core::starknet::storage::StoragePath::>"],[73,"Const"],[74,"openzeppelin_account::account::AccountComponent::OwnerAdded"],[75,"openzeppelin_account::account::AccountComponent::OwnerRemoved"],[76,"openzeppelin_account::account::AccountComponent::Event"],[77,"Const"],[78,"core::starknet::storage::StoragePointer0Offset::>"],[79,"core::starknet::storage::StoragePointer0Offset::"],[80,"Const"],[81,"Tuple"],[82,"core::panics::PanicResult::<(core::integer::u256,)>"],[83,"Const, Const>"],[84,"Const, Const>"],[85,"Box"],[86,"core::result::Result::, core::array::Array::>"],[87,"core::starknet::storage::storage_base::StorageBase::>>"],[88,"openzeppelin_introspection::src5::SRC5Component::StorageStorageBaseMut"],[89,"core::starknet::storage::storage_base::FlattenedStorage::>"],[90,"core::starknet::storage::StoragePath::>"],[91,"Array>"],[92,"Tuple, Array>, Unit>"],[93,"core::panics::PanicResult::<(core::array::SpanIter::, core::array::Array::>, ())>"],[94,"Const"],[95,"core::result::Result::, core::array::Array::>"],[96,"Const"],[97,"openzeppelin_utils::cryptography::snip12::StarknetDomain"],[98,"Array"],[99,"Snapshot>"],[100,"core::array::Span::"],[101,"u64"],[102,"core::starknet::info::v2::ResourceBounds"],[103,"Const"],[104,"u32"],[105,"core::starknet::info::v2::TxInfo"],[106,"Box"],[107,"Tuple>"],[108,"core::panics::PanicResult::<(core::box::Box::,)>"],[109,"core::poseidon::HashState"],[110,"Uninitialized"],[111,"core::starknet::storage::StoragePath::>>"],[112,"core::result::Result::"],[113,"core::starknet::info::BlockInfo"],[114,"Box"],[115,"Tuple>"],[116,"core::panics::PanicResult::<(core::box::Box::,)>"],[117,"core::starknet::storage::storage_base::StorageBase::>"],[118,"openzeppelin_introspection::src5::SRC5Component::StorageStorageBase"],[119,"core::starknet::storage::storage_base::FlattenedStorage::"],[120,"Const"],[121,"core::starknet::storage::storage_base::StorageBase::>"],[122,"openzeppelin_account::account::AccountComponent::StorageStorageBaseMut"],[123,"core::starknet::storage::storage_base::FlattenedStorage::>"],[124,"core::starknet::storage::storage_base::StorageBase::"],[125,"openzeppelin_account::account::AccountComponent::StorageStorageBase"],[126,"core::starknet::storage::storage_base::FlattenedStorage::"],[127,"Box>"],[128,"core::option::Option::>>"],[129,"Const"],[130,"Const"],[131,"NonZero"],[132,"ClassHash"],[133,"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded"],[134,"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event"],[135,"openzeppelin_presets::account::AccountUpgradeable::Event"],[136,"core::starknet::info::v2::ExecutionInfo"],[137,"Tuple>"],[138,"core::panics::PanicResult::<(core::box::Box::,)>"],[139,"Const"],[140,"openzeppelin_introspection::src5::SRC5Component::ComponentState::"],[141,"Tuple, Unit>"],[142,"core::panics::PanicResult::<(openzeppelin_introspection::src5::SRC5Component::ComponentState::, ())>"],[143,"Const"],[144,"openzeppelin_account::extensions::src9::src9::SRC9Component::StorageStorageBase"],[145,"core::starknet::storage::storage_base::FlattenedStorage::"],[146,"Const"],[147,"Const"],[148,"openzeppelin_account::interface::ISRC6Dispatcher"],[149,"Tuple>"],[150,"core::panics::PanicResult::<(core::array::Array::,)>"],[151,"Const"],[152,"openzeppelin_account::extensions::src9::src9::SRC9Component::StorageStorageBaseMut"],[153,"core::starknet::storage::storage_base::FlattenedStorage::>"],[154,"Const"],[155,"Const"],[156,"Tuple"],[157,"core::panics::PanicResult::<(core::integer::u64,)>"],[158,"Const"],[159,"Const"],[160,"Uninitialized>"],[161,"openzeppelin_account::extensions::src9::interface::OutsideExecution"],[162,"Uninitialized"],[163,"Const"],[164,"core::result::Result::"],[165,"Const"],[166,"core::option::Option::<@core::array::Span::>"],[167,"Snapshot>>"],[168,"core::array::Span::>"],[169,"Uninitialized>>"],[170,"core::option::Option::"],[171,"Tuple, core::option::Option::>"],[172,"core::panics::PanicResult::<(core::array::Span::, core::option::Option::)>"],[173,"core::option::Option::>"],[174,"core::result::Result::<(), core::array::Array::>"],[175,"Const"],[176,"Const"],[177,"Tuple"],[178,"core::panics::PanicResult::<(core::starknet::contract_address::ContractAddress,)>"],[179,"openzeppelin_account::extensions::src9::src9::SRC9Component::ComponentState::"],[180,"Tuple, Unit>"],[181,"core::panics::PanicResult::<(openzeppelin_account::extensions::src9::src9::SRC9Component::ComponentState::, ())>"],[182,"Tuple, Array>>"],[183,"core::panics::PanicResult::<(openzeppelin_account::extensions::src9::src9::SRC9Component::ComponentState::, core::array::Array::>)>"],[184,"core::option::Option::>"],[185,"Tuple, core::option::Option::>>"],[186,"core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>"],[187,"core::option::Option::"],[188,"core::option::Option::"],[189,"Uninitialized"],[190,"Uninitialized"],[191,"Const"],[192,"Const"],[193,"openzeppelin_account::account::AccountComponent::ComponentState::"],[194,"Tuple, Unit>"],[195,"core::panics::PanicResult::<(openzeppelin_account::account::AccountComponent::ComponentState::, ())>"],[196,"Tuple"],[197,"core::panics::PanicResult::<(core::integer::u32,)>"],[198,"Const"],[199,"core::option::Option::"],[200,"core::option::Option::<@core::felt252>"],[201,"openzeppelin_upgrades::upgradeable::UpgradeableComponent::ComponentState::"],[202,"Tuple, Unit>"],[203,"core::panics::PanicResult::<(openzeppelin_upgrades::upgradeable::UpgradeableComponent::ComponentState::, ())>"],[204,"openzeppelin_presets::account::AccountUpgradeable::ContractState"],[205,"Tuple>>"],[206,"core::panics::PanicResult::<(openzeppelin_presets::account::AccountUpgradeable::ContractState, core::array::Array::>)>"],[207,"core::option::Option::"],[208,"Tuple, core::option::Option::>"],[209,"core::panics::PanicResult::<(core::array::Span::, core::option::Option::)>"],[210,"Poseidon"],[211,"Uninitialized"],[212,"Pedersen"],[213,"Uninitialized"],[214,"Tuple"],[215,"core::panics::PanicResult::<(core::bool,)>"],[216,"core::option::Option::>"],[217,"Tuple, core::option::Option::>>"],[218,"core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>"],[219,"Const"],[220,"Const"],[221,"core::option::Option::>"],[222,"Tuple, core::option::Option::>>"],[223,"core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>"],[224,"core::option::Option::"],[225,"Uninitialized"],[226,"core::panics::PanicResult::<(core::felt252,)>"],[227,"EcOp"],[228,"Tuple, Unit>"],[229,"core::panics::PanicResult::<(core::array::Array::, ())>"],[230,"Tuple>>"],[231,"core::panics::PanicResult::<(core::array::Array::>,)>"],[232,"core::option::Option::>"],[233,"Tuple, core::option::Option::>>"],[234,"core::panics::PanicResult::<(core::array::Span::, core::option::Option::>)>"],[235,"System"],[236,"Uninitialized"],[237,"Const"],[238,"core::never"],[239,"Tuple"],[240,"core::panics::PanicResult::<(core::never,)>"],[241,"Const"],[242,"Tuple>"],[243,"core::panics::PanicResult::<(core::array::Span::,)>"],[244,"Tuple"],[245,"core::panics::PanicResult::<(openzeppelin_presets::account::AccountUpgradeable::ContractState, ())>"],[246,"BuiltinCosts"],[247,"Tuple"],[248,"core::panics::PanicResult::<((),)>"],[249,"Const"],[250,"core::option::Option::"],[251,"GasBuiltin"]],"libfunc_names":[[0,"revoke_ap_tracking"],[1,"withdraw_gas"],[2,"branch_align"],[3,"store_temp"],[4,"store_temp>"],[5,"function_call"],[6,"enum_match>"],[7,"function_call::is_empty>"],[8,"const_as_immediate>"],[9,"store_temp"],[10,"function_call"],[11,"enum_match>"],[12,"drop>"],[13,"get_builtin_costs"],[14,"store_temp"],[15,"withdraw_gas_all"],[16,"function_call"],[17,"store_temp"],[18,"store_temp"],[19,"store_temp"],[20,"function_call"],[21,"enum_match>"],[22,"drop>"],[23,"function_call::new>"],[24,"snapshot_take>"],[25,"drop>"],[26,"function_call::span>"],[27,"struct_construct>>"],[28,"enum_init,)>, 0>"],[29,"store_temp,)>>"],[30,"enum_init,)>, 1>"],[31,"drop"],[32,"const_as_immediate>"],[33,"function_call"],[34,"enum_match>"],[35,"struct_deconstruct>"],[36,"enum_match"],[37,"drop"],[38,"drop>"],[39,"const_as_immediate>"],[40,"alloc_local"],[41,"finalize_locals"],[42,"function_call::deserialize>"],[43,"enum_match, core::option::Option::>)>>"],[44,"struct_deconstruct, core::option::Option::>>>"],[45,"enum_match>>"],[46,"function_call"],[47,"snapshot_take"],[48,"drop"],[49,"store_temp>"],[50,"function_call::__execute__>"],[51,"store_local"],[52,"enum_match>,)>>"],[53,"struct_deconstruct>>>"],[54,"snapshot_take>>"],[55,"drop>>"],[56,"store_temp>>>"],[57,"store_temp>"],[58,"function_call, core::array::SpanFelt252Serde, core::array::SpanDrop::>::serialize>"],[59,"enum_match, ())>>"],[60,"struct_deconstruct, Unit>>"],[61,"store_temp>>"],[62,"drop>"],[63,"drop>"],[64,"store_temp"],[65,"function_call::__validate__>"],[66,"enum_match>"],[67,"struct_deconstruct>"],[68,"snapshot_take"],[69,"drop"],[70,"function_call"],[71,"alloc_local"],[72,"function_call"],[73,"enum_match>"],[74,"store_local"],[75,"function_call::deserialize>"],[76,"enum_match, core::option::Option::>)>>"],[77,"struct_deconstruct, core::option::Option::>>>"],[78,"enum_match>>"],[79,"function_call::is_valid_signature>"],[80,"const_as_immediate>"],[81,"drop>"],[82,"function_call::isValidSignature>"],[83,"function_call::__validate_declare__>"],[84,"function_call::__validate_deploy__>"],[85,"const_as_immediate>"],[86,"function_call::get_public_key>"],[87,"function_call"],[88,"enum_match, core::option::Option::>)>>"],[89,"struct_deconstruct, core::option::Option::>>>"],[90,"enum_match>>"],[91,"store_temp"],[92,"function_call::set_public_key>"],[93,"function_call::getPublicKey>"],[94,"function_call::setPublicKey>"],[95,"store_temp"],[96,"function_call::supports_interface>"],[97,"enum_match>"],[98,"struct_deconstruct>"],[99,"snapshot_take"],[100,"drop"],[101,"store_temp"],[102,"function_call"],[103,"alloc_local"],[104,"alloc_local"],[105,"function_call"],[106,"enum_match, core::option::Option::)>>"],[107,"struct_deconstruct, core::option::Option::>>"],[108,"enum_match>"],[109,"function_call"],[110,"store_temp"],[111,"function_call::execute_from_outside_v2>"],[112,"store_local"],[113,"store_local"],[114,"enum_match>)>>"],[115,"struct_deconstruct>>>"],[116,"drop>"],[117,"drop>"],[118,"drop"],[119,"function_call::is_valid_outside_execution_nonce>"],[120,"function_call"],[121,"class_hash_try_from_felt252"],[122,"enum_init, 0>"],[123,"store_temp>"],[124,"struct_construct"],[125,"enum_init, 1>"],[126,"struct_deconstruct>"],[127,"array_snapshot_pop_front"],[128,"drop>>"],[129,"drop>"],[130,"enum_init"],[131,"enum_init"],[132,"function_call"],[133,"enum_match"],[134,"struct_construct>"],[135,"enum_init, 0>"],[136,"store_temp>"],[137,"enum_init, 1>"],[138,"function_call>"],[139,"function_call>"],[140,"function_call>"],[141,"function_call>"],[142,"struct_construct"],[143,"struct_deconstruct"],[144,"snapshot_take>"],[145,"function_call::assert_only_self>"],[146,"function_call::upgrade>"],[147,"enum_match, ())>>"],[148,"struct_deconstruct, Unit>>"],[149,"struct_construct>"],[150,"enum_init, 0>"],[151,"store_temp>"],[152,"drop>"],[153,"drop>"],[154,"drop>"],[155,"enum_init, 1>"],[156,"drop>"],[157,"array_new"],[158,"struct_construct>"],[159,"function_call::append>"],[160,"struct_construct"],[161,"struct_construct>>"],[162,"enum_init, 1>"],[163,"store_temp>"],[164,"disable_ap_tracking"],[165,"function_call::pop_front>"],[166,"enum_match>"],[167,"function_call::new>"],[168,"rename"],[169,"function_call>"],[170,"enum_init>, 1>"],[171,"struct_construct, core::option::Option::>>>"],[172,"enum_init, core::option::Option::>)>, 0>"],[173,"store_temp, core::option::Option::>)>>"],[174,"function_call"],[175,"function_call::__execute__>"],[176,"dup>>>"],[177,"function_call>::len>"],[178,"snapshot_take"],[179,"drop"],[180,"function_call::serialize>"],[181,"function_call>::span>"],[182,"store_temp>>"],[183,"function_call, core::array::SpanFelt252Serde, core::array::SpanDrop::>>"],[184,"function_call::__validate__>"],[185,"store_temp>"],[186,"function_call::unbox>"],[187,"enum_init, 0>"],[188,"store_temp>"],[189,"enum_init, 1>"],[190,"function_call>"],[191,"enum_init>, 1>"],[192,"struct_construct, core::option::Option::>>>"],[193,"enum_init, core::option::Option::>)>, 0>"],[194,"store_temp, core::option::Option::>)>>"],[195,"function_call::is_valid_signature>"],[196,"function_call::isValidSignature>"],[197,"function_call::__validate_declare__>"],[198,"function_call::__validate_deploy__>"],[199,"function_call::get_public_key>"],[200,"function_call"],[201,"enum_match>"],[202,"const_as_immediate>"],[203,"dup>"],[204,"store_temp"],[205,"dup"],[206,"function_call::slice>"],[207,"enum_match,)>>"],[208,"function_call::len>"],[209,"function_call"],[210,"enum_match>"],[211,"struct_deconstruct>"],[212,"struct_deconstruct>>"],[213,"enum_init>, 0>"],[214,"struct_construct, core::option::Option::>>>"],[215,"enum_init, core::option::Option::>)>, 0>"],[216,"store_temp, core::option::Option::>)>>"],[217,"drop>>"],[218,"enum_init, core::option::Option::>)>, 1>"],[219,"enum_init>, 1>"],[220,"function_call"],[221,"function_call::set_public_key>"],[222,"enum_match, ())>>"],[223,"struct_deconstruct, Unit>>"],[224,"function_call::getPublicKey>"],[225,"function_call::setPublicKey>"],[226,"function_call::supports_interface>"],[227,"rename"],[228,"const_as_immediate>"],[229,"jump"],[230,"const_as_immediate>"],[231,"alloc_local"],[232,"alloc_local"],[233,"function_call"],[234,"enum_match>"],[235,"store_local"],[236,"function_call::deserialize>"],[237,"enum_match>"],[238,"store_local"],[239,"function_call::deserialize>"],[240,"enum_match, core::option::Option::>)>>"],[241,"struct_deconstruct, core::option::Option::>>>"],[242,"enum_match>>"],[243,"struct_construct"],[244,"enum_init, 0>"],[245,"struct_construct, core::option::Option::>>"],[246,"enum_init, core::option::Option::)>, 0>"],[247,"store_temp, core::option::Option::)>>"],[248,"drop"],[249,"drop"],[250,"enum_init, 1>"],[251,"enum_init, core::option::Option::)>, 1>"],[252,"drop>"],[253,"drop>"],[254,"function_call"],[255,"function_call::execute_from_outside_v2>"],[256,"enum_match, core::array::Array::>)>>"],[257,"struct_deconstruct, Array>>>"],[258,"struct_construct>>>"],[259,"enum_init>)>, 0>"],[260,"store_temp>)>>"],[261,"enum_init>)>, 1>"],[262,"function_call"],[263,"function_call::is_valid_outside_execution_nonce>"],[264,"function_call::initializer>"],[265,"function_call::initializer>"],[266,"enum_match, ())>>"],[267,"struct_deconstruct, Unit>>"],[268,"drop, Unit>>"],[269,"bool_not_impl"],[270,"struct_construct>"],[271,"struct_construct>"],[272,"struct_construct>"],[273,"struct_construct>"],[274,"function_call"],[275,"enum_match>"],[276,"function_call"],[277,"struct_deconstruct>"],[278,"snapshot_take"],[279,"store_temp"],[280,"function_call"],[281,"const_as_immediate>"],[282,"drop>"],[283,"snapshot_take"],[284,"function_call"],[285,"const_as_immediate>"],[286,"dup"],[287,"replace_class_syscall"],[288,"enum_init>, 0>"],[289,"store_temp>>"],[290,"enum_init>, 1>"],[291,"function_call::unwrap_syscall>"],[292,"struct_construct"],[293,"store_temp"],[294,"function_call>"],[295,"enum_init, ())>, 1>"],[296,"store_temp, ())>>"],[297,"array_append"],[298,"enum_init>, 0>"],[299,"store_temp>>"],[300,"enum_init>, 1>"],[301,"enum_match>>"],[302,"enum_init, 0>"],[303,"store_temp>"],[304,"enum_init, 1>"],[305,"array_new"],[306,"function_call"],[307,"function_call"],[308,"enum_match, core::option::Option::)>>"],[309,"struct_deconstruct, core::option::Option::>>"],[310,"enum_match>"],[311,"store_temp"],[312,"function_call::append>"],[313,"function_call"],[314,"enum_init, core::option::Option::>)>, 1>"],[315,"enum_init>, 0>"],[316,"function_call::__execute__>"],[317,"array_len>"],[318,"rename"],[319,"function_call"],[320,"function_call>::span>"],[321,"alloc_local>>"],[322,"function_call>::pop_front>"],[323,"store_local>>"],[324,"enum_match>>"],[325,"function_call"],[326,"drop>>"],[327,"enum_init, ())>, 1>"],[328,"store_temp, ())>>"],[329,"struct_construct, Unit>>"],[330,"enum_init, ())>, 0>"],[331,"drop>>>"],[332,"function_call::__validate__>"],[333,"unbox"],[334,"enum_init>, 0>"],[335,"enum_init, core::option::Option::>)>, 1>"],[336,"function_call::is_valid_signature>"],[337,"function_call::isValidSignature>"],[338,"function_call::__validate_declare__>"],[339,"function_call::__validate_deploy__>"],[340,"function_call::get_public_key>"],[341,"u32_try_from_felt252"],[342,"enum_init, 0>"],[343,"store_temp>"],[344,"enum_init, 1>"],[345,"array_slice"],[346,"const_as_immediate>"],[347,"array_len"],[348,"u32_overflowing_sub"],[349,"enum_init, 0>"],[350,"store_temp>"],[351,"enum_init, 1>"],[352,"const_as_immediate>"],[353,"function_call::expect::>>>"],[354,"store_temp>"],[355,"function_call::set_public_key>"],[356,"function_call::getPublicKey>"],[357,"function_call::setPublicKey>"],[358,"function_call"],[359,"function_call"],[360,"function_call::supports_interface>"],[361,"contract_address_try_from_felt252"],[362,"enum_init, 0>"],[363,"store_temp>"],[364,"enum_init, 1>"],[365,"function_call"],[366,"store_temp>"],[367,"enum_init, 1>"],[368,"snapshot_take>"],[369,"store_temp>>"],[370,"function_call::span>"],[371,"enum_init>, 0>"],[372,"struct_construct, core::option::Option::>>>"],[373,"enum_init, core::option::Option::>)>, 0>"],[374,"store_temp, core::option::Option::>)>>"],[375,"enum_init>, 1>"],[376,"enum_init, core::option::Option::>)>, 1>"],[377,"alloc_local"],[378,"alloc_local>"],[379,"struct_deconstruct"],[380,"dup"],[381,"function_call"],[382,"const_as_immediate>"],[383,"function_call"],[384,"const_as_immediate>"],[385,"function_call"],[386,"enum_match>"],[387,"struct_deconstruct>"],[388,"dup"],[389,"store_temp"],[390,"function_call"],[391,"const_as_immediate>"],[392,"const_as_immediate>"],[393,"function_call::deref_mut>"],[394,"function_call::deref>"],[395,"struct_deconstruct"],[396,"store_temp>>>"],[397,"dup"],[398,"function_call>>, core::starknet::storage::storage_base::StorageBaseAsPath::>>, core::starknet::storage::map::MutableStorableEntryReadAccess::>, core::starknet::storage::MutableImpl::>, core::starknet::storage::map::EntryInfoImpl::, core::hash::HashFelt252::, core::starknet::storage_access::StoreUsingPacking::>, core::starknet::storage::storage_base::StorageBaseDrop::>>, core::felt252Drop>::read>"],[399,"const_as_immediate>"],[400,"function_call>>, core::starknet::storage::storage_base::StorageBaseAsPath::>>, core::starknet::storage::map::MutableStorableEntryWriteAccess::>, core::starknet::storage::MutableImpl::>, core::starknet::storage::map::EntryInfoImpl::, core::hash::HashFelt252::, core::starknet::storage_access::StoreUsingPacking::, core::boolDrop>, core::starknet::storage::storage_base::StorageBaseDrop::>>, core::felt252Drop, core::boolDrop>::write>"],[401,"store_local"],[402,"snapshot_take"],[403,"function_call::get_message_hash>"],[404,"store_local>"],[405,"function_call>::into>"],[406,"enum_match,)>>"],[407,"struct_deconstruct>>"],[408,"struct_construct"],[409,"store_temp"],[410,"function_call"],[411,"const_as_immediate>"],[412,"enable_ap_tracking"],[413,"const_as_immediate>"],[414,"store_temp>"],[415,"function_call"],[416,"struct_construct, Array>>>"],[417,"enum_init, core::array::Array::>)>, 0>"],[418,"store_temp, core::array::Array::>)>>"],[419,"enum_init, core::array::Array::>)>, 1>"],[420,"drop>"],[421,"drop>>"],[422,"drop>"],[423,"drop>"],[424,"snapshot_take>"],[425,"function_call, openzeppelin_account::extensions::src9::src9::SRC9Component::ComponentStateDeref::>::deref>"],[426,"function_call::deref>"],[427,"struct_deconstruct"],[428,"store_temp>>"],[429,"function_call>, core::starknet::storage::storage_base::StorageBaseAsPath::>, core::starknet::storage::map::StorableEntryReadAccess::, core::starknet::storage::map::EntryInfoImpl::, core::hash::HashFelt252::, core::starknet::storage_access::StoreUsingPacking::>, core::starknet::storage::storage_base::StorageBaseDrop::>, core::felt252Drop>::read>"],[430,"function_call"],[431,"struct_construct>"],[432,"enum_init, 0>"],[433,"store_temp>"],[434,"enum_init, 1>"],[435,"function_call"],[436,"function_call"],[437,"const_as_immediate>"],[438,"function_call::register_interface>"],[439,"enum_match, ())>>"],[440,"drop, Unit>>"],[441,"function_call::_set_public_key>"],[442,"store_temp, ())>>"],[443,"enum_init, ())>, 1>"],[444,"function_call"],[445,"const_as_immediate>"],[446,"struct_construct, Unit>>"],[447,"enum_init, ())>, 0>"],[448,"store_temp, ())>>"],[449,"enum_init, ())>, 1>"],[450,"function_call"],[451,"enum_match,)>>"],[452,"struct_deconstruct>>"],[453,"store_temp>"],[454,"function_call::deref>"],[455,"struct_deconstruct"],[456,"drop>"],[457,"drop>"],[458,"struct_construct>"],[459,"enum_init, 0>"],[460,"store_temp>"],[461,"enum_init, 1>"],[462,"rename"],[463,"contract_address_to_felt252"],[464,"function_call"],[465,"enum_match>>"],[466,"function_call"],[467,"function_call"],[468,"enum_init"],[469,"store_temp"],[470,"function_call>>"],[471,"struct_construct, Unit>>"],[472,"enum_init, ())>, 0>"],[473,"felt252_is_zero"],[474,"drop>"],[475,"struct_construct"],[476,"enum_init, 0>"],[477,"struct_construct, core::option::Option::>>"],[478,"enum_init, core::option::Option::)>, 0>"],[479,"store_temp, core::option::Option::)>>"],[480,"enum_init, 1>"],[481,"enum_init, core::option::Option::)>, 1>"],[482,"array_append"],[483,"felt252_sub"],[484,"function_call"],[485,"const_as_immediate>"],[486,"function_call"],[487,"const_as_immediate>"],[488,"enum_init>,)>, 1>"],[489,"store_temp>,)>>"],[490,"u32_to_felt252"],[491,"struct_construct>>"],[492,"struct_deconstruct>>"],[493,"array_snapshot_pop_front>"],[494,"enum_init>>, 0>"],[495,"store_temp>>>"],[496,"enum_init>>, 1>"],[497,"enum_match>>>"],[498,"store_temp>>"],[499,"function_call>::unbox>"],[500,"enum_init>, 0>"],[501,"store_temp>>"],[502,"enum_init>, 1>"],[503,"rename>"],[504,"function_call>"],[505,"function_call::validate_transaction>"],[506,"function_call::span>"],[507,"function_call::_is_valid_signature>"],[508,"struct_construct>"],[509,"enum_init, 0>"],[510,"store_temp>"],[511,"enum_init, 1>"],[512,"function_call, openzeppelin_account::account::AccountComponent::ComponentStateDeref::>::deref>"],[513,"function_call::deref>"],[514,"struct_deconstruct"],[515,"snapshot_take>"],[516,"drop>"],[517,"store_temp>"],[518,"function_call, core::starknet::storage::StorablePathableStorageAsPointer::, core::starknet::storage::storage_base::StorageBaseAsPath::, core::starknet::storage::StorableStoragePathAsPointer::>, core::starknet::storage::StorableStoragePointer0OffsetReadAccess::>::read>"],[519,"enum_match>"],[520,"struct_construct>"],[521,"enum_init, 0>"],[522,"struct_deconstruct>>"],[523,"function_call>::panic_destruct>"],[524,"enum_init, 1>"],[525,"function_call::deref_mut>"],[526,"function_call::deref>"],[527,"struct_deconstruct"],[528,"snapshot_take>>"],[529,"drop>>"],[530,"store_temp>>"],[531,"function_call>, core::starknet::storage::StorablePathableStorageAsPointer::>, core::starknet::storage::storage_base::StorageBaseAsPath::>, core::starknet::storage::MutableStorableStoragePathAsPointer::, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreFelt252>>, core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreFelt252>>::read>"],[532,"function_call::assert_valid_new_owner>"],[533,"struct_construct"],[534,"store_temp"],[535,"function_call>"],[536,"snapshot_take>"],[537,"const_as_immediate>"],[538,"function_call, openzeppelin_introspection::src5::SRC5Component::ComponentStateDeref::>::deref>"],[539,"function_call::deref>"],[540,"struct_deconstruct"],[541,"u64_try_from_felt252"],[542,"enum_init, 0>"],[543,"function_call::span>"],[544,"function_call"],[545,"enum_match,)>>"],[546,"struct_deconstruct>>"],[547,"store_temp>"],[548,"function_call::deref>"],[549,"struct_deconstruct"],[550,"struct_construct>"],[551,"enum_init, 0>"],[552,"store_temp>"],[553,"enum_init, 1>"],[554,"u64_overflowing_sub"],[555,"enum_init, 0>"],[556,"store_temp>"],[557,"enum_init, 1>"],[558,"function_call::into_is_err::, core::traits::DestructFromDrop::>>"],[559,"struct_construct>>"],[560,"function_call"],[561,"snapshot_take>>>"],[562,"drop>>>"],[563,"function_call>>::as_path>"],[564,"store_temp>>>"],[565,"function_call>, core::starknet::storage::MutableImpl::>, core::starknet::storage::map::EntryInfoImpl::, core::hash::HashFelt252::, core::starknet::storage_access::StoreUsingPacking::>::read>"],[566,"function_call>, core::starknet::storage::MutableImpl::>, core::starknet::storage::map::EntryInfoImpl::, core::hash::HashFelt252::, core::starknet::storage_access::StoreUsingPacking::, core::boolDrop>::write>"],[567,"alloc_local"],[568,"function_call"],[569,"function_call"],[570,"function_call"],[571,"enum_match,)>>"],[572,"struct_deconstruct>>"],[573,"store_temp>"],[574,"function_call::unbox>"],[575,"function_call"],[576,"const_as_immediate>"],[577,"store_temp"],[578,"function_call>::update_with>"],[579,"struct_deconstruct"],[580,"drop"],[581,"drop>"],[582,"struct_construct"],[583,"snapshot_take"],[584,"drop"],[585,"store_temp"],[586,"function_call"],[587,"function_call>::update_with>"],[588,"store_local"],[589,"function_call"],[590,"function_call"],[591,"drop"],[592,"drop>"],[593,"function_call::append_span::, core::felt252Drop>>"],[594,"struct_construct>>"],[595,"enum_init,)>, 0>"],[596,"store_temp,)>>"],[597,"enum_init,)>, 1>"],[598,"function_call::default>"],[599,"function_call::serialize>"],[600,"struct_deconstruct"],[601,"const_as_immediate>"],[602,"call_contract_syscall"],[603,"enum_init, core::array::Array::>, 0>"],[604,"store_temp, core::array::Array::>>"],[605,"enum_init, core::array::Array::>, 1>"],[606,"function_call>::unwrap_syscall>"],[607,"const_as_immediate>"],[608,"drop"],[609,"function_call>::new>"],[610,"function_call::into_iter>"],[611,"store_temp>"],[612,"store_temp>>"],[613,"function_call"],[614,"enum_match, core::array::Array::>, ())>>"],[615,"struct_deconstruct, Array>, Unit>>"],[616,"drop>"],[617,"struct_construct>>>"],[618,"enum_init>,)>, 0>"],[619,"function_call::snapshot_deref>"],[620,"function_call"],[621,"snapshot_take>>"],[622,"drop>>"],[623,"function_call>::as_path>"],[624,"store_temp>>"],[625,"function_call, core::starknet::storage::map::EntryInfoImpl::, core::hash::HashFelt252::, core::starknet::storage_access::StoreUsingPacking::>::read>"],[626,"function_call::deref_mut>"],[627,"function_call::deref>"],[628,"struct_deconstruct"],[629,"struct_construct, Unit>>"],[630,"enum_init, ())>, 0>"],[631,"store_temp, ())>>"],[632,"enum_init, ())>, 1>"],[633,"function_call>, core::starknet::storage::StorablePathableStorageAsPointer::>, core::starknet::storage::storage_base::StorageBaseAsPath::>, core::starknet::storage::MutableStorableStoragePathAsPointer::, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreFelt252>>, core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreFelt252>, core::starknet::storage::storage_base::StorageBaseDrop::>, core::felt252Drop>::write>"],[634,"struct_construct"],[635,"store_temp"],[636,"function_call>"],[637,"get_execution_info_v2_syscall"],[638,"enum_init, core::array::Array::>, 0>"],[639,"store_temp, core::array::Array::>>"],[640,"enum_init, core::array::Array::>, 1>"],[641,"function_call>::unwrap_syscall>"],[642,"store_temp,)>>"],[643,"function_call::unbox>"],[644,"rename"],[645,"class_hash_to_felt252"],[646,"function_call"],[647,"enum_init"],[648,"store_temp"],[649,"function_call::into>"],[650,"snapshot_take"],[651,"drop"],[652,"function_call"],[653,"emit_event_syscall"],[654,"struct_deconstruct>"],[655,"function_call"],[656,"const_as_immediate, Const>>"],[657,"dup"],[658,"store_temp"],[659,"function_call"],[660,"const_as_immediate, Const>>"],[661,"function_call"],[662,"rename"],[663,"function_call"],[664,"enum_match>"],[665,"struct_deconstruct>"],[666,"drop"],[667,"unbox>"],[668,"const_as_immediate>"],[669,"function_call"],[670,"function_call::snapshot_deref>"],[671,"function_call"],[672,"function_call, core::starknet::storage::storage_base::StorageBaseAsPath::, core::starknet::storage::StorableStoragePathAsPointer::>::as_ptr>"],[673,"snapshot_take>"],[674,"drop>"],[675,"store_temp>"],[676,"function_call::read>"],[677,"function_call::destruct>"],[678,"struct_construct>>"],[679,"function_call"],[680,"function_call>, core::starknet::storage::storage_base::StorageBaseAsPath::>, core::starknet::storage::MutableStorableStoragePathAsPointer::, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreFelt252>>::as_ptr>"],[681,"snapshot_take>>"],[682,"drop>>"],[683,"store_temp>>"],[684,"function_call, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreFelt252>::read>"],[685,"const_as_immediate>"],[686,"function_call"],[687,"enum_init"],[688,"struct_construct, Unit>>"],[689,"enum_init, ())>, 0>"],[690,"function_call::snapshot_deref>"],[691,"function_call"],[692,"struct_construct>"],[693,"struct_construct>>"],[694,"enum_init,)>, 0>"],[695,"store_temp,)>>"],[696,"enum_init,)>, 1>"],[697,"function_call::unbox>"],[698,"enum_match>"],[699,"function_call::destruct>"],[700,"drop>>"],[701,"const_as_immediate>"],[702,"struct_construct>>>"],[703,"struct_construct"],[704,"store_temp"],[705,"struct_deconstruct>>>"],[706,"function_call>>::new>"],[707,"function_call>, core::starknet::storage::MutableImpl::>, core::starknet::storage::map::EntryInfoImpl::, core::hash::HashFelt252::>::entry>"],[708,"snapshot_take>>"],[709,"drop>>"],[710,"store_temp>>"],[711,"function_call, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreUsingPacking::>::as_ptr>"],[712,"snapshot_take>>"],[713,"drop>>"],[714,"store_temp>>"],[715,"function_call, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreUsingPacking::>::read>"],[716,"function_call, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreUsingPacking::>::write>"],[717,"const_as_immediate>"],[718,"const_as_immediate>"],[719,"struct_construct>>"],[720,"enum_init,)>, 0>"],[721,"store_temp,)>>"],[722,"enum_init,)>, 1>"],[723,"unbox"],[724,"store_temp"],[725,"struct_construct"],[726,"function_call::update_state>"],[727,"const_as_immediate>"],[728,"rename"],[729,"function_call>::update_with>"],[730,"function_call::update_state>"],[731,"dup"],[732,"rename>"],[733,"function_call"],[734,"enum_match, core::array::Array::, ())>>"],[735,"const_as_immediate>"],[736,"rename"],[737,"function_call>::update_with>"],[738,"struct_deconstruct, Array, Unit>>"],[739,"function_call"],[740,"struct_deconstruct"],[741,"function_call"],[742,"hades_permutation"],[743,"function_call::clone>"],[744,"dup>>"],[745,"function_call::len>"],[746,"enum_match, core::array::Array::>>"],[747,"array_new>"],[748,"struct_construct>"],[749,"function_call::next>"],[750,"enum_match>"],[751,"function_call"],[752,"function_call>::append>"],[753,"enum_init, core::array::Array::>, ())>, 1>"],[754,"store_temp, core::array::Array::>, ())>>"],[755,"struct_construct, Array>, Unit>>"],[756,"enum_init, core::array::Array::>, ())>, 0>"],[757,"struct_construct>"],[758,"drop>"],[759,"struct_construct>>"],[760,"struct_construct"],[761,"store_temp"],[762,"struct_deconstruct>>"],[763,"function_call>::new>"],[764,"function_call, core::starknet::storage::map::EntryInfoImpl::, core::hash::HashFelt252::>::entry>"],[765,"snapshot_take>"],[766,"drop>"],[767,"store_temp>"],[768,"function_call>::as_ptr>"],[769,"snapshot_take>"],[770,"drop>"],[771,"store_temp>"],[772,"function_call>::read>"],[773,"struct_construct>>"],[774,"function_call"],[775,"function_call, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreFelt252>::write>"],[776,"function_call"],[777,"enum_match, core::array::Array::>>"],[778,"struct_construct>>"],[779,"enum_init,)>, 0>"],[780,"enum_init,)>, 1>"],[781,"unbox"],[782,"store_temp"],[783,"function_call"],[784,"enum_match"],[785,"store_temp"],[786,"function_call"],[787,"store_temp"],[788,"function_call"],[789,"store_temp"],[790,"function_call"],[791,"function_call"],[792,"function_call"],[793,"function_call"],[794,"function_call"],[795,"enum_match>"],[796,"struct_construct>"],[797,"enum_init, 0>"],[798,"store_temp>"],[799,"const_as_immediate>"],[800,"enum_init, 1>"],[801,"const_as_immediate>"],[802,"function_call"],[803,"function_call::at>"],[804,"enum_match>"],[805,"const_as_immediate>"],[806,"function_call"],[807,"struct_construct>"],[808,"drop>"],[809,"const_as_immediate>"],[810,"struct_construct>"],[811,"struct_construct"],[812,"store_temp"],[813,"function_call::as_path>"],[814,"snapshot_take>"],[815,"drop>"],[816,"store_temp>"],[817,"function_call::as_ptr>"],[818,"struct_deconstruct>"],[819,"rename"],[820,"store_temp"],[821,"function_call"],[822,"function_call::unwrap_syscall>"],[823,"drop>>"],[824,"struct_construct>>"],[825,"struct_construct"],[826,"store_temp"],[827,"function_call>::as_path>"],[828,"snapshot_take>>"],[829,"drop>>"],[830,"store_temp>>"],[831,"function_call, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreFelt252>::as_ptr>"],[832,"struct_deconstruct>>"],[833,"enum_init"],[834,"struct_construct>"],[835,"drop>"],[836,"const_as_immediate>"],[837,"struct_construct"],[838,"store_temp"],[839,"unbox"],[840,"store_temp"],[841,"function_call"],[842,"struct_construct>>>"],[843,"function_call>, core::starknet::storage::Mutable::, core::felt252, core::hash::HashFelt252::>::update>"],[844,"rename>>"],[845,"function_call>::finalize>"],[846,"struct_construct>>"],[847,"struct_deconstruct>>"],[848,"function_call::read>"],[849,"function_call::unwrap_syscall>"],[850,"function_call::write>"],[851,"function_call"],[852,"struct_deconstruct"],[853,"alloc_local>"],[854,"store_local>"],[855,"function_call"],[856,"enum_init, core::array::Array::, ())>, 1>"],[857,"store_temp, core::array::Array::, ())>>"],[858,"struct_construct, Array, Unit>>"],[859,"enum_init, core::array::Array::, ())>, 0>"],[860,"drop>>"],[861,"function_call::update_state>"],[862,"struct_construct>"],[863,"store_temp>"],[864,"function_call"],[865,"enum_match, core::felt252)>>"],[866,"struct_deconstruct, felt252>>"],[867,"felt252_add"],[868,"struct_deconstruct>"],[869,"function_call::pop_front>"],[870,"rename"],[871,"struct_deconstruct"],[872,"array_append>"],[873,"struct_construct>>"],[874,"function_call, core::bool, core::felt252, core::hash::HashFelt252::>::update>"],[875,"rename>"],[876,"function_call::finalize>"],[877,"struct_construct>"],[878,"struct_deconstruct>"],[879,"drop>>"],[880,"struct_construct"],[881,"store_temp"],[882,"function_call"],[883,"enum_init"],[884,"enum_match"],[885,"const_as_immediate>"],[886,"function_call"],[887,"const_as_immediate>"],[888,"function_call"],[889,"enum_match"],[890,"enum_match"],[891,"enum_match"],[892,"const_as_immediate>"],[893,"function_call"],[894,"u128s_from_felt252"],[895,"const_as_immediate>"],[896,"struct_construct"],[897,"struct_deconstruct"],[898,"dup"],[899,"store_temp"],[900,"function_call"],[901,"snapshot_take"],[902,"function_call"],[903,"function_call"],[904,"struct_deconstruct>"],[905,"enum_init, 0>"],[906,"store_temp>"],[907,"enum_init, 1>"],[908,"u32_eq"],[909,"function_call>"],[910,"enum_match,)>>"],[911,"struct_deconstruct>>"],[912,"enum_init, 0>"],[913,"store_temp>"],[914,"enum_init, 1>"],[915,"const_as_immediate>"],[916,"function_call"],[917,"enum_match>>"],[918,"const_as_immediate>"],[919,"const_as_immediate>"],[920,"function_call"],[921,"function_call"],[922,"snapshot_take"],[923,"function_call"],[924,"store_temp"],[925,"store_temp>"],[926,"function_call"],[927,"function_call"],[928,"function_call"],[929,"dup>"],[930,"function_call"],[931,"drop"],[932,"drop>"],[933,"function_call"],[934,"enum_match>"],[935,"struct_deconstruct>"],[936,"struct_deconstruct>"],[937,"function_call::new>"],[938,"rename>"],[939,"function_call::finalize>"],[940,"struct_construct>"],[941,"storage_address_from_base"],[942,"storage_read_syscall"],[943,"enum_init>, 0>"],[944,"store_temp>>"],[945,"enum_init>, 1>"],[946,"enum_match>>"],[947,"struct_deconstruct>>"],[948,"function_call>::new>"],[949,"rename>>"],[950,"function_call>::finalize>"],[951,"struct_construct>>"],[952,"struct_construct"],[953,"store_temp"],[954,"struct_deconstruct>>>"],[955,"function_call::update_state>"],[956,"struct_construct>>"],[957,"struct_deconstruct>>"],[958,"function_call"],[959,"storage_base_address_from_felt252"],[960,"function_call"],[961,"enum_init>, 0>"],[962,"store_temp>>"],[963,"enum_init>, 1>"],[964,"enum_match>>"],[965,"function_call"],[966,"const_as_immediate>"],[967,"dup"],[968,"function_call"],[969,"struct_deconstruct>"],[970,"dup"],[971,"drop"],[972,"enum_init, core::felt252)>, 1>"],[973,"store_temp, core::felt252)>>"],[974,"struct_construct, felt252>>"],[975,"enum_init, core::felt252)>, 0>"],[976,"drop>"],[977,"struct_deconstruct>"],[978,"array_snapshot_pop_front"],[979,"enum_init>, 0>"],[980,"store_temp>>"],[981,"enum_init>, 1>"],[982,"enum_match>>"],[983,"store_temp>"],[984,"function_call::unbox>"],[985,"enum_init, 0>"],[986,"store_temp>"],[987,"enum_init, 1>"],[988,"struct_deconstruct>>"],[989,"struct_construct>"],[990,"struct_deconstruct>"],[991,"storage_write_syscall"],[992,"struct_deconstruct"],[993,"struct_deconstruct"],[994,"struct_deconstruct"],[995,"function_call"],[996,"u128_overflowing_sub"],[997,"enum_init, 0>"],[998,"store_temp>"],[999,"enum_init, 1>"],[1000,"function_call::into_is_err::, core::traits::DestructFromDrop::>>"],[1001,"rename"],[1002,"u128_eq"],[1003,"u128_overflowing_add"],[1004,"struct_construct>"],[1005,"store_temp>"],[1006,"const_as_immediate>"],[1007,"array_get"],[1008,"struct_construct>>"],[1009,"enum_init,)>, 0>"],[1010,"store_temp,)>>"],[1011,"enum_init,)>, 1>"],[1012,"ec_point_from_x_nz"],[1013,"enum_init>, 0>"],[1014,"store_temp>>"],[1015,"enum_init>, 1>"],[1016,"ec_point_try_new_nz"],[1017,"ec_state_init"],[1018,"rename"],[1019,"ec_state_add_mul"],[1020,"ec_state_try_finalize_nz"],[1021,"function_call"],[1022,"struct_deconstruct>"],[1023,"ec_state_add"],[1024,"function_call::into>"],[1025,"ec_neg"],[1026,"store_temp"],[1027,"function_call"],[1028,"struct_construct>"],[1029,"enum_init, 0>"],[1030,"store_temp>"],[1031,"const_as_immediate>"],[1032,"enum_init, 1>"],[1033,"struct_construct>"],[1034,"struct_deconstruct>"],[1035,"struct_construct>>"],[1036,"struct_deconstruct>>"],[1037,"function_call"],[1038,"struct_deconstruct"],[1039,"function_call"],[1040,"u64_to_felt252"],[1041,"unbox"],[1042,"enum_match>"],[1043,"function_call::destruct>"],[1044,"ec_point_unwrap"],[1045,"struct_construct>"],[1046,"store_temp>"],[1047,"unwrap_non_zero"],[1048,"ec_point_is_zero"],[1049,"pedersen"],[1050,"bool_to_felt252"]],"user_func_names":[[0,"openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],[1,"openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__::"],[2,"openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__::"],[3,"openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature::"],[4,"openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature::"],[5,"openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__::"],[6,"openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__::"],[7,"openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key::"],[8,"openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key::"],[9,"openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey::"],[10,"openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey::"],[11,"openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface::"],[12,"openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2::"],[13,"openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce::"],[14,"openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],[15,"core::starknet::class_hash::ClassHashSerde::deserialize"],[16,"core::array::SpanImpl::::is_empty"],[17,"core::assert"],[18,"openzeppelin_presets::account::AccountUpgradeable::unsafe_new_contract_state"],[19,"openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],[20,"core::array::ArrayImpl::::new"],[21,"core::array::ArrayImpl::::span"],[22,"core::panic_with_felt252"],[23,"core::array::ArraySerde::::deserialize"],[24,"openzeppelin_presets::account::AccountUpgradeable::ContractStateAccountMixinImpl::unsafe_new_contract_state"],[25,"openzeppelin_account::account::AccountComponent::AccountMixinImpl::::__execute__"],[26,"core::array::ArraySerde::, core::array::SpanFelt252Serde, core::array::SpanDrop::>::serialize"],[27,"openzeppelin_account::account::AccountComponent::AccountMixinImpl::::__validate__"],[28,"core::Felt252Serde::serialize"],[29,"core::Felt252Serde::deserialize"],[30,"core::array::ArraySerde::::deserialize"],[31,"openzeppelin_account::account::AccountComponent::AccountMixinImpl::::is_valid_signature"],[32,"openzeppelin_account::account::AccountComponent::AccountMixinImpl::::isValidSignature"],[33,"openzeppelin_account::account::AccountComponent::AccountMixinImpl::::__validate_declare__"],[34,"openzeppelin_account::account::AccountComponent::AccountMixinImpl::::__validate_deploy__"],[35,"openzeppelin_account::account::AccountComponent::AccountMixinImpl::::get_public_key"],[36,"core::array::SpanFelt252Serde::deserialize"],[37,"openzeppelin_account::account::AccountComponent::AccountMixinImpl::::set_public_key"],[38,"openzeppelin_account::account::AccountComponent::AccountMixinImpl::::getPublicKey"],[39,"openzeppelin_account::account::AccountComponent::AccountMixinImpl::::setPublicKey"],[40,"openzeppelin_account::account::AccountComponent::AccountMixinImpl::::supports_interface"],[41,"core::BoolSerde::serialize"],[42,"openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],[43,"openzeppelin_presets::account::AccountUpgradeable::ContractStateOutsideExecutionV2Impl::unsafe_new_contract_state"],[44,"openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::::execute_from_outside_v2"],[45,"openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::::is_valid_outside_execution_nonce"],[46,"openzeppelin_presets::account::AccountUpgradeable::constructor"],[47,"core::BoolNot::not"],[48,"openzeppelin_account::account::AccountComponent::unsafe_new_component_state::"],[49,"openzeppelin_introspection::src5::SRC5Component::unsafe_new_component_state::"],[50,"openzeppelin_account::extensions::src9::src9::SRC9Component::unsafe_new_component_state::"],[51,"openzeppelin_upgrades::upgradeable::UpgradeableComponent::unsafe_new_component_state::"],[52,"openzeppelin_account::account::AccountComponent::InternalImpl::::assert_only_self"],[53,"openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::::upgrade"],[54,"core::array::ArrayImpl::::append"],[55,"core::array::SpanImpl::::pop_front"],[56,"core::array::ArrayImpl::::new"],[57,"core::array::deserialize_array_helper::"],[58,"openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::get_component"],[59,"openzeppelin_account::account::AccountComponent::AccountMixin::::__execute__"],[60,"core::array::ArrayImpl::>::len"],[61,"core::serde::into_felt252_based::SerdeImpl::::serialize"],[62,"core::array::ArrayToSpan::>::span"],[63,"core::array::serialize_array_helper::, core::array::SpanFelt252Serde, core::array::SpanDrop::>"],[64,"openzeppelin_account::account::AccountComponent::AccountMixin::::__validate__"],[65,"core::box::BoxImpl::<@core::felt252>::unbox"],[66,"core::array::deserialize_array_helper::"],[67,"openzeppelin_account::account::AccountComponent::AccountMixin::::is_valid_signature"],[68,"openzeppelin_account::account::AccountComponent::AccountMixin::::isValidSignature"],[69,"openzeppelin_account::account::AccountComponent::AccountMixin::::__validate_declare__"],[70,"openzeppelin_account::account::AccountComponent::AccountMixin::::__validate_deploy__"],[71,"openzeppelin_account::account::AccountComponent::AccountMixin::::get_public_key"],[72,"core::integer::Felt252TryIntoU32::try_into"],[73,"core::array::SpanImpl::::slice"],[74,"core::array::SpanImpl::::len"],[75,"core::integer::U32Sub::sub"],[76,"openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::get_component_mut"],[77,"openzeppelin_account::account::AccountComponent::AccountMixin::::set_public_key"],[78,"openzeppelin_account::account::AccountComponent::AccountMixin::::getPublicKey"],[79,"openzeppelin_account::account::AccountComponent::AccountMixin::::setPublicKey"],[80,"openzeppelin_account::account::AccountComponent::AccountMixin::::supports_interface"],[81,"core::starknet::contract_address::ContractAddressSerde::deserialize"],[82,"core::serde::into_felt252_based::SerdeImpl::::deserialize"],[83,"core::array::SpanSerde::::deserialize"],[84,"openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC9Component::get_component_mut"],[85,"openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::::execute_from_outside_v2"],[86,"openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC9Component::get_component"],[87,"openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::::is_valid_outside_execution_nonce"],[88,"openzeppelin_account::account::AccountComponent::InternalImpl::::initializer"],[89,"openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::::initializer"],[90,"core::starknet::info::get_caller_address"],[91,"core::starknet::info::get_contract_address"],[92,"core::starknet::contract_address::ContractAddressPartialEq::eq"],[93,"core::starknet::class_hash::ClassHashZero::is_non_zero"],[94,"core::starknet::SyscallResultTraitImpl::<()>::unwrap_syscall"],[95,"openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit::"],[96,"core::Felt252PartialEq::eq"],[97,"core::starknet::account::CallSerde::deserialize"],[98,"core::array::ArrayImpl::::append"],[99,"core::Felt252Sub::sub"],[100,"openzeppelin_account::account::AccountComponent::SRC6::::__execute__"],[101,"core::integer::U32IntoFelt252::into"],[102,"core::array::ArrayImpl::>::span"],[103,"core::array::SpanImpl::>::pop_front"],[104,"core::array::SpanFelt252Serde::serialize"],[105,"openzeppelin_account::account::AccountComponent::SRC6::::__validate__"],[106,"openzeppelin_account::account::AccountComponent::SRC6::::is_valid_signature"],[107,"openzeppelin_account::account::AccountComponent::SRC6CamelOnly::::isValidSignature"],[108,"openzeppelin_account::account::AccountComponent::Declarer::::__validate_declare__"],[109,"openzeppelin_account::account::AccountComponent::Deployable::::__validate_deploy__"],[110,"openzeppelin_account::account::AccountComponent::PublicKey::::get_public_key"],[111,"core::result::ResultTraitImpl::::expect::>>"],[112,"openzeppelin_account::account::AccountComponent::PublicKey::::set_public_key"],[113,"openzeppelin_account::account::AccountComponent::PublicKeyCamel::::getPublicKey"],[114,"openzeppelin_account::account::AccountComponent::PublicKeyCamel::::setPublicKey"],[115,"openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::get_contract"],[116,"openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC5Component::get_component"],[117,"openzeppelin_introspection::src5::SRC5Component::SRC5::::supports_interface"],[118,"core::integer::Felt252TryIntoU64::try_into"],[119,"core::array::ArrayToSpan::::span"],[120,"core::starknet::contract_address::ContractAddressIntoFelt252::into"],[121,"core::Felt252PartialEq::ne"],[122,"core::starknet::info::get_block_timestamp"],[123,"core::integer::U64PartialOrd::lt"],[124,"openzeppelin_account::extensions::src9::src9::SRC9Component::ComponentStateDerefMut::::deref_mut"],[125,"core::starknet::storage::storage_base::MutableFlattenedStorageDeref::::deref"],[126,"core::starknet::storage::map::StorageAsPathReadForward::>>, core::starknet::storage::storage_base::StorageBaseAsPath::>>, core::starknet::storage::map::MutableStorableEntryReadAccess::>, core::starknet::storage::MutableImpl::>, core::starknet::storage::map::EntryInfoImpl::, core::hash::HashFelt252::, core::starknet::storage_access::StoreUsingPacking::>, core::starknet::storage::storage_base::StorageBaseDrop::>>, core::felt252Drop>::read"],[127,"core::starknet::storage::map::StorageAsPathWriteForward::>>, core::starknet::storage::storage_base::StorageBaseAsPath::>>, core::starknet::storage::map::MutableStorableEntryWriteAccess::>, core::starknet::storage::MutableImpl::>, core::starknet::storage::map::EntryInfoImpl::, core::hash::HashFelt252::, core::starknet::storage_access::StoreUsingPacking::, core::boolDrop>, core::starknet::storage::storage_base::StorageBaseDrop::>>, core::felt252Drop, core::boolDrop>::write"],[128,"openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::::get_message_hash"],[129,"core::array::SpanIntoArray::>::into"],[130,"openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],[131,"openzeppelin_account::utils::execute_calls"],[132,"core::ops::deref::SnapshotDerefHelper::, openzeppelin_account::extensions::src9::src9::SRC9Component::ComponentStateDeref::>::deref"],[133,"core::starknet::storage::storage_base::FlattenedStorageDeref::::deref"],[134,"core::starknet::storage::map::StorageAsPathReadForward::>, core::starknet::storage::storage_base::StorageBaseAsPath::>, core::starknet::storage::map::StorableEntryReadAccess::, core::starknet::storage::map::EntryInfoImpl::, core::hash::HashFelt252::, core::starknet::storage_access::StoreUsingPacking::>, core::starknet::storage::storage_base::StorageBaseDrop::>, core::felt252Drop>::read"],[135,"core::BoolPartialEq::eq"],[136,"openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::get_contract_mut"],[137,"openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC5Component::get_component_mut"],[138,"openzeppelin_introspection::src5::SRC5Component::InternalImpl::::register_interface"],[139,"openzeppelin_account::account::AccountComponent::InternalImpl::::_set_public_key"],[140,"openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC9Component::get_contract_mut"],[141,"core::starknet::info::get_execution_info"],[142,"core::box::BoxDeref::::deref"],[143,"core::starknet::class_hash::ClassHashZero::is_zero"],[144,"openzeppelin_upgrades::upgradeable::UpgradeableComponent::EventUpgradedIntoEvent::into"],[145,"openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::get_contract_mut"],[146,"openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit::>"],[147,"core::starknet::contract_address::ContractAddressZero::is_zero"],[148,"openzeppelin_account::utils::is_tx_version_valid"],[149,"core::box::BoxImpl::<@core::array::Span::>::unbox"],[150,"core::array::serialize_array_helper::"],[151,"openzeppelin_account::account::AccountComponent::InternalImpl::::validate_transaction"],[152,"core::array::ArrayToSpan::::span"],[153,"openzeppelin_account::account::AccountComponent::InternalImpl::::_is_valid_signature"],[154,"core::ops::deref::SnapshotDerefHelper::, openzeppelin_account::account::AccountComponent::ComponentStateDeref::>::deref"],[155,"core::starknet::storage::storage_base::FlattenedStorageDeref::::deref"],[156,"core::starknet::storage::StorablePointerReadAccessImpl::, core::starknet::storage::StorablePathableStorageAsPointer::, core::starknet::storage::storage_base::StorageBaseAsPath::, core::starknet::storage::StorableStoragePathAsPointer::>, core::starknet::storage::StorableStoragePointer0OffsetReadAccess::>::read"],[157,"core::traits::PanicDestructForDestruct::>::panic_destruct"],[158,"openzeppelin_account::account::AccountComponent::ComponentStateDerefMut::::deref_mut"],[159,"core::starknet::storage::storage_base::MutableFlattenedStorageDeref::::deref"],[160,"core::starknet::storage::StorablePointerReadAccessImpl::>, core::starknet::storage::StorablePathableStorageAsPointer::>, core::starknet::storage::storage_base::StorageBaseAsPath::>, core::starknet::storage::MutableStorableStoragePathAsPointer::, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreFelt252>>, core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreFelt252>>::read"],[161,"openzeppelin_account::account::AccountComponent::InternalImpl::::assert_valid_new_owner"],[162,"openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit::"],[163,"core::ops::deref::SnapshotDerefHelper::, openzeppelin_introspection::src5::SRC5Component::ComponentStateDeref::>::deref"],[164,"core::starknet::storage::storage_base::FlattenedStorageDeref::::deref"],[165,"core::array::ArrayImpl::::span"],[166,"core::starknet::info::get_block_info"],[167,"core::box::BoxDeref::::deref"],[168,"core::result::ResultTraitImpl::::into_is_err::, core::traits::DestructFromDrop::>"],[169,"openzeppelin_account::extensions::src9::src9::SRC9Component::StorageStorageMutImpl::storage_mut"],[170,"core::starknet::storage::storage_base::StorageBaseAsPath::>>::as_path"],[171,"core::starknet::storage::map::MutableStorableEntryReadAccess::>, core::starknet::storage::MutableImpl::>, core::starknet::storage::map::EntryInfoImpl::, core::hash::HashFelt252::, core::starknet::storage_access::StoreUsingPacking::>::read"],[172,"core::starknet::storage::map::MutableStorableEntryWriteAccess::>, core::starknet::storage::MutableImpl::>, core::starknet::storage::map::EntryInfoImpl::, core::hash::HashFelt252::, core::starknet::storage_access::StoreUsingPacking::, core::boolDrop>::write"],[173,"openzeppelin_account::extensions::src9::src9::SRC9Component::SNIP12MetadataImpl::name"],[174,"openzeppelin_account::extensions::src9::src9::SRC9Component::SNIP12MetadataImpl::version"],[175,"core::starknet::info::get_tx_info"],[176,"core::box::BoxImpl::::unbox"],[177,"core::poseidon::PoseidonImpl::new"],[178,"core::hash::HashStateEx::>::update_with"],[179,"openzeppelin_utils::cryptography::snip12::StructHashStarknetDomainImpl::hash_struct"],[180,"core::hash::HashStateEx::>::update_with"],[181,"openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],[182,"core::poseidon::HashStateImpl::finalize"],[183,"core::array::ArrayImpl::::append_span::, core::felt252Drop>"],[184,"core::array::ArrayDefault::::default"],[185,"core::array::ArraySerde::::serialize"],[186,"core::starknet::SyscallResultTraitImpl::>::unwrap_syscall"],[187,"core::array::ArrayImpl::>::new"],[188,"core::array::SpanIntoIterator::::into_iter"],[189,"openzeppelin_account::utils::execute_calls[expr11]"],[190,"openzeppelin_account::extensions::src9::src9::SRC9Component::ComponentStateDeref::::snapshot_deref"],[191,"openzeppelin_account::extensions::src9::src9::SRC9Component::StorageStorageImpl::storage"],[192,"core::starknet::storage::storage_base::StorageBaseAsPath::>::as_path"],[193,"core::starknet::storage::map::StorableEntryReadAccess::, core::starknet::storage::map::EntryInfoImpl::, core::hash::HashFelt252::, core::starknet::storage_access::StoreUsingPacking::>::read"],[194,"openzeppelin_introspection::src5::SRC5Component::ComponentStateDerefMut::::deref_mut"],[195,"core::starknet::storage::storage_base::MutableFlattenedStorageDeref::::deref"],[196,"core::starknet::storage::StorablePointerWriteAccessImpl::>, core::starknet::storage::StorablePathableStorageAsPointer::>, core::starknet::storage::storage_base::StorageBaseAsPath::>, core::starknet::storage::MutableStorableStoragePathAsPointer::, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreFelt252>>, core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreFelt252>, core::starknet::storage::storage_base::StorageBaseDrop::>, core::felt252Drop>::write"],[197,"openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit::"],[198,"core::starknet::SyscallResultTraitImpl::>::unwrap_syscall"],[199,"core::box::BoxImpl::::unbox"],[200,"core::felt_252::Felt252Zero::is_zero"],[201,"core::traits::TIntoT::::into"],[202,"openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],[203,"core::integer::Felt252IntoU256::into"],[204,"core::integer::U256PartialOrd::ge"],[205,"core::integer::U256PartialOrd::le"],[206,"core::integer::U256Add::add"],[207,"openzeppelin_account::utils::signature::is_valid_stark_signature"],[208,"openzeppelin_account::account::AccountComponent::ComponentStateDeref::::snapshot_deref"],[209,"openzeppelin_account::account::AccountComponent::StorageStorageImpl::storage"],[210,"core::starknet::storage::StorablePathableStorageAsPointer::, core::starknet::storage::storage_base::StorageBaseAsPath::, core::starknet::storage::StorableStoragePathAsPointer::>::as_ptr"],[211,"core::starknet::storage::StorableStoragePointer0OffsetReadAccess::::read"],[212,"core::traits::DestructFromDrop::::destruct"],[213,"openzeppelin_account::account::AccountComponent::StorageStorageMutImpl::storage_mut"],[214,"core::starknet::storage::StorablePathableStorageAsPointer::>, core::starknet::storage::storage_base::StorageBaseAsPath::>, core::starknet::storage::MutableStorableStoragePathAsPointer::, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreFelt252>>::as_ptr"],[215,"core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreFelt252>::read"],[216,"openzeppelin_account::account::AccountComponent::EventOwnerRemovedIntoEvent::into"],[217,"openzeppelin_introspection::src5::SRC5Component::ComponentStateDeref::::snapshot_deref"],[218,"openzeppelin_introspection::src5::SRC5Component::StorageStorageImpl::storage"],[219,"core::box::BoxImpl::::unbox"],[220,"core::traits::DestructFromDrop::::destruct"],[221,"core::starknet::storage::StoragePathImpl::>>::new"],[222,"core::starknet::storage::map::MutableEntryStoragePathEntry::>, core::starknet::storage::MutableImpl::>, core::starknet::storage::map::EntryInfoImpl::, core::hash::HashFelt252::>::entry"],[223,"core::starknet::storage::MutableStorableStoragePathAsPointer::, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreUsingPacking::>::as_ptr"],[224,"core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreUsingPacking::>::read"],[225,"core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreUsingPacking::>::write"],[226,"core::hash::HashFelt252::::update_state"],[227,"core::hash::HashStateEx::>::update_with"],[228,"core::hash::into_felt252_based::HashImpl::::update_state"],[229,"openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct[expr14]"],[230,"core::hash::HashStateEx::>::update_with"],[231,"core::poseidon::poseidon_hash_span"],[232,"core::Felt252Add::add"],[233,"core::clone::TCopyClone::::clone"],[234,"core::array::ArrayImpl::::len"],[235,"core::array::SpanIterator::::next"],[236,"openzeppelin_account::utils::execute_single_call"],[237,"core::array::ArrayImpl::>::append"],[238,"core::starknet::storage::StoragePathImpl::>::new"],[239,"core::starknet::storage::map::EntryInfoStoragePathEntry::, core::starknet::storage::map::EntryInfoImpl::, core::hash::HashFelt252::>::entry"],[240,"core::starknet::storage::StorableStoragePathAsPointer::>::as_ptr"],[241,"core::starknet::storage::StorableStoragePointer0OffsetReadAccess::>::read"],[242,"openzeppelin_introspection::src5::SRC5Component::StorageStorageMutImpl::storage_mut"],[243,"core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreFelt252>::write"],[244,"openzeppelin_account::account::AccountComponent::EventOwnerAddedIntoEvent::into"],[245,"core::felt_252::Felt252Zero::zero"],[246,"openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],[247,"openzeppelin_introspection::src5::SRC5Component::EventIsEvent::append_keys_and_data"],[248,"openzeppelin_account::extensions::src9::src9::SRC9Component::EventIsEvent::append_keys_and_data"],[249,"openzeppelin_upgrades::upgradeable::UpgradeableComponent::EventIsEvent::append_keys_and_data"],[250,"core::integer::u256_from_felt252"],[251,"core::integer::U256PartialOrd::lt"],[252,"core::integer::u256_checked_add"],[253,"core::integer::U32PartialEq::eq"],[254,"core::array::SpanImpl::::at"],[255,"core::ecdsa::check_ecdsa_signature"],[256,"core::starknet::storage::storage_base::StorageBaseAsPath::::as_path"],[257,"core::starknet::storage::StorableStoragePathAsPointer::::as_ptr"],[258,"core::starknet::storage_access::StoreFelt252::read"],[259,"core::starknet::SyscallResultTraitImpl::::unwrap_syscall"],[260,"core::starknet::storage::storage_base::StorageBaseAsPath::>::as_path"],[261,"core::starknet::storage::MutableStorableStoragePathAsPointer::, core::starknet::storage::MutableImpl::, core::starknet::storage_access::StoreFelt252>::as_ptr"],[262,"core::pedersen::PedersenImpl::new"],[263,"core::starknet::storage::StoragePathUpdateImpl::>, core::starknet::storage::Mutable::, core::felt252, core::hash::HashFelt252::>::update"],[264,"core::starknet::storage::StoragePathImpl::>::finalize"],[265,"core::starknet::storage_access::StoreUsingPacking::::read"],[266,"core::starknet::SyscallResultTraitImpl::::unwrap_syscall"],[267,"core::starknet::storage_access::StoreUsingPacking::::write"],[268,"core::poseidon::HashStateImpl::update"],[269,"openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],[270,"core::hash::into_felt252_based::HashImpl::::update_state"],[271,"core::poseidon::_poseidon_hash_span_inner"],[272,"core::array::SpanImpl::::pop_front"],[273,"core::starknet::storage::StoragePathUpdateImpl::, core::bool, core::felt252, core::hash::HashFelt252::>::update"],[274,"core::starknet::storage::StoragePathImpl::::finalize"],[275,"core::starknet::storage_access::StoreFelt252::write"],[276,"openzeppelin_account::account::AccountComponent::OwnerAddedIsEvent::append_keys_and_data"],[277,"openzeppelin_account::account::AccountComponent::OwnerRemovedIsEvent::append_keys_and_data"],[278,"openzeppelin_upgrades::upgradeable::UpgradeableComponent::UpgradedIsEvent::append_keys_and_data"],[279,"core::integer::U128PartialOrd::lt"],[280,"core::integer::U128PartialEq::eq"],[281,"core::integer::u256_overflowing_add"],[282,"core::array::array_at::"],[283,"core::ec::EcPointImpl::new_nz_from_x"],[284,"core::ec::EcPointImpl::new_nz"],[285,"core::ec::EcStateImpl::init"],[286,"core::ec::internal::EcStateClone::clone"],[287,"core::ec::EcStateImpl::add_mul"],[288,"core::ec::EcStateImpl::finalize_nz"],[289,"core::ec::EcPointImpl::x"],[290,"core::ec::EcStateImpl::add"],[291,"core::ec::EcStateImpl::sub"],[292,"core::starknet::storage::StoragePathImpl::::new"],[293,"core::starknet::storage::StoragePathImpl::::finalize"],[294,"core::starknet::storage::StoragePathImpl::>::new"],[295,"core::starknet::storage::StoragePathImpl::>::finalize"],[296,"core::hash::HashFelt252::::update_state"],[297,"core::pedersen::HashStateImpl::finalize"],[298,"core::starknet::storage_access::StorePackingBool::unpack"],[299,"core::starknet::storage_access::StorePackingBool::pack"],[300,"core::integer::U64IntoFelt252::into"],[301,"core::box::BoxImpl::<@core::starknet::account::Call>::unbox"],[302,"core::starknet::class_hash::ClassHashSerde::serialize"],[303,"core::result::ResultTraitImpl::::into_is_err::, core::traits::DestructFromDrop::>"],[304,"core::ec::EcPointImpl::coordinates"],[305,"core::zeroable::NonZeroIntoImpl::::into"],[306,"core::ec::EcPointTryIntoNonZero::try_into"],[307,"core::pedersen::HashStateImpl::update"],[308,"core::BoolIntoFelt252::into"],[309,"core::traits::DestructFromDrop::::destruct"]],"annotations":{"github.com/software-mansion/cairo-profiler":{"statements_functions":{"0":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"1":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"10":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"100":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"1000":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"1001":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"1002":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"1003":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"1004":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"1005":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"1006":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"1007":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1008":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1009":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"101":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"1010":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1011":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1012":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1013":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1014":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1015":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1016":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1017":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1018":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1019":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"102":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"1020":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1021":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1022":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1023":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1024":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1025":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1026":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1027":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1028":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1029":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"103":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"1030":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1031":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1032":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1033":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1034":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1035":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1036":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1037":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1038":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1039":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"104":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"1040":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1041":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1042":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1043":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1044":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1045":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1046":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1047":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1048":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1049":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"105":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"1050":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1051":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1052":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1053":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1054":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1055":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1056":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1057":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1058":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1059":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1060":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1061":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1062":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1063":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1064":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1065":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1066":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1067":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1068":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1069":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1070":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1071":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1072":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1073":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1074":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1075":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1076":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1077":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1078":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1079":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"108":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1080":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1081":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1082":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1083":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1084":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1085":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1086":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1087":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1088":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1089":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"109":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1090":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1091":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1092":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1093":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1094":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1095":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__get_public_key"],"1096":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1097":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1098":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1099":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"11":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"110":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1100":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1101":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1102":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1103":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1104":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1105":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1106":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1107":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1108":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1109":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"111":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1110":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1111":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1112":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1113":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1114":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1115":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1116":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1117":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1118":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1119":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"112":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1120":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1121":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1122":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1123":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1124":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1125":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1126":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1127":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1128":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1129":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"113":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1130":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1131":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1132":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1133":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1134":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1135":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1136":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1137":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1138":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1139":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"114":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1140":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1141":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1142":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1143":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1144":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1145":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1146":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1147":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1148":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1149":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"115":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1150":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1151":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1152":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1153":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1154":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1155":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1156":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1157":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1158":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1159":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"116":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1160":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1161":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1162":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1163":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1164":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1165":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1166":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1167":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1168":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1169":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"117":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1170":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1171":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1172":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1173":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1174":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1175":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1176":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1177":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1178":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1179":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"118":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1180":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1181":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1182":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1183":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1184":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1185":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1186":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1187":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1188":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1189":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"119":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1190":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1191":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1192":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1193":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1194":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1195":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1196":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1197":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1198":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1199":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"12":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"120":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1200":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1201":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1202":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1203":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1204":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1205":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1206":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1207":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1208":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1209":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"121":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1210":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1211":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1212":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1213":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1214":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1215":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1216":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1217":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1218":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1219":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"122":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1220":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1221":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1222":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1223":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1224":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1225":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1226":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1227":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1228":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1229":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"123":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1230":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1231":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1232":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1233":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1234":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1235":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1236":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1237":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1238":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1239":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"124":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1240":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1241":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1242":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1243":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1244":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1245":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1246":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1247":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1248":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1249":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"125":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1250":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1251":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1252":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1253":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1254":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1255":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1256":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__set_public_key"],"1257":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1258":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1259":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"126":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1260":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1261":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1262":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1263":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1264":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1265":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1266":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1267":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1268":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1269":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"127":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1270":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1271":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1272":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1273":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1274":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1275":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1276":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1277":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1278":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1279":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"128":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1280":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1281":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1282":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1283":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1284":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1285":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1286":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1287":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1288":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1289":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"129":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1290":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1291":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1292":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1293":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1294":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1295":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1296":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1297":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1298":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1299":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"13":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"130":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1300":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1301":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1302":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1303":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1304":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1305":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1306":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1307":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1308":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1309":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"131":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1310":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1311":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1312":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1313":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1314":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1315":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1316":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1317":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1318":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1319":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"132":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1320":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1321":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1322":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1323":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1324":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1325":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1326":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1327":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1328":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1329":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"133":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1330":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1331":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1332":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1333":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1334":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1335":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1336":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1337":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1338":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1339":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"134":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1340":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1341":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1342":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1343":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1344":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1345":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__getPublicKey"],"1346":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1347":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1348":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1349":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"135":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1350":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1351":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1352":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1353":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1354":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1355":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1356":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1357":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1358":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1359":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"136":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1360":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1361":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1362":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1363":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1364":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1365":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1366":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1367":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1368":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1369":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"137":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1370":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1371":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1372":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1373":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1374":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1375":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1376":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1377":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1378":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1379":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"138":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1380":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1381":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1382":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1383":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1384":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1385":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1386":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1387":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1388":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1389":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"139":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1390":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1391":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1392":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1393":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1394":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1395":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1396":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1397":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1398":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1399":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"14":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"140":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1400":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1401":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1402":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1403":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1404":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1405":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1406":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1407":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1408":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1409":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"141":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1410":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1411":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1412":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1413":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1414":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1415":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1416":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1417":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1418":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1419":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"142":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1420":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1421":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1422":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1423":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1424":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1425":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1426":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1427":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1428":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1429":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"143":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1430":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1431":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1432":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1433":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1434":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1435":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1436":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1437":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1438":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1439":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"144":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1440":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1441":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1442":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1443":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1444":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1445":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1446":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1447":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1448":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1449":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"145":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1450":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1451":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1452":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1453":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1454":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1455":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1456":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1457":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1458":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1459":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"146":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1460":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1461":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1462":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1463":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1464":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1465":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1466":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1467":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1468":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1469":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"147":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1470":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1471":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1472":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1473":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1474":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1475":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1476":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1477":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1478":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1479":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"148":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1480":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1481":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1482":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1483":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1484":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1485":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1486":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1487":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1488":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1489":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"149":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1490":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1491":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1492":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1493":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1494":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1495":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1496":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1497":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1498":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1499":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"15":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"150":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1500":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1501":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1502":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1503":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1504":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1505":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1506":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__setPublicKey"],"1507":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1508":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1509":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"151":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1510":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1511":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1512":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1513":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1514":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1515":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1516":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1517":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1518":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1519":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"152":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1520":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1521":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1522":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1523":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1524":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1525":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1526":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1527":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1528":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1529":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"153":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1530":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1531":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1532":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1533":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1534":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1535":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1536":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1537":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1538":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1539":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"154":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1540":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1541":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1542":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1543":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1544":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1545":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1546":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1547":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1548":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1549":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"155":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1550":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1551":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1552":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1553":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1554":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1555":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1556":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1557":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1558":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1559":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"156":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1560":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1561":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1562":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1563":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1564":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1565":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1566":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1567":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1568":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1569":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"157":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1570":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1571":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1572":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1573":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1574":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1575":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1576":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1577":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1578":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1579":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"158":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1580":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1581":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1582":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1583":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1584":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1585":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1586":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1587":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1588":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1589":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"159":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1590":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1591":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1592":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1593":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1594":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1595":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1596":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1597":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1598":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1599":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"16":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"160":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1600":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1601":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1602":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1603":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1604":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1605":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1606":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1607":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1608":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1609":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"161":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1610":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1611":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1612":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1613":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1614":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1615":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1616":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1617":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1618":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1619":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"162":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1620":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1621":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1622":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1623":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1624":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1625":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"1626":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__supports_interface"],"163":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1631":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1632":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1633":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1634":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1635":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1636":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1637":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1638":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1639":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"164":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1640":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1641":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1642":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1643":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1644":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1645":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1646":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1647":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1648":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1649":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"165":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1650":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1651":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1652":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1653":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1654":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1655":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1656":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1657":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1658":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1659":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"166":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1660":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1661":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1662":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1663":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1664":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1665":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1666":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1667":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1668":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1669":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"167":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1670":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1671":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1672":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1673":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1674":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1675":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1676":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1677":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1678":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1679":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"168":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1680":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1681":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1682":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1683":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1684":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1685":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1686":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1687":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1688":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1689":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"169":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1690":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1691":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1692":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1693":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1694":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1695":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1696":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1697":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1698":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1699":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"17":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"170":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1700":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1701":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1702":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1703":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1704":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1705":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1706":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1707":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1708":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1709":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"171":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1710":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1711":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1712":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1713":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1714":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1715":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1716":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1717":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1718":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1719":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"172":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1720":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1721":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1722":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1723":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1724":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1725":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1726":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1727":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1728":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1729":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"173":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1730":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1731":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1732":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1733":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1734":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1735":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1736":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1737":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1738":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1739":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"174":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1740":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1741":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1742":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1743":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1744":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1745":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1746":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1747":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1748":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1749":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"175":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1750":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1751":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1752":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1753":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1754":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1755":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1756":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1757":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1758":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1759":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"176":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1760":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1761":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1762":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1763":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1764":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1765":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1766":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1767":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1768":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1769":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"177":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1770":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1771":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1772":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1773":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1774":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1775":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1776":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1777":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1778":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1779":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"178":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1780":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1781":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1782":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1783":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1784":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1785":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1786":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1787":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1788":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1789":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"179":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1790":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1791":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1792":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1793":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1794":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1795":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1796":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1797":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1798":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1799":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"18":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"180":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1800":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1801":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1802":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1803":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1804":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1805":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1806":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1807":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1808":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1809":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"181":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1810":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1811":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1812":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1813":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1814":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1815":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1816":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1817":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1818":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1819":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"182":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1820":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1821":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1822":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1823":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1824":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1825":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1826":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1827":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1828":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1829":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"183":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1830":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1831":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1832":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1833":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1834":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1835":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1836":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1837":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1838":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1839":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"184":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1840":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1841":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1842":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1843":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1844":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1845":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1846":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1847":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1848":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1849":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"185":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1850":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__execute_from_outside_v2"],"1851":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1852":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1853":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1854":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1855":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1856":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1857":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1858":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1859":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"186":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1860":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1861":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1862":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1863":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1864":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1865":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1866":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1867":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1868":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1869":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"187":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1870":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1871":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1872":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1873":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1874":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1875":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1876":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1877":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1878":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1879":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"188":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1880":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1881":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1882":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1883":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1884":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1885":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1886":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1887":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1888":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1889":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"189":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1890":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1891":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1892":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1893":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1894":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1895":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1896":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1897":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1898":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1899":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"19":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"190":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1900":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1901":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1902":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1903":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1904":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1905":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1906":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1907":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1908":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1909":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"191":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1910":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1911":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1912":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1913":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1914":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1915":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1916":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1917":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1918":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1919":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"192":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1920":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1921":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1922":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1923":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1924":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1925":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1926":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1927":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1928":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1929":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"193":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1930":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1931":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1932":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1933":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1934":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1935":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1936":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1937":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1938":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1939":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"194":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1940":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1941":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1942":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1943":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1944":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1945":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1946":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1947":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1948":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1949":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"195":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1950":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1951":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1952":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1953":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1954":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1955":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1956":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1957":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1958":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1959":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"196":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1960":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1961":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1962":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1963":["core::option::OptionTraitImpl::expect","openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1964":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1965":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1966":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1967":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1968":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1969":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"197":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1970":["openzeppelin_account::extensions::src9::src9::SRC9Component::__wrapper__OutsideExecutionV2Impl__is_valid_outside_execution_nonce"],"1971":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1972":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1973":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1974":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1975":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1976":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1977":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1978":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1979":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"198":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1980":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1981":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1982":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1983":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1984":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1985":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1986":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1987":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1988":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1989":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"199":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"1990":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1991":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1992":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1993":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1994":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1995":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1996":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1997":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1998":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"1999":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"20":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"200":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2000":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2001":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2002":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2003":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2004":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2005":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2006":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2007":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2008":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2009":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"201":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2010":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2011":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2012":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2013":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2014":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2015":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2016":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2017":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2018":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2019":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"202":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2020":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2021":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2022":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2023":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2024":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2025":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2026":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2027":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2028":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2029":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"203":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2030":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2031":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2032":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2033":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2034":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2035":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2036":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2037":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2038":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2039":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"204":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2040":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2041":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2042":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2043":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2044":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2045":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2046":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2047":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2048":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2049":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"205":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2050":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2051":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2052":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2053":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2054":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2055":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2056":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2057":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2058":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2059":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"206":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2060":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2061":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2062":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2063":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2064":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2065":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2066":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2067":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2068":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2069":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"207":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2070":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2071":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2072":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2073":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2074":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2075":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2076":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2077":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2078":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2079":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"208":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2080":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2081":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2082":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2083":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__constructor"],"2084":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2085":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2086":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2087":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2088":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2089":["core::starknet::class_hash::ClassHashSerde::deserialize"],"209":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2090":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2091":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2092":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2093":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2094":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2095":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2096":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2097":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2098":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2099":["core::starknet::class_hash::ClassHashSerde::deserialize"],"21":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"210":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2100":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2101":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2102":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2103":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2104":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2105":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2106":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2107":["core::starknet::class_hash::ClassHashSerde::deserialize"],"2108":["core::array::SpanImpl::is_empty"],"2109":["core::array::SpanImpl::is_empty"],"211":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2110":["core::array::SpanImpl::is_empty"],"2111":["core::array::SpanImpl::is_empty"],"2112":["core::array::SpanImpl::is_empty"],"2113":["core::array::SpanImpl::is_empty"],"2114":["core::array::SpanImpl::is_empty"],"2115":["core::array::SpanImpl::is_empty"],"2116":["core::array::SpanImpl::is_empty"],"2117":["core::array::SpanImpl::is_empty"],"2118":["core::array::SpanImpl::is_empty"],"2119":["core::array::SpanImpl::is_empty"],"212":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2120":["core::array::SpanImpl::is_empty"],"2121":["core::array::SpanImpl::is_empty"],"2122":["core::array::SpanImpl::is_empty"],"2123":["core::assert"],"2124":["core::assert"],"2125":["core::assert"],"2126":["core::assert"],"2127":["core::assert"],"2128":["core::assert"],"2129":["core::assert"],"213":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2130":["core::assert"],"2131":["core::assert"],"2132":["core::assert"],"2133":["core::assert"],"2134":["core::assert"],"2135":["core::assert"],"2136":["core::assert"],"2137":["core::assert"],"2138":["core::assert"],"2139":["core::assert"],"214":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2140":["core::assert"],"2141":["core::assert"],"2142":["core::assert"],"2143":["core::assert"],"2144":["core::assert"],"2145":["core::assert"],"2146":["openzeppelin_presets::account::AccountUpgradeable::unsafe_new_contract_state"],"2147":["openzeppelin_presets::account::AccountUpgradeable::unsafe_new_contract_state"],"2148":["openzeppelin_presets::account::AccountUpgradeable::unsafe_new_contract_state"],"2149":["openzeppelin_presets::account::AccountUpgradeable::unsafe_new_contract_state"],"215":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2150":["openzeppelin_presets::account::AccountUpgradeable::unsafe_new_contract_state"],"2151":["openzeppelin_presets::account::AccountUpgradeable::unsafe_new_contract_state"],"2152":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2153":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2154":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2155":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2156":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2157":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2158":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2159":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"216":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2160":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2161":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2162":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2163":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2164":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2165":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2166":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2167":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2168":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2169":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"217":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2170":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2171":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2172":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2173":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2174":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2175":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2176":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2177":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2178":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2179":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"218":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2180":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2181":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2182":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2183":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2184":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2185":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2186":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2187":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2188":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2189":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"219":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2190":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2191":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2192":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2193":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2194":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2195":["openzeppelin_presets::account::AccountUpgradeable::UpgradeableImpl::upgrade"],"2196":["core::array::ArrayImpl::new"],"2197":["core::array::ArrayImpl::new"],"2198":["core::array::ArrayImpl::new"],"22":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"220":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2200":["core::array::ArrayImpl::span"],"2201":["core::array::ArrayImpl::span"],"2202":["core::array_inline_macro"],"2203":["core::array_inline_macro"],"2204":["core::array_inline_macro"],"2205":["core::array_inline_macro"],"2206":["core::array_inline_macro"],"2207":["core::panic_with_felt252"],"2208":["core::panic_with_felt252"],"2209":["core::panic_with_felt252"],"221":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2211":["core::array::ArraySerde::deserialize"],"2212":["core::array::ArraySerde::deserialize"],"2213":["core::array::ArraySerde::deserialize"],"2214":["core::array::ArraySerde::deserialize"],"2215":["core::array::array_inline_macro"],"2216":["core::array::ArraySerde::deserialize"],"2217":["core::array::ArraySerde::deserialize"],"2218":["core::array::ArraySerde::deserialize"],"2219":["core::array::ArraySerde::deserialize"],"222":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2220":["core::array::ArraySerde::deserialize"],"2221":["core::array::ArraySerde::deserialize"],"2222":["core::array::ArraySerde::deserialize"],"2223":["core::array::ArraySerde::deserialize"],"2224":["core::array::ArraySerde::deserialize"],"2225":["core::array::ArraySerde::deserialize"],"2226":["core::array::ArraySerde::deserialize"],"2227":["core::array::ArraySerde::deserialize"],"2228":["core::array::ArraySerde::deserialize"],"2229":["core::array::ArraySerde::deserialize"],"223":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2230":["core::array::ArraySerde::deserialize"],"2231":["core::array::ArraySerde::deserialize"],"2232":["openzeppelin_presets::account::AccountUpgradeable::ContractStateAccountMixinImpl::unsafe_new_contract_state"],"2233":["openzeppelin_presets::account::AccountUpgradeable::ContractStateAccountMixinImpl::unsafe_new_contract_state"],"2235":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__execute__"],"2236":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__execute__"],"2237":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__execute__"],"2238":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__execute__"],"2239":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__execute__"],"224":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2240":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__execute__"],"2241":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__execute__"],"2243":["core::array::ArraySerde::serialize"],"2244":["core::array::ArraySerde::serialize"],"2245":["core::array::ArraySerde::serialize"],"2246":["core::array::ArraySerde::serialize"],"2247":["core::array::ArraySerde::serialize"],"2248":["core::array::ArraySerde::serialize"],"2249":["core::array::ArraySerde::serialize"],"225":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2250":["core::array::ArraySerde::serialize"],"2251":["core::array::ArraySerde::serialize"],"2252":["core::array::ArraySerde::serialize"],"2253":["core::array::ArraySerde::serialize"],"2254":["core::array::ArraySerde::serialize"],"2255":["core::array::ArraySerde::serialize"],"2256":["core::array::ArraySerde::serialize"],"2257":["core::array::ArraySerde::serialize"],"2258":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate__"],"2259":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate__"],"226":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2260":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate__"],"2261":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate__"],"2262":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate__"],"2263":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate__"],"2264":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate__"],"2265":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate__"],"2266":["core::Felt252Serde::serialize"],"2267":["core::Felt252Serde::serialize"],"2268":["core::Felt252Serde::serialize"],"2269":["core::Felt252Serde::serialize"],"227":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2270":["core::Felt252Serde::serialize"],"2271":["core::Felt252Serde::deserialize"],"2272":["core::Felt252Serde::deserialize"],"2273":["core::Felt252Serde::deserialize"],"2274":["core::Felt252Serde::deserialize"],"2275":["core::Felt252Serde::deserialize"],"2276":["core::Felt252Serde::deserialize"],"2277":["core::Felt252Serde::deserialize"],"2278":["core::Felt252Serde::deserialize"],"2279":["core::Felt252Serde::deserialize"],"228":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2280":["core::Felt252Serde::deserialize"],"2281":["core::Felt252Serde::deserialize"],"2282":["core::Felt252Serde::deserialize"],"2283":["core::Felt252Serde::deserialize"],"2284":["core::Felt252Serde::deserialize"],"2285":["core::Felt252Serde::deserialize"],"2286":["core::Felt252Serde::deserialize"],"2287":["core::Felt252Serde::deserialize"],"2288":["core::Felt252Serde::deserialize"],"229":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2290":["core::array::ArraySerde::deserialize"],"2291":["core::array::ArraySerde::deserialize"],"2292":["core::array::ArraySerde::deserialize"],"2293":["core::array::ArraySerde::deserialize"],"2294":["core::array::array_inline_macro"],"2295":["core::array::ArraySerde::deserialize"],"2296":["core::array::ArraySerde::deserialize"],"2297":["core::array::ArraySerde::deserialize"],"2298":["core::array::ArraySerde::deserialize"],"2299":["core::array::ArraySerde::deserialize"],"23":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"230":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2300":["core::array::ArraySerde::deserialize"],"2301":["core::array::ArraySerde::deserialize"],"2302":["core::array::ArraySerde::deserialize"],"2303":["core::array::ArraySerde::deserialize"],"2304":["core::array::ArraySerde::deserialize"],"2305":["core::array::ArraySerde::deserialize"],"2306":["core::array::ArraySerde::deserialize"],"2307":["core::array::ArraySerde::deserialize"],"2308":["core::array::ArraySerde::deserialize"],"2309":["core::array::ArraySerde::deserialize"],"231":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2310":["core::array::ArraySerde::deserialize"],"2311":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::is_valid_signature"],"2312":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::is_valid_signature"],"2313":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::is_valid_signature"],"2314":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::is_valid_signature"],"2315":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::is_valid_signature"],"2316":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::is_valid_signature"],"2317":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::is_valid_signature"],"2318":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::is_valid_signature"],"2319":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::is_valid_signature"],"232":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2320":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::isValidSignature"],"2321":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::isValidSignature"],"2322":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::isValidSignature"],"2323":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::isValidSignature"],"2324":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::isValidSignature"],"2325":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::isValidSignature"],"2326":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::isValidSignature"],"2327":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::isValidSignature"],"2328":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::isValidSignature"],"2329":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate_declare__"],"233":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2330":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate_declare__"],"2331":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate_declare__"],"2332":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate_declare__"],"2333":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate_declare__"],"2334":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate_declare__"],"2335":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate_declare__"],"2336":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate_declare__"],"2337":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate_deploy__"],"2338":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate_deploy__"],"2339":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate_deploy__"],"234":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2340":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate_deploy__"],"2341":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate_deploy__"],"2342":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate_deploy__"],"2343":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate_deploy__"],"2344":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate_deploy__"],"2345":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate_deploy__"],"2346":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::__validate_deploy__"],"2347":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::get_public_key"],"2348":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::get_public_key"],"2349":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::get_public_key"],"235":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2350":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::get_public_key"],"2351":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::get_public_key"],"2352":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::get_public_key"],"2353":["core::array::SpanFelt252Serde::deserialize"],"2354":["core::array::SpanFelt252Serde::deserialize"],"2355":["core::array::SpanFelt252Serde::deserialize"],"2356":["core::array::SpanFelt252Serde::deserialize"],"2357":["core::array::SpanFelt252Serde::deserialize"],"2358":["core::array::SpanFelt252Serde::deserialize"],"2359":["core::array::SpanFelt252Serde::deserialize"],"236":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2360":["core::array::SpanFelt252Serde::deserialize"],"2361":["core::array::SpanFelt252Serde::deserialize"],"2362":["core::array::SpanFelt252Serde::deserialize"],"2363":["core::array::SpanFelt252Serde::deserialize"],"2364":["core::array::SpanFelt252Serde::deserialize"],"2365":["core::array::SpanFelt252Serde::deserialize"],"2366":["core::array::SpanFelt252Serde::deserialize"],"2367":["core::array::SpanFelt252Serde::deserialize"],"2368":["core::array::SpanFelt252Serde::deserialize"],"2369":["core::array::SpanFelt252Serde::deserialize"],"237":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2370":["core::array::SpanFelt252Serde::deserialize"],"2371":["core::array::SpanFelt252Serde::deserialize"],"2372":["core::array::SpanFelt252Serde::deserialize"],"2373":["core::array::SpanFelt252Serde::deserialize"],"2374":["core::array::SpanFelt252Serde::deserialize"],"2375":["core::array::SpanFelt252Serde::deserialize"],"2376":["core::array::SpanFelt252Serde::deserialize"],"2377":["core::array::SpanFelt252Serde::deserialize"],"2378":["core::array::SpanFelt252Serde::deserialize"],"2379":["core::array::SpanFelt252Serde::deserialize"],"238":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2380":["core::array::SpanFelt252Serde::deserialize"],"2381":["core::array::SpanFelt252Serde::deserialize"],"2382":["core::array::SpanFelt252Serde::deserialize"],"2383":["core::array::SpanFelt252Serde::deserialize"],"2384":["core::array::SpanFelt252Serde::deserialize"],"2385":["core::array::SpanFelt252Serde::deserialize"],"2386":["core::array::SpanFelt252Serde::deserialize"],"2387":["core::array::SpanFelt252Serde::deserialize"],"2388":["core::array::SpanFelt252Serde::deserialize"],"2389":["core::array::SpanFelt252Serde::deserialize"],"239":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2390":["core::array::SpanFelt252Serde::deserialize"],"2391":["core::array::SpanFelt252Serde::deserialize"],"2392":["core::array::SpanFelt252Serde::deserialize"],"2393":["core::array::SpanFelt252Serde::deserialize"],"2394":["core::array::SpanFelt252Serde::deserialize"],"2395":["core::array::SpanFelt252Serde::deserialize"],"2396":["core::array::SpanFelt252Serde::deserialize"],"2397":["core::array::SpanFelt252Serde::deserialize"],"2398":["core::array::SpanFelt252Serde::deserialize"],"2399":["core::array::SpanFelt252Serde::deserialize"],"24":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"240":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2400":["core::array::SpanFelt252Serde::deserialize"],"2401":["core::array::SpanFelt252Serde::deserialize"],"2402":["core::array::SpanFelt252Serde::deserialize"],"2403":["core::array::SpanFelt252Serde::deserialize"],"2404":["core::array::SpanFelt252Serde::deserialize"],"2405":["core::array::SpanFelt252Serde::deserialize"],"2406":["core::array::SpanFelt252Serde::deserialize"],"2407":["core::array::SpanFelt252Serde::deserialize"],"2408":["core::array::SpanFelt252Serde::deserialize"],"2409":["core::array::SpanFelt252Serde::deserialize"],"241":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2410":["core::array::SpanFelt252Serde::deserialize"],"2411":["core::array::SpanFelt252Serde::deserialize"],"2412":["core::array::SpanFelt252Serde::deserialize"],"2413":["core::array::SpanFelt252Serde::deserialize"],"2414":["core::array::SpanFelt252Serde::deserialize"],"2415":["core::array::SpanFelt252Serde::deserialize"],"2416":["core::array::SpanFelt252Serde::deserialize"],"2417":["core::array::SpanFelt252Serde::deserialize"],"2418":["core::array::SpanFelt252Serde::deserialize"],"2419":["core::array::SpanFelt252Serde::deserialize"],"242":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2420":["core::array::SpanFelt252Serde::deserialize"],"2421":["core::array::SpanFelt252Serde::deserialize"],"2422":["core::array::SpanFelt252Serde::deserialize"],"2423":["core::array::SpanFelt252Serde::deserialize"],"2424":["core::array::SpanFelt252Serde::deserialize"],"2425":["core::array::SpanFelt252Serde::deserialize"],"2426":["core::array::SpanFelt252Serde::deserialize"],"2427":["core::array::SpanFelt252Serde::deserialize"],"2428":["core::array::SpanFelt252Serde::deserialize"],"2429":["core::array::SpanFelt252Serde::deserialize"],"243":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2430":["core::array::SpanFelt252Serde::deserialize"],"2431":["core::array::SpanFelt252Serde::deserialize"],"2432":["core::array::SpanFelt252Serde::deserialize"],"2433":["core::array::SpanFelt252Serde::deserialize"],"2434":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2435":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2436":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2437":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2438":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2439":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"244":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2440":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2441":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2442":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2443":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2444":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2445":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2446":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2447":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2448":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2449":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"245":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2450":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2451":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2452":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2453":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2454":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2455":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2456":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2457":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2458":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2459":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"246":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2460":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2461":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2462":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2463":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2464":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2465":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::set_public_key"],"2466":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::getPublicKey"],"2467":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::getPublicKey"],"2468":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::getPublicKey"],"2469":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::getPublicKey"],"247":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2470":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::getPublicKey"],"2471":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::getPublicKey"],"2472":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2473":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2474":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2475":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2476":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2477":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2478":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2479":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"248":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2480":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2481":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2482":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2483":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2484":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2485":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2486":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2487":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2488":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2489":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"249":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2490":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2491":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2492":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2493":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2494":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2495":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2496":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2497":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2498":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2499":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"25":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"250":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2500":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2501":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2502":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2503":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::setPublicKey"],"2504":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::supports_interface"],"2505":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::supports_interface"],"2506":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::supports_interface"],"2507":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::supports_interface"],"2508":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::supports_interface"],"2509":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::supports_interface"],"251":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____execute__"],"2510":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::supports_interface"],"2511":["openzeppelin_account::account::AccountComponent::AccountMixinImpl::supports_interface"],"2512":["core::BoolSerde::serialize"],"2513":["core::BoolSerde::serialize"],"2514":["core::BoolSerde::serialize"],"2515":["core::BoolSerde::serialize"],"2516":["core::BoolSerde::serialize"],"2517":["core::BoolSerde::serialize"],"2518":["core::BoolSerde::serialize"],"2519":["core::BoolSerde::serialize"],"252":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2520":["core::BoolSerde::serialize"],"2521":["core::BoolSerde::serialize"],"2522":["core::BoolSerde::serialize"],"2523":["core::BoolSerde::serialize"],"2524":["core::BoolSerde::serialize"],"2525":["core::BoolSerde::serialize"],"2526":["core::BoolSerde::serialize"],"2527":["core::BoolSerde::serialize"],"253":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2534":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2535":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2536":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2537":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2538":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2539":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"254":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2540":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2541":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2542":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2543":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2544":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2545":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2546":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2547":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2548":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2549":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"255":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2550":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2551":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2552":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2553":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2554":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2555":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2556":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2557":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2558":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2559":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"256":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2560":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2561":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2562":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2563":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2564":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2565":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2566":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2567":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2568":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2569":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"257":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2570":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2571":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2572":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2573":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2574":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2575":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2576":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2577":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2578":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2579":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"258":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2580":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2581":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2582":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2583":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2584":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2585":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2586":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2587":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2588":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2589":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"259":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2590":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2591":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2592":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2593":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2594":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2595":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2596":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2597":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2598":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2599":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"26":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"260":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2600":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2601":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2602":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2603":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2604":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2605":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2606":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2607":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2608":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2609":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"261":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2610":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2611":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2612":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2613":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2614":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2615":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2616":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2617":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2618":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2619":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"262":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2620":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2621":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2622":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2623":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2624":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2625":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2626":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2627":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2628":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2629":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"263":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2630":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2631":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2632":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2633":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2634":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2635":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2636":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2637":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2638":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2639":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"264":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2640":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2641":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2642":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2643":["openzeppelin_account::extensions::src9::interface::OutsideExecutionSerde::deserialize"],"2644":["openzeppelin_presets::account::AccountUpgradeable::ContractStateOutsideExecutionV2Impl::unsafe_new_contract_state"],"2645":["openzeppelin_presets::account::AccountUpgradeable::ContractStateOutsideExecutionV2Impl::unsafe_new_contract_state"],"2647":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2648":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2649":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"265":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2650":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2651":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2652":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2653":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2654":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2655":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2656":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2657":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2658":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2659":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"266":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2660":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2661":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2662":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2663":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2664":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2665":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2666":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2667":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2668":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2669":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"267":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2670":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2671":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2672":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2673":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2674":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2675":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2676":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2677":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2678":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::execute_from_outside_v2"],"2679":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::is_valid_outside_execution_nonce"],"268":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2680":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::is_valid_outside_execution_nonce"],"2681":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::is_valid_outside_execution_nonce"],"2682":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::is_valid_outside_execution_nonce"],"2683":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::is_valid_outside_execution_nonce"],"2684":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::is_valid_outside_execution_nonce"],"2685":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::is_valid_outside_execution_nonce"],"2686":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2Impl::is_valid_outside_execution_nonce"],"2687":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2688":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2689":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"269":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2690":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2691":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2692":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2693":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2694":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2695":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2696":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2697":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2698":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2699":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"27":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"270":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2700":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2701":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2702":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2703":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2704":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2705":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2706":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2707":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2708":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2709":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"271":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2710":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2711":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2712":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2713":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2714":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2715":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2716":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2717":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2718":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2719":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"272":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2720":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2721":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2722":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2723":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2724":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2725":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2726":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2727":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2728":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2729":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"273":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2730":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2731":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2732":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2733":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2734":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2735":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2736":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2737":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2738":["openzeppelin_presets::account::AccountUpgradeable::constructor"],"2739":["core::BoolNot::not"],"274":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2740":["core::BoolNot::not"],"2741":["core::BoolNot::not"],"2743":["openzeppelin_account::account::AccountComponent::unsafe_new_component_state"],"2745":["openzeppelin_introspection::src5::SRC5Component::unsafe_new_component_state"],"2747":["openzeppelin_account::extensions::src9::src9::SRC9Component::unsafe_new_component_state"],"2749":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::unsafe_new_component_state"],"275":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2751":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2752":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2753":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2754":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2755":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2756":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2757":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2758":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2759":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"276":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2760":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2761":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2762":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2763":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2764":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2765":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2766":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2767":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2768":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2769":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"277":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2770":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2771":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2772":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2773":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2774":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2775":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2776":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2777":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2778":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2779":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"278":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2780":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2781":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2782":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2783":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2784":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2785":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2786":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2787":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2788":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"2789":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_only_self"],"279":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2790":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2791":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2792":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2793":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2794":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2795":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2796":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2797":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2798":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2799":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"28":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"280":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2800":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2801":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2802":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2803":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2804":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2805":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2806":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2807":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2808":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2809":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"281":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2810":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2811":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2812":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2813":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2814":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2815":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2816":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2817":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2818":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2819":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"282":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2820":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2821":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2822":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2823":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2824":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2825":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2826":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2827":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2828":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2829":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"283":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2830":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2831":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2832":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2833":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2834":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2835":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2836":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2837":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2838":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::InternalImpl::upgrade"],"2839":["core::array::ArrayImpl::append"],"284":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2840":["core::array::ArrayImpl::append"],"2841":["core::array::ArrayImpl::append"],"2842":["core::array::SpanImpl::pop_front"],"2843":["core::array::SpanImpl::pop_front"],"2844":["core::array::SpanImpl::pop_front"],"2845":["core::array::SpanImpl::pop_front"],"2846":["core::array::SpanImpl::pop_front"],"2847":["core::array::SpanImpl::pop_front"],"2848":["core::array::SpanImpl::pop_front"],"2849":["core::array::SpanImpl::pop_front"],"285":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2850":["core::array::SpanImpl::pop_front"],"2851":["core::array::SpanImpl::pop_front"],"2852":["core::array::SpanImpl::pop_front"],"2853":["core::array::SpanImpl::pop_front"],"2854":["core::array::SpanImpl::pop_front"],"2855":["core::array::SpanImpl::pop_front"],"2856":["core::array::SpanImpl::pop_front"],"2857":["core::array::SpanImpl::pop_front"],"2858":["core::array::SpanImpl::pop_front"],"2859":["core::array::SpanImpl::pop_front"],"286":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2860":["core::array::SpanImpl::pop_front"],"2861":["core::array::SpanImpl::pop_front"],"2862":["core::array::SpanImpl::pop_front"],"2863":["core::array::SpanImpl::pop_front"],"2864":["core::array::SpanImpl::pop_front"],"2865":["core::array::SpanImpl::pop_front"],"2866":["core::array::SpanImpl::pop_front"],"2867":["core::array::SpanImpl::pop_front"],"2868":["core::array::SpanImpl::pop_front"],"2869":["core::array::SpanImpl::pop_front"],"287":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2870":["core::array::ArrayImpl::new"],"2871":["core::array::ArrayImpl::new"],"2872":["core::array::ArrayImpl::new"],"2874":["core::array::deserialize_array_helper"],"2875":["core::array::deserialize_array_helper"],"2876":["core::array::deserialize_array_helper"],"2877":["core::array::deserialize_array_helper"],"2878":["core::array::deserialize_array_helper"],"2879":["core::array::deserialize_array_helper"],"288":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2880":["core::array::deserialize_array_helper"],"2881":["core::array::deserialize_array_helper"],"2882":["core::array::deserialize_array_helper"],"2883":["core::array::deserialize_array_helper"],"2884":["core::array::deserialize_array_helper"],"2885":["core::array::deserialize_array_helper"],"2886":["core::array::deserialize_array_helper"],"2887":["core::array::deserialize_array_helper"],"2888":["core::array::deserialize_array_helper"],"2889":["core::array::deserialize_array_helper"],"289":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2890":["core::array::deserialize_array_helper"],"2891":["core::array::deserialize_array_helper"],"2892":["core::array::deserialize_array_helper"],"2893":["core::array::deserialize_array_helper"],"2894":["core::array::deserialize_array_helper"],"2895":["core::array::deserialize_array_helper"],"2896":["core::array::deserialize_array_helper"],"2897":["core::array::deserialize_array_helper"],"2898":["core::array::deserialize_array_helper"],"2899":["core::array::deserialize_array_helper"],"29":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"290":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2900":["core::array::deserialize_array_helper"],"2901":["core::array::deserialize_array_helper"],"2902":["core::array::deserialize_array_helper"],"2903":["core::array::deserialize_array_helper"],"2904":["core::array::deserialize_array_helper"],"2905":["core::array::deserialize_array_helper"],"2906":["core::array::deserialize_array_helper"],"2907":["core::array::deserialize_array_helper"],"2908":["core::array::deserialize_array_helper"],"2909":["core::array::deserialize_array_helper"],"291":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2910":["core::array::deserialize_array_helper"],"2911":["core::array::deserialize_array_helper"],"2912":["core::array::deserialize_array_helper"],"2913":["core::array::deserialize_array_helper"],"2914":["core::array::deserialize_array_helper"],"2915":["core::array::deserialize_array_helper"],"2916":["core::array::deserialize_array_helper"],"2917":["core::array::deserialize_array_helper"],"2918":["core::array::deserialize_array_helper"],"2919":["core::array::deserialize_array_helper"],"292":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2920":["core::array::deserialize_array_helper"],"2921":["core::array::deserialize_array_helper"],"2922":["core::array::deserialize_array_helper"],"2923":["core::array::deserialize_array_helper"],"2924":["core::array::deserialize_array_helper"],"2925":["core::array::deserialize_array_helper"],"2926":["core::array::deserialize_array_helper"],"2927":["core::array::deserialize_array_helper"],"2928":["core::array::deserialize_array_helper"],"2929":["core::array::deserialize_array_helper"],"293":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2930":["core::array::deserialize_array_helper"],"2931":["core::array::deserialize_array_helper"],"2932":["core::array::deserialize_array_helper"],"2933":["core::array::deserialize_array_helper"],"2934":["core::array::deserialize_array_helper"],"2935":["core::array::deserialize_array_helper"],"2936":["core::array::deserialize_array_helper"],"2937":["core::array::deserialize_array_helper"],"2938":["core::array::deserialize_array_helper"],"2939":["core::array::deserialize_array_helper"],"294":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2940":["core::array::deserialize_array_helper"],"2941":["core::array::deserialize_array_helper"],"2942":["core::array::deserialize_array_helper"],"2943":["core::array::deserialize_array_helper"],"2944":["core::array::deserialize_array_helper"],"2945":["core::array::deserialize_array_helper"],"2946":["core::array::deserialize_array_helper"],"2947":["core::array::deserialize_array_helper"],"2948":["core::array::deserialize_array_helper"],"2949":["core::array::deserialize_array_helper"],"295":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2950":["core::array::deserialize_array_helper"],"2951":["core::array::deserialize_array_helper"],"2953":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::get_component"],"2954":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::get_component"],"2955":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::get_component"],"2956":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::get_component"],"2958":["openzeppelin_account::account::AccountComponent::AccountMixin::__execute__"],"2959":["openzeppelin_account::account::AccountComponent::AccountMixin::__execute__"],"296":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2960":["openzeppelin_account::account::AccountComponent::AccountMixin::__execute__"],"2961":["openzeppelin_account::account::AccountComponent::AccountMixin::__execute__"],"2962":["openzeppelin_account::account::AccountComponent::AccountMixin::__execute__"],"2963":["openzeppelin_account::account::AccountComponent::AccountMixin::__execute__"],"2964":["core::array::ArrayImpl::len"],"2965":["core::array::ArrayImpl::len"],"2966":["core::array::ArrayImpl::len"],"2967":["core::serde::into_felt252_based::SerdeImpl::serialize"],"2968":["core::serde::into_felt252_based::SerdeImpl::serialize"],"2969":["core::serde::into_felt252_based::SerdeImpl::serialize"],"297":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2970":["core::serde::into_felt252_based::SerdeImpl::serialize"],"2971":["core::serde::into_felt252_based::SerdeImpl::serialize"],"2972":["core::serde::into_felt252_based::SerdeImpl::serialize"],"2973":["core::serde::into_felt252_based::SerdeImpl::serialize"],"2974":["core::array::ArrayToSpan::span"],"2975":["core::array::ArrayToSpan::span"],"2976":["core::array::ArrayToSpan::span"],"298":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2980":["core::array::serialize_array_helper"],"2981":["core::array::serialize_array_helper"],"2982":["core::array::serialize_array_helper"],"2983":["core::array::serialize_array_helper"],"2984":["core::array::serialize_array_helper"],"2985":["core::array::serialize_array_helper"],"2986":["core::array::serialize_array_helper"],"2987":["core::array::serialize_array_helper"],"2988":["core::array::serialize_array_helper"],"2989":["core::array::serialize_array_helper"],"299":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"2990":["core::array::serialize_array_helper"],"2991":["core::array::serialize_array_helper"],"2992":["core::array::serialize_array_helper"],"2993":["core::array::serialize_array_helper"],"2994":["core::array::serialize_array_helper"],"2995":["core::array::serialize_array_helper"],"2996":["core::array::serialize_array_helper"],"2997":["core::array::serialize_array_helper"],"2998":["core::array::serialize_array_helper"],"2999":["core::array::serialize_array_helper"],"3":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"30":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"300":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3000":["core::array::serialize_array_helper"],"3001":["core::array::serialize_array_helper"],"3002":["core::array::serialize_array_helper"],"3003":["core::array::serialize_array_helper"],"3004":["core::array::serialize_array_helper"],"3005":["core::array::serialize_array_helper"],"3006":["core::array::serialize_array_helper"],"3007":["core::array::serialize_array_helper"],"3008":["core::array::serialize_array_helper"],"3009":["core::array::serialize_array_helper"],"301":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3010":["core::array::serialize_array_helper"],"3011":["core::array::serialize_array_helper"],"3012":["core::array::serialize_array_helper"],"3013":["core::array::serialize_array_helper"],"3014":["core::array::serialize_array_helper"],"3015":["core::array::serialize_array_helper"],"3016":["core::array::serialize_array_helper"],"3017":["core::array::serialize_array_helper"],"3018":["core::array::serialize_array_helper"],"3019":["core::array::serialize_array_helper"],"302":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3020":["core::array::serialize_array_helper"],"3021":["core::array::serialize_array_helper"],"3022":["core::array::serialize_array_helper"],"3023":["core::array::serialize_array_helper"],"3024":["core::array::serialize_array_helper"],"3025":["core::array::serialize_array_helper"],"3026":["core::array::serialize_array_helper"],"3027":["core::array::serialize_array_helper"],"3028":["core::array::serialize_array_helper"],"3029":["core::array::serialize_array_helper"],"303":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3030":["core::array::serialize_array_helper"],"3031":["core::array::serialize_array_helper"],"3032":["core::array::serialize_array_helper"],"3033":["core::array::serialize_array_helper"],"3034":["core::array::serialize_array_helper"],"3035":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate__"],"3036":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate__"],"3037":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate__"],"3038":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate__"],"3039":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate__"],"304":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3040":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate__"],"3041":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate__"],"3042":["core::box::BoxImpl::unbox"],"3043":["core::box::BoxImpl::unbox"],"3044":["core::box::BoxImpl::unbox"],"3046":["core::array::deserialize_array_helper"],"3047":["core::array::deserialize_array_helper"],"3048":["core::array::deserialize_array_helper"],"3049":["core::array::deserialize_array_helper"],"305":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3050":["core::array::deserialize_array_helper"],"3051":["core::array::deserialize_array_helper"],"3052":["core::array::deserialize_array_helper"],"3053":["core::array::deserialize_array_helper"],"3054":["core::array::deserialize_array_helper"],"3055":["core::array::deserialize_array_helper"],"3056":["core::array::deserialize_array_helper"],"3057":["core::array::deserialize_array_helper"],"3058":["core::array::deserialize_array_helper"],"3059":["core::array::deserialize_array_helper"],"306":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3060":["core::array::deserialize_array_helper"],"3061":["core::array::deserialize_array_helper"],"3062":["core::array::deserialize_array_helper"],"3063":["core::array::deserialize_array_helper"],"3064":["core::array::deserialize_array_helper"],"3065":["core::array::deserialize_array_helper"],"3066":["core::array::deserialize_array_helper"],"3067":["core::array::deserialize_array_helper"],"3068":["core::array::deserialize_array_helper"],"3069":["core::array::deserialize_array_helper"],"307":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3070":["core::array::deserialize_array_helper"],"3071":["core::array::deserialize_array_helper"],"3072":["core::array::deserialize_array_helper"],"3073":["core::array::deserialize_array_helper"],"3074":["core::array::deserialize_array_helper"],"3075":["core::array::deserialize_array_helper"],"3076":["core::array::deserialize_array_helper"],"3077":["core::array::deserialize_array_helper"],"3078":["core::array::deserialize_array_helper"],"3079":["core::array::deserialize_array_helper"],"308":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3080":["core::array::deserialize_array_helper"],"3081":["core::array::deserialize_array_helper"],"3082":["core::array::deserialize_array_helper"],"3083":["core::array::deserialize_array_helper"],"3084":["core::array::deserialize_array_helper"],"3085":["core::array::deserialize_array_helper"],"3086":["core::array::deserialize_array_helper"],"3087":["core::array::deserialize_array_helper"],"3088":["core::array::deserialize_array_helper"],"3089":["core::array::deserialize_array_helper"],"309":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3090":["core::array::deserialize_array_helper"],"3091":["core::array::deserialize_array_helper"],"3092":["core::array::deserialize_array_helper"],"3093":["core::array::deserialize_array_helper"],"3094":["core::array::deserialize_array_helper"],"3095":["core::array::deserialize_array_helper"],"3096":["core::array::deserialize_array_helper"],"3097":["core::array::deserialize_array_helper"],"3098":["core::array::deserialize_array_helper"],"3099":["core::array::deserialize_array_helper"],"31":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"310":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3100":["core::array::deserialize_array_helper"],"3101":["core::array::deserialize_array_helper"],"3102":["core::array::deserialize_array_helper"],"3103":["core::array::deserialize_array_helper"],"3104":["core::array::deserialize_array_helper"],"3105":["core::array::deserialize_array_helper"],"3106":["core::array::deserialize_array_helper"],"3107":["core::array::deserialize_array_helper"],"3108":["core::array::deserialize_array_helper"],"3109":["core::array::deserialize_array_helper"],"311":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3110":["core::array::deserialize_array_helper"],"3111":["core::array::deserialize_array_helper"],"3112":["openzeppelin_account::account::AccountComponent::AccountMixin::is_valid_signature"],"3113":["openzeppelin_account::account::AccountComponent::AccountMixin::is_valid_signature"],"3114":["openzeppelin_account::account::AccountComponent::AccountMixin::is_valid_signature"],"3115":["openzeppelin_account::account::AccountComponent::AccountMixin::is_valid_signature"],"3116":["openzeppelin_account::account::AccountComponent::AccountMixin::is_valid_signature"],"3117":["openzeppelin_account::account::AccountComponent::AccountMixin::is_valid_signature"],"3118":["openzeppelin_account::account::AccountComponent::AccountMixin::is_valid_signature"],"3119":["openzeppelin_account::account::AccountComponent::AccountMixin::is_valid_signature"],"312":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3120":["openzeppelin_account::account::AccountComponent::AccountMixin::isValidSignature"],"3121":["openzeppelin_account::account::AccountComponent::AccountMixin::isValidSignature"],"3122":["openzeppelin_account::account::AccountComponent::AccountMixin::isValidSignature"],"3123":["openzeppelin_account::account::AccountComponent::AccountMixin::isValidSignature"],"3124":["openzeppelin_account::account::AccountComponent::AccountMixin::isValidSignature"],"3125":["openzeppelin_account::account::AccountComponent::AccountMixin::isValidSignature"],"3126":["openzeppelin_account::account::AccountComponent::AccountMixin::isValidSignature"],"3127":["openzeppelin_account::account::AccountComponent::AccountMixin::isValidSignature"],"3128":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate_declare__"],"3129":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate_declare__"],"313":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3130":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate_declare__"],"3131":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate_declare__"],"3132":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate_declare__"],"3133":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate_declare__"],"3134":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate_declare__"],"3135":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate_deploy__"],"3136":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate_deploy__"],"3137":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate_deploy__"],"3138":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate_deploy__"],"3139":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate_deploy__"],"314":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3140":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate_deploy__"],"3141":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate_deploy__"],"3142":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate_deploy__"],"3143":["openzeppelin_account::account::AccountComponent::AccountMixin::__validate_deploy__"],"3144":["openzeppelin_account::account::AccountComponent::AccountMixin::get_public_key"],"3145":["openzeppelin_account::account::AccountComponent::AccountMixin::get_public_key"],"3146":["openzeppelin_account::account::AccountComponent::AccountMixin::get_public_key"],"3147":["openzeppelin_account::account::AccountComponent::AccountMixin::get_public_key"],"3148":["openzeppelin_account::account::AccountComponent::AccountMixin::get_public_key"],"3149":["core::integer::Felt252TryIntoU32::try_into"],"315":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3150":["core::integer::Felt252TryIntoU32::try_into"],"3151":["core::integer::Felt252TryIntoU32::try_into"],"3152":["core::integer::Felt252TryIntoU32::try_into"],"3153":["core::integer::Felt252TryIntoU32::try_into"],"3154":["core::integer::Felt252TryIntoU32::try_into"],"3155":["core::integer::Felt252TryIntoU32::try_into"],"3156":["core::integer::Felt252TryIntoU32::try_into"],"3157":["core::integer::Felt252TryIntoU32::try_into"],"3158":["core::integer::Felt252TryIntoU32::try_into"],"3159":["core::integer::Felt252TryIntoU32::try_into"],"316":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3160":["core::integer::Felt252TryIntoU32::try_into"],"3161":["core::array::SpanImpl::slice"],"3162":["core::array::SpanImpl::slice"],"3163":["core::array::SpanImpl::slice"],"3164":["core::array::SpanImpl::slice"],"3165":["core::array::SpanImpl::slice"],"3166":["core::array::SpanImpl::slice"],"3167":["core::array::SpanImpl::slice"],"3168":["core::array::SpanImpl::slice"],"3169":["core::array::SpanImpl::slice"],"317":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3170":["core::array::SpanImpl::slice"],"3171":["core::array::SpanImpl::slice"],"3172":["core::option::OptionTraitImpl::expect","core::array::SpanImpl::slice"],"3173":["core::option::OptionTraitImpl::expect","core::array::SpanImpl::slice"],"3174":["core::option::OptionTraitImpl::expect","core::array::SpanImpl::slice"],"3175":["core::option::OptionTraitImpl::expect","core::array::SpanImpl::slice"],"3176":["core::option::OptionTraitImpl::expect","core::array::SpanImpl::slice"],"3177":["core::option::OptionTraitImpl::expect","core::array::SpanImpl::slice"],"3178":["core::option::OptionTraitImpl::expect","core::array::SpanImpl::slice"],"3179":["core::option::OptionTraitImpl::expect","core::array::SpanImpl::slice"],"318":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3180":["core::array::SpanImpl::slice"],"3181":["core::array::SpanImpl::slice"],"3182":["core::array::SpanImpl::slice"],"3183":["core::array::SpanImpl::slice"],"3184":["core::array::SpanImpl::len"],"3185":["core::array::SpanImpl::len"],"3186":["core::array::SpanImpl::len"],"3187":["core::array::SpanImpl::len"],"3188":["core::integer::U32Sub::sub"],"3189":["core::integer::U32Sub::sub"],"319":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3190":["core::integer::U32Sub::sub"],"3191":["core::integer::U32Sub::sub"],"3192":["core::integer::U32Sub::sub"],"3193":["core::integer::U32Sub::sub"],"3194":["core::integer::U32Sub::sub"],"3195":["core::integer::U32Sub::sub"],"3196":["core::integer::U32Sub::sub"],"3197":["core::integer::U32Sub::sub"],"3198":["core::integer::U32Sub::sub"],"3199":["core::integer::U32Sub::sub"],"32":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"320":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3200":["core::integer::U32Sub::sub"],"3201":["core::integer::U32Sub::sub"],"3202":["core::integer::U32Sub::sub"],"3203":["core::integer::U32Sub::sub"],"3204":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::get_component_mut"],"3205":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::get_component_mut"],"3206":["openzeppelin_account::account::AccountComponent::AccountMixin::set_public_key"],"3207":["openzeppelin_account::account::AccountComponent::AccountMixin::set_public_key"],"3208":["openzeppelin_account::account::AccountComponent::AccountMixin::set_public_key"],"3209":["openzeppelin_account::account::AccountComponent::AccountMixin::set_public_key"],"321":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3210":["openzeppelin_account::account::AccountComponent::AccountMixin::set_public_key"],"3211":["openzeppelin_account::account::AccountComponent::AccountMixin::set_public_key"],"3212":["openzeppelin_account::account::AccountComponent::AccountMixin::set_public_key"],"3213":["openzeppelin_account::account::AccountComponent::AccountMixin::set_public_key"],"3214":["openzeppelin_account::account::AccountComponent::AccountMixin::set_public_key"],"3215":["openzeppelin_account::account::AccountComponent::AccountMixin::getPublicKey"],"3216":["openzeppelin_account::account::AccountComponent::AccountMixin::getPublicKey"],"3217":["openzeppelin_account::account::AccountComponent::AccountMixin::getPublicKey"],"3218":["openzeppelin_account::account::AccountComponent::AccountMixin::getPublicKey"],"3219":["openzeppelin_account::account::AccountComponent::AccountMixin::getPublicKey"],"322":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3220":["openzeppelin_account::account::AccountComponent::AccountMixin::setPublicKey"],"3221":["openzeppelin_account::account::AccountComponent::AccountMixin::setPublicKey"],"3222":["openzeppelin_account::account::AccountComponent::AccountMixin::setPublicKey"],"3223":["openzeppelin_account::account::AccountComponent::AccountMixin::setPublicKey"],"3224":["openzeppelin_account::account::AccountComponent::AccountMixin::setPublicKey"],"3225":["openzeppelin_account::account::AccountComponent::AccountMixin::setPublicKey"],"3226":["openzeppelin_account::account::AccountComponent::AccountMixin::setPublicKey"],"3227":["openzeppelin_account::account::AccountComponent::AccountMixin::setPublicKey"],"3228":["openzeppelin_account::account::AccountComponent::AccountMixin::setPublicKey"],"3229":["openzeppelin_account::account::get_dep_component_inline_macro"],"323":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3230":["openzeppelin_account::account::get_dep_component_inline_macro"],"3231":["openzeppelin_account::account::AccountComponent::AccountMixin::supports_interface"],"3232":["openzeppelin_account::account::AccountComponent::AccountMixin::supports_interface"],"3233":["openzeppelin_account::account::AccountComponent::AccountMixin::supports_interface"],"3234":["openzeppelin_account::account::AccountComponent::AccountMixin::supports_interface"],"3235":["openzeppelin_account::account::AccountComponent::AccountMixin::supports_interface"],"3236":["openzeppelin_account::account::AccountComponent::AccountMixin::supports_interface"],"3237":["openzeppelin_account::account::AccountComponent::AccountMixin::supports_interface"],"3238":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3239":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"324":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3240":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3241":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3242":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3243":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3244":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3245":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3246":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3247":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3248":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3249":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"325":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3250":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3251":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3252":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3253":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3254":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3255":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3256":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3257":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3258":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3259":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"326":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3260":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3261":["core::starknet::contract_address::ContractAddressSerde::deserialize"],"3262":["core::serde::into_felt252_based::SerdeImpl::deserialize"],"3263":["core::serde::into_felt252_based::SerdeImpl::deserialize"],"3264":["core::serde::into_felt252_based::SerdeImpl::deserialize"],"3265":["core::serde::into_felt252_based::SerdeImpl::deserialize"],"3266":["core::serde::into_felt252_based::SerdeImpl::deserialize"],"3267":["core::serde::into_felt252_based::SerdeImpl::deserialize"],"3268":["core::serde::into_felt252_based::SerdeImpl::deserialize"],"3269":["core::serde::into_felt252_based::SerdeImpl::deserialize"],"327":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3270":["core::serde::into_felt252_based::SerdeImpl::deserialize"],"3271":["core::serde::into_felt252_based::SerdeImpl::deserialize"],"3272":["core::serde::into_felt252_based::SerdeImpl::deserialize"],"3273":["core::serde::into_felt252_based::SerdeImpl::deserialize"],"3274":["core::serde::into_felt252_based::SerdeImpl::deserialize"],"3275":["core::serde::into_felt252_based::SerdeImpl::deserialize"],"3276":["core::serde::into_felt252_based::SerdeImpl::deserialize"],"3277":["core::serde::into_felt252_based::SerdeImpl::deserialize"],"3278":["core::serde::into_felt252_based::SerdeImpl::deserialize"],"3279":["core::serde::into_felt252_based::SerdeImpl::deserialize"],"328":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3281":["core::array::SpanSerde::deserialize"],"3282":["core::array::SpanSerde::deserialize"],"3283":["core::array::SpanSerde::deserialize"],"3284":["core::array::SpanSerde::deserialize"],"3285":["core::array::SpanSerde::deserialize"],"3286":["core::array::SpanSerde::deserialize"],"3287":["core::array::SpanSerde::deserialize"],"3288":["core::array::SpanSerde::deserialize"],"3289":["core::array::SpanSerde::deserialize"],"329":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3290":["core::array::SpanSerde::deserialize"],"3291":["core::array::SpanSerde::deserialize"],"3292":["core::array::SpanSerde::deserialize"],"3293":["core::array::SpanSerde::deserialize"],"3294":["core::array::SpanSerde::deserialize"],"3295":["core::array::SpanSerde::deserialize"],"3296":["core::array::SpanSerde::deserialize"],"3297":["core::array::SpanSerde::deserialize"],"3298":["core::array::SpanSerde::deserialize"],"3299":["core::array::SpanSerde::deserialize"],"33":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"330":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3300":["core::array::SpanSerde::deserialize"],"3301":["core::array::SpanSerde::deserialize"],"3302":["core::array::SpanSerde::deserialize"],"3303":["core::array::SpanSerde::deserialize"],"3304":["core::array::SpanSerde::deserialize"],"3305":["core::array::SpanSerde::deserialize"],"3306":["core::array::SpanSerde::deserialize"],"3307":["core::array::SpanSerde::deserialize"],"3308":["core::array::SpanSerde::deserialize"],"3309":["core::array::SpanSerde::deserialize"],"331":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3310":["core::array::SpanSerde::deserialize"],"3311":["core::array::SpanSerde::deserialize"],"3312":["core::array::SpanSerde::deserialize"],"3313":["core::array::SpanSerde::deserialize"],"3314":["core::array::SpanSerde::deserialize"],"3315":["core::array::SpanSerde::deserialize"],"3316":["core::array::SpanSerde::deserialize"],"3317":["core::array::SpanSerde::deserialize"],"3318":["core::array::SpanSerde::deserialize"],"3319":["core::array::SpanSerde::deserialize"],"332":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3320":["core::array::SpanSerde::deserialize"],"3321":["core::array::SpanSerde::deserialize"],"3322":["core::array::SpanSerde::deserialize"],"3323":["core::array::SpanSerde::deserialize"],"3324":["core::array::SpanSerde::deserialize"],"3325":["core::array::SpanSerde::deserialize"],"3326":["core::array::SpanSerde::deserialize"],"3327":["core::array::SpanSerde::deserialize"],"3328":["core::array::SpanSerde::deserialize"],"3329":["core::array::SpanSerde::deserialize"],"333":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3330":["core::array::SpanSerde::deserialize"],"3331":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC9Component::get_component_mut"],"3332":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC9Component::get_component_mut"],"334":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3341":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3342":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3343":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3344":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3345":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3346":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3347":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3348":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3349":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"335":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3350":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3351":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3352":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3353":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3354":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3355":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3356":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3357":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3358":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3359":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"336":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3360":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3361":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3362":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3363":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3364":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3365":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3366":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3367":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3368":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3369":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"337":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3370":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3371":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3372":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3373":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3374":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3375":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3376":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3377":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3378":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3379":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"338":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3380":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3381":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3382":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3383":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3384":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3385":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3386":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3387":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3388":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3389":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"339":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3390":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3391":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3392":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3393":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3394":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3395":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3396":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3397":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3398":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3399":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"34":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"340":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3400":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3401":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3402":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3403":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3404":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3405":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3406":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3407":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3408":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3409":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"341":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3410":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3411":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3412":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3413":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3414":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3415":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3416":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3417":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3418":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3419":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"342":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3420":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3421":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3422":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3423":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3424":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3425":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3426":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3427":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3428":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3429":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"343":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3430":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3431":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3432":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3433":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3434":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3435":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3436":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3437":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3438":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3439":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"344":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3440":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3441":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3442":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3443":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3444":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3445":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3446":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3447":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3448":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3449":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"345":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3450":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3451":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3452":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3453":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3454":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3455":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3456":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3457":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3458":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3459":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"346":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3460":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3461":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3462":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3463":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3464":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3465":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3466":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3467":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3468":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3469":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"347":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3470":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3471":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3472":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3473":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3474":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3475":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3476":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3477":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3478":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3479":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"348":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3480":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3481":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3482":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3483":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3484":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3485":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3486":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3487":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3488":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3489":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"349":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3490":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3491":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3492":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3493":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3494":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3495":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3496":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3497":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3498":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3499":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"35":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"350":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3500":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3501":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3502":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3503":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3504":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3505":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3506":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3507":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3508":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3509":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"351":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3510":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3511":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3512":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3513":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3514":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3515":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3516":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3517":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3518":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3519":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"352":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3520":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3521":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3522":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3523":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3524":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3525":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3526":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3527":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3528":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3529":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"353":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3530":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3531":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3532":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3533":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3534":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3535":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3536":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3537":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3538":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3539":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"354":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3540":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3541":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3542":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3543":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3544":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3545":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3546":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3547":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3548":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3549":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"355":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3550":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3551":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3552":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3553":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3554":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3555":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3556":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3557":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3558":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3559":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"356":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3560":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3561":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3562":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3563":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3564":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3565":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3566":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3567":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3568":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3569":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"357":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3570":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3571":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3572":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3573":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3574":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3575":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3576":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3577":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3578":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3579":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"358":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3580":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3581":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3582":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3583":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3584":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3585":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3586":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3587":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3588":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3589":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"359":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3590":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3591":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3592":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3593":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3594":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3595":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3596":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3597":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3598":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3599":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"36":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"360":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3600":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3601":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3602":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3603":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3604":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3605":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3606":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3607":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3608":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3609":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"361":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3610":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3611":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3612":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3613":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3614":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3615":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3616":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3617":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3618":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3619":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"362":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3620":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3621":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3622":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3623":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3624":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3625":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3626":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3627":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3628":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3629":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"363":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3630":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3631":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3632":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3633":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3634":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3635":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3636":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3637":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3638":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3639":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"364":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3640":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3641":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3642":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3643":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3644":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3645":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3646":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3647":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3648":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3649":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"365":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3650":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3651":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3652":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3653":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3654":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3655":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3656":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3657":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3658":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3659":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"366":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3660":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3661":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3662":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3663":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3664":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3665":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3666":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3667":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3668":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3669":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"367":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3670":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3671":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3672":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3673":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3674":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3675":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3676":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3677":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3678":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3679":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"368":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3680":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3681":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3682":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3683":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3684":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3685":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3686":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3687":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3688":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3689":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"369":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3690":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3691":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3692":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3693":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3694":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3695":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3696":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3697":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3698":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3699":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"37":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"370":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3700":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3701":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3702":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3703":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3704":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3705":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3706":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3707":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3708":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3709":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"371":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3710":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3711":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3712":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3713":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3714":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3715":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3716":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3717":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3718":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3719":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"372":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3720":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3721":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3722":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3723":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3724":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3725":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3726":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3727":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3728":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3729":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"373":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3730":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3731":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3732":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3733":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3734":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3735":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3736":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3737":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3738":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3739":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"374":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3740":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3741":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3742":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3743":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3744":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3745":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3746":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3747":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3748":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3749":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"375":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3750":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3751":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3752":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3753":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3754":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3755":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3756":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3757":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3758":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3759":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"376":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3760":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3761":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3762":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3763":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3764":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3765":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3766":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3767":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3768":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3769":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"377":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3770":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3771":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3772":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3773":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3774":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3775":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3776":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3777":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3778":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3779":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"378":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3780":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3781":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3782":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3783":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3784":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3785":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3786":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3787":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3788":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3789":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"379":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3790":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3791":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3792":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3793":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3794":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3795":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3796":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3797":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3798":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3799":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"38":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"380":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3800":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3801":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3802":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3803":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3804":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3805":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::execute_from_outside_v2"],"3807":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC9Component::get_component"],"3808":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC9Component::get_component"],"3809":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC9Component::get_component"],"381":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3810":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC9Component::get_component"],"3811":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3812":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3813":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3814":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3815":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3816":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3817":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3818":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3819":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"382":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3820":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3821":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3822":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3823":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3824":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3825":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3826":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3827":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3828":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3829":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"383":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate__"],"3830":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3831":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3832":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3833":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3834":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3835":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3836":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3837":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3838":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3839":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3840":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3841":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3842":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3843":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3844":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3845":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3846":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3847":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3848":["openzeppelin_account::extensions::src9::src9::SRC9Component::OutsideExecutionV2::is_valid_outside_execution_nonce"],"3849":["openzeppelin_account::account::get_dep_component_inline_macro"],"3850":["openzeppelin_account::account::get_dep_component_inline_macro"],"3851":["openzeppelin_account::account::get_dep_component_inline_macro"],"3852":["openzeppelin_account::account::get_dep_component_inline_macro"],"3853":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3854":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3855":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3856":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3857":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3858":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3859":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"386":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"3860":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3861":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3862":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3863":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3864":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3865":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3866":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3867":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3868":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3869":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"387":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"3870":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3871":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3872":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3873":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3874":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3875":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3876":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3877":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3878":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3879":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"388":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"3880":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3881":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3882":["openzeppelin_account::account::AccountComponent::InternalImpl::initializer"],"3883":["openzeppelin_account::extensions::src9::src9::get_dep_component_inline_macro"],"3884":["openzeppelin_account::extensions::src9::src9::get_dep_component_inline_macro"],"3885":["openzeppelin_account::extensions::src9::src9::get_dep_component_inline_macro"],"3886":["openzeppelin_account::extensions::src9::src9::get_dep_component_inline_macro"],"3887":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3888":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3889":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"389":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"3890":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3891":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3892":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3893":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3894":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3895":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3896":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3897":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3898":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3899":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"39":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"390":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"3900":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3901":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3902":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3903":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3904":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3905":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3906":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3907":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3908":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3909":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"391":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"3910":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3911":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3912":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3913":["openzeppelin_account::extensions::src9::src9::SRC9Component::InternalImpl::initializer"],"3914":["core::starknet::info::get_caller_address"],"3915":["core::starknet::info::get_caller_address"],"3916":["core::starknet::info::get_caller_address"],"3917":["core::starknet::info::get_caller_address"],"3918":["core::starknet::info::get_caller_address"],"3919":["core::starknet::info::get_caller_address"],"392":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"3920":["core::starknet::info::get_caller_address"],"3921":["core::starknet::info::get_caller_address"],"3922":["core::starknet::info::get_caller_address"],"3923":["core::starknet::info::get_caller_address"],"3924":["core::starknet::info::get_caller_address"],"3925":["core::starknet::info::get_caller_address"],"3926":["core::starknet::info::get_caller_address"],"3927":["core::starknet::info::get_caller_address"],"3928":["core::starknet::info::get_caller_address"],"3929":["core::starknet::info::get_caller_address"],"393":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"3930":["core::starknet::info::get_caller_address"],"3931":["core::starknet::info::get_caller_address"],"3932":["core::starknet::info::get_caller_address"],"3933":["core::starknet::info::get_caller_address"],"3934":["core::starknet::info::get_caller_address"],"3935":["core::starknet::info::get_caller_address"],"3936":["core::starknet::info::get_caller_address"],"3937":["core::starknet::info::get_caller_address"],"3938":["core::starknet::info::get_caller_address"],"3939":["core::starknet::info::get_contract_address"],"394":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"3940":["core::starknet::info::get_contract_address"],"3941":["core::starknet::info::get_contract_address"],"3942":["core::starknet::info::get_contract_address"],"3943":["core::starknet::info::get_contract_address"],"3944":["core::starknet::info::get_contract_address"],"3945":["core::starknet::info::get_contract_address"],"3946":["core::starknet::info::get_contract_address"],"3947":["core::starknet::info::get_contract_address"],"3948":["core::starknet::info::get_contract_address"],"3949":["core::starknet::info::get_contract_address"],"395":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"3950":["core::starknet::info::get_contract_address"],"3951":["core::starknet::info::get_contract_address"],"3952":["core::starknet::info::get_contract_address"],"3953":["core::starknet::info::get_contract_address"],"3954":["core::starknet::info::get_contract_address"],"3955":["core::starknet::info::get_contract_address"],"3956":["core::starknet::info::get_contract_address"],"3957":["core::starknet::info::get_contract_address"],"3958":["core::starknet::info::get_contract_address"],"3959":["core::starknet::info::get_contract_address"],"396":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"3960":["core::starknet::info::get_contract_address"],"3961":["core::starknet::info::get_contract_address"],"3962":["core::starknet::info::get_contract_address"],"3963":["core::starknet::info::get_contract_address"],"3964":["core::starknet::contract_address::ContractAddressPartialEq::eq"],"3965":["core::starknet::contract_address::ContractAddressPartialEq::eq"],"3966":["core::starknet::contract_address::ContractAddressPartialEq::eq"],"3967":["core::starknet::contract_address::ContractAddressPartialEq::eq"],"3968":["core::starknet::contract_address::ContractAddressPartialEq::eq"],"3969":["core::starknet::contract_address::ContractAddressPartialEq::eq"],"397":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"3970":["core::starknet::contract_address::ContractAddressPartialEq::eq"],"3971":["core::starknet::contract_address::ContractAddressPartialEq::eq"],"3972":["core::starknet::contract_address::ContractAddressPartialEq::eq"],"3973":["core::starknet::contract_address::ContractAddressPartialEq::eq"],"3974":["core::starknet::contract_address::ContractAddressPartialEq::eq"],"3975":["core::starknet::contract_address::ContractAddressPartialEq::eq"],"3976":["core::starknet::class_hash::ClassHashZero::is_non_zero"],"3977":["core::starknet::class_hash::ClassHashZero::is_non_zero"],"3978":["core::starknet::class_hash::ClassHashZero::is_non_zero"],"3979":["core::starknet::class_hash::ClassHashZero::is_non_zero"],"398":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"3980":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"3981":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"3982":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"3983":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"3984":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"3985":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"3986":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"3987":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"3988":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"3989":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"399":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"3990":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"3991":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"3992":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"3993":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"3994":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"3995":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"3996":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"3997":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"3998":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"3999":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"4":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"40":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"400":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4000":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"4001":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"4002":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"4003":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"4004":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"4005":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"4006":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"4007":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"4008":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"4009":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"401":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4010":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"4011":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"4012":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"4013":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"4014":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"4015":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"4016":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::emit"],"4017":["core::Felt252PartialEq::eq"],"4018":["core::Felt252PartialEq::eq"],"4019":["core::Felt252PartialEq::eq"],"402":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4020":["core::Felt252PartialEq::eq"],"4021":["core::Felt252PartialEq::eq"],"4022":["core::Felt252PartialEq::eq"],"4023":["core::Felt252PartialEq::eq"],"4024":["core::Felt252PartialEq::eq"],"4025":["core::Felt252PartialEq::eq"],"4026":["core::Felt252PartialEq::eq"],"4027":["core::Felt252PartialEq::eq"],"4028":["core::Felt252PartialEq::eq"],"4029":["core::Felt252PartialEq::eq"],"403":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4030":["core::Felt252PartialEq::eq"],"4031":["core::Felt252PartialEq::eq"],"4032":["core::Felt252PartialEq::eq"],"4033":["core::Felt252PartialEq::eq"],"4034":["core::starknet::account::CallSerde::deserialize"],"4035":["core::starknet::account::CallSerde::deserialize"],"4036":["core::starknet::account::CallSerde::deserialize"],"4037":["core::starknet::account::CallSerde::deserialize"],"4038":["core::starknet::account::CallSerde::deserialize"],"4039":["core::starknet::account::CallSerde::deserialize"],"404":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4040":["core::starknet::account::CallSerde::deserialize"],"4041":["core::starknet::account::CallSerde::deserialize"],"4042":["core::starknet::account::CallSerde::deserialize"],"4043":["core::starknet::account::CallSerde::deserialize"],"4044":["core::starknet::account::CallSerde::deserialize"],"4045":["core::starknet::account::CallSerde::deserialize"],"4046":["core::starknet::account::CallSerde::deserialize"],"4047":["core::starknet::account::CallSerde::deserialize"],"4048":["core::starknet::account::CallSerde::deserialize"],"4049":["core::starknet::account::CallSerde::deserialize"],"405":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4050":["core::starknet::account::CallSerde::deserialize"],"4051":["core::starknet::account::CallSerde::deserialize"],"4052":["core::starknet::account::CallSerde::deserialize"],"4053":["core::starknet::account::CallSerde::deserialize"],"4054":["core::starknet::account::CallSerde::deserialize"],"4055":["core::starknet::account::CallSerde::deserialize"],"4056":["core::starknet::account::CallSerde::deserialize"],"4057":["core::starknet::account::CallSerde::deserialize"],"4058":["core::starknet::account::CallSerde::deserialize"],"4059":["core::starknet::account::CallSerde::deserialize"],"406":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4060":["core::starknet::account::CallSerde::deserialize"],"4061":["core::starknet::account::CallSerde::deserialize"],"4062":["core::starknet::account::CallSerde::deserialize"],"4063":["core::starknet::account::CallSerde::deserialize"],"4064":["core::starknet::account::CallSerde::deserialize"],"4065":["core::starknet::account::CallSerde::deserialize"],"4066":["core::starknet::account::CallSerde::deserialize"],"4067":["core::starknet::account::CallSerde::deserialize"],"4068":["core::starknet::account::CallSerde::deserialize"],"4069":["core::starknet::account::CallSerde::deserialize"],"407":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4070":["core::starknet::account::CallSerde::deserialize"],"4071":["core::starknet::account::CallSerde::deserialize"],"4072":["core::starknet::account::CallSerde::deserialize"],"4073":["core::starknet::account::CallSerde::deserialize"],"4074":["core::starknet::account::CallSerde::deserialize"],"4075":["core::starknet::account::CallSerde::deserialize"],"4076":["core::starknet::account::CallSerde::deserialize"],"4077":["core::starknet::account::CallSerde::deserialize"],"4078":["core::starknet::account::CallSerde::deserialize"],"4079":["core::starknet::account::CallSerde::deserialize"],"408":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4080":["core::starknet::account::CallSerde::deserialize"],"4081":["core::starknet::account::CallSerde::deserialize"],"4082":["core::starknet::account::CallSerde::deserialize"],"4083":["core::starknet::account::CallSerde::deserialize"],"4084":["core::starknet::account::CallSerde::deserialize"],"4085":["core::starknet::account::CallSerde::deserialize"],"4086":["core::starknet::account::CallSerde::deserialize"],"4087":["core::starknet::account::CallSerde::deserialize"],"4088":["core::starknet::account::CallSerde::deserialize"],"4089":["core::array::ArrayImpl::append"],"409":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4090":["core::array::ArrayImpl::append"],"4091":["core::array::ArrayImpl::append"],"4092":["core::Felt252Sub::sub"],"4093":["core::Felt252Sub::sub"],"4094":["core::Felt252Sub::sub"],"4097":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4098":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4099":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"41":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"410":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4100":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4101":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4102":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4103":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4104":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4105":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4106":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4107":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4108":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4109":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"411":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4110":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4111":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4112":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4113":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4114":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4115":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4116":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4117":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4118":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4119":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"412":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4120":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4121":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4122":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4123":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4124":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4125":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4126":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4127":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4128":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4129":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"413":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4130":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4131":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4132":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4133":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4134":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4135":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4136":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4137":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4138":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4139":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"414":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4140":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4141":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4142":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4143":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4144":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4145":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4146":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4147":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4148":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4149":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"415":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4150":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4151":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4152":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4153":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4154":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4155":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4156":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4157":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4158":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4159":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"416":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4160":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4161":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4162":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4163":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4164":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4165":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4166":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4167":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4168":["openzeppelin_account::account::AccountComponent::SRC6::__execute__"],"4169":["core::integer::U32IntoFelt252::into"],"417":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4170":["core::integer::U32IntoFelt252::into"],"4171":["core::integer::U32IntoFelt252::into"],"4173":["core::array::ArrayImpl::span"],"4174":["core::array::ArrayImpl::span"],"4175":["core::array::SpanImpl::pop_front"],"4176":["core::array::SpanImpl::pop_front"],"4177":["core::array::SpanImpl::pop_front"],"4178":["core::array::SpanImpl::pop_front"],"4179":["core::array::SpanImpl::pop_front"],"418":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4180":["core::array::SpanImpl::pop_front"],"4181":["core::array::SpanImpl::pop_front"],"4182":["core::array::SpanImpl::pop_front"],"4183":["core::array::SpanImpl::pop_front"],"4184":["core::array::SpanImpl::pop_front"],"4185":["core::array::SpanImpl::pop_front"],"4186":["core::array::SpanImpl::pop_front"],"4187":["core::array::SpanImpl::pop_front"],"4188":["core::array::SpanImpl::pop_front"],"4189":["core::array::SpanImpl::pop_front"],"419":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4190":["core::array::SpanImpl::pop_front"],"4191":["core::array::SpanImpl::pop_front"],"4192":["core::array::SpanImpl::pop_front"],"4193":["core::array::SpanImpl::pop_front"],"4194":["core::array::SpanImpl::pop_front"],"4195":["core::array::SpanImpl::pop_front"],"4196":["core::array::SpanImpl::pop_front"],"4197":["core::array::SpanImpl::pop_front"],"4198":["core::array::SpanImpl::pop_front"],"4199":["core::array::SpanImpl::pop_front"],"42":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"420":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4200":["core::array::SpanImpl::pop_front"],"4201":["core::array::SpanImpl::pop_front"],"4202":["core::array::SpanImpl::pop_front"],"4204":["core::array::SpanFelt252Serde::serialize"],"4205":["core::array::SpanFelt252Serde::serialize"],"4206":["core::array::SpanFelt252Serde::serialize"],"4207":["core::array::SpanFelt252Serde::serialize"],"4208":["core::array::SpanFelt252Serde::serialize"],"4209":["core::array::SpanFelt252Serde::serialize"],"421":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4210":["core::array::SpanFelt252Serde::serialize"],"4211":["core::array::SpanFelt252Serde::serialize"],"4212":["core::array::SpanFelt252Serde::serialize"],"4213":["core::array::SpanFelt252Serde::serialize"],"4214":["core::array::SpanFelt252Serde::serialize"],"4215":["core::array::SpanFelt252Serde::serialize"],"4216":["core::array::SpanFelt252Serde::serialize"],"4217":["core::array::SpanFelt252Serde::serialize"],"4218":["core::array::SpanFelt252Serde::serialize"],"422":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4220":["openzeppelin_account::account::AccountComponent::SRC6::__validate__"],"4221":["openzeppelin_account::account::AccountComponent::SRC6::__validate__"],"4222":["openzeppelin_account::account::AccountComponent::SRC6::__validate__"],"4223":["openzeppelin_account::account::AccountComponent::SRC6::__validate__"],"4224":["openzeppelin_account::account::AccountComponent::SRC6::__validate__"],"4225":["openzeppelin_account::account::AccountComponent::SRC6::__validate__"],"4226":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4227":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4228":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4229":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"423":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4230":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4231":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4232":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4233":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4234":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4235":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4236":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4237":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4238":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4239":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"424":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4240":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4241":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4242":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4243":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4244":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4245":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4246":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4247":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4248":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4249":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"425":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4250":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4251":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4252":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4253":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4254":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4255":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4256":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4257":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4258":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4259":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"426":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4260":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4261":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4262":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4263":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4264":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4265":["openzeppelin_account::account::AccountComponent::SRC6::is_valid_signature"],"4266":["openzeppelin_account::account::AccountComponent::SRC6CamelOnly::isValidSignature"],"4267":["openzeppelin_account::account::AccountComponent::SRC6CamelOnly::isValidSignature"],"4268":["openzeppelin_account::account::AccountComponent::SRC6CamelOnly::isValidSignature"],"4269":["openzeppelin_account::account::AccountComponent::SRC6CamelOnly::isValidSignature"],"427":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4270":["openzeppelin_account::account::AccountComponent::SRC6CamelOnly::isValidSignature"],"4271":["openzeppelin_account::account::AccountComponent::SRC6CamelOnly::isValidSignature"],"4272":["openzeppelin_account::account::AccountComponent::SRC6CamelOnly::isValidSignature"],"4273":["openzeppelin_account::account::AccountComponent::SRC6CamelOnly::isValidSignature"],"4275":["openzeppelin_account::account::AccountComponent::Declarer::__validate_declare__"],"4276":["openzeppelin_account::account::AccountComponent::Declarer::__validate_declare__"],"4277":["openzeppelin_account::account::AccountComponent::Declarer::__validate_declare__"],"4278":["openzeppelin_account::account::AccountComponent::Declarer::__validate_declare__"],"4279":["openzeppelin_account::account::AccountComponent::Declarer::__validate_declare__"],"428":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4280":["openzeppelin_account::account::AccountComponent::Declarer::__validate_declare__"],"4284":["openzeppelin_account::account::AccountComponent::Deployable::__validate_deploy__"],"4285":["openzeppelin_account::account::AccountComponent::Deployable::__validate_deploy__"],"4286":["openzeppelin_account::account::AccountComponent::Deployable::__validate_deploy__"],"4287":["openzeppelin_account::account::AccountComponent::Deployable::__validate_deploy__"],"4288":["openzeppelin_account::account::AccountComponent::Deployable::__validate_deploy__"],"4289":["openzeppelin_account::account::AccountComponent::Deployable::__validate_deploy__"],"429":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4290":["openzeppelin_account::account::AccountComponent::PublicKey::get_public_key"],"4291":["openzeppelin_account::account::AccountComponent::PublicKey::get_public_key"],"4292":["openzeppelin_account::account::AccountComponent::PublicKey::get_public_key"],"4293":["openzeppelin_account::account::AccountComponent::PublicKey::get_public_key"],"4294":["openzeppelin_account::account::AccountComponent::PublicKey::get_public_key"],"4295":["openzeppelin_account::account::AccountComponent::PublicKey::get_public_key"],"4296":["openzeppelin_account::account::AccountComponent::PublicKey::get_public_key"],"4297":["openzeppelin_account::account::AccountComponent::PublicKey::get_public_key"],"4298":["openzeppelin_account::account::AccountComponent::PublicKey::get_public_key"],"4299":["openzeppelin_account::account::AccountComponent::PublicKey::get_public_key"],"43":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"430":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4300":["openzeppelin_account::account::AccountComponent::PublicKey::get_public_key"],"4301":["core::result::ResultTraitImpl::expect"],"4302":["core::result::ResultTraitImpl::expect"],"4303":["core::result::ResultTraitImpl::expect"],"4304":["core::result::ResultTraitImpl::expect"],"4305":["core::result::ResultTraitImpl::expect"],"4306":["core::result::ResultTraitImpl::expect"],"4307":["core::result::ResultTraitImpl::expect"],"4308":["core::result::ResultTraitImpl::expect"],"4309":["core::result::ResultTraitImpl::expect"],"431":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4310":["core::result::ResultTraitImpl::expect"],"4311":["core::result::ResultTraitImpl::expect"],"4312":["core::result::ResultTraitImpl::expect"],"4313":["core::result::ResultTraitImpl::expect"],"4314":["core::result::ResultTraitImpl::expect"],"4315":["core::result::ResultTraitImpl::expect"],"4316":["core::result::ResultTraitImpl::expect"],"4317":["core::result::ResultTraitImpl::expect"],"4318":["core::result::ResultTraitImpl::expect"],"4319":["core::result::ResultTraitImpl::expect"],"432":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4320":["core::result::ResultTraitImpl::expect"],"4321":["core::result::ResultTraitImpl::expect"],"4322":["core::result::ResultTraitImpl::expect"],"4323":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4324":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4325":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4326":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4327":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4328":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4329":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"433":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4330":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4331":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4332":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4333":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4334":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4335":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4336":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4337":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4338":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4339":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"434":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4340":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4341":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4342":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4343":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4344":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4345":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4346":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4347":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4348":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4349":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"435":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4350":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4351":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4352":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4353":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4354":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4355":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4356":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4357":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4358":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4359":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"436":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4360":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4361":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4362":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4363":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4364":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4365":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4366":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4367":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4368":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4369":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"437":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4370":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4371":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4372":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4373":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4374":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4375":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4376":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4377":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4378":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4379":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"438":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4380":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4381":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4382":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4383":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4384":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4385":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4386":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4387":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4388":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4389":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"439":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4390":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4391":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4392":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4393":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4394":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4395":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4396":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4397":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4398":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4399":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"44":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"440":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4400":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4401":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4402":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4403":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4404":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4405":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4406":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4407":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4408":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4409":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"441":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4410":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4411":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4412":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4413":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4414":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4415":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4416":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4417":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4418":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4419":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"442":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4420":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4421":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4422":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4423":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4424":["openzeppelin_account::account::AccountComponent::PublicKey::set_public_key"],"4425":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::getPublicKey"],"4426":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::getPublicKey"],"4427":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::getPublicKey"],"4428":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::getPublicKey"],"4429":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::getPublicKey"],"443":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4430":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::getPublicKey"],"4431":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::getPublicKey"],"4432":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::getPublicKey"],"4433":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::getPublicKey"],"4434":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::getPublicKey"],"4435":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::getPublicKey"],"4436":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::setPublicKey"],"4437":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::setPublicKey"],"4438":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::setPublicKey"],"4439":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::setPublicKey"],"444":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4440":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::setPublicKey"],"4441":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::setPublicKey"],"4442":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::setPublicKey"],"4443":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::setPublicKey"],"4444":["openzeppelin_account::account::AccountComponent::PublicKeyCamel::setPublicKey"],"4446":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::get_contract"],"4447":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::get_contract"],"4448":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::get_contract"],"4449":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::get_contract"],"445":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4451":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC5Component::get_component"],"4452":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC5Component::get_component"],"4453":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC5Component::get_component"],"4454":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC5Component::get_component"],"4455":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4456":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4457":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4458":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4459":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"446":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4460":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4461":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4462":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4463":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4464":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4465":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4466":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4467":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4468":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4469":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"447":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4470":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4471":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4472":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4473":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4474":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4475":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4476":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4477":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4478":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4479":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"448":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4480":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4481":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4482":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4483":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4484":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4485":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4486":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4487":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4488":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"4489":["openzeppelin_introspection::src5::SRC5Component::SRC5::supports_interface"],"449":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4490":["core::integer::Felt252TryIntoU64::try_into"],"4491":["core::integer::Felt252TryIntoU64::try_into"],"4492":["core::integer::Felt252TryIntoU64::try_into"],"4493":["core::integer::Felt252TryIntoU64::try_into"],"4494":["core::integer::Felt252TryIntoU64::try_into"],"4495":["core::integer::Felt252TryIntoU64::try_into"],"4496":["core::integer::Felt252TryIntoU64::try_into"],"4497":["core::integer::Felt252TryIntoU64::try_into"],"4498":["core::integer::Felt252TryIntoU64::try_into"],"4499":["core::integer::Felt252TryIntoU64::try_into"],"45":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"450":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4500":["core::integer::Felt252TryIntoU64::try_into"],"4501":["core::integer::Felt252TryIntoU64::try_into"],"4502":["core::array::ArrayToSpan::span"],"4503":["core::array::ArrayToSpan::span"],"4504":["core::array::ArrayToSpan::span"],"4505":["core::starknet::contract_address::ContractAddressIntoFelt252::into"],"4506":["core::starknet::contract_address::ContractAddressIntoFelt252::into"],"4507":["core::starknet::contract_address::ContractAddressIntoFelt252::into"],"4508":[],"4509":[],"451":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4510":[],"4511":[],"4512":[],"4513":["core::starknet::info::get_block_timestamp"],"4514":["core::starknet::info::get_block_timestamp"],"4515":["core::starknet::info::get_block_timestamp"],"4516":["core::starknet::info::get_block_timestamp"],"4517":["core::starknet::info::get_block_timestamp"],"4518":["core::starknet::info::get_block_timestamp"],"4519":["core::starknet::info::get_block_timestamp"],"452":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4520":["core::starknet::info::get_block_timestamp"],"4521":["core::starknet::info::get_block_timestamp"],"4522":["core::starknet::info::get_block_timestamp"],"4523":["core::starknet::info::get_block_timestamp"],"4524":["core::starknet::info::get_block_timestamp"],"4525":["core::starknet::info::get_block_timestamp"],"4526":["core::starknet::info::get_block_timestamp"],"4527":["core::starknet::info::get_block_timestamp"],"4528":["core::starknet::info::get_block_timestamp"],"4529":["core::starknet::info::get_block_timestamp"],"453":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4530":["core::starknet::info::get_block_timestamp"],"4531":["core::starknet::info::get_block_timestamp"],"4532":["core::starknet::info::get_block_timestamp"],"4533":["core::starknet::info::get_block_timestamp"],"4534":["core::starknet::info::get_block_timestamp"],"4535":["core::starknet::info::get_block_timestamp"],"4536":["core::integer::U64PartialOrd::lt"],"4537":["core::integer::U64PartialOrd::lt"],"4538":["core::integer::U64PartialOrd::lt"],"4539":["core::integer::U64PartialOrd::lt"],"454":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4540":["core::integer::U64PartialOrd::lt"],"4541":["core::integer::U64PartialOrd::lt"],"4542":["core::integer::U64PartialOrd::lt"],"4543":["core::integer::U64PartialOrd::lt"],"4544":["core::integer::U64PartialOrd::lt"],"4545":["core::integer::U64PartialOrd::lt"],"4546":["core::integer::U64PartialOrd::lt"],"4547":["core::integer::U64PartialOrd::lt"],"4548":["core::integer::U64PartialOrd::lt"],"4549":["core::integer::U64PartialOrd::lt"],"455":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4551":["openzeppelin_account::extensions::src9::src9::SRC9Component::ComponentStateDerefMut::deref_mut"],"4552":["core::starknet::storage::storage_base::MutableFlattenedStorageDeref::deref"],"4553":["core::starknet::storage::storage_base::MutableFlattenedStorageDeref::deref"],"4554":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4555":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4556":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4557":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4558":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4559":["core::starknet::storage::map::StorageAsPathReadForward::read"],"456":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4560":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4561":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4562":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4563":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4564":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4565":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4566":["core::starknet::storage::map::StorageAsPathWriteForward::write"],"4567":["core::starknet::storage::map::StorageAsPathWriteForward::write"],"4568":["core::starknet::storage::map::StorageAsPathWriteForward::write"],"4569":["core::starknet::storage::map::StorageAsPathWriteForward::write"],"457":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4570":["core::starknet::storage::map::StorageAsPathWriteForward::write"],"4571":["core::starknet::storage::map::StorageAsPathWriteForward::write"],"4572":["core::starknet::storage::map::StorageAsPathWriteForward::write"],"4573":["core::starknet::storage::map::StorageAsPathWriteForward::write"],"4574":["core::starknet::storage::map::StorageAsPathWriteForward::write"],"4575":["core::starknet::storage::map::StorageAsPathWriteForward::write"],"4576":["core::starknet::storage::map::StorageAsPathWriteForward::write"],"4577":["core::starknet::storage::map::StorageAsPathWriteForward::write"],"4578":["core::starknet::storage::map::StorageAsPathWriteForward::write"],"458":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4583":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4584":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4585":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4586":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4587":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4588":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4589":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"459":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4590":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4591":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4592":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4593":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4594":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4595":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4596":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4597":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4598":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4599":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"46":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"460":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4600":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4601":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4602":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4603":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4604":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4605":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4606":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4607":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4608":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4609":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"461":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4610":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4611":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4612":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4613":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4614":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4615":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4616":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4617":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4618":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4619":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"462":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4620":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4621":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4622":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4623":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4624":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4625":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4626":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4627":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4628":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4629":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"463":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4630":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4631":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4632":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4633":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4634":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4635":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4636":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4637":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4638":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4639":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"464":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4640":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4641":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4642":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4643":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4644":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4645":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4646":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4647":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4648":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4649":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"465":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4650":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4651":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4652":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4653":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4654":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4655":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4656":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4657":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4658":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4659":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"466":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4660":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4661":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4662":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4663":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4664":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4665":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4666":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4667":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4668":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"4669":["openzeppelin_utils::cryptography::snip12::OffchainMessageHashImpl::get_message_hash"],"467":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4671":["core::array::array_inline_macro"],"4672":["core::array::SpanIntoArray::into"],"4673":["core::array::SpanIntoArray::into"],"4674":["core::array::SpanIntoArray::into"],"4675":["core::array::SpanIntoArray::into"],"4676":["core::array::SpanIntoArray::into"],"4677":["core::array::SpanIntoArray::into"],"4678":["core::array::SpanIntoArray::into"],"4679":["core::array::SpanIntoArray::into"],"468":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4680":["core::array::SpanIntoArray::into"],"4681":["core::array::SpanIntoArray::into"],"4682":["core::array::SpanIntoArray::into"],"4683":["core::array::SpanIntoArray::into"],"4684":["core::array::SpanIntoArray::into"],"4685":["core::array::SpanIntoArray::into"],"4686":["core::array::SpanIntoArray::into"],"4687":["core::array::SpanIntoArray::into"],"4688":["core::array::SpanIntoArray::into"],"4689":["core::array::SpanIntoArray::into"],"469":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4690":["core::array::SpanIntoArray::into"],"4691":["core::array::SpanIntoArray::into"],"4692":["core::array::SpanIntoArray::into"],"4694":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4695":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4696":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4697":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4698":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4699":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"47":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"470":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4700":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4701":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4702":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4703":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4704":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4705":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4706":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4707":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4708":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4709":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"471":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4710":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4711":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4712":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4713":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4714":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4715":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4716":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4717":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4718":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4719":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"472":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4720":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4721":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4722":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4723":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4724":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4725":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4726":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4727":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4728":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4729":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"473":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4730":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4731":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4732":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4733":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4734":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4735":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4736":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4737":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4738":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4739":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"474":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4740":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4741":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4742":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4743":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4744":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4745":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4746":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4747":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4748":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4749":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"475":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4750":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4751":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4752":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4753":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4754":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4755":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4756":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4757":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4758":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4759":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"476":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4760":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4761":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4762":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4763":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4764":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4765":["core::option::OptionTraitImpl::expect","openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4766":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4767":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4768":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4769":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"477":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4770":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4771":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4772":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4773":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4774":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4775":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4776":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4777":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4778":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4779":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"478":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4780":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4781":["openzeppelin_account::interface::ISRC6DispatcherImpl::is_valid_signature"],"4783":["openzeppelin_account::utils::array_inline_macro"],"4784":["openzeppelin_account::utils::execute_calls"],"4785":["openzeppelin_account::utils::execute_calls"],"4786":["openzeppelin_account::utils::execute_calls"],"4787":["openzeppelin_account::utils::execute_calls"],"4788":["openzeppelin_account::utils::execute_calls"],"4789":["openzeppelin_account::utils::execute_calls"],"479":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4790":["openzeppelin_account::utils::execute_calls"],"4791":["openzeppelin_account::utils::execute_calls"],"4792":["openzeppelin_account::utils::execute_calls"],"4793":["openzeppelin_account::utils::execute_calls"],"4794":["openzeppelin_account::utils::execute_calls"],"4795":["openzeppelin_account::utils::execute_calls"],"4796":["openzeppelin_account::utils::execute_calls"],"4797":["openzeppelin_account::utils::execute_calls"],"4798":["openzeppelin_account::utils::execute_calls"],"4799":["openzeppelin_account::utils::execute_calls"],"48":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"480":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4800":["openzeppelin_account::utils::execute_calls"],"4801":["openzeppelin_account::utils::execute_calls"],"4802":["openzeppelin_account::utils::execute_calls"],"4803":["openzeppelin_account::utils::execute_calls"],"4804":["openzeppelin_account::utils::execute_calls"],"4805":["openzeppelin_account::utils::execute_calls"],"4806":["openzeppelin_account::utils::execute_calls"],"4807":["openzeppelin_account::utils::execute_calls"],"4808":["openzeppelin_account::utils::execute_calls"],"4809":["openzeppelin_account::utils::execute_calls"],"481":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4810":["openzeppelin_account::utils::execute_calls"],"4811":["core::ops::deref::SnapshotDerefHelper::deref"],"4812":["core::ops::deref::SnapshotDerefHelper::deref"],"4813":["core::starknet::storage::storage_base::FlattenedStorageDeref::deref"],"4814":["core::starknet::storage::storage_base::FlattenedStorageDeref::deref"],"4815":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4816":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4817":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4818":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4819":["core::starknet::storage::map::StorageAsPathReadForward::read"],"482":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4820":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4821":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4822":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4823":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4824":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4825":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4826":["core::starknet::storage::map::StorageAsPathReadForward::read"],"4827":["core::BoolPartialEq::eq"],"4828":["core::BoolPartialEq::eq"],"4829":["core::BoolPartialEq::eq"],"483":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4830":["core::BoolPartialEq::eq"],"4831":["core::BoolPartialEq::eq"],"4832":["core::BoolPartialEq::eq"],"4833":["core::BoolPartialEq::eq"],"4834":["core::BoolPartialEq::eq"],"4835":["core::BoolPartialEq::eq"],"4836":["core::BoolPartialEq::eq"],"4837":["core::BoolPartialEq::eq"],"4838":["core::BoolPartialEq::eq"],"4839":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::get_contract_mut"],"484":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4840":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::get_contract_mut"],"4841":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC5Component::get_component_mut"],"4842":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC5Component::get_component_mut"],"4843":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4844":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4845":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4846":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4847":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4848":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4849":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"485":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4850":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4851":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4852":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4853":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4854":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4855":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4856":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4857":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4858":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4859":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"486":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4860":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4861":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4862":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4863":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4864":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4865":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4866":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4867":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4868":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4869":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"487":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4870":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4871":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4872":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4873":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4874":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4875":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4876":["openzeppelin_introspection::src5::SRC5Component::InternalImpl::register_interface"],"4877":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4878":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4879":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"488":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4880":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4881":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4882":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4883":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4884":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4885":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4886":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4887":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4888":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4889":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"489":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4890":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4891":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4892":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4893":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4894":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4895":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4896":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4897":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4898":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4899":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"49":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"490":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4900":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4901":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4902":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4903":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4904":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4905":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4906":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4907":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4908":["openzeppelin_account::account::AccountComponent::InternalImpl::_set_public_key"],"4909":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC9Component::get_contract_mut"],"491":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4910":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_SRC9Component::get_contract_mut"],"4911":["core::starknet::info::get_execution_info"],"4912":["core::starknet::info::get_execution_info"],"4913":["core::starknet::info::get_execution_info"],"4914":["core::starknet::info::get_execution_info"],"4915":["core::starknet::info::get_execution_info"],"4916":["core::starknet::info::get_execution_info"],"4917":["core::starknet::info::get_execution_info"],"4918":["core::starknet::info::get_execution_info"],"4919":["core::starknet::info::get_execution_info"],"492":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4920":["core::starknet::info::get_execution_info"],"4921":["core::starknet::info::get_execution_info"],"4922":["core::starknet::info::get_execution_info"],"4923":["core::starknet::info::get_execution_info"],"4924":["core::starknet::info::get_execution_info"],"4925":["core::starknet::info::get_execution_info"],"4926":["core::starknet::info::get_execution_info"],"4927":["core::starknet::info::get_execution_info"],"4928":["core::box::BoxDeref::deref"],"4929":["core::box::BoxDeref::deref"],"493":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4930":["core::box::BoxDeref::deref"],"4931":["core::starknet::class_hash::ClassHashZero::is_zero"],"4932":["core::starknet::class_hash::ClassHashZero::is_zero"],"4933":["core::starknet::class_hash::ClassHashZero::is_zero"],"4934":["core::starknet::class_hash::ClassHashZero::is_zero"],"4935":["core::starknet::class_hash::ClassHashZero::is_zero"],"4936":["core::starknet::class_hash::ClassHashZero::is_zero"],"4937":["core::starknet::class_hash::ClassHashZero::is_zero"],"4938":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::EventUpgradedIntoEvent::into"],"4939":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::EventUpgradedIntoEvent::into"],"494":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4940":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::EventUpgradedIntoEvent::into"],"4941":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::get_contract_mut"],"4942":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_UpgradeableComponent::get_contract_mut"],"4943":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4944":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4945":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4946":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4947":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4948":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4949":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"495":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4950":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4951":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4952":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4953":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4954":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4955":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4956":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4957":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4958":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4959":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"496":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4960":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4961":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4962":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4963":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4964":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4965":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4966":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4967":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4968":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4969":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"497":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4970":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4971":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4972":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4973":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4974":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4975":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4976":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4977":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4978":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4979":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"498":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4980":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4981":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4982":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4983":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4984":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4985":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4986":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4987":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4988":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4989":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"499":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"4990":["openzeppelin_presets::account::AccountUpgradeable::ContractStateEventEmitter::emit"],"4991":["core::starknet::contract_address::ContractAddressZero::is_zero"],"4992":["core::starknet::contract_address::ContractAddressZero::is_zero"],"4993":["core::starknet::contract_address::ContractAddressZero::is_zero"],"4994":["core::starknet::contract_address::ContractAddressZero::is_zero"],"4995":["core::starknet::contract_address::ContractAddressZero::is_zero"],"4996":["core::starknet::contract_address::ContractAddressZero::is_zero"],"4997":["core::starknet::contract_address::ContractAddressZero::is_zero"],"4998":["openzeppelin_account::utils::is_tx_version_valid"],"4999":["openzeppelin_account::utils::is_tx_version_valid"],"5":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"50":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"500":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5000":["openzeppelin_account::utils::is_tx_version_valid"],"5001":["openzeppelin_account::utils::is_tx_version_valid"],"5002":["openzeppelin_account::utils::is_tx_version_valid"],"5003":["openzeppelin_account::utils::is_tx_version_valid"],"5004":["openzeppelin_account::utils::is_tx_version_valid"],"5005":["openzeppelin_account::utils::is_tx_version_valid"],"5006":["openzeppelin_account::utils::is_tx_version_valid"],"5007":["openzeppelin_account::utils::is_tx_version_valid"],"5008":["openzeppelin_account::utils::is_tx_version_valid"],"5009":["openzeppelin_account::utils::is_tx_version_valid"],"501":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5010":["openzeppelin_account::utils::is_tx_version_valid"],"5011":["openzeppelin_account::utils::is_tx_version_valid"],"5012":["openzeppelin_account::utils::is_tx_version_valid"],"5013":["openzeppelin_account::utils::is_tx_version_valid"],"5014":["openzeppelin_account::utils::is_tx_version_valid"],"5015":["openzeppelin_account::utils::is_tx_version_valid"],"5016":["openzeppelin_account::utils::is_tx_version_valid"],"5017":["openzeppelin_account::utils::is_tx_version_valid"],"5018":["openzeppelin_account::utils::is_tx_version_valid"],"5019":["openzeppelin_account::utils::is_tx_version_valid"],"502":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5020":["openzeppelin_account::utils::is_tx_version_valid"],"5021":["openzeppelin_account::utils::is_tx_version_valid"],"5022":["openzeppelin_account::utils::is_tx_version_valid"],"5023":["openzeppelin_account::utils::is_tx_version_valid"],"5024":["openzeppelin_account::utils::is_tx_version_valid"],"5025":["openzeppelin_account::utils::is_tx_version_valid"],"5026":["openzeppelin_account::utils::is_tx_version_valid"],"5027":["openzeppelin_account::utils::is_tx_version_valid"],"5028":["openzeppelin_account::utils::is_tx_version_valid"],"5029":["openzeppelin_account::utils::is_tx_version_valid"],"503":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5030":["openzeppelin_account::utils::is_tx_version_valid"],"5031":["openzeppelin_account::utils::is_tx_version_valid"],"5032":["openzeppelin_account::utils::is_tx_version_valid"],"5033":["openzeppelin_account::utils::is_tx_version_valid"],"5034":["openzeppelin_account::utils::is_tx_version_valid"],"5035":["openzeppelin_account::utils::is_tx_version_valid"],"5036":["openzeppelin_account::utils::is_tx_version_valid"],"5037":["openzeppelin_account::utils::is_tx_version_valid"],"5038":["openzeppelin_account::utils::is_tx_version_valid"],"5039":["openzeppelin_account::utils::is_tx_version_valid"],"504":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5040":["openzeppelin_account::utils::is_tx_version_valid"],"5041":["openzeppelin_account::utils::is_tx_version_valid"],"5042":["openzeppelin_account::utils::is_tx_version_valid"],"5043":["openzeppelin_account::utils::is_tx_version_valid"],"5044":["openzeppelin_account::utils::is_tx_version_valid"],"5045":["openzeppelin_account::utils::is_tx_version_valid"],"5046":["openzeppelin_account::utils::is_tx_version_valid"],"5047":["openzeppelin_account::utils::is_tx_version_valid"],"5048":["openzeppelin_account::utils::is_tx_version_valid"],"5049":["openzeppelin_account::utils::is_tx_version_valid"],"505":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5050":["openzeppelin_account::utils::is_tx_version_valid"],"5051":["openzeppelin_account::utils::is_tx_version_valid"],"5052":["openzeppelin_account::utils::is_tx_version_valid"],"5053":["openzeppelin_account::utils::is_tx_version_valid"],"5054":["openzeppelin_account::utils::is_tx_version_valid"],"5055":["openzeppelin_account::utils::is_tx_version_valid"],"5056":["openzeppelin_account::utils::is_tx_version_valid"],"5057":["openzeppelin_account::utils::is_tx_version_valid"],"5058":["openzeppelin_account::utils::is_tx_version_valid"],"5059":["openzeppelin_account::utils::is_tx_version_valid"],"506":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5060":["openzeppelin_account::utils::is_tx_version_valid"],"5061":["openzeppelin_account::utils::is_tx_version_valid"],"5062":["openzeppelin_account::utils::is_tx_version_valid"],"5063":["openzeppelin_account::utils::is_tx_version_valid"],"5064":["openzeppelin_account::utils::is_tx_version_valid"],"5065":["openzeppelin_account::utils::is_tx_version_valid"],"5066":["openzeppelin_account::utils::is_tx_version_valid"],"5067":["openzeppelin_account::utils::is_tx_version_valid"],"5068":["openzeppelin_account::utils::is_tx_version_valid"],"5069":["openzeppelin_account::utils::is_tx_version_valid"],"507":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5070":["openzeppelin_account::utils::is_tx_version_valid"],"5071":["openzeppelin_account::utils::is_tx_version_valid"],"5072":["openzeppelin_account::utils::is_tx_version_valid"],"5073":["openzeppelin_account::utils::is_tx_version_valid"],"5074":["openzeppelin_account::utils::is_tx_version_valid"],"5075":["openzeppelin_account::utils::is_tx_version_valid"],"5076":["core::box::BoxImpl::unbox"],"5077":["core::box::BoxImpl::unbox"],"5078":["core::box::BoxImpl::unbox"],"508":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5080":["core::array::serialize_array_helper"],"5081":["core::array::serialize_array_helper"],"5082":["core::array::serialize_array_helper"],"5083":["core::array::serialize_array_helper"],"5084":["core::array::serialize_array_helper"],"5085":["core::array::serialize_array_helper"],"5086":["core::array::serialize_array_helper"],"5087":["core::array::serialize_array_helper"],"5088":["core::array::serialize_array_helper"],"5089":["core::array::serialize_array_helper"],"509":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5090":["core::array::serialize_array_helper"],"5091":["core::array::serialize_array_helper"],"5092":["core::array::serialize_array_helper"],"5093":["core::array::serialize_array_helper"],"5094":["core::array::serialize_array_helper"],"5095":["core::array::serialize_array_helper"],"5096":["core::array::serialize_array_helper"],"5097":["core::array::serialize_array_helper"],"5098":["core::array::serialize_array_helper"],"5099":["core::array::serialize_array_helper"],"51":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"510":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5100":["core::array::serialize_array_helper"],"5101":["core::array::serialize_array_helper"],"5102":["core::array::serialize_array_helper"],"5103":["core::array::serialize_array_helper"],"5104":["core::array::serialize_array_helper"],"5105":["core::array::serialize_array_helper"],"5106":["core::array::serialize_array_helper"],"5107":["core::array::serialize_array_helper"],"5108":["core::array::serialize_array_helper"],"5109":["core::array::serialize_array_helper"],"511":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5110":["core::array::serialize_array_helper"],"5111":["core::array::serialize_array_helper"],"5112":["core::array::serialize_array_helper"],"5113":["core::array::serialize_array_helper"],"5114":["core::array::serialize_array_helper"],"5115":["core::array::serialize_array_helper"],"5116":["core::array::serialize_array_helper"],"5117":["core::array::serialize_array_helper"],"5118":["core::array::serialize_array_helper"],"5119":["core::array::serialize_array_helper"],"512":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5120":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5121":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5122":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5123":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5124":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5125":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5126":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5127":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5128":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5129":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"513":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5130":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5131":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5132":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5133":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5134":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5135":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5136":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5137":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5138":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5139":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"514":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5140":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5141":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5142":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5143":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5144":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5145":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5146":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5147":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5148":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5149":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"515":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5150":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5151":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5152":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5153":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5154":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5155":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5156":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5157":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5158":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5159":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"516":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5160":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5161":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5162":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5163":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5164":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5165":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5166":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5167":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5168":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5169":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"517":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5170":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5171":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5172":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5173":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5174":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5175":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5176":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5177":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5178":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5179":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"518":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5180":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5181":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5182":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5183":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5184":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5185":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5186":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5187":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5188":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5189":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"519":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5190":["openzeppelin_account::account::AccountComponent::InternalImpl::validate_transaction"],"5191":["core::array::ArrayToSpan::span"],"5192":["core::array::ArrayToSpan::span"],"5193":["core::array::ArrayToSpan::span"],"5194":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5195":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5196":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5197":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5198":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5199":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"52":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"520":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5200":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5201":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5202":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5203":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5204":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5205":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5206":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5207":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5208":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5209":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"521":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5210":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5211":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5212":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5213":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5214":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5215":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5216":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5217":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5218":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5219":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"522":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5220":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5221":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5222":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5223":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5224":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5225":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5226":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5227":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5228":["openzeppelin_account::account::AccountComponent::InternalImpl::_is_valid_signature"],"5229":["core::ops::deref::SnapshotDerefHelper::deref"],"523":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5230":["core::ops::deref::SnapshotDerefHelper::deref"],"5231":["core::starknet::storage::storage_base::FlattenedStorageDeref::deref"],"5232":["core::starknet::storage::storage_base::FlattenedStorageDeref::deref"],"5233":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5234":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5235":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5236":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5237":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5238":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5239":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"524":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5240":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5241":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5242":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5243":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5244":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5245":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5246":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5247":["core::traits::PanicDestructForDestruct::panic_destruct"],"5248":["core::traits::PanicDestructForDestruct::panic_destruct"],"5249":["core::traits::PanicDestructForDestruct::panic_destruct"],"525":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5251":["openzeppelin_account::account::AccountComponent::ComponentStateDerefMut::deref_mut"],"5252":["core::starknet::storage::storage_base::MutableFlattenedStorageDeref::deref"],"5253":["core::starknet::storage::storage_base::MutableFlattenedStorageDeref::deref"],"5254":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5255":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5256":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5257":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5258":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5259":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"526":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5260":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5261":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5262":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5263":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5264":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5265":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5266":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5267":["core::starknet::storage::StorablePointerReadAccessImpl::read"],"5269":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"527":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5270":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5271":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5272":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5273":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5274":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5275":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5276":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5277":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5278":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5279":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"528":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5280":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5281":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5282":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5283":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5284":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5285":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5286":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5287":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5288":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5289":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"529":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5290":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5291":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5292":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5293":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5294":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5295":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5296":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5297":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5298":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5299":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"53":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"530":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5300":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5301":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5302":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5303":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5304":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5305":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5306":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5307":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5308":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5309":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"531":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5310":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5311":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5312":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5313":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5314":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5315":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5316":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5317":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5318":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5319":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"532":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5320":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5321":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5322":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5323":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5324":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5325":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5326":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5327":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5328":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5329":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"533":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5330":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5331":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5332":["openzeppelin_account::account::AccountComponent::InternalImpl::assert_valid_new_owner"],"5333":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5334":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5335":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5336":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5337":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5338":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5339":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"534":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5340":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5341":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5342":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5343":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5344":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5345":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5346":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5347":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5348":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5349":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"535":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5350":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5351":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5352":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5353":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5354":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5355":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5356":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5357":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5358":["core::ops::deref::SnapshotDerefHelper::deref"],"5359":["core::ops::deref::SnapshotDerefHelper::deref"],"536":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5360":["core::starknet::storage::storage_base::FlattenedStorageDeref::deref"],"5361":["core::starknet::storage::storage_base::FlattenedStorageDeref::deref"],"5363":["core::array::ArrayImpl::span"],"5364":["core::array::ArrayImpl::span"],"5365":["core::starknet::info::get_block_info"],"5366":["core::starknet::info::get_block_info"],"5367":["core::starknet::info::get_block_info"],"5368":["core::starknet::info::get_block_info"],"5369":["core::starknet::info::get_block_info"],"537":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5370":["core::starknet::info::get_block_info"],"5371":["core::starknet::info::get_block_info"],"5372":["core::starknet::info::get_block_info"],"5373":["core::starknet::info::get_block_info"],"5374":["core::starknet::info::get_block_info"],"5375":["core::starknet::info::get_block_info"],"5376":["core::starknet::info::get_block_info"],"5377":["core::starknet::info::get_block_info"],"5378":["core::starknet::info::get_block_info"],"5379":["core::starknet::info::get_block_info"],"538":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5380":["core::starknet::info::get_block_info"],"5381":["core::starknet::info::get_block_info"],"5382":["core::starknet::info::get_block_info"],"5383":["core::starknet::info::get_block_info"],"5384":["core::starknet::info::get_block_info"],"5385":["core::starknet::info::get_block_info"],"5386":["core::starknet::info::get_block_info"],"5387":["core::starknet::info::get_block_info"],"5388":["core::starknet::info::get_block_info"],"5389":["core::starknet::info::get_block_info"],"539":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5390":["core::box::BoxDeref::deref"],"5391":["core::box::BoxDeref::deref"],"5392":["core::box::BoxDeref::deref"],"5393":["core::result::ResultTraitImpl::into_is_err"],"5394":["core::result::ResultTraitImpl::into_is_err"],"5395":["core::result::ResultTraitImpl::into_is_err"],"5396":["core::result::ResultTraitImpl::into_is_err"],"5397":["core::result::ResultTraitImpl::into_is_err"],"5398":["core::result::ResultTraitImpl::into_is_err"],"5399":["core::result::ResultTraitImpl::into_is_err"],"54":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"540":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5400":["core::result::ResultTraitImpl::into_is_err"],"5401":["core::result::ResultTraitImpl::into_is_err"],"5402":["core::result::ResultTraitImpl::into_is_err"],"5403":["core::result::ResultTraitImpl::into_is_err"],"5404":["core::result::ResultTraitImpl::into_is_err"],"5405":["core::result::ResultTraitImpl::into_is_err"],"5406":["core::result::ResultTraitImpl::into_is_err"],"5407":["core::result::ResultTraitImpl::into_is_err"],"541":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5412":["openzeppelin_account::extensions::src9::src9::SRC9Component::StorageStorageMutImpl::storage_mut"],"5413":["openzeppelin_account::extensions::src9::src9::SRC9Component::StorageStorageMutImpl::storage_mut"],"5414":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"5415":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"5416":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"5417":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"5418":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"5419":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"542":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5420":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"5421":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"5422":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"5423":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"5424":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"5425":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"5426":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"5427":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"5428":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"5429":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"543":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5430":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"5431":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"5432":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"5433":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"5434":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"5435":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"5436":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"5437":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"5438":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"5439":["core::starknet::storage::map::MutableStorableEntryReadAccess::read"],"544":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5440":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"5441":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"5442":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"5443":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"5444":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"5445":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"5446":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"5447":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"5448":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"5449":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"545":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5450":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"5451":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"5452":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"5453":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"5454":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"5455":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"5456":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"5457":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"5458":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"5459":["core::starknet::storage::map::MutableStorableEntryWriteAccess::write"],"546":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5461":["openzeppelin_account::extensions::src9::src9::SRC9Component::SNIP12MetadataImpl::name"],"5462":["openzeppelin_account::extensions::src9::src9::SRC9Component::SNIP12MetadataImpl::name"],"5464":["openzeppelin_account::extensions::src9::src9::SRC9Component::SNIP12MetadataImpl::version"],"5465":["openzeppelin_account::extensions::src9::src9::SRC9Component::SNIP12MetadataImpl::version"],"5466":["core::starknet::info::get_tx_info"],"5467":["core::starknet::info::get_tx_info"],"5468":["core::starknet::info::get_tx_info"],"5469":["core::starknet::info::get_tx_info"],"547":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5470":["core::starknet::info::get_tx_info"],"5471":["core::starknet::info::get_tx_info"],"5472":["core::starknet::info::get_tx_info"],"5473":["core::starknet::info::get_tx_info"],"5474":["core::starknet::info::get_tx_info"],"5475":["core::starknet::info::get_tx_info"],"5476":["core::starknet::info::get_tx_info"],"5477":["core::starknet::info::get_tx_info"],"5478":["core::starknet::info::get_tx_info"],"5479":["core::starknet::info::get_tx_info"],"548":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__is_valid_signature"],"5480":["core::starknet::info::get_tx_info"],"5481":["core::starknet::info::get_tx_info"],"5482":["core::starknet::info::get_tx_info"],"5483":["core::starknet::info::get_tx_info"],"5484":["core::starknet::info::get_tx_info"],"5485":["core::starknet::info::get_tx_info"],"5486":["core::starknet::info::get_tx_info"],"5487":["core::starknet::info::get_tx_info"],"5488":["core::starknet::info::get_tx_info"],"5489":["core::starknet::info::get_tx_info"],"5490":["core::starknet::info::get_tx_info"],"5491":["core::box::BoxImpl::unbox"],"5492":["core::box::BoxImpl::unbox"],"5493":["core::box::BoxImpl::unbox"],"5498":["core::poseidon::PoseidonImpl::new"],"5499":["core::poseidon::PoseidonImpl::new"],"55":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"5500":["core::poseidon::PoseidonImpl::new"],"5501":["core::poseidon::PoseidonImpl::new"],"5502":["core::hash::HashStateEx::update_with"],"5503":["core::hash::HashStateEx::update_with"],"5504":["core::hash::HashStateEx::update_with"],"5505":["core::hash::HashStateEx::update_with"],"5506":["core::hash::HashStateEx::update_with"],"5507":["openzeppelin_utils::cryptography::snip12::StructHashStarknetDomainImpl::hash_struct"],"5508":["openzeppelin_utils::cryptography::snip12::StructHashStarknetDomainImpl::hash_struct"],"5509":["openzeppelin_utils::cryptography::snip12::StructHashStarknetDomainImpl::hash_struct"],"551":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5510":["openzeppelin_utils::cryptography::snip12::StructHashStarknetDomainImpl::hash_struct"],"5511":["openzeppelin_utils::cryptography::snip12::StructHashStarknetDomainImpl::hash_struct"],"5512":["openzeppelin_utils::cryptography::snip12::StructHashStarknetDomainImpl::hash_struct"],"5513":["openzeppelin_utils::cryptography::snip12::StructHashStarknetDomainImpl::hash_struct"],"5514":["openzeppelin_utils::cryptography::snip12::StructHashStarknetDomainImpl::hash_struct"],"5515":["openzeppelin_utils::cryptography::snip12::StructHashStarknetDomainImpl::hash_struct"],"5516":["openzeppelin_utils::cryptography::snip12::StructHashStarknetDomainImpl::hash_struct"],"5517":["openzeppelin_utils::cryptography::snip12::StructHashStarknetDomainImpl::hash_struct"],"5518":["core::hash::HashStateEx::update_with"],"5519":["core::hash::HashStateEx::update_with"],"552":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5520":["core::hash::HashStateEx::update_with"],"5521":["core::hash::HashStateEx::update_with"],"5522":["core::hash::HashStateEx::update_with"],"5526":["openzeppelin_account::extensions::src9::snip12_utils::array_inline_macro"],"5527":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5528":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5529":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"553":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5530":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5531":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5532":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5533":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5534":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5535":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5536":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5537":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5538":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5539":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"554":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5540":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5541":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5542":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5543":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5544":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5545":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5546":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5547":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5548":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5549":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"555":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5550":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5551":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5552":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5553":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5554":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5555":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5556":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5557":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5558":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5559":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"556":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5560":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5561":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5562":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5563":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5564":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5565":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5566":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5567":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5568":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5569":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"557":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5570":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5571":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5572":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5573":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5574":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5575":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5576":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5577":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5578":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5579":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"558":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5580":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5581":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5582":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5583":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5584":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5585":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5586":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5587":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5588":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5589":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"559":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5590":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5591":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5592":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5593":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5594":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5595":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5596":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5597":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5598":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5599":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"56":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"560":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5600":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5601":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5602":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5603":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5604":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5605":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5606":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5607":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5608":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5609":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"561":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5610":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5611":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5612":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5613":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5614":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5615":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5616":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5617":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5618":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5619":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"562":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5620":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5621":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5622":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5623":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5624":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5625":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5626":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5627":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5628":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"5629":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"563":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5630":["core::poseidon::HashStateImpl::finalize"],"5631":["core::poseidon::HashStateImpl::finalize"],"5632":["core::poseidon::HashStateImpl::finalize"],"5633":["core::poseidon::HashStateImpl::finalize"],"5634":["core::poseidon::HashStateImpl::finalize"],"5635":["core::poseidon::HashStateImpl::finalize"],"5636":["core::poseidon::HashStateImpl::finalize"],"5637":["core::poseidon::HashStateImpl::finalize"],"5638":["core::poseidon::HashStateImpl::finalize"],"5639":["core::poseidon::HashStateImpl::finalize"],"564":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5640":["core::poseidon::HashStateImpl::finalize"],"5641":["core::poseidon::HashStateImpl::finalize"],"5642":["core::poseidon::HashStateImpl::finalize"],"5643":["core::poseidon::HashStateImpl::finalize"],"5644":["core::poseidon::HashStateImpl::finalize"],"5645":["core::poseidon::HashStateImpl::finalize"],"5646":["core::poseidon::HashStateImpl::finalize"],"5647":["core::poseidon::HashStateImpl::finalize"],"5648":["core::poseidon::HashStateImpl::finalize"],"5649":["core::poseidon::HashStateImpl::finalize"],"565":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5650":["core::poseidon::HashStateImpl::finalize"],"5651":["core::poseidon::HashStateImpl::finalize"],"5652":["core::poseidon::HashStateImpl::finalize"],"5653":["core::poseidon::HashStateImpl::finalize"],"5654":["core::poseidon::HashStateImpl::finalize"],"5655":["core::poseidon::HashStateImpl::finalize"],"5657":["core::array::ArrayImpl::append_span"],"5658":["core::array::ArrayImpl::append_span"],"5659":["core::array::ArrayImpl::append_span"],"566":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5660":["core::array::ArrayImpl::append_span"],"5661":["core::array::ArrayImpl::append_span"],"5662":["core::array::ArrayImpl::append_span"],"5663":["core::array::ArrayImpl::append_span"],"5664":["core::array::ArrayImpl::append_span"],"5665":["core::array::ArrayImpl::append_span"],"5666":["core::array::ArrayImpl::append_span"],"5667":["core::array::ArrayImpl::append_span"],"5668":["core::array::ArrayImpl::append_span"],"5669":["core::array::ArrayImpl::append_span"],"567":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5670":["core::array::ArrayImpl::append_span"],"5671":["core::array::ArrayImpl::append_span"],"5672":["core::array::ArrayImpl::append_span"],"5673":["core::array::ArrayImpl::append_span"],"5674":["core::array::ArrayImpl::append_span"],"5675":["core::array::ArrayImpl::append_span"],"5676":["core::array::ArrayImpl::append_span"],"5677":["core::array::ArrayImpl::append_span"],"5678":["core::array::ArrayImpl::append_span"],"5679":["core::array::ArrayImpl::append_span"],"568":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5680":["core::array::ArrayImpl::append_span"],"5681":["core::array::ArrayImpl::append_span"],"5682":["core::array::ArrayImpl::append_span"],"5683":["core::array::ArrayImpl::append_span"],"5684":["core::array::ArrayImpl::append_span"],"5685":["core::array::ArrayImpl::append_span"],"5686":["core::array::ArrayImpl::append_span"],"5687":["core::array::ArrayImpl::append_span"],"5688":["core::array::ArrayImpl::append_span"],"5689":["core::array::ArrayImpl::append_span"],"569":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5690":["core::array::ArrayImpl::append_span"],"5691":["core::array::ArrayImpl::append_span"],"5692":["core::array::ArrayImpl::append_span"],"5693":["core::array::ArrayImpl::append_span"],"5694":["core::array::ArrayImpl::append_span"],"5695":["core::array::ArrayImpl::append_span"],"5696":["core::array::ArrayImpl::append_span"],"5697":["core::array::ArrayImpl::append_span"],"5698":["core::array::ArrayImpl::append_span"],"5699":["core::array::ArrayDefault::default"],"57":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"570":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5700":["core::array::ArrayDefault::default"],"5702":["core::array::ArraySerde::serialize"],"5703":["core::array::ArraySerde::serialize"],"5704":["core::array::ArraySerde::serialize"],"5705":["core::array::ArraySerde::serialize"],"5706":["core::array::ArraySerde::serialize"],"5707":["core::array::ArraySerde::serialize"],"5708":["core::array::ArraySerde::serialize"],"5709":["core::array::ArraySerde::serialize"],"571":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5710":["core::array::ArraySerde::serialize"],"5711":["core::array::ArraySerde::serialize"],"5712":["core::array::ArraySerde::serialize"],"5713":["core::array::ArraySerde::serialize"],"5714":["core::array::ArraySerde::serialize"],"5715":["core::array::ArraySerde::serialize"],"5716":["core::array::ArraySerde::serialize"],"5717":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5718":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5719":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"572":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5720":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5721":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5722":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5723":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5724":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5725":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5726":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5727":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5728":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5729":["core::array::ArrayImpl::new"],"573":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5730":["core::array::ArrayImpl::new"],"5731":["core::array::ArrayImpl::new"],"5733":["core::array::SpanIntoIterator::into_iter"],"5734":["core::array::SpanIntoIterator::into_iter"],"5736":["openzeppelin_account::utils::execute_calls"],"5737":["openzeppelin_account::utils::execute_calls"],"5738":["openzeppelin_account::utils::execute_calls"],"5739":["openzeppelin_account::utils::execute_calls"],"574":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5740":["openzeppelin_account::utils::execute_calls"],"5741":["openzeppelin_account::utils::execute_calls"],"5742":["openzeppelin_account::utils::execute_calls"],"5743":["openzeppelin_account::utils::execute_calls"],"5744":["openzeppelin_account::utils::execute_calls"],"5745":["openzeppelin_account::utils::execute_calls"],"5746":["openzeppelin_account::utils::execute_calls"],"5747":["openzeppelin_account::utils::execute_calls"],"5748":["openzeppelin_account::utils::execute_calls"],"5749":["openzeppelin_account::utils::execute_calls"],"575":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5750":["openzeppelin_account::utils::execute_calls"],"5751":["openzeppelin_account::utils::execute_calls"],"5752":["openzeppelin_account::utils::execute_calls"],"5753":["openzeppelin_account::utils::execute_calls"],"5754":["openzeppelin_account::utils::execute_calls"],"5755":["openzeppelin_account::utils::execute_calls"],"5756":["openzeppelin_account::utils::execute_calls"],"5757":["openzeppelin_account::utils::execute_calls"],"5758":["openzeppelin_account::utils::execute_calls"],"5759":["openzeppelin_account::utils::execute_calls"],"576":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5760":["openzeppelin_account::utils::execute_calls"],"5761":["openzeppelin_account::utils::execute_calls"],"5762":["openzeppelin_account::utils::execute_calls"],"5763":["openzeppelin_account::utils::execute_calls"],"5764":["openzeppelin_account::utils::execute_calls"],"5765":["openzeppelin_account::utils::execute_calls"],"5766":["openzeppelin_account::utils::execute_calls"],"5767":["openzeppelin_account::utils::execute_calls"],"5768":["openzeppelin_account::utils::execute_calls"],"5769":["openzeppelin_account::utils::execute_calls"],"577":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5770":["openzeppelin_account::utils::execute_calls"],"5771":["openzeppelin_account::utils::execute_calls"],"5772":["openzeppelin_account::utils::execute_calls"],"5773":["openzeppelin_account::utils::execute_calls"],"5774":["openzeppelin_account::utils::execute_calls"],"5775":["openzeppelin_account::utils::execute_calls"],"5776":["openzeppelin_account::utils::execute_calls"],"5777":["openzeppelin_account::utils::execute_calls"],"5778":["openzeppelin_account::utils::execute_calls"],"5779":["openzeppelin_account::utils::execute_calls"],"578":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5780":["openzeppelin_account::utils::execute_calls"],"5781":["openzeppelin_account::utils::execute_calls"],"5782":["openzeppelin_account::utils::execute_calls"],"5783":["openzeppelin_account::utils::execute_calls"],"5784":["openzeppelin_account::utils::execute_calls"],"5785":["openzeppelin_account::utils::execute_calls"],"5786":["openzeppelin_account::utils::execute_calls"],"5787":["openzeppelin_account::utils::execute_calls"],"5788":["openzeppelin_account::utils::execute_calls"],"5789":["openzeppelin_account::utils::execute_calls"],"579":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5790":["openzeppelin_account::utils::execute_calls"],"5791":["openzeppelin_account::utils::execute_calls"],"5792":["openzeppelin_account::utils::execute_calls"],"5793":["openzeppelin_account::utils::execute_calls"],"5796":["openzeppelin_account::extensions::src9::src9::SRC9Component::ComponentStateDeref::snapshot_deref"],"58":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"580":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5801":["openzeppelin_account::extensions::src9::src9::SRC9Component::StorageStorageImpl::storage"],"5802":["openzeppelin_account::extensions::src9::src9::SRC9Component::StorageStorageImpl::storage"],"5803":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"5804":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"5805":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"5806":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"5807":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"5808":["core::starknet::storage::map::StorableEntryReadAccess::read"],"5809":["core::starknet::storage::map::StorableEntryReadAccess::read"],"581":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5810":["core::starknet::storage::map::StorableEntryReadAccess::read"],"5811":["core::starknet::storage::map::StorableEntryReadAccess::read"],"5812":["core::starknet::storage::map::StorableEntryReadAccess::read"],"5813":["core::starknet::storage::map::StorableEntryReadAccess::read"],"5814":["core::starknet::storage::map::StorableEntryReadAccess::read"],"5815":["core::starknet::storage::map::StorableEntryReadAccess::read"],"5816":["core::starknet::storage::map::StorableEntryReadAccess::read"],"5817":["core::starknet::storage::map::StorableEntryReadAccess::read"],"5818":["core::starknet::storage::map::StorableEntryReadAccess::read"],"5819":["core::starknet::storage::map::StorableEntryReadAccess::read"],"582":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5820":["core::starknet::storage::map::StorableEntryReadAccess::read"],"5821":["core::starknet::storage::map::StorableEntryReadAccess::read"],"5822":["core::starknet::storage::map::StorableEntryReadAccess::read"],"5823":["core::starknet::storage::map::StorableEntryReadAccess::read"],"5824":["core::starknet::storage::map::StorableEntryReadAccess::read"],"5825":["core::starknet::storage::map::StorableEntryReadAccess::read"],"5826":["core::starknet::storage::map::StorableEntryReadAccess::read"],"5827":["core::starknet::storage::map::StorableEntryReadAccess::read"],"5828":["core::starknet::storage::map::StorableEntryReadAccess::read"],"583":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5830":["openzeppelin_introspection::src5::SRC5Component::ComponentStateDerefMut::deref_mut"],"5831":["core::starknet::storage::storage_base::MutableFlattenedStorageDeref::deref"],"5832":["core::starknet::storage::storage_base::MutableFlattenedStorageDeref::deref"],"5833":["core::starknet::storage::StorablePointerWriteAccessImpl::write"],"5834":["core::starknet::storage::StorablePointerWriteAccessImpl::write"],"5835":["core::starknet::storage::StorablePointerWriteAccessImpl::write"],"5836":["core::starknet::storage::StorablePointerWriteAccessImpl::write"],"5837":["core::starknet::storage::StorablePointerWriteAccessImpl::write"],"5838":["core::starknet::storage::StorablePointerWriteAccessImpl::write"],"5839":["core::starknet::storage::StorablePointerWriteAccessImpl::write"],"584":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5840":["core::starknet::storage::StorablePointerWriteAccessImpl::write"],"5841":["core::starknet::storage::StorablePointerWriteAccessImpl::write"],"5842":["core::starknet::storage::StorablePointerWriteAccessImpl::write"],"5843":["core::starknet::storage::StorablePointerWriteAccessImpl::write"],"5844":["core::starknet::storage::StorablePointerWriteAccessImpl::write"],"5845":["core::starknet::storage::StorablePointerWriteAccessImpl::write"],"5846":["core::starknet::storage::StorablePointerWriteAccessImpl::write"],"5847":["core::starknet::storage::StorablePointerWriteAccessImpl::write"],"5848":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5849":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"585":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5850":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5851":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5852":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5853":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5854":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5855":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5856":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5857":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5858":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5859":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"586":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5860":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5861":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5862":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5863":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5864":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5865":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5866":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5867":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5868":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5869":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"587":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5870":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5871":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5872":["openzeppelin_presets::account::AccountUpgradeable::HasComponentImpl_AccountComponent::emit"],"5873":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5874":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5875":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5876":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5877":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5878":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5879":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"588":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5880":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5881":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5882":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5883":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5884":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"5885":["core::box::BoxImpl::unbox"],"5886":["core::box::BoxImpl::unbox"],"5887":["core::box::BoxImpl::unbox"],"5888":["core::felt_252::Felt252Zero::is_zero"],"5889":["core::felt_252::Felt252Zero::is_zero"],"589":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5890":["core::felt_252::Felt252Zero::is_zero"],"5891":["core::felt_252::Felt252Zero::is_zero"],"5892":["core::felt_252::Felt252Zero::is_zero"],"5893":["core::felt_252::Felt252Zero::is_zero"],"5894":["core::felt_252::Felt252Zero::is_zero"],"5895":["core::felt_252::Felt252Zero::is_zero"],"5896":["core::felt_252::Felt252Zero::is_zero"],"5897":["core::felt_252::Felt252Zero::is_zero"],"5898":["core::traits::TIntoT::into"],"5899":["core::traits::TIntoT::into"],"59":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"590":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5900":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5901":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5902":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5903":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5904":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5905":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5906":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5907":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5908":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5909":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"591":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5910":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5911":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5912":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5913":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5914":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5915":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5916":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5917":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5918":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5919":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"592":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5920":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5921":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5922":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5923":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5924":["openzeppelin_presets::account::AccountUpgradeable::EventIsEvent::append_keys_and_data"],"5925":["core::integer::Felt252IntoU256::into"],"5926":["core::integer::Felt252IntoU256::into"],"5927":["core::integer::Felt252IntoU256::into"],"5928":["core::integer::Felt252IntoU256::into"],"5929":[],"593":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5930":[],"5931":[],"5932":[],"5933":[],"5934":[],"5935":[],"5936":[],"5937":[],"5938":[],"5939":[],"594":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5940":[],"5941":[],"5942":["core::integer::U256Add::add"],"5943":["core::integer::U256Add::add"],"5944":["core::integer::U256Add::add"],"5945":["core::integer::U256Add::add"],"5946":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5947":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5948":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5949":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"595":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5950":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5951":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5952":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5953":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5954":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5955":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5956":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5957":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5958":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5959":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"596":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5960":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5961":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5962":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5963":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5964":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5965":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5966":["core::option::OptionTraitImpl::expect","core::integer::U256Add::add"],"5967":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5968":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5969":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"597":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5970":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5971":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5972":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5973":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5974":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5975":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5976":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5977":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5978":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5979":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"598":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5980":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5981":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5982":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5983":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5984":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5985":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5986":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5987":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5988":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5989":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"599":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"5990":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5991":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5992":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5993":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5994":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5995":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5996":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5997":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5998":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"5999":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"60":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"600":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6000":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6001":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6002":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6003":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6004":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6005":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6006":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6007":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6008":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6009":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"601":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6010":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6011":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6012":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6013":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6014":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6015":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6016":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6017":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6018":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6019":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"602":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6020":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6021":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6022":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6023":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6024":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6025":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6026":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6027":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6028":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6029":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"603":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6030":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6031":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6032":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6033":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6034":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6035":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6036":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"6037":["openzeppelin_account::utils::signature::is_valid_stark_signature"],"604":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6040":["openzeppelin_account::account::AccountComponent::ComponentStateDeref::snapshot_deref"],"6045":["openzeppelin_account::account::AccountComponent::StorageStorageImpl::storage"],"6046":["openzeppelin_account::account::AccountComponent::StorageStorageImpl::storage"],"6047":["core::starknet::storage::StorablePathableStorageAsPointer::as_ptr"],"6048":["core::starknet::storage::StorablePathableStorageAsPointer::as_ptr"],"6049":["core::starknet::storage::StorablePathableStorageAsPointer::as_ptr"],"605":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6050":["core::starknet::storage::StorablePathableStorageAsPointer::as_ptr"],"6051":["core::starknet::storage::StorablePathableStorageAsPointer::as_ptr"],"6052":["core::starknet::storage::StorablePathableStorageAsPointer::as_ptr"],"6053":["core::starknet::storage::StorablePathableStorageAsPointer::as_ptr"],"6054":["core::starknet::storage::StorablePathableStorageAsPointer::as_ptr"],"6056":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6057":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6058":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6059":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"606":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6060":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6061":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6062":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6063":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6064":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6065":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6066":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6067":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"607":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6074":["openzeppelin_account::account::AccountComponent::StorageStorageMutImpl::storage_mut"],"6075":["openzeppelin_account::account::AccountComponent::StorageStorageMutImpl::storage_mut"],"6076":["core::starknet::storage::StorablePathableStorageAsPointer::as_ptr"],"6077":["core::starknet::storage::StorablePathableStorageAsPointer::as_ptr"],"6078":["core::starknet::storage::StorablePathableStorageAsPointer::as_ptr"],"6079":["core::starknet::storage::StorablePathableStorageAsPointer::as_ptr"],"608":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6080":["core::starknet::storage::StorablePathableStorageAsPointer::as_ptr"],"6081":["core::starknet::storage::StorablePathableStorageAsPointer::as_ptr"],"6082":["core::starknet::storage::StorablePathableStorageAsPointer::as_ptr"],"6083":["core::starknet::storage::StorablePathableStorageAsPointer::as_ptr"],"6085":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6086":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6087":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6088":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6089":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"609":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6090":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6091":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6092":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6093":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6094":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6095":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6096":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6097":["openzeppelin_account::account::AccountComponent::EventOwnerRemovedIntoEvent::into"],"6098":["openzeppelin_account::account::AccountComponent::EventOwnerRemovedIntoEvent::into"],"6099":["openzeppelin_account::account::AccountComponent::EventOwnerRemovedIntoEvent::into"],"61":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"610":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6102":["openzeppelin_introspection::src5::SRC5Component::ComponentStateDeref::snapshot_deref"],"6107":["openzeppelin_introspection::src5::SRC5Component::StorageStorageImpl::storage"],"6108":["openzeppelin_introspection::src5::SRC5Component::StorageStorageImpl::storage"],"6109":["core::box::BoxImpl::unbox"],"611":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6110":["core::box::BoxImpl::unbox"],"6111":["core::box::BoxImpl::unbox"],"6114":["core::starknet::storage::StoragePathImpl::new"],"6115":["core::starknet::storage::StoragePathImpl::new"],"6116":["core::starknet::storage::StoragePathImpl::new"],"6117":["core::starknet::storage::StoragePathImpl::new"],"6118":["core::starknet::storage::map::MutableEntryStoragePathEntry::entry"],"6119":["core::starknet::storage::map::MutableEntryStoragePathEntry::entry"],"612":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6120":["core::starknet::storage::map::MutableEntryStoragePathEntry::entry"],"6121":["core::starknet::storage::map::MutableEntryStoragePathEntry::entry"],"6122":["core::starknet::storage::map::MutableEntryStoragePathEntry::entry"],"6123":["core::starknet::storage::MutableStorableStoragePathAsPointer::as_ptr"],"6124":["core::starknet::storage::MutableStorableStoragePathAsPointer::as_ptr"],"6125":["core::starknet::storage::MutableStorableStoragePathAsPointer::as_ptr"],"6126":["core::starknet::storage::MutableStorableStoragePathAsPointer::as_ptr"],"6127":["core::starknet::storage::MutableStorableStoragePathAsPointer::as_ptr"],"6128":["core::starknet::storage::MutableStorableStoragePathAsPointer::as_ptr"],"613":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6130":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6131":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6132":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6133":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6134":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6135":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6136":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6137":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6138":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6139":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"614":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6140":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6141":["core::starknet::storage::MutableStorableStoragePointer0OffsetReadAccess::read"],"6143":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6144":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6145":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6146":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6147":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6148":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6149":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"615":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6150":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6151":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6152":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6153":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6154":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6155":["core::hash::HashFelt252::update_state"],"6156":["core::hash::HashFelt252::update_state"],"6157":["core::hash::HashFelt252::update_state"],"6158":["core::hash::HashFelt252::update_state"],"6159":["core::hash::HashFelt252::update_state"],"616":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6160":["openzeppelin_utils::cryptography::snip12::StarknetDomainHash::update_state","core::hash::HashStateEx::update_with"],"6161":["openzeppelin_utils::cryptography::snip12::StarknetDomainHash::update_state","core::hash::HashStateEx::update_with"],"6162":["openzeppelin_utils::cryptography::snip12::StarknetDomainHash::update_state","core::hash::HashStateEx::update_with"],"6163":["openzeppelin_utils::cryptography::snip12::StarknetDomainHash::update_state","core::hash::HashStateEx::update_with"],"6164":["openzeppelin_utils::cryptography::snip12::StarknetDomainHash::update_state","core::hash::HashStateEx::update_with"],"6165":["openzeppelin_utils::cryptography::snip12::StarknetDomainHash::update_state","core::hash::HashStateEx::update_with"],"6166":["openzeppelin_utils::cryptography::snip12::StarknetDomainHash::update_state","core::hash::HashStateEx::update_with"],"6167":["openzeppelin_utils::cryptography::snip12::StarknetDomainHash::update_state","core::hash::HashStateEx::update_with"],"6168":["openzeppelin_utils::cryptography::snip12::StarknetDomainHash::update_state","core::hash::HashStateEx::update_with"],"6169":["openzeppelin_utils::cryptography::snip12::StarknetDomainHash::update_state","core::hash::HashStateEx::update_with"],"617":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6170":["openzeppelin_utils::cryptography::snip12::StarknetDomainHash::update_state","core::hash::HashStateEx::update_with"],"6171":["openzeppelin_utils::cryptography::snip12::StarknetDomainHash::update_state","core::hash::HashStateEx::update_with"],"6172":["core::hash::into_felt252_based::HashImpl::update_state"],"6173":["core::hash::into_felt252_based::HashImpl::update_state"],"6174":["core::hash::into_felt252_based::HashImpl::update_state"],"6175":["core::hash::into_felt252_based::HashImpl::update_state"],"6176":["core::hash::into_felt252_based::HashImpl::update_state"],"6177":["core::hash::into_felt252_based::HashImpl::update_state"],"6178":["core::hash::into_felt252_based::HashImpl::update_state"],"618":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6182":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6183":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6184":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6185":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6186":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6187":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6188":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6189":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"619":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6190":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6191":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6192":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6193":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6194":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6195":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6196":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6197":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6198":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6199":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"62":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"620":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6200":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6201":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6202":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6203":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6204":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6205":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6206":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6207":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6208":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6209":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"621":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6210":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6211":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6212":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6213":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6214":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6215":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6216":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6217":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6218":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6219":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"622":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6220":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6221":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6222":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6223":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6224":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6225":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6226":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6227":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6228":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6229":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"623":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6230":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6231":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6232":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6233":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6234":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6235":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6236":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6237":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6238":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6239":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"624":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6240":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6241":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6242":["openzeppelin_account::extensions::src9::snip12_utils::OutsideExecutionStructHash::hash_struct"],"6243":["core::hash::HashStateEx::update_with"],"6244":["core::hash::HashStateEx::update_with"],"6245":["core::hash::HashStateEx::update_with"],"6246":["core::hash::HashStateEx::update_with"],"6247":["core::hash::HashStateEx::update_with"],"6249":["core::poseidon::poseidon_hash_span"],"625":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6250":["core::poseidon::poseidon_hash_span"],"6251":["core::poseidon::poseidon_hash_span"],"6252":["core::poseidon::poseidon_hash_span"],"6253":["core::poseidon::poseidon_hash_span"],"6254":["core::poseidon::poseidon_hash_span"],"6255":["core::poseidon::poseidon_hash_span"],"6256":["core::poseidon::poseidon_hash_span"],"6257":["core::poseidon::poseidon_hash_span"],"6258":["core::poseidon::poseidon_hash_span"],"6259":["core::poseidon::poseidon_hash_span"],"626":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6260":["core::poseidon::poseidon_hash_span"],"6261":["core::poseidon::poseidon_hash_span"],"6262":["core::poseidon::poseidon_hash_span"],"6263":["core::poseidon::poseidon_hash_span"],"6264":["core::poseidon::poseidon_hash_span"],"6265":["core::poseidon::poseidon_hash_span"],"6266":["core::poseidon::poseidon_hash_span"],"6267":["core::poseidon::poseidon_hash_span"],"6268":["core::poseidon::poseidon_hash_span"],"6269":["core::poseidon::poseidon_hash_span"],"627":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6270":["core::poseidon::poseidon_hash_span"],"6271":["core::poseidon::poseidon_hash_span"],"6272":["core::poseidon::poseidon_hash_span"],"6273":["core::poseidon::poseidon_hash_span"],"6274":["core::poseidon::poseidon_hash_span"],"6275":["core::poseidon::poseidon_hash_span"],"6276":["core::poseidon::poseidon_hash_span"],"6277":["core::poseidon::poseidon_hash_span"],"6278":["core::poseidon::poseidon_hash_span"],"6279":["core::Felt252Add::add"],"628":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6280":["core::Felt252Add::add"],"6281":["core::Felt252Add::add"],"6282":["core::clone::TCopyClone::clone"],"6283":["core::clone::TCopyClone::clone"],"6284":["core::clone::TCopyClone::clone"],"6285":["core::array::ArrayImpl::len"],"6286":["core::array::ArrayImpl::len"],"6287":["core::array::ArrayImpl::len"],"6288":["core::array::SpanIterator::next"],"6289":["core::array::SpanIterator::next"],"629":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6290":["core::array::SpanIterator::next"],"6291":["core::array::SpanIterator::next"],"6292":["core::array::SpanIterator::next"],"6293":["openzeppelin_account::utils::execute_single_call"],"6294":["openzeppelin_account::utils::execute_single_call"],"6295":["openzeppelin_account::utils::execute_single_call"],"6296":["openzeppelin_account::utils::execute_single_call"],"6297":["openzeppelin_account::utils::execute_single_call"],"6298":["openzeppelin_account::utils::execute_single_call"],"6299":["openzeppelin_account::utils::execute_single_call"],"63":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"630":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6300":["openzeppelin_account::utils::execute_single_call"],"6301":["openzeppelin_account::utils::execute_single_call"],"6302":["openzeppelin_account::utils::execute_single_call"],"6303":["openzeppelin_account::utils::execute_single_call"],"6304":["openzeppelin_account::utils::execute_single_call"],"6305":["openzeppelin_account::utils::execute_single_call"],"6306":["openzeppelin_account::utils::execute_single_call"],"6307":["openzeppelin_account::utils::execute_single_call"],"6308":["openzeppelin_account::utils::execute_single_call"],"6309":["openzeppelin_account::utils::execute_single_call"],"631":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6310":["openzeppelin_account::utils::execute_single_call"],"6311":["openzeppelin_account::utils::execute_single_call"],"6312":["core::array::ArrayImpl::append"],"6313":["core::array::ArrayImpl::append"],"6314":["core::array::ArrayImpl::append"],"6315":["core::starknet::storage::StoragePathImpl::new"],"6316":["core::starknet::storage::StoragePathImpl::new"],"6317":["core::starknet::storage::StoragePathImpl::new"],"6318":["core::starknet::storage::StoragePathImpl::new"],"6319":["core::starknet::storage::map::EntryInfoStoragePathEntry::entry"],"632":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6320":["core::starknet::storage::map::EntryInfoStoragePathEntry::entry"],"6321":["core::starknet::storage::map::EntryInfoStoragePathEntry::entry"],"6322":["core::starknet::storage::map::EntryInfoStoragePathEntry::entry"],"6323":["core::starknet::storage::map::EntryInfoStoragePathEntry::entry"],"6324":["core::starknet::storage::StorableStoragePathAsPointer::as_ptr"],"6325":["core::starknet::storage::StorableStoragePathAsPointer::as_ptr"],"6326":["core::starknet::storage::StorableStoragePathAsPointer::as_ptr"],"6327":["core::starknet::storage::StorableStoragePathAsPointer::as_ptr"],"6328":["core::starknet::storage::StorableStoragePathAsPointer::as_ptr"],"6329":["core::starknet::storage::StorableStoragePathAsPointer::as_ptr"],"633":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6331":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6332":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6333":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6334":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6335":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6336":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6337":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6338":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6339":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"634":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6340":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6341":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6342":["core::starknet::storage::StorableStoragePointer0OffsetReadAccess::read"],"6347":["openzeppelin_introspection::src5::SRC5Component::StorageStorageMutImpl::storage_mut"],"6348":["openzeppelin_introspection::src5::SRC5Component::StorageStorageMutImpl::storage_mut"],"635":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6350":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6351":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6352":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6353":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6354":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6355":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6356":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6357":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6358":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6359":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"636":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6360":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6361":["core::starknet::storage::StorableStoragePointer0OffsetWriteAccess::write"],"6362":["openzeppelin_account::account::AccountComponent::EventOwnerAddedIntoEvent::into"],"6363":["openzeppelin_account::account::AccountComponent::EventOwnerAddedIntoEvent::into"],"6364":["openzeppelin_account::account::AccountComponent::EventOwnerAddedIntoEvent::into"],"6366":["core::felt_252::Felt252Zero::zero"],"6367":["core::felt_252::Felt252Zero::zero"],"6368":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6369":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"637":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6370":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6371":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6372":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6373":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6374":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6375":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6376":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6377":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6378":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6379":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"638":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6380":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6381":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6382":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6383":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6384":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6385":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6386":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6387":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6388":["openzeppelin_account::account::AccountComponent::EventIsEvent::append_keys_and_data"],"6389":["openzeppelin_introspection::src5::SRC5Component::EventIsEvent::append_keys_and_data"],"639":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6390":["openzeppelin_account::extensions::src9::src9::SRC9Component::EventIsEvent::append_keys_and_data"],"6391":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::EventIsEvent::append_keys_and_data"],"6392":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::EventIsEvent::append_keys_and_data"],"6393":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::EventIsEvent::append_keys_and_data"],"6394":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::EventIsEvent::append_keys_and_data"],"6395":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::EventIsEvent::append_keys_and_data"],"6396":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::EventIsEvent::append_keys_and_data"],"6397":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::EventIsEvent::append_keys_and_data"],"6398":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::EventIsEvent::append_keys_and_data"],"6399":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::EventIsEvent::append_keys_and_data"],"64":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"640":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6400":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::EventIsEvent::append_keys_and_data"],"6401":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::EventIsEvent::append_keys_and_data"],"6402":["core::integer::u256_from_felt252"],"6403":["core::integer::u256_from_felt252"],"6404":["core::integer::u256_from_felt252"],"6405":["core::integer::u256_from_felt252"],"6406":["core::integer::u256_from_felt252"],"6407":["core::integer::u256_from_felt252"],"6408":["core::integer::u256_from_felt252"],"6409":["core::integer::u256_from_felt252"],"641":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6410":["core::integer::u256_from_felt252"],"6411":["core::integer::u256_from_felt252"],"6412":["core::integer::u256_from_felt252"],"6413":["core::integer::u256_from_felt252"],"6414":["core::integer::U256PartialOrd::lt"],"6415":["core::integer::U256PartialOrd::lt"],"6416":["core::integer::U256PartialOrd::lt"],"6417":["core::integer::U256PartialOrd::lt"],"6418":["core::integer::U256PartialOrd::lt"],"6419":["core::integer::U256PartialOrd::lt"],"642":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6420":["core::integer::U256PartialOrd::lt"],"6421":["core::integer::U256PartialOrd::lt"],"6422":["core::integer::U256PartialOrd::lt"],"6423":["core::integer::U256PartialOrd::lt"],"6424":["core::integer::U256PartialOrd::lt"],"6425":["core::integer::U256PartialOrd::lt"],"6426":["core::integer::U256PartialOrd::lt"],"6427":["core::integer::U256PartialOrd::lt"],"6428":["core::integer::U256PartialOrd::lt"],"6429":["core::integer::U256PartialOrd::lt"],"643":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6430":["core::integer::U256PartialOrd::lt"],"6431":["core::integer::U256PartialOrd::lt"],"6432":["core::integer::U256PartialOrd::lt"],"6433":["core::integer::U256PartialOrd::lt"],"6434":["core::integer::U256PartialOrd::lt"],"6435":["core::integer::U256PartialOrd::lt"],"6436":["core::integer::U256PartialOrd::lt"],"6437":["core::integer::U256PartialOrd::lt"],"6438":["core::integer::U256PartialOrd::lt"],"6439":["core::integer::U256PartialOrd::lt"],"644":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6440":["core::integer::U256PartialOrd::lt"],"6441":["core::integer::U256PartialOrd::lt"],"6442":["core::integer::U256PartialOrd::lt"],"6443":["core::integer::U256PartialOrd::lt"],"6444":["core::integer::U256PartialOrd::lt"],"6445":["core::integer::U256PartialOrd::lt"],"6446":["core::integer::U256PartialOrd::lt"],"6447":["core::integer::U256PartialOrd::lt"],"6448":["core::integer::U256PartialOrd::lt"],"6449":["core::integer::U256PartialOrd::lt"],"645":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6450":["core::integer::U256PartialOrd::lt"],"6451":["core::integer::U256PartialOrd::lt"],"6452":["core::integer::U256PartialOrd::lt"],"6453":["core::integer::U256PartialOrd::lt"],"6454":["core::integer::U256PartialOrd::lt"],"6455":["core::integer::U256PartialOrd::lt"],"6456":["core::integer::U256PartialOrd::lt"],"6457":["core::integer::U256PartialOrd::lt"],"6458":["core::integer::U256PartialOrd::lt"],"6459":["core::integer::U256PartialOrd::lt"],"646":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6460":["core::integer::u256_checked_add"],"6461":["core::integer::u256_checked_add"],"6462":["core::integer::u256_checked_add"],"6463":["core::integer::u256_checked_add"],"6464":["core::integer::u256_checked_add"],"6465":["core::integer::u256_checked_add"],"6466":["core::integer::u256_checked_add"],"6467":["core::integer::u256_checked_add"],"6468":["core::integer::u256_checked_add"],"6469":["core::integer::u256_checked_add"],"647":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6470":["core::integer::u256_checked_add"],"6471":["core::integer::u256_checked_add"],"6472":["core::integer::u256_checked_add"],"6473":["core::integer::u256_checked_add"],"6474":["core::integer::u256_checked_add"],"6475":["core::integer::u256_checked_add"],"6476":["core::integer::u256_checked_add"],"6477":["core::integer::u256_checked_add"],"6478":["core::integer::u256_checked_add"],"6479":["core::integer::u256_checked_add"],"648":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6480":["core::integer::U32PartialEq::eq"],"6481":["core::integer::U32PartialEq::eq"],"6482":["core::integer::U32PartialEq::eq"],"6483":["core::integer::U32PartialEq::eq"],"6484":["core::integer::U32PartialEq::eq"],"6485":["core::integer::U32PartialEq::eq"],"6486":["core::integer::U32PartialEq::eq"],"6487":["core::integer::U32PartialEq::eq"],"6488":["core::integer::U32PartialEq::eq"],"6489":["core::integer::U32PartialEq::eq"],"649":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6490":["core::integer::U32PartialEq::eq"],"6491":["core::integer::U32PartialEq::eq"],"6492":["core::integer::U32PartialEq::eq"],"6493":["core::array::SpanImpl::at"],"6494":["core::array::SpanImpl::at"],"6495":["core::array::SpanImpl::at"],"6496":["core::array::SpanImpl::at"],"6497":["core::array::SpanImpl::at"],"6498":["core::array::SpanImpl::at"],"6499":["core::array::SpanImpl::at"],"65":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"650":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6500":["core::array::SpanImpl::at"],"6501":["core::array::SpanImpl::at"],"6502":["core::array::SpanImpl::at"],"6503":["core::array::SpanImpl::at"],"6504":["core::array::SpanImpl::at"],"6505":["core::array::SpanImpl::at"],"6506":["core::array::SpanImpl::at"],"6507":["core::array::SpanImpl::at"],"6508":["core::array::SpanImpl::at"],"6509":["core::array::SpanImpl::at"],"651":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6510":["core::array::SpanImpl::at"],"6511":["core::array::SpanImpl::at"],"6512":["core::array::SpanImpl::at"],"6513":["core::ecdsa::check_ecdsa_signature"],"6514":["core::ecdsa::check_ecdsa_signature"],"6515":["core::ecdsa::check_ecdsa_signature"],"6516":["core::ecdsa::check_ecdsa_signature"],"6517":["core::ecdsa::check_ecdsa_signature"],"6518":["core::ecdsa::check_ecdsa_signature"],"6519":["core::ecdsa::check_ecdsa_signature"],"652":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6520":["core::ecdsa::check_ecdsa_signature"],"6521":["core::ecdsa::check_ecdsa_signature"],"6522":["core::ecdsa::check_ecdsa_signature"],"6523":["core::ecdsa::check_ecdsa_signature"],"6524":["core::ecdsa::check_ecdsa_signature"],"6525":["core::ecdsa::check_ecdsa_signature"],"6526":["core::ecdsa::check_ecdsa_signature"],"6527":["core::ecdsa::check_ecdsa_signature"],"6528":["core::ecdsa::check_ecdsa_signature"],"6529":["core::ecdsa::check_ecdsa_signature"],"653":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6530":["core::ecdsa::check_ecdsa_signature"],"6531":["core::ecdsa::check_ecdsa_signature"],"6532":["core::ecdsa::check_ecdsa_signature"],"6533":["core::ecdsa::check_ecdsa_signature"],"6534":["core::ecdsa::check_ecdsa_signature"],"6535":["core::ecdsa::check_ecdsa_signature"],"6536":["core::ecdsa::check_ecdsa_signature"],"6537":["core::ecdsa::check_ecdsa_signature"],"6538":["core::ecdsa::check_ecdsa_signature"],"6539":["core::ecdsa::check_ecdsa_signature"],"654":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6540":["core::ecdsa::check_ecdsa_signature"],"6541":["core::ecdsa::check_ecdsa_signature"],"6542":["core::ecdsa::check_ecdsa_signature"],"6543":["core::ecdsa::check_ecdsa_signature"],"6544":["core::ecdsa::check_ecdsa_signature"],"6545":["core::ecdsa::check_ecdsa_signature"],"6546":["core::ecdsa::check_ecdsa_signature"],"6547":["core::ecdsa::check_ecdsa_signature"],"6548":["core::ecdsa::check_ecdsa_signature"],"6549":["core::ecdsa::check_ecdsa_signature"],"655":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6550":["core::ecdsa::check_ecdsa_signature"],"6551":["core::ecdsa::check_ecdsa_signature"],"6552":["core::ecdsa::check_ecdsa_signature"],"6553":["core::ecdsa::check_ecdsa_signature"],"6554":["core::ecdsa::check_ecdsa_signature"],"6555":["core::ecdsa::check_ecdsa_signature"],"6556":["core::ecdsa::check_ecdsa_signature"],"6557":["core::ecdsa::check_ecdsa_signature"],"6558":["core::ecdsa::check_ecdsa_signature"],"6559":["core::ecdsa::check_ecdsa_signature"],"656":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6560":["core::ecdsa::check_ecdsa_signature"],"6561":["core::ecdsa::check_ecdsa_signature"],"6562":["core::ecdsa::check_ecdsa_signature"],"6563":["core::ecdsa::check_ecdsa_signature"],"6564":["core::ecdsa::check_ecdsa_signature"],"6565":["core::ecdsa::check_ecdsa_signature"],"6566":["core::ecdsa::check_ecdsa_signature"],"6567":["core::ecdsa::check_ecdsa_signature"],"6568":["core::ecdsa::check_ecdsa_signature"],"6569":["core::ecdsa::check_ecdsa_signature"],"657":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6570":["core::ecdsa::check_ecdsa_signature"],"6571":["core::ecdsa::check_ecdsa_signature"],"6572":["core::ecdsa::check_ecdsa_signature"],"6573":["core::ecdsa::check_ecdsa_signature"],"6574":["core::ecdsa::check_ecdsa_signature"],"6575":["core::ecdsa::check_ecdsa_signature"],"6576":["core::ecdsa::check_ecdsa_signature"],"6577":["core::ecdsa::check_ecdsa_signature"],"6578":["core::ecdsa::check_ecdsa_signature"],"6579":["core::ecdsa::check_ecdsa_signature"],"658":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6580":["core::ecdsa::check_ecdsa_signature"],"6581":["core::ecdsa::check_ecdsa_signature"],"6582":["core::ecdsa::check_ecdsa_signature"],"6583":["core::ecdsa::check_ecdsa_signature"],"6584":["core::ecdsa::check_ecdsa_signature"],"6585":["core::ecdsa::check_ecdsa_signature"],"6586":["core::ecdsa::check_ecdsa_signature"],"6587":["core::ecdsa::check_ecdsa_signature"],"6588":["core::ecdsa::check_ecdsa_signature"],"6589":["core::ecdsa::check_ecdsa_signature"],"659":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6590":["core::ecdsa::check_ecdsa_signature"],"6591":["core::ecdsa::check_ecdsa_signature"],"6592":["core::ecdsa::check_ecdsa_signature"],"6593":["core::ecdsa::check_ecdsa_signature"],"6594":["core::ecdsa::check_ecdsa_signature"],"6595":["core::ecdsa::check_ecdsa_signature"],"6596":["core::ecdsa::check_ecdsa_signature"],"6597":["core::ecdsa::check_ecdsa_signature"],"6598":["core::ecdsa::check_ecdsa_signature"],"6599":["core::ecdsa::check_ecdsa_signature"],"66":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"660":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6600":["core::ecdsa::check_ecdsa_signature"],"6601":["core::ecdsa::check_ecdsa_signature"],"6602":["core::ecdsa::check_ecdsa_signature"],"6603":["core::ecdsa::check_ecdsa_signature"],"6604":["core::ecdsa::check_ecdsa_signature"],"6605":["core::ecdsa::check_ecdsa_signature"],"6606":["core::ecdsa::check_ecdsa_signature"],"6607":["core::ecdsa::check_ecdsa_signature"],"6608":["core::ecdsa::check_ecdsa_signature"],"6609":["core::ecdsa::check_ecdsa_signature"],"661":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6610":["core::ecdsa::check_ecdsa_signature"],"6611":["core::ecdsa::check_ecdsa_signature"],"6612":["core::ecdsa::check_ecdsa_signature"],"6613":["core::ecdsa::check_ecdsa_signature"],"6614":["core::ecdsa::check_ecdsa_signature"],"6615":["core::ecdsa::check_ecdsa_signature"],"6616":["core::ecdsa::check_ecdsa_signature"],"6617":["core::ecdsa::check_ecdsa_signature"],"6618":["core::ecdsa::check_ecdsa_signature"],"6619":["core::ecdsa::check_ecdsa_signature"],"662":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6620":["core::ecdsa::check_ecdsa_signature"],"6621":["core::ecdsa::check_ecdsa_signature"],"6622":["core::ecdsa::check_ecdsa_signature"],"6623":["core::ecdsa::check_ecdsa_signature"],"6624":["core::ecdsa::check_ecdsa_signature"],"6625":["core::ecdsa::check_ecdsa_signature"],"6626":["core::ecdsa::check_ecdsa_signature"],"6627":["core::ecdsa::check_ecdsa_signature"],"6628":["core::ecdsa::check_ecdsa_signature"],"6629":["core::ecdsa::check_ecdsa_signature"],"663":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6630":["core::ecdsa::check_ecdsa_signature"],"6631":["core::ecdsa::check_ecdsa_signature"],"6632":["core::ecdsa::check_ecdsa_signature"],"6633":["core::ecdsa::check_ecdsa_signature"],"6634":["core::ecdsa::check_ecdsa_signature"],"6635":["core::ecdsa::check_ecdsa_signature"],"6636":["core::ecdsa::check_ecdsa_signature"],"6637":["core::ecdsa::check_ecdsa_signature"],"6638":["core::ecdsa::check_ecdsa_signature"],"6639":["core::ecdsa::check_ecdsa_signature"],"664":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6640":["core::ecdsa::check_ecdsa_signature"],"6641":["core::ecdsa::check_ecdsa_signature"],"6642":["core::ecdsa::check_ecdsa_signature"],"6643":["core::ecdsa::check_ecdsa_signature"],"6644":["core::ecdsa::check_ecdsa_signature"],"6645":["core::ecdsa::check_ecdsa_signature"],"6646":["core::ecdsa::check_ecdsa_signature"],"6647":["core::ecdsa::check_ecdsa_signature"],"6648":["core::ecdsa::check_ecdsa_signature"],"6649":["core::ecdsa::check_ecdsa_signature"],"665":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6650":["core::ecdsa::check_ecdsa_signature"],"6651":["core::ecdsa::check_ecdsa_signature"],"6652":["core::ecdsa::check_ecdsa_signature"],"6653":["core::ecdsa::check_ecdsa_signature"],"6654":["core::ecdsa::check_ecdsa_signature"],"6655":["core::ecdsa::check_ecdsa_signature"],"6656":["core::ecdsa::check_ecdsa_signature"],"6657":["core::ecdsa::check_ecdsa_signature"],"6658":["core::ecdsa::check_ecdsa_signature"],"6659":["core::ecdsa::check_ecdsa_signature"],"666":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6660":["core::ecdsa::check_ecdsa_signature"],"6661":["core::ecdsa::check_ecdsa_signature"],"6662":["core::ecdsa::check_ecdsa_signature"],"6663":["core::ecdsa::check_ecdsa_signature"],"6664":["core::ecdsa::check_ecdsa_signature"],"6665":["core::ecdsa::check_ecdsa_signature"],"6666":["core::ecdsa::check_ecdsa_signature"],"6667":["core::ecdsa::check_ecdsa_signature"],"6668":["core::ecdsa::check_ecdsa_signature"],"6669":["core::ecdsa::check_ecdsa_signature"],"667":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6670":["core::ecdsa::check_ecdsa_signature"],"6671":["core::ecdsa::check_ecdsa_signature"],"6672":["core::ecdsa::check_ecdsa_signature"],"6673":["core::ecdsa::check_ecdsa_signature"],"6674":["core::ecdsa::check_ecdsa_signature"],"6675":["core::ecdsa::check_ecdsa_signature"],"6676":["core::ecdsa::check_ecdsa_signature"],"6677":["core::ecdsa::check_ecdsa_signature"],"6678":["core::ecdsa::check_ecdsa_signature"],"6679":["core::ecdsa::check_ecdsa_signature"],"668":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6680":["core::ecdsa::check_ecdsa_signature"],"6681":["core::ecdsa::check_ecdsa_signature"],"6682":["core::ecdsa::check_ecdsa_signature"],"6683":["core::ecdsa::check_ecdsa_signature"],"6684":["core::ecdsa::check_ecdsa_signature"],"6685":["core::ecdsa::check_ecdsa_signature"],"6686":["core::ecdsa::check_ecdsa_signature"],"6687":["core::ecdsa::check_ecdsa_signature"],"6688":["core::ecdsa::check_ecdsa_signature"],"6689":["core::ecdsa::check_ecdsa_signature"],"669":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6690":["core::ecdsa::check_ecdsa_signature"],"6691":["core::ecdsa::check_ecdsa_signature"],"6692":["core::ecdsa::check_ecdsa_signature"],"6693":["core::ecdsa::check_ecdsa_signature"],"6694":["core::ecdsa::check_ecdsa_signature"],"6695":["core::ecdsa::check_ecdsa_signature"],"6696":["core::ecdsa::check_ecdsa_signature"],"6697":["core::ecdsa::check_ecdsa_signature"],"6698":["core::ecdsa::check_ecdsa_signature"],"6699":["core::ecdsa::check_ecdsa_signature"],"67":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"670":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6700":["core::ecdsa::check_ecdsa_signature"],"6701":["core::ecdsa::check_ecdsa_signature"],"6702":["core::ecdsa::check_ecdsa_signature"],"6703":["core::ecdsa::check_ecdsa_signature"],"6704":["core::ecdsa::check_ecdsa_signature"],"6705":["core::ecdsa::check_ecdsa_signature"],"6706":["core::ecdsa::check_ecdsa_signature"],"6707":["core::ecdsa::check_ecdsa_signature"],"6708":["core::ecdsa::check_ecdsa_signature"],"6709":["core::ecdsa::check_ecdsa_signature"],"671":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6710":["core::ecdsa::check_ecdsa_signature"],"6711":["core::ecdsa::check_ecdsa_signature"],"6712":["core::ecdsa::check_ecdsa_signature"],"6713":["core::ecdsa::check_ecdsa_signature"],"6714":["core::ecdsa::check_ecdsa_signature"],"6715":["core::ecdsa::check_ecdsa_signature"],"6716":["core::ecdsa::check_ecdsa_signature"],"6717":["core::ecdsa::check_ecdsa_signature"],"6718":["core::ecdsa::check_ecdsa_signature"],"6719":["core::ecdsa::check_ecdsa_signature"],"672":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6720":["core::ecdsa::check_ecdsa_signature"],"6721":["core::ecdsa::check_ecdsa_signature"],"6722":["core::ecdsa::check_ecdsa_signature"],"6723":["core::ecdsa::check_ecdsa_signature"],"6724":["core::ecdsa::check_ecdsa_signature"],"6725":["core::ecdsa::check_ecdsa_signature"],"6726":["core::ecdsa::check_ecdsa_signature"],"6727":["core::ecdsa::check_ecdsa_signature"],"6728":["core::ecdsa::check_ecdsa_signature"],"6729":["core::ecdsa::check_ecdsa_signature"],"673":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6730":["core::ecdsa::check_ecdsa_signature"],"6731":["core::ecdsa::check_ecdsa_signature"],"6732":["core::ecdsa::check_ecdsa_signature"],"6733":["core::ecdsa::check_ecdsa_signature"],"6734":["core::ecdsa::check_ecdsa_signature"],"6735":["core::ecdsa::check_ecdsa_signature"],"6736":["core::ecdsa::check_ecdsa_signature"],"6737":["core::ecdsa::check_ecdsa_signature"],"6738":["core::ecdsa::check_ecdsa_signature"],"6739":["core::ecdsa::check_ecdsa_signature"],"674":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6740":["core::ecdsa::check_ecdsa_signature"],"6741":["core::ecdsa::check_ecdsa_signature"],"6742":["core::ecdsa::check_ecdsa_signature"],"6743":["core::ecdsa::check_ecdsa_signature"],"6744":["core::ecdsa::check_ecdsa_signature"],"6745":["core::ecdsa::check_ecdsa_signature"],"6746":["core::ecdsa::check_ecdsa_signature"],"6747":["core::ecdsa::check_ecdsa_signature"],"6748":["core::ecdsa::check_ecdsa_signature"],"6749":["core::ecdsa::check_ecdsa_signature"],"675":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6750":["core::ecdsa::check_ecdsa_signature"],"6751":["core::ecdsa::check_ecdsa_signature"],"6752":["core::ecdsa::check_ecdsa_signature"],"6753":["core::ecdsa::check_ecdsa_signature"],"6754":["core::ecdsa::check_ecdsa_signature"],"6755":["core::ecdsa::check_ecdsa_signature"],"6756":["core::ecdsa::check_ecdsa_signature"],"6757":["core::ecdsa::check_ecdsa_signature"],"6758":["core::ecdsa::check_ecdsa_signature"],"6759":["core::ecdsa::check_ecdsa_signature"],"676":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6760":["core::ecdsa::check_ecdsa_signature"],"6761":["core::ecdsa::check_ecdsa_signature"],"6762":["core::ecdsa::check_ecdsa_signature"],"6763":["core::ecdsa::check_ecdsa_signature"],"6764":["core::ecdsa::check_ecdsa_signature"],"6765":["core::ecdsa::check_ecdsa_signature"],"6766":["core::ecdsa::check_ecdsa_signature"],"6767":["core::ecdsa::check_ecdsa_signature"],"6768":["core::ecdsa::check_ecdsa_signature"],"6769":["core::ecdsa::check_ecdsa_signature"],"677":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6770":["core::ecdsa::check_ecdsa_signature"],"6771":["core::ecdsa::check_ecdsa_signature"],"6772":["core::ecdsa::check_ecdsa_signature"],"6773":["core::ecdsa::check_ecdsa_signature"],"6774":["core::ecdsa::check_ecdsa_signature"],"6775":["core::ecdsa::check_ecdsa_signature"],"6776":["core::ecdsa::check_ecdsa_signature"],"6777":["core::ecdsa::check_ecdsa_signature"],"6778":["core::ecdsa::check_ecdsa_signature"],"6779":["core::ecdsa::check_ecdsa_signature"],"678":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6780":["core::ecdsa::check_ecdsa_signature"],"6781":["core::ecdsa::check_ecdsa_signature"],"6782":["core::ecdsa::check_ecdsa_signature"],"6783":["core::ecdsa::check_ecdsa_signature"],"6784":["core::ecdsa::check_ecdsa_signature"],"6785":["core::ecdsa::check_ecdsa_signature"],"6786":["core::ecdsa::check_ecdsa_signature"],"6787":["core::ecdsa::check_ecdsa_signature"],"6788":["core::ecdsa::check_ecdsa_signature"],"6789":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"679":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6790":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"6791":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"6792":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"6793":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"6794":["core::starknet::storage::StorableStoragePathAsPointer::as_ptr"],"6795":["core::starknet::storage::StorableStoragePathAsPointer::as_ptr"],"6796":["core::starknet::storage::StorableStoragePathAsPointer::as_ptr"],"6797":["core::starknet::storage::StorableStoragePathAsPointer::as_ptr"],"6798":["core::starknet::storage::StorableStoragePathAsPointer::as_ptr"],"6799":["core::starknet::storage::StorableStoragePathAsPointer::as_ptr"],"68":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"680":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6800":["core::starknet::storage_access::StoreFelt252::read"],"6801":["core::starknet::storage_access::StoreFelt252::read"],"6802":["core::starknet::storage_access::StoreFelt252::read"],"6803":["core::starknet::storage_access::StoreFelt252::read"],"6804":["core::starknet::storage_access::StoreFelt252::read"],"6805":["core::starknet::storage_access::StoreFelt252::read"],"6806":["core::starknet::storage_access::StoreFelt252::read"],"6807":["core::starknet::storage_access::StoreFelt252::read"],"6808":["core::starknet::storage_access::StoreFelt252::read"],"6809":["core::starknet::storage_access::StoreFelt252::read"],"681":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6810":["core::starknet::storage_access::StoreFelt252::read"],"6811":["core::starknet::storage_access::StoreFelt252::read"],"6812":["core::starknet::storage_access::StoreFelt252::read"],"6813":["core::starknet::storage_access::StoreFelt252::read"],"6814":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6815":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6816":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6817":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6818":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6819":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"682":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6820":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6821":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6822":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6823":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6824":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6825":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6826":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"6827":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"6828":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"6829":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"683":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6830":["core::starknet::storage::storage_base::StorageBaseAsPath::as_path"],"6831":["core::starknet::storage::MutableStorableStoragePathAsPointer::as_ptr"],"6832":["core::starknet::storage::MutableStorableStoragePathAsPointer::as_ptr"],"6833":["core::starknet::storage::MutableStorableStoragePathAsPointer::as_ptr"],"6834":["core::starknet::storage::MutableStorableStoragePathAsPointer::as_ptr"],"6835":["core::starknet::storage::MutableStorableStoragePathAsPointer::as_ptr"],"6836":["core::starknet::storage::MutableStorableStoragePathAsPointer::as_ptr"],"6838":["core::pedersen::PedersenImpl::new"],"6839":["core::pedersen::PedersenImpl::new"],"684":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6840":["core::starknet::storage::StoragePathUpdateImpl::update"],"6841":["core::starknet::storage::StoragePathUpdateImpl::update"],"6842":["core::starknet::storage::StoragePathUpdateImpl::update"],"6843":["core::starknet::storage::StoragePathUpdateImpl::update"],"6844":["core::starknet::storage::StoragePathUpdateImpl::update"],"6845":["core::starknet::storage::StoragePathUpdateImpl::update"],"6846":["core::starknet::storage::StoragePathUpdateImpl::update"],"6847":["core::starknet::storage::StoragePathImpl::finalize"],"6848":["core::starknet::storage::StoragePathImpl::finalize"],"6849":["core::starknet::storage::StoragePathImpl::finalize"],"685":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6850":["core::starknet::storage::StoragePathImpl::finalize"],"6851":["core::starknet::storage::StoragePathImpl::finalize"],"6852":["core::starknet::storage::StoragePathImpl::finalize"],"6853":["core::starknet::storage::StoragePathImpl::finalize"],"6854":["core::starknet::storage_access::StoreUsingPacking::read"],"6855":["core::starknet::storage_access::StoreUsingPacking::read"],"6856":["core::starknet::storage_access::StoreUsingPacking::read"],"6857":["core::starknet::storage_access::StoreUsingPacking::read"],"6858":["core::starknet::storage_access::StoreUsingPacking::read"],"6859":["core::starknet::storage_access::StoreUsingPacking::read"],"686":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6860":["core::starknet::storage_access::StoreUsingPacking::read"],"6861":["core::starknet::storage_access::StoreUsingPacking::read"],"6862":["core::starknet::storage_access::StoreUsingPacking::read"],"6863":["core::starknet::storage_access::StoreUsingPacking::read"],"6864":["core::starknet::storage_access::StoreUsingPacking::read"],"6865":["core::starknet::storage_access::StoreUsingPacking::read"],"6866":["core::starknet::storage_access::StoreUsingPacking::read"],"6867":["core::starknet::storage_access::StoreUsingPacking::read"],"6868":["core::starknet::storage_access::StoreUsingPacking::read"],"6869":["core::starknet::storage_access::StoreUsingPacking::read"],"687":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6870":["core::starknet::storage_access::StoreUsingPacking::read"],"6871":["core::starknet::storage_access::StoreUsingPacking::read"],"6872":["core::starknet::storage_access::StoreUsingPacking::read"],"6873":["core::starknet::storage_access::StoreUsingPacking::read"],"6874":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6875":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6876":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6877":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6878":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6879":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"688":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6880":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6881":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6882":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6883":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6884":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6885":["core::starknet::SyscallResultTraitImpl::unwrap_syscall"],"6886":["core::starknet::storage_access::StoreUsingPacking::write"],"6887":["core::starknet::storage_access::StoreUsingPacking::write"],"6888":["core::starknet::storage_access::StoreUsingPacking::write"],"6889":["core::starknet::storage_access::StoreUsingPacking::write"],"689":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6890":["core::starknet::storage_access::StoreUsingPacking::write"],"6891":["core::starknet::storage_access::StoreUsingPacking::write"],"6892":["core::starknet::storage_access::StoreUsingPacking::write"],"6893":["core::starknet::storage_access::StoreUsingPacking::write"],"6894":["core::starknet::storage_access::StoreUsingPacking::write"],"6895":["core::poseidon::HashStateImpl::update"],"6896":["core::poseidon::HashStateImpl::update"],"6897":["core::poseidon::HashStateImpl::update"],"6898":["core::poseidon::HashStateImpl::update"],"6899":["core::poseidon::HashStateImpl::update"],"69":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"690":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6900":["core::poseidon::HashStateImpl::update"],"6901":["core::poseidon::HashStateImpl::update"],"6902":["core::poseidon::HashStateImpl::update"],"6903":["core::poseidon::HashStateImpl::update"],"6904":["core::poseidon::HashStateImpl::update"],"6905":["core::poseidon::HashStateImpl::update"],"6906":["core::poseidon::HashStateImpl::update"],"6907":["core::poseidon::HashStateImpl::update"],"6908":["core::poseidon::HashStateImpl::update"],"6909":["core::poseidon::HashStateImpl::update"],"691":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6910":["core::poseidon::HashStateImpl::update"],"6911":["core::poseidon::HashStateImpl::update"],"6912":["core::poseidon::HashStateImpl::update"],"6913":["core::poseidon::HashStateImpl::update"],"6914":["core::poseidon::HashStateImpl::update"],"6915":["core::poseidon::HashStateImpl::update"],"6916":["core::poseidon::HashStateImpl::update"],"6917":["core::poseidon::HashStateImpl::update"],"6918":["core::poseidon::HashStateImpl::update"],"6919":["core::poseidon::HashStateImpl::update"],"692":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6923":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6924":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6925":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6926":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6927":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6928":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6929":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"693":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6930":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6931":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6932":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6933":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6934":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6935":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6936":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6937":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6938":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6939":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"694":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6940":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6941":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6942":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6943":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6944":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6945":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6946":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6947":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6948":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6949":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"695":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6950":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6951":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6952":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6953":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6954":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6955":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6956":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6957":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6958":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6959":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"696":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6960":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6961":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6962":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6963":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6964":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6965":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6966":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6967":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6968":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6969":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"697":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6970":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6971":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6972":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6973":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6974":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6975":["openzeppelin_account::extensions::src9::snip12_utils::CallStructHash::hash_struct"],"6976":["core::hash::into_felt252_based::HashImpl::update_state"],"6977":["core::hash::into_felt252_based::HashImpl::update_state"],"6978":["core::hash::into_felt252_based::HashImpl::update_state"],"6979":["core::hash::into_felt252_based::HashImpl::update_state"],"698":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6980":["core::hash::into_felt252_based::HashImpl::update_state"],"6981":["core::hash::into_felt252_based::HashImpl::update_state"],"6982":["core::hash::into_felt252_based::HashImpl::update_state"],"6984":["core::poseidon::_poseidon_hash_span_inner"],"6985":["core::poseidon::_poseidon_hash_span_inner"],"6986":["core::poseidon::_poseidon_hash_span_inner"],"6987":["core::poseidon::_poseidon_hash_span_inner"],"6988":["core::poseidon::_poseidon_hash_span_inner"],"6989":["core::poseidon::_poseidon_hash_span_inner"],"699":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"6990":["core::poseidon::_poseidon_hash_span_inner"],"6991":["core::poseidon::_poseidon_hash_span_inner"],"6992":["core::poseidon::_poseidon_hash_span_inner"],"6993":["core::poseidon::_poseidon_hash_span_inner"],"6994":["core::poseidon::_poseidon_hash_span_inner"],"6995":["core::poseidon::_poseidon_hash_span_inner"],"6996":["core::poseidon::_poseidon_hash_span_inner"],"6997":["core::poseidon::_poseidon_hash_span_inner"],"6998":["core::poseidon::_poseidon_hash_span_inner"],"6999":["core::poseidon::_poseidon_hash_span_inner"],"7":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"70":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"700":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"7000":["core::poseidon::_poseidon_hash_span_inner"],"7001":["core::poseidon::_poseidon_hash_span_inner"],"7002":["core::poseidon::_poseidon_hash_span_inner"],"7003":["core::poseidon::_poseidon_hash_span_inner"],"7004":["core::poseidon::_poseidon_hash_span_inner"],"7005":["core::poseidon::_poseidon_hash_span_inner"],"7006":["core::poseidon::_poseidon_hash_span_inner"],"7007":["core::poseidon::_poseidon_hash_span_inner"],"7008":["core::poseidon::_poseidon_hash_span_inner"],"7009":["core::poseidon::_poseidon_hash_span_inner"],"701":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"7010":["core::poseidon::_poseidon_hash_span_inner"],"7011":["core::poseidon::_poseidon_hash_span_inner"],"7012":["core::poseidon::_poseidon_hash_span_inner"],"7013":["core::poseidon::_poseidon_hash_span_inner"],"7014":["core::poseidon::_poseidon_hash_span_inner"],"7015":["core::poseidon::_poseidon_hash_span_inner"],"7016":["core::poseidon::_poseidon_hash_span_inner"],"7017":["core::poseidon::_poseidon_hash_span_inner"],"7018":["core::poseidon::_poseidon_hash_span_inner"],"7019":["core::poseidon::_poseidon_hash_span_inner"],"702":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"7020":["core::poseidon::_poseidon_hash_span_inner"],"7021":["core::poseidon::_poseidon_hash_span_inner"],"7022":["core::poseidon::_poseidon_hash_span_inner"],"7023":["core::poseidon::_poseidon_hash_span_inner"],"7024":["core::poseidon::_poseidon_hash_span_inner"],"7025":["core::poseidon::_poseidon_hash_span_inner"],"7026":["core::poseidon::_poseidon_hash_span_inner"],"7027":["core::poseidon::_poseidon_hash_span_inner"],"7028":["core::option::OptionTraitImpl::expect","core::poseidon::_poseidon_hash_span_inner"],"7029":["core::option::OptionTraitImpl::expect","core::poseidon::_poseidon_hash_span_inner"],"703":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"7030":["core::option::OptionTraitImpl::expect","core::poseidon::_poseidon_hash_span_inner"],"7031":["core::option::OptionTraitImpl::expect","core::poseidon::_poseidon_hash_span_inner"],"7032":["core::option::OptionTraitImpl::expect","core::poseidon::_poseidon_hash_span_inner"],"7033":["core::option::OptionTraitImpl::expect","core::poseidon::_poseidon_hash_span_inner"],"7034":["core::option::OptionTraitImpl::expect","core::poseidon::_poseidon_hash_span_inner"],"7035":["core::option::OptionTraitImpl::expect","core::poseidon::_poseidon_hash_span_inner"],"7036":["core::poseidon::_poseidon_hash_span_inner"],"7037":["core::poseidon::_poseidon_hash_span_inner"],"7038":["core::poseidon::_poseidon_hash_span_inner"],"7039":["core::poseidon::_poseidon_hash_span_inner"],"704":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"7040":["core::poseidon::_poseidon_hash_span_inner"],"7041":["core::poseidon::_poseidon_hash_span_inner"],"7042":["core::poseidon::_poseidon_hash_span_inner"],"7043":["core::poseidon::_poseidon_hash_span_inner"],"7044":["core::poseidon::_poseidon_hash_span_inner"],"7045":["core::poseidon::_poseidon_hash_span_inner"],"7046":["core::poseidon::_poseidon_hash_span_inner"],"7047":["core::poseidon::_poseidon_hash_span_inner"],"7048":["core::poseidon::_poseidon_hash_span_inner"],"7049":["core::poseidon::_poseidon_hash_span_inner"],"705":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"7050":["core::poseidon::_poseidon_hash_span_inner"],"7051":["core::poseidon::_poseidon_hash_span_inner"],"7052":["core::poseidon::_poseidon_hash_span_inner"],"7053":["core::poseidon::_poseidon_hash_span_inner"],"7054":["core::poseidon::_poseidon_hash_span_inner"],"7055":["core::poseidon::_poseidon_hash_span_inner"],"7056":["core::poseidon::_poseidon_hash_span_inner"],"7057":["core::poseidon::_poseidon_hash_span_inner"],"7058":["core::poseidon::_poseidon_hash_span_inner"],"7059":["core::poseidon::_poseidon_hash_span_inner"],"706":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"7060":["core::poseidon::_poseidon_hash_span_inner"],"7061":["core::poseidon::_poseidon_hash_span_inner"],"7062":["core::poseidon::_poseidon_hash_span_inner"],"7063":["core::poseidon::_poseidon_hash_span_inner"],"7064":["core::poseidon::_poseidon_hash_span_inner"],"7065":["core::poseidon::_poseidon_hash_span_inner"],"7066":["core::poseidon::_poseidon_hash_span_inner"],"7067":["core::poseidon::_poseidon_hash_span_inner"],"7068":["core::poseidon::_poseidon_hash_span_inner"],"7069":["core::poseidon::_poseidon_hash_span_inner"],"707":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"7070":["core::poseidon::_poseidon_hash_span_inner"],"7071":["core::poseidon::_poseidon_hash_span_inner"],"7072":["core::poseidon::_poseidon_hash_span_inner"],"7073":["core::poseidon::_poseidon_hash_span_inner"],"7074":["core::poseidon::_poseidon_hash_span_inner"],"7075":["core::poseidon::_poseidon_hash_span_inner"],"7076":["core::poseidon::_poseidon_hash_span_inner"],"7077":["core::poseidon::_poseidon_hash_span_inner"],"7078":["core::poseidon::_poseidon_hash_span_inner"],"7079":["core::poseidon::_poseidon_hash_span_inner"],"708":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"7080":["core::poseidon::_poseidon_hash_span_inner"],"7081":["core::poseidon::_poseidon_hash_span_inner"],"7082":["core::poseidon::_poseidon_hash_span_inner"],"7083":["core::poseidon::_poseidon_hash_span_inner"],"7084":["core::poseidon::_poseidon_hash_span_inner"],"7085":["core::poseidon::_poseidon_hash_span_inner"],"7086":["core::poseidon::_poseidon_hash_span_inner"],"7087":["core::poseidon::_poseidon_hash_span_inner"],"7088":["core::poseidon::_poseidon_hash_span_inner"],"7089":["core::poseidon::_poseidon_hash_span_inner"],"709":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"7090":["core::poseidon::_poseidon_hash_span_inner"],"7091":["core::poseidon::_poseidon_hash_span_inner"],"7092":["core::poseidon::_poseidon_hash_span_inner"],"7093":["core::array::SpanImpl::pop_front"],"7094":["core::array::SpanImpl::pop_front"],"7095":["core::array::SpanImpl::pop_front"],"7096":["core::array::SpanImpl::pop_front"],"7097":["core::array::SpanImpl::pop_front"],"7098":["core::array::SpanImpl::pop_front"],"7099":["core::array::SpanImpl::pop_front"],"71":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"710":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"7100":["core::array::SpanImpl::pop_front"],"7101":["core::array::SpanImpl::pop_front"],"7102":["core::array::SpanImpl::pop_front"],"7103":["core::array::SpanImpl::pop_front"],"7104":["core::array::SpanImpl::pop_front"],"7105":["core::array::SpanImpl::pop_front"],"7106":["core::array::SpanImpl::pop_front"],"7107":["core::array::SpanImpl::pop_front"],"7108":["core::array::SpanImpl::pop_front"],"7109":["core::array::SpanImpl::pop_front"],"711":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"7110":["core::array::SpanImpl::pop_front"],"7111":["core::array::SpanImpl::pop_front"],"7112":["core::array::SpanImpl::pop_front"],"7113":["core::array::SpanImpl::pop_front"],"7114":["core::array::SpanImpl::pop_front"],"7115":["core::array::SpanImpl::pop_front"],"7116":["core::array::SpanImpl::pop_front"],"7117":["core::array::SpanImpl::pop_front"],"7118":["core::array::SpanImpl::pop_front"],"7119":["core::array::SpanImpl::pop_front"],"712":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"7120":["core::array::SpanImpl::pop_front"],"7121":["core::starknet::storage::StoragePathUpdateImpl::update"],"7122":["core::starknet::storage::StoragePathUpdateImpl::update"],"7123":["core::starknet::storage::StoragePathUpdateImpl::update"],"7124":["core::starknet::storage::StoragePathUpdateImpl::update"],"7125":["core::starknet::storage::StoragePathUpdateImpl::update"],"7126":["core::starknet::storage::StoragePathUpdateImpl::update"],"7127":["core::starknet::storage::StoragePathUpdateImpl::update"],"7128":["core::starknet::storage::StoragePathImpl::finalize"],"7129":["core::starknet::storage::StoragePathImpl::finalize"],"713":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl__isValidSignature"],"7130":["core::starknet::storage::StoragePathImpl::finalize"],"7131":["core::starknet::storage::StoragePathImpl::finalize"],"7132":["core::starknet::storage::StoragePathImpl::finalize"],"7133":["core::starknet::storage::StoragePathImpl::finalize"],"7134":["core::starknet::storage::StoragePathImpl::finalize"],"7135":["core::starknet::storage_access::StoreFelt252::write"],"7136":["core::starknet::storage_access::StoreFelt252::write"],"7137":["core::starknet::storage_access::StoreFelt252::write"],"7138":["core::starknet::storage_access::StoreFelt252::write"],"7139":["core::starknet::storage_access::StoreFelt252::write"],"714":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7140":["core::starknet::storage_access::StoreFelt252::write"],"7141":["core::starknet::storage_access::StoreFelt252::write"],"7142":["core::starknet::storage_access::StoreFelt252::write"],"7143":["core::starknet::storage_access::StoreFelt252::write"],"7144":["core::starknet::storage_access::StoreFelt252::write"],"7145":["core::starknet::storage_access::StoreFelt252::write"],"7146":["core::starknet::storage_access::StoreFelt252::write"],"7147":["core::starknet::storage_access::StoreFelt252::write"],"7148":["core::starknet::storage_access::StoreFelt252::write"],"7149":["core::starknet::storage_access::StoreFelt252::write"],"715":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7150":["openzeppelin_account::account::AccountComponent::OwnerAddedIsEvent::append_keys_and_data"],"7151":["openzeppelin_account::account::AccountComponent::OwnerAddedIsEvent::append_keys_and_data"],"7152":["openzeppelin_account::account::AccountComponent::OwnerAddedIsEvent::append_keys_and_data"],"7153":["openzeppelin_account::account::AccountComponent::OwnerAddedIsEvent::append_keys_and_data"],"7154":["openzeppelin_account::account::AccountComponent::OwnerAddedIsEvent::append_keys_and_data"],"7155":["openzeppelin_account::account::AccountComponent::OwnerAddedIsEvent::append_keys_and_data"],"7156":["openzeppelin_account::account::AccountComponent::OwnerRemovedIsEvent::append_keys_and_data"],"7157":["openzeppelin_account::account::AccountComponent::OwnerRemovedIsEvent::append_keys_and_data"],"7158":["openzeppelin_account::account::AccountComponent::OwnerRemovedIsEvent::append_keys_and_data"],"7159":["openzeppelin_account::account::AccountComponent::OwnerRemovedIsEvent::append_keys_and_data"],"716":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7160":["openzeppelin_account::account::AccountComponent::OwnerRemovedIsEvent::append_keys_and_data"],"7161":["openzeppelin_account::account::AccountComponent::OwnerRemovedIsEvent::append_keys_and_data"],"7162":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::UpgradedIsEvent::append_keys_and_data"],"7163":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::UpgradedIsEvent::append_keys_and_data"],"7164":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::UpgradedIsEvent::append_keys_and_data"],"7165":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::UpgradedIsEvent::append_keys_and_data"],"7166":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::UpgradedIsEvent::append_keys_and_data"],"7167":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::UpgradedIsEvent::append_keys_and_data"],"7168":["openzeppelin_upgrades::upgradeable::UpgradeableComponent::UpgradedIsEvent::append_keys_and_data"],"7169":["core::integer::U128PartialOrd::lt"],"717":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7170":["core::integer::U128PartialOrd::lt"],"7171":["core::integer::U128PartialOrd::lt"],"7172":["core::integer::U128PartialOrd::lt"],"7173":["core::integer::U128PartialOrd::lt"],"7174":["core::integer::U128PartialOrd::lt"],"7175":["core::integer::U128PartialOrd::lt"],"7176":["core::integer::U128PartialOrd::lt"],"7177":["core::integer::U128PartialOrd::lt"],"7178":["core::integer::U128PartialOrd::lt"],"7179":["core::integer::U128PartialOrd::lt"],"718":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7180":["core::integer::U128PartialOrd::lt"],"7181":["core::integer::U128PartialOrd::lt"],"7182":["core::integer::U128PartialOrd::lt"],"7183":["core::integer::U128PartialEq::eq"],"7184":["core::integer::U128PartialEq::eq"],"7185":["core::integer::U128PartialEq::eq"],"7186":["core::integer::U128PartialEq::eq"],"7187":["core::integer::U128PartialEq::eq"],"7188":["core::integer::U128PartialEq::eq"],"7189":["core::integer::U128PartialEq::eq"],"719":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7190":["core::integer::U128PartialEq::eq"],"7191":["core::integer::U128PartialEq::eq"],"7192":["core::integer::U128PartialEq::eq"],"7193":["core::integer::U128PartialEq::eq"],"7194":["core::integer::U128PartialEq::eq"],"7195":["core::integer::U128PartialEq::eq"],"7196":["core::integer::u256_overflowing_add"],"7197":["core::integer::u256_overflowing_add"],"7198":["core::integer::u256_overflowing_add"],"7199":["core::integer::u256_overflowing_add"],"72":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"720":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7200":["core::integer::u256_overflowing_add"],"7201":["core::integer::u256_overflowing_add"],"7202":["core::integer::u256_overflowing_add"],"7203":["core::integer::u256_overflowing_add"],"7204":["core::integer::u256_overflowing_add"],"7205":["core::integer::u256_overflowing_add"],"7206":["core::integer::u256_overflowing_add"],"7207":["core::integer::u256_overflowing_add"],"7208":["core::integer::u256_overflowing_add"],"7209":["core::integer::u256_overflowing_add"],"721":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7210":["core::integer::u256_overflowing_add"],"7211":["core::integer::u256_overflowing_add"],"7212":["core::integer::u256_overflowing_add"],"7213":["core::integer::u256_overflowing_add"],"7214":["core::integer::u256_overflowing_add"],"7215":["core::integer::u256_overflowing_add"],"7216":["core::integer::u256_overflowing_add"],"7217":["core::integer::u256_overflowing_add"],"7218":["core::integer::u256_overflowing_add"],"7219":["core::integer::u256_overflowing_add"],"722":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7220":["core::integer::u256_overflowing_add"],"7221":["core::integer::u256_overflowing_add"],"7222":["core::integer::u256_overflowing_add"],"7223":["core::integer::u256_overflowing_add"],"7224":["core::integer::u256_overflowing_add"],"7225":["core::integer::u256_overflowing_add"],"7226":["core::integer::u256_overflowing_add"],"7227":["core::integer::u256_overflowing_add"],"7228":["core::integer::u256_overflowing_add"],"7229":["core::integer::u256_overflowing_add"],"723":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7230":["core::integer::u256_overflowing_add"],"7231":["core::integer::u256_overflowing_add"],"7232":["core::integer::u256_overflowing_add"],"7233":["core::integer::u256_overflowing_add"],"7234":["core::integer::u256_overflowing_add"],"7235":["core::integer::u256_overflowing_add"],"7236":["core::integer::u256_overflowing_add"],"7237":["core::integer::u256_overflowing_add"],"7238":["core::array::array_at"],"7239":["core::array::array_at"],"724":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7240":["core::array::array_at"],"7241":["core::array::array_at"],"7242":["core::array::array_at"],"7243":["core::array::array_at"],"7244":["core::array::array_at"],"7245":["core::array::array_at"],"7246":["core::array::array_at"],"7247":["core::array::array_at"],"7248":["core::array::array_at"],"7249":["core::array::array_at"],"725":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7250":["core::array::array_at"],"7251":["core::array::array_at"],"7252":["core::array::array_at"],"7253":["core::array::array_at"],"7254":["core::array::array_at"],"7255":["core::array::array_at"],"7256":["core::ec::EcPointImpl::new_nz_from_x"],"7257":["core::ec::EcPointImpl::new_nz_from_x"],"7258":["core::ec::EcPointImpl::new_nz_from_x"],"7259":["core::ec::EcPointImpl::new_nz_from_x"],"726":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7260":["core::ec::EcPointImpl::new_nz_from_x"],"7261":["core::ec::EcPointImpl::new_nz_from_x"],"7262":["core::ec::EcPointImpl::new_nz_from_x"],"7263":["core::ec::EcPointImpl::new_nz_from_x"],"7264":["core::ec::EcPointImpl::new_nz_from_x"],"7265":["core::ec::EcPointImpl::new_nz_from_x"],"7266":["core::ec::EcPointImpl::new_nz_from_x"],"7267":["core::ec::EcPointImpl::new_nz_from_x"],"7268":["core::ec::EcPointImpl::new_nz"],"7269":["core::ec::EcPointImpl::new_nz"],"727":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7270":["core::ec::EcPointImpl::new_nz"],"7271":["core::ec::EcPointImpl::new_nz"],"7272":["core::ec::EcPointImpl::new_nz"],"7273":["core::ec::EcPointImpl::new_nz"],"7274":["core::ec::EcPointImpl::new_nz"],"7275":["core::ec::EcPointImpl::new_nz"],"7276":["core::ec::EcPointImpl::new_nz"],"7277":["core::ec::EcPointImpl::new_nz"],"7278":["core::ec::EcStateImpl::init"],"7279":["core::ec::EcStateImpl::init"],"728":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7280":["core::ec::internal::EcStateClone::clone"],"7281":["core::ec::internal::EcStateClone::clone"],"7282":["core::ec::internal::EcStateClone::clone"],"7283":["core::ec::EcStateImpl::add_mul"],"7284":["core::ec::EcStateImpl::add_mul"],"7285":["core::ec::EcStateImpl::add_mul"],"7286":["core::ec::EcStateImpl::add_mul"],"7287":["core::ec::EcStateImpl::finalize_nz"],"7288":["core::ec::EcStateImpl::finalize_nz"],"7289":["core::ec::EcStateImpl::finalize_nz"],"729":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7290":["core::ec::EcStateImpl::finalize_nz"],"7291":["core::ec::EcStateImpl::finalize_nz"],"7292":["core::ec::EcStateImpl::finalize_nz"],"7293":["core::ec::EcStateImpl::finalize_nz"],"7294":["core::ec::EcStateImpl::finalize_nz"],"7295":["core::ec::EcStateImpl::finalize_nz"],"7296":["core::ec::EcStateImpl::finalize_nz"],"7297":["core::ec::EcPointImpl::x"],"7298":["core::ec::EcPointImpl::x"],"7299":["core::ec::EcPointImpl::x"],"73":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"730":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7300":["core::ec::EcPointImpl::x"],"7301":["core::ec::EcPointImpl::x"],"7302":["core::ec::EcPointImpl::x"],"7303":["core::ec::EcStateImpl::add"],"7304":["core::ec::EcStateImpl::add"],"7305":["core::ec::EcStateImpl::add"],"7306":["core::ec::EcStateImpl::sub"],"7307":["core::ec::EcStateImpl::sub"],"7308":["core::ec::EcStateImpl::sub"],"7309":["core::ec::EcStateImpl::sub"],"731":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7310":["core::ec::EcStateImpl::sub"],"7311":["core::option::OptionTraitImpl::expect","core::option::OptionTraitImpl::unwrap","core::ec::EcStateImpl::sub"],"7312":["core::option::OptionTraitImpl::expect","core::option::OptionTraitImpl::unwrap","core::ec::EcStateImpl::sub"],"7313":["core::ec::EcStateImpl::sub"],"7314":["core::ec::EcStateImpl::sub"],"7315":["core::ec::EcStateImpl::sub"],"7316":["core::ec::EcStateImpl::sub"],"7317":["core::ec::EcStateImpl::sub"],"7318":["core::ec::EcStateImpl::sub"],"7319":["core::option::OptionTraitImpl::expect","core::option::OptionTraitImpl::unwrap","core::ec::EcStateImpl::sub"],"732":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7320":["core::option::OptionTraitImpl::expect","core::option::OptionTraitImpl::unwrap","core::ec::EcStateImpl::sub"],"7321":["core::option::OptionTraitImpl::expect","core::option::OptionTraitImpl::unwrap","core::ec::EcStateImpl::sub"],"7322":["core::option::OptionTraitImpl::expect","core::option::OptionTraitImpl::unwrap","core::ec::EcStateImpl::sub"],"7323":["core::option::OptionTraitImpl::expect","core::option::OptionTraitImpl::unwrap","core::ec::EcStateImpl::sub"],"7324":["core::option::OptionTraitImpl::expect","core::option::OptionTraitImpl::unwrap","core::ec::EcStateImpl::sub"],"7325":["core::option::OptionTraitImpl::expect","core::option::OptionTraitImpl::unwrap","core::ec::EcStateImpl::sub"],"7326":["core::option::OptionTraitImpl::expect","core::option::OptionTraitImpl::unwrap","core::ec::EcStateImpl::sub"],"7327":["core::option::OptionTraitImpl::expect","core::option::OptionTraitImpl::unwrap","core::ec::EcStateImpl::sub"],"7328":["core::option::OptionTraitImpl::expect","core::option::OptionTraitImpl::unwrap","core::ec::EcStateImpl::sub"],"7329":["core::option::OptionTraitImpl::expect","core::option::OptionTraitImpl::unwrap","core::ec::EcStateImpl::sub"],"733":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7330":["core::ec::EcStateImpl::sub"],"7331":["core::ec::EcStateImpl::sub"],"7332":["core::ec::EcStateImpl::sub"],"7333":["core::starknet::storage::StoragePathImpl::new"],"7334":["core::starknet::storage::StoragePathImpl::new"],"7335":["core::starknet::storage::StoragePathImpl::new"],"7336":["core::starknet::storage::StoragePathImpl::new"],"7337":["core::starknet::storage::StoragePathImpl::finalize"],"7338":["core::starknet::storage::StoragePathImpl::finalize"],"7339":["core::starknet::storage::StoragePathImpl::finalize"],"734":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7340":["core::starknet::storage::StoragePathImpl::finalize"],"7341":["core::starknet::storage::StoragePathImpl::finalize"],"7342":["core::starknet::storage::StoragePathImpl::finalize"],"7343":["core::starknet::storage::StoragePathImpl::finalize"],"7344":["core::starknet::storage::StoragePathImpl::new"],"7345":["core::starknet::storage::StoragePathImpl::new"],"7346":["core::starknet::storage::StoragePathImpl::new"],"7347":["core::starknet::storage::StoragePathImpl::new"],"7348":["core::starknet::storage::StoragePathImpl::finalize"],"7349":["core::starknet::storage::StoragePathImpl::finalize"],"735":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7350":["core::starknet::storage::StoragePathImpl::finalize"],"7351":["core::starknet::storage::StoragePathImpl::finalize"],"7352":["core::starknet::storage::StoragePathImpl::finalize"],"7353":["core::starknet::storage::StoragePathImpl::finalize"],"7354":["core::starknet::storage::StoragePathImpl::finalize"],"7355":["core::hash::HashFelt252::update_state"],"7356":["core::hash::HashFelt252::update_state"],"7357":["core::hash::HashFelt252::update_state"],"7358":["core::hash::HashFelt252::update_state"],"7359":["core::hash::HashFelt252::update_state"],"736":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7360":["core::pedersen::HashStateImpl::finalize"],"7361":["core::pedersen::HashStateImpl::finalize"],"7362":["core::pedersen::HashStateImpl::finalize"],"7363":["core::starknet::storage_access::StorePackingBool::unpack"],"7364":["core::starknet::storage_access::StorePackingBool::unpack"],"7365":["core::starknet::storage_access::StorePackingBool::unpack"],"7366":["core::starknet::storage_access::StorePackingBool::unpack"],"7367":["core::starknet::storage_access::StorePackingBool::unpack"],"7368":["core::starknet::storage_access::StorePackingBool::unpack"],"7369":["core::starknet::storage_access::StorePackingBool::unpack"],"737":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7370":["core::starknet::storage_access::StorePackingBool::unpack"],"7371":["core::starknet::storage_access::StorePackingBool::unpack"],"7372":["core::starknet::storage_access::StorePackingBool::pack"],"7373":["core::starknet::storage_access::StorePackingBool::pack"],"7374":["core::starknet::storage_access::StorePackingBool::pack"],"7375":["core::integer::U64IntoFelt252::into"],"7376":["core::integer::U64IntoFelt252::into"],"7377":["core::integer::U64IntoFelt252::into"],"7378":["core::box::BoxImpl::unbox"],"7379":["core::box::BoxImpl::unbox"],"738":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7380":["core::box::BoxImpl::unbox"],"7381":["core::starknet::class_hash::ClassHashSerde::serialize"],"7382":["core::starknet::class_hash::ClassHashSerde::serialize"],"7383":["core::starknet::class_hash::ClassHashSerde::serialize"],"7384":["core::starknet::class_hash::ClassHashSerde::serialize"],"7385":["core::starknet::class_hash::ClassHashSerde::serialize"],"7386":["core::starknet::class_hash::ClassHashSerde::serialize"],"7387":["core::starknet::class_hash::ClassHashSerde::serialize"],"7388":["core::starknet::class_hash::ClassHashSerde::serialize"],"7389":["core::result::ResultTraitImpl::into_is_err"],"739":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7390":["core::result::ResultTraitImpl::into_is_err"],"7391":["core::result::ResultTraitImpl::into_is_err"],"7392":["core::result::ResultTraitImpl::into_is_err"],"7393":["core::result::ResultTraitImpl::into_is_err"],"7394":["core::result::ResultTraitImpl::into_is_err"],"7395":["core::result::ResultTraitImpl::into_is_err"],"7396":["core::result::ResultTraitImpl::into_is_err"],"7397":["core::result::ResultTraitImpl::into_is_err"],"7398":["core::result::ResultTraitImpl::into_is_err"],"7399":["core::result::ResultTraitImpl::into_is_err"],"74":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"740":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7400":["core::result::ResultTraitImpl::into_is_err"],"7401":["core::result::ResultTraitImpl::into_is_err"],"7402":["core::result::ResultTraitImpl::into_is_err"],"7403":["core::result::ResultTraitImpl::into_is_err"],"7404":["core::ec::EcPointImpl::coordinates"],"7405":["core::ec::EcPointImpl::coordinates"],"7406":["core::ec::EcPointImpl::coordinates"],"7407":["core::ec::EcPointImpl::coordinates"],"7408":["core::zeroable::NonZeroIntoImpl::into"],"7409":["core::zeroable::NonZeroIntoImpl::into"],"741":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7410":["core::zeroable::NonZeroIntoImpl::into"],"7411":["core::ec::EcPointTryIntoNonZero::try_into"],"7412":["core::ec::EcPointTryIntoNonZero::try_into"],"7413":["core::ec::EcPointTryIntoNonZero::try_into"],"7414":["core::ec::EcPointTryIntoNonZero::try_into"],"7415":["core::ec::EcPointTryIntoNonZero::try_into"],"7416":["core::ec::EcPointTryIntoNonZero::try_into"],"7417":["core::ec::EcPointTryIntoNonZero::try_into"],"7418":["core::ec::EcPointTryIntoNonZero::try_into"],"7419":["core::ec::EcPointTryIntoNonZero::try_into"],"742":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"7420":["core::ec::EcPointTryIntoNonZero::try_into"],"7421":["core::pedersen::HashStateImpl::update"],"7422":["core::pedersen::HashStateImpl::update"],"7423":["core::pedersen::HashStateImpl::update"],"7424":["core::pedersen::HashStateImpl::update"],"7425":["core::pedersen::HashStateImpl::update"],"7426":["core::pedersen::HashStateImpl::update"],"7427":["core::BoolIntoFelt252::into"],"7428":["core::BoolIntoFelt252::into"],"7429":["core::BoolIntoFelt252::into"],"743":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"744":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"745":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"746":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"747":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"748":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"749":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"75":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"750":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"751":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"752":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"753":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"754":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"755":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"756":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"757":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"758":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"759":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"76":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"760":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"761":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"762":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"763":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"764":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"765":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"766":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"767":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"768":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"769":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"77":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"770":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"771":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"772":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"773":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"774":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"775":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"776":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"777":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"778":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"779":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"78":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"780":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"781":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"782":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"783":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"784":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"785":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"786":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"787":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"788":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"789":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"79":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"790":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"791":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"792":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"793":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"794":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"795":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"796":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"797":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"798":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"799":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"8":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"80":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"800":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"801":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"802":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"803":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"804":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"805":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"806":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"807":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"808":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"809":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"81":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"810":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"811":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"812":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"813":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"814":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"815":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"816":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"817":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"818":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"819":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"82":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"820":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"821":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"822":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"823":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"824":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"825":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"826":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"827":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"828":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"829":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"83":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"830":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"831":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"832":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"833":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_declare__"],"834":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"835":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"836":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"837":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"838":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"839":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"84":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"840":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"841":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"842":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"843":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"844":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"845":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"846":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"847":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"848":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"849":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"85":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"850":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"851":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"852":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"853":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"854":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"855":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"856":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"857":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"858":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"859":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"86":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"860":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"861":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"862":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"863":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"864":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"865":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"866":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"867":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"868":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"869":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"87":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"870":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"871":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"872":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"873":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"874":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"875":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"876":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"877":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"878":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"879":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"88":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"880":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"881":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"882":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"883":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"884":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"885":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"886":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"887":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"888":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"889":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"89":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"890":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"891":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"892":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"893":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"894":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"895":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"896":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"897":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"898":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"899":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"9":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"90":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"900":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"901":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"902":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"903":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"904":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"905":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"906":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"907":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"908":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"909":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"91":["openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"910":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"911":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"912":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"913":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"914":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"915":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"916":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"917":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"918":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"919":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"92":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"920":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"921":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"922":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"923":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"924":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"925":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"926":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"927":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"928":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"929":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"93":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"930":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"931":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"932":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"933":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"934":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"935":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"936":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"937":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"938":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"939":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"94":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"940":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"941":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"942":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"943":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"944":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"945":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"946":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"947":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"948":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"949":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"95":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"950":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"951":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"952":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"953":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"954":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"955":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"956":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"957":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"958":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"959":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"96":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"960":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"961":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"962":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"963":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"964":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"965":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"966":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"967":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"968":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"969":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"97":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"970":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"971":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"972":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"973":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"974":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"975":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"976":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"977":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"978":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"979":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"98":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"980":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"981":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"982":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"983":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"984":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"985":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"986":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"987":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"988":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"989":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"99":["core::option::OptionTraitImpl::expect","openzeppelin_presets::account::AccountUpgradeable::__wrapper__UpgradeableImpl__upgrade"],"990":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"991":["openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"992":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"993":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"994":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"995":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"996":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"997":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"998":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"],"999":["core::option::OptionTraitImpl::expect","openzeppelin_account::account::AccountComponent::__wrapper__AccountMixinImpl____validate_deploy__"]}},"github.com/software-mansion/cairo-coverage":{"statements_code_locations":{"0":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"1":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"10":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"100":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"1000":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"1001":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"1002":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"1003":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"1004":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"1005":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"1006":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"1007":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1008":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1009":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"101":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"1010":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1011":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1012":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1013":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1014":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1015":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1016":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1017":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1018":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1019":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"102":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"1020":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1021":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1022":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1023":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1024":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1025":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1026":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1027":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1028":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1029":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"103":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"1030":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1031":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1032":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1033":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1034":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1035":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1036":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1037":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1038":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1039":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"104":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"1040":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1041":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1042":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1043":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1044":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1045":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1046":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1047":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1048":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1049":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"105":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"1050":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1051":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1052":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1053":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1054":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1055":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1056":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1057":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1058":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1059":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1060":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1061":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1062":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1063":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1064":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1065":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1066":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1067":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1068":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1069":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1070":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1071":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1072":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1073":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1074":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1075":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1076":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1077":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1078":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1079":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"108":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1080":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1081":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1082":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1083":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1084":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1085":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1086":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1087":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1088":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1089":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"109":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1090":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1091":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1092":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1093":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1094":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1095":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"1096":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1097":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1098":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1099":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"11":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"110":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1100":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1101":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1102":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1103":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1104":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1105":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1106":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1107":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1108":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1109":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"111":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1110":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1111":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1112":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1113":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1114":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1115":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1116":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1117":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1118":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1119":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"112":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1120":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1121":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1122":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1123":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1124":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1125":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1126":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1127":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1128":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1129":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"113":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1130":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1131":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1132":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1133":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1134":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1135":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1136":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1137":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1138":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1139":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"114":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1140":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1141":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1142":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1143":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1144":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1145":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1146":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1147":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1148":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1149":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"115":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1150":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1151":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1152":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1153":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1154":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1155":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1156":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1157":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1158":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1159":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"116":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1160":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1161":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1162":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1163":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1164":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1165":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1166":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1167":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1168":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1169":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"117":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1170":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1171":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1172":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1173":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1174":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1175":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1176":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1177":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1178":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1179":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"118":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1180":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1181":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1182":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1183":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1184":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1185":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1186":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1187":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1188":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1189":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"119":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1190":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1191":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1192":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1193":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1194":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1195":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1196":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1197":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1198":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1199":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"12":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"120":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1200":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1201":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1202":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1203":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1204":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1205":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1206":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1207":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1208":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1209":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"121":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1210":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1211":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1212":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1213":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1214":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1215":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1216":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1217":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1218":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1219":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"122":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1220":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1221":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1222":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1223":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1224":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1225":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1226":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1227":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1228":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1229":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"123":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1230":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1231":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1232":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1233":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1234":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1235":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1236":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1237":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1238":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1239":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"124":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1240":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1241":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1242":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1243":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1244":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1245":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1246":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1247":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1248":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1249":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"125":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1250":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1251":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1252":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1253":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1254":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1255":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1256":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"1257":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1258":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1259":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"126":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1260":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1261":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1262":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1263":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1264":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1265":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1266":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1267":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1268":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1269":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"127":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1270":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1271":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1272":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1273":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1274":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1275":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1276":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1277":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1278":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1279":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"128":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1280":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1281":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1282":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1283":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1284":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1285":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1286":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1287":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1288":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1289":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"129":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1290":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1291":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1292":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1293":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1294":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1295":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1296":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1297":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1298":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1299":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"13":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"130":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1300":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1301":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1302":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1303":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1304":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1305":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1306":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1307":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1308":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1309":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"131":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1310":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1311":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1312":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1313":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1314":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1315":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1316":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1317":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1318":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1319":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"132":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1320":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1321":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1322":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1323":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1324":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1325":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1326":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1327":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1328":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1329":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"133":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1330":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1331":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1332":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1333":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1334":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1335":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1336":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1337":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1338":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1339":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"134":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1340":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1341":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1342":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1343":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1344":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1345":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"1346":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1347":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1348":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1349":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"135":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1350":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1351":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1352":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1353":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1354":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1355":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1356":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1357":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1358":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1359":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"136":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1360":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1361":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1362":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1363":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1364":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1365":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1366":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1367":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1368":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1369":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"137":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1370":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1371":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1372":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1373":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1374":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1375":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1376":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1377":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1378":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1379":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"138":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1380":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1381":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1382":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1383":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1384":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1385":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1386":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1387":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1388":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1389":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"139":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1390":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1391":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1392":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1393":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1394":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1395":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1396":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1397":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1398":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1399":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"14":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"140":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1400":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1401":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1402":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1403":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1404":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1405":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1406":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1407":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1408":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1409":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"141":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1410":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1411":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1412":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1413":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1414":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1415":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1416":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1417":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1418":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1419":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"142":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1420":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1421":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1422":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1423":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1424":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1425":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1426":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1427":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1428":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1429":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"143":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1430":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1431":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1432":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1433":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1434":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1435":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1436":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1437":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1438":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1439":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"144":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1440":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1441":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1442":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1443":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1444":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1445":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1446":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1447":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1448":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1449":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"145":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1450":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1451":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1452":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1453":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1454":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1455":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1456":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1457":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1458":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1459":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"146":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1460":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1461":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1462":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1463":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1464":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1465":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1466":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1467":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1468":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1469":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"147":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1470":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1471":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1472":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1473":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1474":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1475":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1476":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1477":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1478":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1479":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"148":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1480":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1481":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1482":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1483":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1484":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1485":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1486":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1487":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1488":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1489":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"149":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1490":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1491":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1492":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1493":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1494":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1495":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1496":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1497":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1498":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1499":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"15":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"150":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1500":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1501":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1502":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1503":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1504":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1505":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1506":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"1507":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1508":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1509":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"151":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1510":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1511":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1512":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1513":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1514":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1515":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1516":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1517":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1518":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1519":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"152":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1520":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1521":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1522":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1523":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1524":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1525":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1526":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1527":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1528":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1529":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"153":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1530":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1531":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1532":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1533":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1534":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1535":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1536":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1537":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1538":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1539":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"154":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1540":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1541":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1542":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1543":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1544":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1545":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1546":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1547":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1548":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1549":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"155":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1550":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1551":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1552":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1553":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1554":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1555":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1556":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1557":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1558":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1559":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"156":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1560":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1561":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1562":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1563":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1564":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1565":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1566":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1567":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1568":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1569":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"157":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1570":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1571":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1572":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1573":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1574":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1575":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1576":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1577":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1578":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1579":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"158":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1580":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1581":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1582":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1583":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1584":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1585":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1586":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1587":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1588":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1589":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"159":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1590":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1591":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1592":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1593":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1594":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1595":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1596":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1597":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1598":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1599":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"16":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"160":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1600":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1601":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1602":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1603":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1604":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1605":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1606":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1607":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1608":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1609":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"161":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1610":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1611":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1612":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1613":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1614":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1615":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1616":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1617":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1618":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1619":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"162":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1620":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1621":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1622":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1623":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1624":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1625":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"1626":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"163":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1631":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1632":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1633":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1634":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1635":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1636":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1637":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1638":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1639":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"164":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1640":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1641":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1642":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1643":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1644":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1645":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1646":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1647":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1648":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1649":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"165":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1650":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1651":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1652":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1653":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1654":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1655":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1656":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1657":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1658":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1659":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"166":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1660":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1661":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1662":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1663":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1664":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1665":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1666":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1667":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1668":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1669":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"167":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1670":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1671":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1672":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1673":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1674":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1675":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1676":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1677":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1678":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1679":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"168":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1680":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1681":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1682":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1683":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1684":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1685":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1686":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1687":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1688":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1689":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"169":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1690":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1691":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1692":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1693":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1694":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1695":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1696":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1697":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1698":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1699":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"17":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"170":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1700":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1701":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1702":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1703":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1704":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1705":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1706":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1707":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1708":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1709":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"171":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1710":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1711":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1712":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1713":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1714":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1715":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1716":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1717":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1718":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1719":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"172":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1720":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1721":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1722":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1723":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1724":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1725":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1726":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1727":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1728":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1729":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"173":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1730":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1731":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1732":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1733":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1734":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1735":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1736":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1737":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1738":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1739":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"174":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1740":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1741":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1742":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1743":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1744":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1745":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1746":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1747":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1748":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1749":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"175":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1750":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1751":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1752":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1753":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1754":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1755":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1756":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1757":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1758":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1759":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"176":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1760":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1761":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1762":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1763":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1764":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1765":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1766":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1767":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1768":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1769":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"177":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1770":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1771":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1772":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1773":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1774":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1775":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1776":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1777":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1778":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1779":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"178":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1780":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1781":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1782":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1783":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1784":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1785":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1786":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1787":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1788":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1789":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"179":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1790":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1791":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1792":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1793":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1794":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1795":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1796":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1797":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1798":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1799":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"18":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"180":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1800":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1801":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1802":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1803":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1804":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1805":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1806":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1807":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1808":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1809":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"181":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1810":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1811":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1812":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1813":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1814":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1815":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1816":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1817":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1818":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1819":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"182":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1820":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1821":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1822":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1823":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1824":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1825":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1826":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1827":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1828":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1829":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"183":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1830":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1831":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1832":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1833":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1834":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1835":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1836":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1837":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1838":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1839":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"184":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1840":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1841":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1842":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1843":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1844":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1845":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1846":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1847":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1848":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1849":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"185":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1850":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"1851":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1852":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1853":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1854":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1855":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1856":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1857":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1858":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1859":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"186":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1860":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1861":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1862":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1863":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1864":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1865":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1866":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1867":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1868":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1869":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"187":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1870":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1871":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1872":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1873":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1874":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1875":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1876":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1877":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1878":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1879":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"188":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1880":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1881":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1882":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1883":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1884":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1885":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1886":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1887":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1888":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1889":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"189":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1890":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1891":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1892":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1893":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1894":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1895":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1896":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1897":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1898":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1899":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"19":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"190":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1900":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1901":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1902":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1903":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1904":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1905":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1906":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1907":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1908":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1909":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"191":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1910":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1911":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1912":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1913":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1914":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1915":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1916":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1917":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1918":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1919":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"192":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1920":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1921":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1922":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1923":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1924":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1925":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1926":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1927":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1928":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1929":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"193":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1930":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1931":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1932":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1933":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1934":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1935":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1936":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1937":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1938":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1939":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"194":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1940":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1941":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1942":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1943":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1944":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1945":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1946":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1947":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1948":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1949":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"195":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1950":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1951":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1952":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1953":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1954":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1955":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1956":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1957":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1958":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1959":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"196":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1960":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1961":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1962":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1963":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1964":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1965":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1966":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1967":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1968":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1969":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"197":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1970":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"1971":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1972":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1973":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1974":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1975":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1976":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1977":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1978":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1979":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"198":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1980":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1981":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1982":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1983":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1984":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1985":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1986":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1987":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1988":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1989":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"199":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"1990":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1991":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1992":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1993":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1994":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1995":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1996":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1997":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1998":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"1999":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"20":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"200":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2000":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2001":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2002":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2003":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2004":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2005":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2006":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2007":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2008":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2009":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"201":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2010":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2011":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2012":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2013":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2014":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2015":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2016":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2017":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2018":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2019":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"202":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2020":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2021":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2022":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2023":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2024":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2025":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2026":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2027":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2028":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2029":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"203":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2030":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2031":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2032":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2033":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2034":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2035":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2036":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2037":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2038":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2039":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"204":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2040":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2041":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2042":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2043":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2044":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2045":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2046":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2047":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2048":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2049":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"205":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2050":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2051":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2052":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2053":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2054":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2055":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2056":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2057":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2058":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2059":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"206":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2060":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2061":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2062":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2063":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2064":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2065":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2066":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2067":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2068":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2069":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"207":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2070":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2071":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2072":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2073":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2074":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2075":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2076":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2077":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2078":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2079":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"208":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2080":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2081":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2082":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2083":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":4,"line":61}}]],"2084":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":94,"line":50},"start":{"col":49,"line":50}}]],"2085":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":94,"line":50},"start":{"col":49,"line":50}}]],"2086":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":95,"line":50},"start":{"col":49,"line":50}}]],"2087":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":95,"line":50},"start":{"col":49,"line":50}}]],"2088":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":97,"line":50},"start":{"col":21,"line":50}}]],"2089":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":97,"line":50},"start":{"col":21,"line":50}}]],"209":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2090":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":97,"line":50},"start":{"col":21,"line":50}}]],"2091":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":98,"line":50},"start":{"col":8,"line":50}}]],"2092":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":98,"line":50},"start":{"col":8,"line":50}}]],"2093":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":98,"line":50},"start":{"col":8,"line":50}}]],"2094":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":98,"line":50},"start":{"col":8,"line":50}}]],"2095":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":97,"line":50},"start":{"col":21,"line":50}}]],"2096":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":97,"line":50},"start":{"col":21,"line":50}}]],"2097":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":97,"line":50},"start":{"col":21,"line":50}}]],"2098":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":97,"line":50},"start":{"col":21,"line":50}}]],"2099":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":97,"line":50},"start":{"col":21,"line":50}}]],"21":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"210":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2100":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":97,"line":50},"start":{"col":21,"line":50}}]],"2101":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":97,"line":50},"start":{"col":21,"line":50}}]],"2102":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":95,"line":50},"start":{"col":49,"line":50}}]],"2103":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":95,"line":50},"start":{"col":49,"line":50}}]],"2104":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":95,"line":50},"start":{"col":49,"line":50}}]],"2105":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":95,"line":50},"start":{"col":49,"line":50}}]],"2106":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":95,"line":50},"start":{"col":49,"line":50}}]],"2107":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":95,"line":50},"start":{"col":49,"line":50}}]],"2108":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":615},"start":{"col":27,"line":615}}]],"2109":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":52,"line":616},"start":{"col":14,"line":616}}]],"211":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2110":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":52,"line":616},"start":{"col":14,"line":616}}]],"2111":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":52,"line":616},"start":{"col":14,"line":616}}]],"2112":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":52,"line":616},"start":{"col":14,"line":616}}]],"2113":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":52,"line":616},"start":{"col":14,"line":616}}]],"2114":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":36,"line":617},"start":{"col":31,"line":617}}]],"2115":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":36,"line":617},"start":{"col":31,"line":617}}]],"2116":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":36,"line":617},"start":{"col":31,"line":617}}]],"2117":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":52,"line":616},"start":{"col":14,"line":616}}]],"2118":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":52,"line":616},"start":{"col":14,"line":616}}]],"2119":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":52,"line":616},"start":{"col":14,"line":616}}]],"212":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2120":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":32,"line":618},"start":{"col":28,"line":618}}]],"2121":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":32,"line":618},"start":{"col":28,"line":618}}]],"2122":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":32,"line":618},"start":{"col":28,"line":618}}]],"2123":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":12,"line":326},"start":{"col":7,"line":326}}]],"2124":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":12,"line":326},"start":{"col":7,"line":326}}]],"2125":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":5,"line":328},"start":{"col":4,"line":326}}]],"2126":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":5,"line":328},"start":{"col":4,"line":326}}]],"2127":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":5,"line":328},"start":{"col":4,"line":326}}]],"2128":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":5,"line":328},"start":{"col":4,"line":326}}]],"2129":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":5,"line":328},"start":{"col":4,"line":326}}]],"213":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2130":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":5,"line":328},"start":{"col":4,"line":326}}]],"2131":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":1,"line":329},"start":{"col":45,"line":325}}]],"2132":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":1,"line":329},"start":{"col":45,"line":325}}]],"2133":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":1,"line":329},"start":{"col":45,"line":325}}]],"2134":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":5,"line":328},"start":{"col":4,"line":326}}]],"2135":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":5,"line":328},"start":{"col":4,"line":326}}]],"2136":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":36,"line":327},"start":{"col":8,"line":327}}]],"2137":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":36,"line":327},"start":{"col":8,"line":327}}]],"2138":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":36,"line":327},"start":{"col":8,"line":327}}]],"2139":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":36,"line":327},"start":{"col":8,"line":327}}]],"214":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2140":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":36,"line":327},"start":{"col":8,"line":327}}]],"2141":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":36,"line":327},"start":{"col":8,"line":327}}]],"2142":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":36,"line":327},"start":{"col":8,"line":327}}]],"2143":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":36,"line":327},"start":{"col":8,"line":327}}]],"2144":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":36,"line":327},"start":{"col":8,"line":327}}]],"2145":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":36,"line":327},"start":{"col":8,"line":327}}]],"2146":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":46,"line":39},"start":{"col":8,"line":38}}]],"2147":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":40,"line":41},"start":{"col":8,"line":40}}]],"2148":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":40,"line":43},"start":{"col":8,"line":42}}]],"2149":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":54,"line":45},"start":{"col":8,"line":44}}]],"215":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2150":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":54,"line":45},"start":{"col":8,"line":44}}]],"2151":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":46},"start":{"col":4,"line":36}}]],"2152":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":24,"line":70},"start":{"col":12,"line":70}}]],"2153":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":24,"line":70},"start":{"col":12,"line":70}}]],"2154":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":43,"line":70},"start":{"col":12,"line":70}}]],"2155":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":43,"line":70},"start":{"col":12,"line":70}}]],"2156":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":43,"line":70},"start":{"col":12,"line":70}}]],"2157":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":43,"line":70},"start":{"col":12,"line":70}}]],"2158":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":43,"line":70},"start":{"col":12,"line":70}}]],"2159":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":43,"line":70},"start":{"col":12,"line":70}}]],"216":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2160":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"2161":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"2162":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"2163":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"2164":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"2165":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"2166":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"2167":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"2168":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"2169":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"217":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2170":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"2171":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":71,"line":69}}]],"2172":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":71,"line":69}}]],"2173":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":71,"line":69}}]],"2174":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":71,"line":69}}]],"2175":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":71,"line":69}}]],"2176":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"2177":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"2178":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"2179":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"218":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2180":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"2181":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"2182":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"2183":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"2184":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":52,"line":71},"start":{"col":12,"line":71}}]],"2185":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":43,"line":70},"start":{"col":12,"line":70}}]],"2186":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":43,"line":70},"start":{"col":12,"line":70}}]],"2187":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":43,"line":70},"start":{"col":12,"line":70}}]],"2188":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":43,"line":70},"start":{"col":12,"line":70}}]],"2189":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":43,"line":70},"start":{"col":12,"line":70}}]],"219":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2190":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":43,"line":70},"start":{"col":12,"line":70}}]],"2191":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":43,"line":70},"start":{"col":12,"line":70}}]],"2192":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":43,"line":70},"start":{"col":12,"line":70}}]],"2193":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":43,"line":70},"start":{"col":12,"line":70}}]],"2194":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":43,"line":70},"start":{"col":12,"line":70}}]],"2195":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":43,"line":70},"start":{"col":12,"line":70}}]],"2196":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":19,"line":121},"start":{"col":8,"line":121}}]],"2197":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":19,"line":121},"start":{"col":8,"line":121}}]],"2198":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":19,"line":121},"start":{"col":8,"line":121}}]],"22":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"220":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2200":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":25,"line":277},"start":{"col":8,"line":277}}]],"2201":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":25,"line":277},"start":{"col":8,"line":277}}]],"2202":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":26,"line":321},"start":{"col":10,"line":321}}]],"2203":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":26,"line":321},"start":{"col":10,"line":321}}]],"2204":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":26,"line":321},"start":{"col":10,"line":321}}]],"2205":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":26,"line":321},"start":{"col":10,"line":321}}]],"2206":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":26,"line":321},"start":{"col":10,"line":321}}]],"2207":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":27,"line":321},"start":{"col":4,"line":321}}]],"2208":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":27,"line":321},"start":{"col":4,"line":321}}]],"2209":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":27,"line":321},"start":{"col":4,"line":321}}]],"221":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2211":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":44,"line":330},"start":{"col":22,"line":330}}]],"2212":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":44,"line":330},"start":{"col":22,"line":330}}]],"2213":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2214":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2215":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":30,"line":331},"start":{"col":22,"line":331}}]],"2216":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2217":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":61,"line":332},"start":{"col":8,"line":332}}]],"2218":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":61,"line":332},"start":{"col":8,"line":332}}]],"2219":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":61,"line":332},"start":{"col":8,"line":332}}]],"222":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2220":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":61,"line":332},"start":{"col":8,"line":332}}]],"2221":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":61,"line":332},"start":{"col":8,"line":332}}]],"2222":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":61,"line":332},"start":{"col":8,"line":332}}]],"2223":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":61,"line":332},"start":{"col":8,"line":332}}]],"2224":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2225":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2226":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2227":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2228":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2229":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"223":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2230":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2231":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2232":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":58,"line":24},"start":{"col":4,"line":22}}]],"2233":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":58,"line":24},"start":{"col":4,"line":22}}]],"2235":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2236":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2237":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2238":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2239":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"224":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2240":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2241":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2243":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":18,"line":316},"start":{"col":8,"line":316}}]],"2244":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":18,"line":316},"start":{"col":8,"line":316}}]],"2245":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":18,"line":316},"start":{"col":8,"line":316}}]],"2246":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":18,"line":316},"start":{"col":8,"line":316}}]],"2247":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":18,"line":316},"start":{"col":8,"line":316}}]],"2248":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":316},"start":{"col":8,"line":316}}]],"2249":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":316},"start":{"col":8,"line":316}}]],"225":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2250":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":42,"line":317},"start":{"col":31,"line":317}}]],"2251":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":42,"line":317},"start":{"col":31,"line":317}}]],"2252":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":55,"line":317},"start":{"col":8,"line":317}}]],"2253":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":55,"line":317},"start":{"col":8,"line":317}}]],"2254":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":55,"line":317},"start":{"col":8,"line":317}}]],"2255":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":55,"line":317},"start":{"col":8,"line":317}}]],"2256":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":55,"line":317},"start":{"col":8,"line":317}}]],"2257":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":55,"line":317},"start":{"col":8,"line":317}}]],"2258":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2259":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"226":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2260":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2261":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2262":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2263":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2264":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2265":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2266":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":27,"line":121},"start":{"col":23,"line":121}}]],"2267":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":28,"line":121},"start":{"col":8,"line":121}}]],"2268":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":28,"line":121},"start":{"col":8,"line":121}}]],"2269":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":28,"line":121},"start":{"col":8,"line":121}}]],"227":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2270":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":43,"line":120},"start":{"col":37,"line":120}}]],"2271":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":46,"line":124},"start":{"col":27,"line":124}}]],"2272":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":66,"line":125},"start":{"col":14,"line":125}}]],"2273":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":66,"line":125},"start":{"col":14,"line":125}}]],"2274":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":39,"line":128},"start":{"col":30,"line":128}}]],"2275":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":39,"line":128},"start":{"col":30,"line":128}}]],"2276":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":39,"line":128},"start":{"col":30,"line":128}}]],"2277":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":39,"line":128},"start":{"col":29,"line":128}}]],"2278":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":39,"line":128},"start":{"col":29,"line":128}}]],"2279":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":40,"line":128},"start":{"col":16,"line":128}}]],"228":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2280":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":40,"line":128},"start":{"col":16,"line":128}}]],"2281":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":40,"line":128},"start":{"col":16,"line":128}}]],"2282":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":66,"line":125},"start":{"col":14,"line":125}}]],"2283":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":66,"line":125},"start":{"col":14,"line":125}}]],"2284":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":28,"line":132},"start":{"col":16,"line":132}}]],"2285":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":28,"line":132},"start":{"col":16,"line":132}}]],"2286":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":28,"line":132},"start":{"col":16,"line":132}}]],"2287":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":28,"line":132},"start":{"col":16,"line":132}}]],"2288":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":28,"line":132},"start":{"col":16,"line":132}}]],"229":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2290":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":44,"line":330},"start":{"col":22,"line":330}}]],"2291":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":44,"line":330},"start":{"col":22,"line":330}}]],"2292":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2293":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2294":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":30,"line":331},"start":{"col":22,"line":331}}]],"2295":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2296":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":61,"line":332},"start":{"col":8,"line":332}}]],"2297":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":61,"line":332},"start":{"col":8,"line":332}}]],"2298":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":61,"line":332},"start":{"col":8,"line":332}}]],"2299":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":61,"line":332},"start":{"col":8,"line":332}}]],"23":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"230":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2300":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":61,"line":332},"start":{"col":8,"line":332}}]],"2301":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":61,"line":332},"start":{"col":8,"line":332}}]],"2302":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":61,"line":332},"start":{"col":8,"line":332}}]],"2303":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2304":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2305":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2306":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2307":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2308":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2309":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"231":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2310":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":330},"start":{"col":22,"line":330}}]],"2311":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"2312":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"2313":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"2314":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"2315":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"2316":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"2317":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"2318":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"2319":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"232":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2320":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"2321":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"2322":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"2323":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"2324":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"2325":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"2326":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"2327":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"2328":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"2329":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"233":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2330":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"2331":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"2332":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"2333":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"2334":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"2335":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"2336":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"2337":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"2338":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"2339":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"234":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2340":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"2341":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"2342":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"2343":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"2344":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"2345":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"2346":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"2347":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"2348":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"2349":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"235":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2350":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"2351":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"2352":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":255},"start":{"col":8,"line":253}}]],"2353":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":50,"line":426},"start":{"col":28,"line":426}}]],"2354":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":50,"line":426},"start":{"col":28,"line":426}}]],"2355":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":51,"line":426},"start":{"col":28,"line":426}}]],"2356":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":51,"line":426},"start":{"col":28,"line":426}}]],"2357":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":51,"line":426},"start":{"col":28,"line":426}}]],"2358":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":63,"line":426},"start":{"col":26,"line":426}}]],"2359":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":63,"line":426},"start":{"col":26,"line":426}}]],"236":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2360":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":63,"line":426},"start":{"col":26,"line":426}}]],"2361":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":64,"line":426},"start":{"col":26,"line":426}}]],"2362":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":64,"line":426},"start":{"col":26,"line":426}}]],"2363":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":64,"line":426},"start":{"col":26,"line":426}}]],"2364":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":427},"start":{"col":18,"line":427}}]],"2365":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":427},"start":{"col":18,"line":427}}]],"2366":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":427},"start":{"col":18,"line":427}}]],"2367":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":427},"start":{"col":18,"line":427}}]],"2368":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":427},"start":{"col":18,"line":427}}]],"2369":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":427},"start":{"col":18,"line":427}}]],"237":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2370":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":427},"start":{"col":18,"line":427}}]],"2371":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":427},"start":{"col":18,"line":427}}]],"2372":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":427},"start":{"col":18,"line":427}}]],"2373":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":62,"line":428},"start":{"col":46,"line":428}}]],"2374":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":62,"line":428},"start":{"col":46,"line":428}}]],"2375":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":62,"line":428},"start":{"col":46,"line":428}}]],"2376":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":428},"start":{"col":46,"line":428}}]],"2377":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":428},"start":{"col":46,"line":428}}]],"2378":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":428},"start":{"col":46,"line":428}}]],"2379":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":428},"start":{"col":46,"line":428}}]],"238":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2380":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":428},"start":{"col":46,"line":428}}]],"2381":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":428},"start":{"col":46,"line":428}}]],"2382":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":428},"start":{"col":46,"line":428}}]],"2383":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":428},"start":{"col":46,"line":428}}]],"2384":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":428},"start":{"col":21,"line":428}}]],"2385":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":428},"start":{"col":21,"line":428}}]],"2386":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":428},"start":{"col":21,"line":428}}]],"2387":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":428},"start":{"col":21,"line":428}}]],"2388":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":428},"start":{"col":21,"line":428}}]],"2389":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":428},"start":{"col":21,"line":428}}]],"239":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2390":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":428},"start":{"col":21,"line":428}}]],"2391":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":427},"start":{"col":18,"line":427}}]],"2392":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":428},"start":{"col":21,"line":428}}]],"2393":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":24,"line":429},"start":{"col":21,"line":429}}]],"2394":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":24,"line":429},"start":{"col":21,"line":429}}]],"2395":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":430},"start":{"col":75,"line":425}}]],"2396":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":430},"start":{"col":75,"line":425}}]],"2397":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":430},"start":{"col":75,"line":425}}]],"2398":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":430},"start":{"col":75,"line":425}}]],"2399":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":428},"start":{"col":21,"line":428}}]],"24":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"240":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2400":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":428},"start":{"col":21,"line":428}}]],"2401":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":428},"start":{"col":21,"line":428}}]],"2402":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":428},"start":{"col":21,"line":428}}]],"2403":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":428},"start":{"col":21,"line":428}}]],"2404":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":428},"start":{"col":21,"line":428}}]],"2405":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":428},"start":{"col":46,"line":428}}]],"2406":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":428},"start":{"col":46,"line":428}}]],"2407":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":428},"start":{"col":46,"line":428}}]],"2408":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":428},"start":{"col":46,"line":428}}]],"2409":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":428},"start":{"col":46,"line":428}}]],"241":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2410":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":428},"start":{"col":46,"line":428}}]],"2411":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":428},"start":{"col":46,"line":428}}]],"2412":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":428},"start":{"col":46,"line":428}}]],"2413":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":427},"start":{"col":18,"line":427}}]],"2414":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":427},"start":{"col":18,"line":427}}]],"2415":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":427},"start":{"col":18,"line":427}}]],"2416":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":427},"start":{"col":18,"line":427}}]],"2417":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":427},"start":{"col":18,"line":427}}]],"2418":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":427},"start":{"col":18,"line":427}}]],"2419":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":427},"start":{"col":18,"line":427}}]],"242":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2420":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":64,"line":426},"start":{"col":26,"line":426}}]],"2421":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":64,"line":426},"start":{"col":26,"line":426}}]],"2422":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":64,"line":426},"start":{"col":26,"line":426}}]],"2423":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":64,"line":426},"start":{"col":26,"line":426}}]],"2424":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":64,"line":426},"start":{"col":26,"line":426}}]],"2425":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":64,"line":426},"start":{"col":26,"line":426}}]],"2426":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":64,"line":426},"start":{"col":26,"line":426}}]],"2427":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":51,"line":426},"start":{"col":28,"line":426}}]],"2428":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":51,"line":426},"start":{"col":28,"line":426}}]],"2429":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":51,"line":426},"start":{"col":28,"line":426}}]],"243":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2430":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":51,"line":426},"start":{"col":28,"line":426}}]],"2431":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":51,"line":426},"start":{"col":28,"line":426}}]],"2432":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":51,"line":426},"start":{"col":28,"line":426}}]],"2433":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":51,"line":426},"start":{"col":28,"line":426}}]],"2434":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2435":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2436":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2437":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2438":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2439":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"244":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2440":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2441":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2442":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2443":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2444":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2445":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2446":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2447":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2448":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2449":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"245":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2450":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2451":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2452":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2453":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2454":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2455":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2456":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2457":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2458":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2459":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"246":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2460":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2461":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2462":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2463":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2464":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2465":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":263},"start":{"col":8,"line":257}}]],"2466":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"2467":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"2468":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"2469":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"247":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2470":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"2471":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":268},"start":{"col":8,"line":266}}]],"2472":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2473":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2474":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2475":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2476":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2477":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2478":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2479":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"248":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2480":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2481":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2482":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2483":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2484":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2485":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2486":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2487":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2488":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2489":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"249":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2490":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2491":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2492":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2493":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2494":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2495":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2496":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2497":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2498":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2499":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"25":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"250":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2500":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2501":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2502":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2503":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":276},"start":{"col":8,"line":270}}]],"2504":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"2505":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"2506":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"2507":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"2508":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"2509":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"251":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":216},"start":{"col":8,"line":212}}]],"2510":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"2511":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":284},"start":{"col":8,"line":279}}]],"2512":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":16,"line":22},"start":{"col":12,"line":22}}]],"2513":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":26},"start":{"col":8,"line":22}}]],"2514":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":26},"start":{"col":8,"line":22}}]],"2515":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":26},"start":{"col":8,"line":22}}]],"2516":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":26},"start":{"col":8,"line":22}}]],"2517":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":21,"line":25},"start":{"col":12,"line":25}}]],"2518":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":21,"line":25},"start":{"col":12,"line":25}}]],"2519":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":26},"start":{"col":8,"line":22}}]],"252":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2520":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":26},"start":{"col":8,"line":22}}]],"2521":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":26},"start":{"col":8,"line":22}}]],"2522":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":21,"line":23},"start":{"col":12,"line":23}}]],"2523":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":26},"start":{"col":8,"line":22}}]],"2524":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":26},"start":{"col":8,"line":22}}]],"2525":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":31,"line":26},"start":{"col":8,"line":22}}]],"2526":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":31,"line":26},"start":{"col":8,"line":22}}]],"2527":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":40,"line":21},"start":{"col":34,"line":21}}]],"253":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2534":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2535":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2536":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2537":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2538":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2539":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"254":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2540":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2541":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2542":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2543":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2544":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2545":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2546":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2547":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2548":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2549":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"255":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2550":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2551":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2552":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2553":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2554":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2555":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2556":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2557":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2558":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2559":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"256":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2560":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2561":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2562":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2563":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2564":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2565":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2566":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2567":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2568":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2569":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"257":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2570":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2571":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2572":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2573":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2574":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2575":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2576":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2577":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2578":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2579":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"258":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2580":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2581":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2582":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2583":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2584":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2585":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2586":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2587":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2588":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2589":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"259":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2590":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2591":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2592":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2593":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2594":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2595":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2596":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2597":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2598":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2599":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"26":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"260":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2600":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2601":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2602":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2603":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2604":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2605":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2606":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2607":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2608":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2609":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"261":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2610":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2611":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2612":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2613":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2614":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2615":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2616":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2617":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2618":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2619":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"262":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2620":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2621":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2622":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2623":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2624":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2625":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2626":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2627":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2628":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2629":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"263":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2630":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2631":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2632":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2633":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2634":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2635":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2636":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2637":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2638":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2639":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"264":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2640":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2641":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2642":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2643":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/interface.cairo",{"end":{"col":26,"line":8},"start":{"col":21,"line":8}}]],"2644":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":61,"line":30},"start":{"col":4,"line":28}}]],"2645":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":61,"line":30},"start":{"col":4,"line":28}}]],"2647":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2648":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2649":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"265":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2650":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2651":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2652":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2653":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2654":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2655":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2656":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2657":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2658":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2659":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"266":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2660":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2661":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2662":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2663":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2664":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2665":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2666":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2667":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2668":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2669":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"267":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2670":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2671":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2672":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2673":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2674":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2675":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2676":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2677":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2678":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":8,"line":77}}]],"2679":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"268":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2680":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"2681":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"2682":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"2683":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"2684":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"2685":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"2686":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":8,"line":121}}]],"2687":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":20,"line":63},"start":{"col":8,"line":63}}]],"2688":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2689":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"269":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2690":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2691":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2692":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2693":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2694":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2695":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2696":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2697":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2698":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2699":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"27":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"270":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2700":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2701":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2702":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2703":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2704":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2705":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2706":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2707":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2708":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2709":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"271":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2710":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":69,"line":62}}]],"2711":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":69,"line":62}}]],"2712":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":69,"line":62}}]],"2713":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":69,"line":62}}]],"2714":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":69,"line":62}}]],"2715":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":69,"line":62}}]],"2716":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":5,"line":65},"start":{"col":69,"line":62}}]],"2717":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2718":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2719":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"272":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2720":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2721":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2722":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2723":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2724":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2725":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2726":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2727":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":31,"line":64},"start":{"col":8,"line":64}}]],"2728":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2729":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"273":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2730":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2731":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2732":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2733":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2734":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2735":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2736":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2737":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2738":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":44,"line":63},"start":{"col":8,"line":63}}]],"2739":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":35,"line":56},"start":{"col":19,"line":56}}]],"274":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2740":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":57},"start":{"col":8,"line":57}}]],"2741":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":57},"start":{"col":8,"line":57}}]],"2743":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":5,"line":22},"start":{"col":4,"line":19}}]],"2745":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":5,"line":14},"start":{"col":4,"line":11}}]],"2747":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":5,"line":25},"start":{"col":4,"line":22}}]],"2749":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":25,"line":12},"start":{"col":4,"line":11}}]],"275":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2751":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":309},"start":{"col":25,"line":309}}]],"2752":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":309},"start":{"col":25,"line":309}}]],"2753":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":309},"start":{"col":25,"line":309}}]],"2754":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":309},"start":{"col":25,"line":309}}]],"2755":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":309},"start":{"col":25,"line":309}}]],"2756":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":310},"start":{"col":23,"line":310}}]],"2757":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":310},"start":{"col":23,"line":310}}]],"2758":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":310},"start":{"col":23,"line":310}}]],"2759":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":310},"start":{"col":23,"line":310}}]],"276":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2760":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":310},"start":{"col":23,"line":310}}]],"2761":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":309},"start":{"col":25,"line":309}}]],"2762":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":310},"start":{"col":23,"line":310}}]],"2763":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":23,"line":311},"start":{"col":19,"line":311}}]],"2764":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":23,"line":311},"start":{"col":19,"line":311}}]],"2765":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":33,"line":311},"start":{"col":27,"line":311}}]],"2766":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":33,"line":311},"start":{"col":27,"line":311}}]],"2767":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":33,"line":311},"start":{"col":19,"line":311}}]],"2768":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":33,"line":311},"start":{"col":19,"line":311}}]],"2769":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":33,"line":311},"start":{"col":19,"line":311}}]],"277":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2770":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":33,"line":311},"start":{"col":19,"line":311}}]],"2771":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":56,"line":311},"start":{"col":12,"line":311}}]],"2772":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":56,"line":311},"start":{"col":12,"line":311}}]],"2773":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":56,"line":311},"start":{"col":12,"line":311}}]],"2774":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":56,"line":311},"start":{"col":12,"line":311}}]],"2775":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":56,"line":311},"start":{"col":12,"line":311}}]],"2776":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":56,"line":311},"start":{"col":12,"line":311}}]],"2777":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":310},"start":{"col":23,"line":310}}]],"2778":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":310},"start":{"col":23,"line":310}}]],"2779":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":310},"start":{"col":23,"line":310}}]],"278":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2780":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":310},"start":{"col":23,"line":310}}]],"2781":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":310},"start":{"col":23,"line":310}}]],"2782":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":310},"start":{"col":23,"line":310}}]],"2783":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":310},"start":{"col":23,"line":310}}]],"2784":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":309},"start":{"col":25,"line":309}}]],"2785":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":309},"start":{"col":25,"line":309}}]],"2786":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":309},"start":{"col":25,"line":309}}]],"2787":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":309},"start":{"col":25,"line":309}}]],"2788":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":309},"start":{"col":25,"line":309}}]],"2789":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":309},"start":{"col":25,"line":309}}]],"279":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2790":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":33,"line":46},"start":{"col":19,"line":46}}]],"2791":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":47,"line":46},"start":{"col":19,"line":46}}]],"2792":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":47,"line":46},"start":{"col":19,"line":46}}]],"2793":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":47,"line":46},"start":{"col":19,"line":46}}]],"2794":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":71,"line":46},"start":{"col":12,"line":46}}]],"2795":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":71,"line":46},"start":{"col":12,"line":46}}]],"2796":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":71,"line":46},"start":{"col":12,"line":46}}]],"2797":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":71,"line":46},"start":{"col":12,"line":46}}]],"2798":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":71,"line":46},"start":{"col":12,"line":46}}]],"2799":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":69,"line":47},"start":{"col":12,"line":47}}]],"28":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"280":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2800":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":69,"line":47},"start":{"col":12,"line":47}}]],"2801":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":69,"line":47},"start":{"col":12,"line":47}}]],"2802":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":69,"line":47},"start":{"col":12,"line":47}}]],"2803":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":69,"line":47},"start":{"col":12,"line":47}}]],"2804":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":69,"line":47},"start":{"col":12,"line":47}}]],"2805":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":69,"line":47},"start":{"col":12,"line":47}}]],"2806":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":69,"line":47},"start":{"col":12,"line":47}}]],"2807":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":69,"line":47},"start":{"col":12,"line":47}}]],"2808":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":69,"line":47},"start":{"col":12,"line":47}}]],"2809":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":69,"line":47},"start":{"col":12,"line":47}}]],"281":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2810":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":69,"line":47},"start":{"col":12,"line":47}}]],"2811":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":69,"line":47},"start":{"col":12,"line":47}}]],"2812":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":69,"line":47},"start":{"col":12,"line":47}}]],"2813":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":86,"line":47},"start":{"col":12,"line":47}}]],"2814":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":86,"line":47},"start":{"col":12,"line":47}}]],"2815":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":86,"line":47},"start":{"col":12,"line":47}}]],"2816":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":86,"line":47},"start":{"col":12,"line":47}}]],"2817":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":86,"line":47},"start":{"col":12,"line":47}}]],"2818":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":62,"line":48},"start":{"col":12,"line":48}}]],"2819":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":62,"line":48},"start":{"col":12,"line":48}}]],"282":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2820":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":62,"line":48},"start":{"col":12,"line":48}}]],"2821":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":62,"line":48},"start":{"col":12,"line":48}}]],"2822":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":62,"line":48},"start":{"col":12,"line":48}}]],"2823":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":86,"line":47},"start":{"col":12,"line":47}}]],"2824":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":86,"line":47},"start":{"col":12,"line":47}}]],"2825":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":86,"line":47},"start":{"col":12,"line":47}}]],"2826":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":86,"line":47},"start":{"col":12,"line":47}}]],"2827":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":86,"line":47},"start":{"col":12,"line":47}}]],"2828":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":86,"line":47},"start":{"col":12,"line":47}}]],"2829":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":86,"line":47},"start":{"col":12,"line":47}}]],"283":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2830":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":86,"line":47},"start":{"col":12,"line":47}}]],"2831":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":71,"line":46},"start":{"col":12,"line":46}}]],"2832":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":71,"line":46},"start":{"col":12,"line":46}}]],"2833":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":71,"line":46},"start":{"col":12,"line":46}}]],"2834":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":71,"line":46},"start":{"col":12,"line":46}}]],"2835":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":71,"line":46},"start":{"col":12,"line":46}}]],"2836":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":71,"line":46},"start":{"col":12,"line":46}}]],"2837":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":71,"line":46},"start":{"col":12,"line":46}}]],"2838":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":71,"line":46},"start":{"col":12,"line":46}}]],"2839":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":37,"line":135},"start":{"col":8,"line":135}}]],"284":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2840":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":22,"line":134},"start":{"col":18,"line":134}}]],"2841":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":22,"line":134},"start":{"col":18,"line":134}}]],"2842":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":479},"start":{"col":27,"line":479}}]],"2843":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"2844":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"2845":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"2846":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"2847":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"2848":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"2849":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"285":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2850":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"2851":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"2852":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"2853":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"2854":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"2855":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":485},"start":{"col":8,"line":482}}]],"2856":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":485},"start":{"col":8,"line":482}}]],"2857":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":483},"start":{"col":44,"line":483}}]],"2858":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":483},"start":{"col":44,"line":483}}]],"2859":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":483},"start":{"col":44,"line":483}}]],"286":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2860":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":54,"line":483},"start":{"col":31,"line":483}}]],"2861":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":54,"line":483},"start":{"col":31,"line":483}}]],"2862":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":54,"line":483},"start":{"col":31,"line":483}}]],"2863":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":485},"start":{"col":8,"line":482}}]],"2864":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":485},"start":{"col":8,"line":482}}]],"2865":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":485},"start":{"col":8,"line":482}}]],"2866":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":484},"start":{"col":28,"line":484}}]],"2867":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":484},"start":{"col":28,"line":484}}]],"2868":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":484},"start":{"col":28,"line":484}}]],"2869":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":484},"start":{"col":28,"line":484}}]],"287":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2870":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":19,"line":121},"start":{"col":8,"line":121}}]],"2871":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":19,"line":121},"start":{"col":8,"line":121}}]],"2872":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":19,"line":121},"start":{"col":8,"line":121}}]],"2874":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"2875":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"2876":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":16,"line":349},"start":{"col":7,"line":349}}]],"2877":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":16,"line":349},"start":{"col":7,"line":349}}]],"2878":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":21,"line":349},"start":{"col":20,"line":349}}]],"2879":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":21,"line":349},"start":{"col":20,"line":349}}]],"288":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2880":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":21,"line":349},"start":{"col":7,"line":349}}]],"2881":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":21,"line":349},"start":{"col":7,"line":349}}]],"2882":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":21,"line":349},"start":{"col":7,"line":349}}]],"2883":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":351},"start":{"col":4,"line":349}}]],"2884":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":351},"start":{"col":4,"line":349}}]],"2885":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":351},"start":{"col":4,"line":349}}]],"2886":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":351},"start":{"col":4,"line":349}}]],"2887":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":352},"start":{"col":23,"line":352}}]],"2888":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":352},"start":{"col":23,"line":352}}]],"2889":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":352},"start":{"col":23,"line":352}}]],"289":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2890":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":352},"start":{"col":23,"line":352}}]],"2891":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":352},"start":{"col":23,"line":352}}]],"2892":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":352},"start":{"col":23,"line":352}}]],"2893":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"2894":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"2895":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":59,"line":352},"start":{"col":4,"line":352}}]],"2896":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":59,"line":352},"start":{"col":4,"line":352}}]],"2897":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":59,"line":352},"start":{"col":4,"line":352}}]],"2898":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":59,"line":352},"start":{"col":4,"line":352}}]],"2899":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":353},"start":{"col":58,"line":353}}]],"29":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"290":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2900":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":353},"start":{"col":58,"line":353}}]],"2901":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":353},"start":{"col":58,"line":353}}]],"2902":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":353},"start":{"col":4,"line":353}}]],"2903":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":353},"start":{"col":4,"line":353}}]],"2904":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":353},"start":{"col":4,"line":353}}]],"2905":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":353},"start":{"col":4,"line":353}}]],"2906":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":353},"start":{"col":4,"line":353}}]],"2907":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":353},"start":{"col":4,"line":353}}]],"2908":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":353},"start":{"col":4,"line":353}}]],"2909":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"291":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2910":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"2911":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"2912":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"2913":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"2914":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"2915":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"2916":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"2917":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"2918":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"2919":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":352},"start":{"col":23,"line":352}}]],"292":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2920":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":352},"start":{"col":23,"line":352}}]],"2921":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":352},"start":{"col":23,"line":352}}]],"2922":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":352},"start":{"col":23,"line":352}}]],"2923":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":352},"start":{"col":23,"line":352}}]],"2924":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":352},"start":{"col":23,"line":352}}]],"2925":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":352},"start":{"col":23,"line":352}}]],"2926":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":352},"start":{"col":23,"line":352}}]],"2927":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":351},"start":{"col":4,"line":349}}]],"2928":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":351},"start":{"col":4,"line":349}}]],"2929":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":351},"start":{"col":4,"line":349}}]],"293":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2930":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":350},"start":{"col":28,"line":350}}]],"2931":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":350},"start":{"col":28,"line":350}}]],"2932":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":41,"line":350},"start":{"col":8,"line":350}}]],"2933":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":41,"line":350},"start":{"col":8,"line":350}}]],"2934":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":41,"line":350},"start":{"col":8,"line":350}}]],"2935":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":41,"line":350},"start":{"col":8,"line":350}}]],"2936":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":41,"line":350},"start":{"col":8,"line":350}}]],"2937":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"2938":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"2939":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"294":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2940":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"2941":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"2942":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"2943":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"2944":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"2945":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"2946":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"2947":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"2948":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"2949":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"295":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2950":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"2951":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"2953":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"2954":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"2955":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"2956":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"2958":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":42,"line":215},"start":{"col":12,"line":215}}]],"2959":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":42,"line":215},"start":{"col":12,"line":215}}]],"296":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2960":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":42,"line":215},"start":{"col":12,"line":215}}]],"2961":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":42,"line":215},"start":{"col":12,"line":215}}]],"2962":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":42,"line":215},"start":{"col":12,"line":215}}]],"2963":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":42,"line":215},"start":{"col":12,"line":215}}]],"2964":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":23,"line":243},"start":{"col":8,"line":243}}]],"2965":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":23,"line":243},"start":{"col":8,"line":243}}]],"2966":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":23,"line":243},"start":{"col":8,"line":243}}]],"2967":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":32,"line":211},"start":{"col":28,"line":211}}]],"2968":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":40,"line":211},"start":{"col":26,"line":211}}]],"2969":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":40,"line":211},"start":{"col":26,"line":211}}]],"297":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2970":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":41,"line":211},"start":{"col":12,"line":211}}]],"2971":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":41,"line":211},"start":{"col":12,"line":211}}]],"2972":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":41,"line":211},"start":{"col":12,"line":211}}]],"2973":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":41,"line":210},"start":{"col":35,"line":210}}]],"2974":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":30,"line":650},"start":{"col":8,"line":650}}]],"2975":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":30,"line":650},"start":{"col":8,"line":650}}]],"2976":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":30,"line":650},"start":{"col":8,"line":650}}]],"298":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2980":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"2981":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"2982":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":27,"line":337},"start":{"col":10,"line":337}}]],"2983":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":27,"line":337},"start":{"col":10,"line":337}}]],"2984":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":343},"start":{"col":4,"line":337}}]],"2985":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":343},"start":{"col":4,"line":337}}]],"2986":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":343},"start":{"col":4,"line":337}}]],"2987":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":343},"start":{"col":4,"line":337}}]],"2988":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"2989":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"299":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"2990":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"2991":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"2992":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"2993":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"2994":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"2995":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"2996":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"2997":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":340},"start":{"col":12,"line":340}}]],"2998":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":340},"start":{"col":12,"line":340}}]],"2999":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":340},"start":{"col":12,"line":340}}]],"3":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"30":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"300":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3000":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":340},"start":{"col":12,"line":340}}]],"3001":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":340},"start":{"col":12,"line":340}}]],"3002":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":340},"start":{"col":12,"line":340}}]],"3003":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"3004":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"3005":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"3006":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"3007":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"3008":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"3009":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"301":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3010":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":343},"start":{"col":4,"line":337}}]],"3011":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":343},"start":{"col":4,"line":337}}]],"3012":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":343},"start":{"col":4,"line":337}}]],"3013":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":343},"start":{"col":4,"line":337}}]],"3014":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":343},"start":{"col":4,"line":337}}]],"3015":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":98,"line":336}}]],"3016":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":98,"line":336}}]],"3017":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":98,"line":336}}]],"3018":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":98,"line":336}}]],"3019":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":98,"line":336}}]],"302":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3020":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"3021":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"3022":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"3023":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"3024":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"3025":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"3026":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"3027":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"3028":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"3029":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"303":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3030":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"3031":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"3032":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"3033":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"3034":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"3035":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":43,"line":219},"start":{"col":12,"line":219}}]],"3036":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":43,"line":219},"start":{"col":12,"line":219}}]],"3037":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":43,"line":219},"start":{"col":12,"line":219}}]],"3038":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":43,"line":219},"start":{"col":12,"line":219}}]],"3039":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":43,"line":219},"start":{"col":12,"line":219}}]],"304":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3040":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":43,"line":219},"start":{"col":12,"line":219}}]],"3041":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":43,"line":219},"start":{"col":12,"line":219}}]],"3042":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":19,"line":81},"start":{"col":8,"line":81}}]],"3043":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":19,"line":81},"start":{"col":8,"line":81}}]],"3044":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":19,"line":81},"start":{"col":8,"line":81}}]],"3046":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"3047":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"3048":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":16,"line":349},"start":{"col":7,"line":349}}]],"3049":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":16,"line":349},"start":{"col":7,"line":349}}]],"305":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3050":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":21,"line":349},"start":{"col":20,"line":349}}]],"3051":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":21,"line":349},"start":{"col":20,"line":349}}]],"3052":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":21,"line":349},"start":{"col":7,"line":349}}]],"3053":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":21,"line":349},"start":{"col":7,"line":349}}]],"3054":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":21,"line":349},"start":{"col":7,"line":349}}]],"3055":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":351},"start":{"col":4,"line":349}}]],"3056":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":351},"start":{"col":4,"line":349}}]],"3057":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":351},"start":{"col":4,"line":349}}]],"3058":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":351},"start":{"col":4,"line":349}}]],"3059":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":352},"start":{"col":23,"line":352}}]],"306":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3060":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":352},"start":{"col":23,"line":352}}]],"3061":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"3062":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"3063":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":59,"line":352},"start":{"col":4,"line":352}}]],"3064":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":59,"line":352},"start":{"col":4,"line":352}}]],"3065":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":59,"line":352},"start":{"col":4,"line":352}}]],"3066":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":59,"line":352},"start":{"col":4,"line":352}}]],"3067":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":353},"start":{"col":58,"line":353}}]],"3068":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":353},"start":{"col":58,"line":353}}]],"3069":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":71,"line":353},"start":{"col":58,"line":353}}]],"307":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3070":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":353},"start":{"col":4,"line":353}}]],"3071":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":353},"start":{"col":4,"line":353}}]],"3072":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":353},"start":{"col":4,"line":353}}]],"3073":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":353},"start":{"col":4,"line":353}}]],"3074":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":353},"start":{"col":4,"line":353}}]],"3075":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":353},"start":{"col":4,"line":353}}]],"3076":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":72,"line":353},"start":{"col":4,"line":353}}]],"3077":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"3078":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"3079":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"308":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3080":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"3081":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"3082":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"3083":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"3084":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"3085":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"3086":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":58,"line":352},"start":{"col":23,"line":352}}]],"3087":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":351},"start":{"col":4,"line":349}}]],"3088":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":351},"start":{"col":4,"line":349}}]],"3089":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":351},"start":{"col":4,"line":349}}]],"309":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3090":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":350},"start":{"col":28,"line":350}}]],"3091":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":350},"start":{"col":28,"line":350}}]],"3092":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":41,"line":350},"start":{"col":8,"line":350}}]],"3093":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":41,"line":350},"start":{"col":8,"line":350}}]],"3094":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":41,"line":350},"start":{"col":8,"line":350}}]],"3095":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":41,"line":350},"start":{"col":8,"line":350}}]],"3096":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":41,"line":350},"start":{"col":8,"line":350}}]],"3097":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"3098":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"3099":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"31":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"310":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3100":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"3101":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"3102":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"3103":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"3104":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"3105":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"3106":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"3107":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"3108":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"3109":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"311":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3110":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"3111":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":354},"start":{"col":0,"line":346}}]],"3112":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":225},"start":{"col":12,"line":225}}]],"3113":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":225},"start":{"col":12,"line":225}}]],"3114":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":225},"start":{"col":12,"line":225}}]],"3115":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":225},"start":{"col":12,"line":225}}]],"3116":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":225},"start":{"col":12,"line":225}}]],"3117":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":225},"start":{"col":12,"line":225}}]],"3118":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":225},"start":{"col":12,"line":225}}]],"3119":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":225},"start":{"col":12,"line":225}}]],"312":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3120":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":232},"start":{"col":12,"line":232}}]],"3121":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":232},"start":{"col":12,"line":232}}]],"3122":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":232},"start":{"col":12,"line":232}}]],"3123":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":232},"start":{"col":12,"line":232}}]],"3124":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":232},"start":{"col":12,"line":232}}]],"3125":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":232},"start":{"col":12,"line":232}}]],"3126":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":232},"start":{"col":12,"line":232}}]],"3127":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":232},"start":{"col":12,"line":232}}]],"3128":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":239},"start":{"col":12,"line":239}}]],"3129":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":239},"start":{"col":12,"line":239}}]],"313":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3130":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":239},"start":{"col":12,"line":239}}]],"3131":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":239},"start":{"col":12,"line":239}}]],"3132":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":239},"start":{"col":12,"line":239}}]],"3133":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":239},"start":{"col":12,"line":239}}]],"3134":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":239},"start":{"col":12,"line":239}}]],"3135":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":96,"line":249},"start":{"col":12,"line":249}}]],"3136":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":96,"line":249},"start":{"col":12,"line":249}}]],"3137":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":96,"line":249},"start":{"col":12,"line":249}}]],"3138":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":96,"line":249},"start":{"col":12,"line":249}}]],"3139":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":96,"line":249},"start":{"col":12,"line":249}}]],"314":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3140":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":96,"line":249},"start":{"col":12,"line":249}}]],"3141":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":96,"line":249},"start":{"col":12,"line":249}}]],"3142":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":96,"line":249},"start":{"col":12,"line":249}}]],"3143":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":96,"line":249},"start":{"col":12,"line":249}}]],"3144":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":43,"line":254},"start":{"col":12,"line":254}}]],"3145":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":43,"line":254},"start":{"col":12,"line":254}}]],"3146":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":43,"line":254},"start":{"col":12,"line":254}}]],"3147":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":43,"line":254},"start":{"col":12,"line":254}}]],"3148":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":43,"line":254},"start":{"col":12,"line":254}}]],"3149":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1184},"start":{"col":8,"line":1184}}]],"315":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3150":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1184},"start":{"col":8,"line":1184}}]],"3151":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1184},"start":{"col":8,"line":1184}}]],"3152":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1184},"start":{"col":8,"line":1184}}]],"3153":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1184},"start":{"col":8,"line":1184}}]],"3154":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1184},"start":{"col":8,"line":1184}}]],"3155":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1184},"start":{"col":8,"line":1184}}]],"3156":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1184},"start":{"col":8,"line":1184}}]],"3157":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1184},"start":{"col":8,"line":1184}}]],"3158":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1184},"start":{"col":8,"line":1184}}]],"3159":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1184},"start":{"col":8,"line":1184}}]],"316":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3160":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1184},"start":{"col":8,"line":1184}}]],"3161":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":50,"line":585},"start":{"col":37,"line":585}}]],"3162":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":66,"line":585},"start":{"col":25,"line":585}}]],"3163":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":66,"line":585},"start":{"col":25,"line":585}}]],"3164":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":66,"line":585},"start":{"col":25,"line":585}}]],"3165":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":66,"line":585},"start":{"col":25,"line":585}}]],"3166":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":586},"start":{"col":68,"line":584}}]],"3167":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":586},"start":{"col":68,"line":584}}]],"3168":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":586},"start":{"col":68,"line":584}}]],"3169":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":586},"start":{"col":68,"line":584}}]],"317":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3170":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":66,"line":585},"start":{"col":25,"line":585}}]],"3171":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":66,"line":585},"start":{"col":25,"line":585}}]],"3172":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":96,"line":585},"start":{"col":25,"line":585}}]],"3173":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":96,"line":585},"start":{"col":25,"line":585}}]],"3174":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":96,"line":585},"start":{"col":25,"line":585}}]],"3175":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":96,"line":585},"start":{"col":25,"line":585}}]],"3176":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":96,"line":585},"start":{"col":25,"line":585}}]],"3177":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":96,"line":585},"start":{"col":25,"line":585}}]],"3178":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":96,"line":585},"start":{"col":25,"line":585}}]],"3179":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":96,"line":585},"start":{"col":25,"line":585}}]],"318":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3180":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":96,"line":585},"start":{"col":25,"line":585}}]],"3181":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":96,"line":585},"start":{"col":25,"line":585}}]],"3182":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":96,"line":585},"start":{"col":25,"line":585}}]],"3183":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":96,"line":585},"start":{"col":25,"line":585}}]],"3184":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":31,"line":599},"start":{"col":18,"line":599}}]],"3185":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":32,"line":599},"start":{"col":8,"line":599}}]],"3186":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":32,"line":599},"start":{"col":8,"line":599}}]],"3187":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":32,"line":599},"start":{"col":8,"line":599}}]],"3188":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":604},"start":{"col":8,"line":604}}]],"3189":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":604},"start":{"col":8,"line":604}}]],"319":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3190":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":604},"start":{"col":8,"line":604}}]],"3191":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":604},"start":{"col":8,"line":604}}]],"3192":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":604},"start":{"col":8,"line":604}}]],"3193":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":604},"start":{"col":8,"line":604}}]],"3194":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":604},"start":{"col":8,"line":604}}]],"3195":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":604},"start":{"col":8,"line":604}}]],"3196":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":604},"start":{"col":8,"line":604}}]],"3197":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":604},"start":{"col":8,"line":604}}]],"3198":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":604},"start":{"col":8,"line":604}}]],"3199":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":64,"line":604},"start":{"col":8,"line":604}}]],"32":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"320":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3200":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":64,"line":604},"start":{"col":8,"line":604}}]],"3201":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":64,"line":604},"start":{"col":8,"line":604}}]],"3202":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":64,"line":604},"start":{"col":8,"line":604}}]],"3203":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":64,"line":604},"start":{"col":8,"line":604}}]],"3204":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"3205":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"3206":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":74,"line":262},"start":{"col":12,"line":262}}]],"3207":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":74,"line":262},"start":{"col":12,"line":262}}]],"3208":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":74,"line":262},"start":{"col":12,"line":262}}]],"3209":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":74,"line":262},"start":{"col":12,"line":262}}]],"321":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3210":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":74,"line":262},"start":{"col":12,"line":262}}]],"3211":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":74,"line":262},"start":{"col":12,"line":262}}]],"3212":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":74,"line":262},"start":{"col":12,"line":262}}]],"3213":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":74,"line":262},"start":{"col":12,"line":262}}]],"3214":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":74,"line":262},"start":{"col":12,"line":262}}]],"3215":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":46,"line":267},"start":{"col":12,"line":267}}]],"3216":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":46,"line":267},"start":{"col":12,"line":267}}]],"3217":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":46,"line":267},"start":{"col":12,"line":267}}]],"3218":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":46,"line":267},"start":{"col":12,"line":267}}]],"3219":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":46,"line":267},"start":{"col":12,"line":267}}]],"322":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3220":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":75,"line":275},"start":{"col":12,"line":275}}]],"3221":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":75,"line":275},"start":{"col":12,"line":275}}]],"3222":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":75,"line":275},"start":{"col":12,"line":275}}]],"3223":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":75,"line":275},"start":{"col":12,"line":275}}]],"3224":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":75,"line":275},"start":{"col":12,"line":275}}]],"3225":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":75,"line":275},"start":{"col":12,"line":275}}]],"3226":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":75,"line":275},"start":{"col":12,"line":275}}]],"3227":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":75,"line":275},"start":{"col":12,"line":275}}]],"3228":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":75,"line":275},"start":{"col":12,"line":275}}]],"3229":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":53,"line":282},"start":{"col":23,"line":282}}]],"323":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3230":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":53,"line":282},"start":{"col":23,"line":282}}]],"3231":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":283},"start":{"col":12,"line":283}}]],"3232":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":283},"start":{"col":12,"line":283}}]],"3233":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":283},"start":{"col":12,"line":283}}]],"3234":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":283},"start":{"col":12,"line":283}}]],"3235":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":283},"start":{"col":12,"line":283}}]],"3236":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":283},"start":{"col":12,"line":283}}]],"3237":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":283},"start":{"col":12,"line":283}}]],"3238":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":91,"line":55},"start":{"col":46,"line":55}}]],"3239":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":91,"line":55},"start":{"col":46,"line":55}}]],"324":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3240":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":92,"line":55},"start":{"col":46,"line":55}}]],"3241":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":92,"line":55},"start":{"col":46,"line":55}}]],"3242":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":94,"line":55},"start":{"col":12,"line":55}}]],"3243":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":94,"line":55},"start":{"col":12,"line":55}}]],"3244":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":94,"line":55},"start":{"col":12,"line":55}}]],"3245":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":9,"line":56},"start":{"col":8,"line":54}}]],"3246":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":9,"line":56},"start":{"col":8,"line":54}}]],"3247":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":9,"line":56},"start":{"col":8,"line":54}}]],"3248":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":9,"line":56},"start":{"col":8,"line":54}}]],"3249":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":94,"line":55},"start":{"col":12,"line":55}}]],"325":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3250":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":94,"line":55},"start":{"col":12,"line":55}}]],"3251":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":94,"line":55},"start":{"col":12,"line":55}}]],"3252":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":94,"line":55},"start":{"col":12,"line":55}}]],"3253":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":94,"line":55},"start":{"col":12,"line":55}}]],"3254":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":94,"line":55},"start":{"col":12,"line":55}}]],"3255":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":94,"line":55},"start":{"col":12,"line":55}}]],"3256":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":92,"line":55},"start":{"col":46,"line":55}}]],"3257":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":92,"line":55},"start":{"col":46,"line":55}}]],"3258":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":92,"line":55},"start":{"col":46,"line":55}}]],"3259":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":92,"line":55},"start":{"col":46,"line":55}}]],"326":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3260":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":92,"line":55},"start":{"col":46,"line":55}}]],"3261":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":92,"line":55},"start":{"col":46,"line":55}}]],"3262":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":49,"line":216},"start":{"col":27,"line":216}}]],"3263":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":49,"line":216},"start":{"col":27,"line":216}}]],"3264":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":50,"line":216},"start":{"col":27,"line":216}}]],"3265":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":50,"line":216},"start":{"col":27,"line":216}}]],"3266":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":50,"line":216},"start":{"col":27,"line":216}}]],"3267":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":62,"line":216},"start":{"col":25,"line":216}}]],"3268":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":62,"line":216},"start":{"col":25,"line":216}}]],"3269":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":62,"line":216},"start":{"col":25,"line":216}}]],"327":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3270":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":62,"line":216},"start":{"col":25,"line":216}}]],"3271":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":62,"line":216},"start":{"col":25,"line":216}}]],"3272":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":62,"line":216},"start":{"col":25,"line":216}}]],"3273":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":62,"line":216},"start":{"col":25,"line":216}}]],"3274":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":50,"line":216},"start":{"col":27,"line":216}}]],"3275":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":50,"line":216},"start":{"col":27,"line":216}}]],"3276":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":50,"line":216},"start":{"col":27,"line":216}}]],"3277":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":50,"line":216},"start":{"col":27,"line":216}}]],"3278":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":50,"line":216},"start":{"col":27,"line":216}}]],"3279":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/serde.cairo",{"end":{"col":50,"line":216},"start":{"col":27,"line":216}}]],"328":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3281":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":44,"line":459},"start":{"col":22,"line":459}}]],"3282":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":44,"line":459},"start":{"col":22,"line":459}}]],"3283":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":459},"start":{"col":22,"line":459}}]],"3284":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":459},"start":{"col":22,"line":459}}]],"3285":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":33,"line":460},"start":{"col":22,"line":460}}]],"3286":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":459},"start":{"col":22,"line":459}}]],"3287":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":74,"line":461},"start":{"col":21,"line":461}}]],"3288":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":74,"line":461},"start":{"col":21,"line":461}}]],"3289":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":74,"line":461},"start":{"col":21,"line":461}}]],"329":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3290":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":74,"line":461},"start":{"col":21,"line":461}}]],"3291":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":74,"line":461},"start":{"col":21,"line":461}}]],"3292":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":74,"line":461},"start":{"col":21,"line":461}}]],"3293":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":74,"line":461},"start":{"col":21,"line":461}}]],"3294":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":74,"line":461},"start":{"col":21,"line":461}}]],"3295":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":74,"line":461},"start":{"col":21,"line":461}}]],"3296":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":75,"line":461},"start":{"col":21,"line":461}}]],"3297":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":75,"line":461},"start":{"col":21,"line":461}}]],"3298":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":75,"line":461},"start":{"col":21,"line":461}}]],"3299":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":75,"line":461},"start":{"col":21,"line":461}}]],"33":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"330":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3300":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":82,"line":461},"start":{"col":21,"line":461}}]],"3301":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":82,"line":461},"start":{"col":21,"line":461}}]],"3302":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":82,"line":461},"start":{"col":21,"line":461}}]],"3303":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":82,"line":461},"start":{"col":21,"line":461}}]],"3304":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":462},"start":{"col":69,"line":458}}]],"3305":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":462},"start":{"col":69,"line":458}}]],"3306":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":462},"start":{"col":69,"line":458}}]],"3307":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":462},"start":{"col":69,"line":458}}]],"3308":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":462},"start":{"col":69,"line":458}}]],"3309":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":75,"line":461},"start":{"col":21,"line":461}}]],"331":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3310":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":75,"line":461},"start":{"col":21,"line":461}}]],"3311":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":75,"line":461},"start":{"col":21,"line":461}}]],"3312":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":75,"line":461},"start":{"col":21,"line":461}}]],"3313":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":75,"line":461},"start":{"col":21,"line":461}}]],"3314":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":75,"line":461},"start":{"col":21,"line":461}}]],"3315":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":75,"line":461},"start":{"col":21,"line":461}}]],"3316":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":75,"line":461},"start":{"col":21,"line":461}}]],"3317":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":74,"line":461},"start":{"col":21,"line":461}}]],"3318":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":74,"line":461},"start":{"col":21,"line":461}}]],"3319":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":74,"line":461},"start":{"col":21,"line":461}}]],"332":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3320":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":74,"line":461},"start":{"col":21,"line":461}}]],"3321":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":74,"line":461},"start":{"col":21,"line":461}}]],"3322":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":74,"line":461},"start":{"col":21,"line":461}}]],"3323":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":459},"start":{"col":22,"line":459}}]],"3324":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":459},"start":{"col":22,"line":459}}]],"3325":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":459},"start":{"col":22,"line":459}}]],"3326":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":459},"start":{"col":22,"line":459}}]],"3327":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":459},"start":{"col":22,"line":459}}]],"3328":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":459},"start":{"col":22,"line":459}}]],"3329":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":459},"start":{"col":22,"line":459}}]],"333":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3330":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":45,"line":459},"start":{"col":22,"line":459}}]],"3331":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":69,"line":18},"start":{"col":4,"line":18}}]],"3332":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":69,"line":18},"start":{"col":4,"line":18}}]],"334":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3341":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":39,"line":83},"start":{"col":15,"line":83}}]],"3342":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":46,"line":83},"start":{"col":15,"line":83}}]],"3343":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":46,"line":83},"start":{"col":15,"line":83}}]],"3344":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":46,"line":83},"start":{"col":15,"line":83}}]],"3345":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":46,"line":83},"start":{"col":15,"line":83}}]],"3346":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":46,"line":83},"start":{"col":15,"line":83}}]],"3347":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":46,"line":83},"start":{"col":15,"line":83}}]],"3348":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":62,"line":83},"start":{"col":50,"line":83}}]],"3349":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":62,"line":83},"start":{"col":50,"line":83}}]],"335":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3350":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":62,"line":83},"start":{"col":15,"line":83}}]],"3351":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":62,"line":83},"start":{"col":15,"line":83}}]],"3352":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":13,"line":88},"start":{"col":12,"line":83}}]],"3353":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":13,"line":88},"start":{"col":12,"line":83}}]],"3354":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":13,"line":88},"start":{"col":12,"line":83}}]],"3355":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":13,"line":88},"start":{"col":12,"line":83}}]],"3356":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":13,"line":88},"start":{"col":12,"line":83}}]],"3357":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":13,"line":88},"start":{"col":12,"line":83}}]],"3358":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":13,"line":88},"start":{"col":12,"line":83}}]],"3359":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":13,"line":88},"start":{"col":12,"line":83}}]],"336":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3360":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":13,"line":88},"start":{"col":12,"line":83}}]],"3361":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3362":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3363":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3364":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3365":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3366":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":78,"line":85},"start":{"col":54,"line":85}}]],"3367":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3368":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3369":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"337":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3370":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":78,"line":85},"start":{"col":20,"line":85}}]],"3371":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":78,"line":85},"start":{"col":20,"line":85}}]],"3372":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":78,"line":85},"start":{"col":20,"line":85}}]],"3373":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":78,"line":85},"start":{"col":20,"line":85}}]],"3374":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3375":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3376":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3377":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3378":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3379":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":13,"line":88},"start":{"col":12,"line":83}}]],"338":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3380":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":13,"line":88},"start":{"col":12,"line":83}}]],"3381":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":13,"line":88},"start":{"col":12,"line":83}}]],"3382":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3383":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3384":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3385":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3386":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3387":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3388":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":56,"line":92},"start":{"col":19,"line":92}}]],"3389":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":56,"line":92},"start":{"col":19,"line":92}}]],"339":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3390":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":56,"line":92},"start":{"col":19,"line":92}}]],"3391":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":56,"line":92},"start":{"col":19,"line":92}}]],"3392":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":56,"line":92},"start":{"col":19,"line":92}}]],"3393":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":56,"line":92},"start":{"col":19,"line":92}}]],"3394":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":56,"line":92},"start":{"col":19,"line":92}}]],"3395":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3396":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3397":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3398":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3399":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"34":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"340":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3400":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":57,"line":93},"start":{"col":19,"line":93}}]],"3401":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":57,"line":93},"start":{"col":19,"line":93}}]],"3402":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":57,"line":93},"start":{"col":19,"line":93}}]],"3403":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":57,"line":93},"start":{"col":19,"line":93}}]],"3404":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":57,"line":93},"start":{"col":19,"line":93}}]],"3405":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":57,"line":93},"start":{"col":19,"line":93}}]],"3406":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3407":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3408":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3409":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"341":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3410":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3411":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":36,"line":96},"start":{"col":20,"line":96}}]],"3412":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":36,"line":96},"start":{"col":20,"line":96}}]],"3413":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":36,"line":96},"start":{"col":20,"line":96}}]],"3414":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3415":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3416":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3417":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3418":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3419":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"342":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3420":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3421":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3422":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3423":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3424":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3425":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":19,"line":96}}]],"3426":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":19,"line":96}}]],"3427":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":19,"line":96}}]],"3428":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3429":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"343":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3430":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3431":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3432":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3433":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":28,"line":99},"start":{"col":12,"line":99}}]],"3434":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":28,"line":99},"start":{"col":12,"line":99}}]],"3435":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":28,"line":99},"start":{"col":12,"line":99}}]],"3436":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":28,"line":99},"start":{"col":12,"line":99}}]],"3437":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":64,"line":99},"start":{"col":60,"line":99}}]],"3438":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3439":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"344":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3440":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3441":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3442":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3443":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3444":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3445":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3446":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3447":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3448":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3449":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"345":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3450":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3451":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3452":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3453":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3454":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3455":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3456":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3457":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":51,"line":103},"start":{"col":34,"line":103}}]],"3458":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":51,"line":103},"start":{"col":34,"line":103}}]],"3459":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"346":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3460":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3461":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3462":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3463":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3464":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3465":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3466":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3467":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3468":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3469":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"347":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3470":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3471":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3472":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3473":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3474":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3475":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3476":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3477":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3478":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3479":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"348":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3480":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3481":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3482":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3483":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3484":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3485":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3486":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3487":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3488":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3489":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"349":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3490":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3491":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3492":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3493":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":60,"line":111},"start":{"col":37,"line":111}}]],"3494":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":60,"line":111},"start":{"col":37,"line":111}}]],"3495":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":83,"line":111},"start":{"col":64,"line":111}}]],"3496":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":83,"line":111},"start":{"col":64,"line":111}}]],"3497":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":83,"line":111},"start":{"col":37,"line":111}}]],"3498":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":83,"line":111},"start":{"col":37,"line":111}}]],"3499":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":83,"line":111},"start":{"col":37,"line":111}}]],"35":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"350":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3500":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":83,"line":111},"start":{"col":37,"line":111}}]],"3501":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":47,"line":112},"start":{"col":37,"line":111}}]],"3502":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":47,"line":112},"start":{"col":37,"line":111}}]],"3503":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":47,"line":112},"start":{"col":37,"line":111}}]],"3504":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":42,"line":112},"start":{"col":19,"line":112}}]],"3505":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":42,"line":112},"start":{"col":19,"line":112}}]],"3506":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":42,"line":112},"start":{"col":19,"line":112}}]],"3507":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":47,"line":112},"start":{"col":46,"line":112}}]],"3508":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":47,"line":112},"start":{"col":46,"line":112}}]],"3509":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":47,"line":112},"start":{"col":19,"line":112}}]],"351":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3510":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":47,"line":112},"start":{"col":19,"line":112}}]],"3511":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":47,"line":112},"start":{"col":19,"line":112}}]],"3512":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":47,"line":112},"start":{"col":19,"line":112}}]],"3513":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":47,"line":112},"start":{"col":19,"line":112}}]],"3514":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":47,"line":112},"start":{"col":37,"line":111}}]],"3515":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":47,"line":112},"start":{"col":37,"line":111}}]],"3516":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":47,"line":112},"start":{"col":37,"line":111}}]],"3517":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":47,"line":112},"start":{"col":37,"line":111}}]],"3518":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":47,"line":112},"start":{"col":37,"line":111}}]],"3519":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":47,"line":112},"start":{"col":37,"line":111}}]],"352":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3520":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":47,"line":112},"start":{"col":37,"line":111}}]],"3521":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":114},"start":{"col":12,"line":114}}]],"3522":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":114},"start":{"col":12,"line":114}}]],"3523":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":114},"start":{"col":12,"line":114}}]],"3524":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":114},"start":{"col":12,"line":114}}]],"3525":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":114},"start":{"col":12,"line":114}}]],"3526":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":114},"start":{"col":12,"line":114}}]],"3527":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":49,"line":117},"start":{"col":26,"line":117}}]],"3528":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":49,"line":117},"start":{"col":26,"line":117}}]],"3529":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":49,"line":117},"start":{"col":26,"line":117}}]],"353":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3530":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":49,"line":117},"start":{"col":26,"line":117}}]],"3531":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":49,"line":117},"start":{"col":26,"line":117}}]],"3532":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"3533":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"3534":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"3535":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"3536":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"3537":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"3538":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"3539":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"354":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3540":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"3541":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":34,"line":81}}]],"3542":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":34,"line":81}}]],"3543":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":34,"line":81}}]],"3544":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":34,"line":81}}]],"3545":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":34,"line":81}}]],"3546":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":34,"line":81}}]],"3547":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":34,"line":81}}]],"3548":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":118},"start":{"col":34,"line":81}}]],"3549":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"355":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3550":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"3551":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"3552":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"3553":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"3554":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"3555":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"3556":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"3557":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"3558":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":117},"start":{"col":12,"line":117}}]],"3559":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":114},"start":{"col":12,"line":114}}]],"356":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3560":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":114},"start":{"col":12,"line":114}}]],"3561":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":114},"start":{"col":12,"line":114}}]],"3562":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":114},"start":{"col":12,"line":114}}]],"3563":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":114},"start":{"col":12,"line":114}}]],"3564":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":114},"start":{"col":12,"line":114}}]],"3565":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":114},"start":{"col":12,"line":114}}]],"3566":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":114},"start":{"col":12,"line":114}}]],"3567":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":114},"start":{"col":12,"line":114}}]],"3568":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":114},"start":{"col":12,"line":114}}]],"3569":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":114},"start":{"col":12,"line":114}}]],"357":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3570":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":114},"start":{"col":12,"line":114}}]],"3571":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3572":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3573":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3574":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3575":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3576":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3577":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3578":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3579":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"358":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3580":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3581":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":70,"line":108},"start":{"col":42,"line":107}}]],"3582":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3583":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3584":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3585":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3586":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3587":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3588":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3589":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"359":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3590":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3591":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3592":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3593":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3594":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":108},"start":{"col":53,"line":108}}]],"3595":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3596":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3597":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3598":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3599":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"36":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"360":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3600":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3601":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3602":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3603":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3604":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3605":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3606":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3607":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3608":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":74,"line":103},"start":{"col":34,"line":103}}]],"3609":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"361":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3610":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3611":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3612":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3613":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3614":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3615":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3616":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3617":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3618":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3619":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"362":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3620":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3621":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3622":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3623":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3624":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3625":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3626":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3627":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3628":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"3629":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":55,"line":102},"start":{"col":23,"line":102}}]],"363":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3630":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3631":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3632":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3633":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3634":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3635":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3636":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3637":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3638":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3639":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"364":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3640":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3641":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3642":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3643":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3644":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3645":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3646":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3647":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3648":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3649":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"365":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3650":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":65,"line":99},"start":{"col":12,"line":99}}]],"3651":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3652":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3653":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3654":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3655":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3656":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3657":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3658":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3659":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"366":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3660":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3661":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3662":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3663":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3664":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3665":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3666":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3667":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3668":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3669":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"367":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3670":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3671":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3672":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":93,"line":96},"start":{"col":12,"line":96}}]],"3673":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3674":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3675":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3676":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3677":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3678":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3679":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"368":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3680":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3681":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3682":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3683":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3684":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3685":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3686":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3687":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3688":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3689":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"369":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3690":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3691":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3692":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3693":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3694":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":66,"line":96},"start":{"col":20,"line":96}}]],"3695":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3696":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3697":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3698":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3699":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"37":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"370":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3700":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3701":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3702":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3703":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3704":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3705":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3706":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3707":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3708":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3709":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"371":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3710":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3711":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3712":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3713":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3714":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3715":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3716":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":82,"line":93},"start":{"col":12,"line":93}}]],"3717":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3718":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3719":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"372":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3720":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3721":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3722":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3723":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3724":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3725":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3726":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3727":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3728":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3729":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"373":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3730":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3731":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3732":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3733":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3734":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3735":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3736":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3737":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3738":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"3739":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":80,"line":92},"start":{"col":12,"line":92}}]],"374":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3740":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3741":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3742":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3743":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3744":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3745":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3746":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3747":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3748":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3749":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"375":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3750":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3751":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3752":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3753":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3754":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3755":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3756":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3757":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3758":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3759":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"376":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3760":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3761":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":53,"line":91},"start":{"col":22,"line":91}}]],"3762":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3763":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3764":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3765":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3766":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3767":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3768":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3769":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"377":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3770":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3771":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3772":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3773":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3774":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3775":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3776":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3777":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3778":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3779":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"378":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3780":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3781":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3782":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3783":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":17,"line":87},"start":{"col":16,"line":84}}]],"3784":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3785":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3786":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3787":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3788":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3789":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"379":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3790":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3791":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3792":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3793":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3794":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3795":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3796":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3797":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3798":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3799":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"38":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"380":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3800":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3801":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3802":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3803":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3804":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3805":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":50,"line":85},"start":{"col":20,"line":85}}]],"3807":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":69,"line":18},"start":{"col":4,"line":18}}]],"3808":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":69,"line":18},"start":{"col":4,"line":18}}]],"3809":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":69,"line":18},"start":{"col":4,"line":18}}]],"381":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3810":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":69,"line":18},"start":{"col":4,"line":18}}]],"3811":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":28,"line":124},"start":{"col":12,"line":124}}]],"3812":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":28,"line":124},"start":{"col":12,"line":124}}]],"3813":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":28,"line":124},"start":{"col":12,"line":124}}]],"3814":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3815":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3816":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3817":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3818":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3819":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"382":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3820":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3821":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3822":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3823":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3824":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3825":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3826":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3827":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":49,"line":124},"start":{"col":44,"line":124}}]],"3828":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":49,"line":124},"start":{"col":44,"line":124}}]],"3829":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":49,"line":124},"start":{"col":44,"line":124}}]],"383":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":220},"start":{"col":8,"line":218}}]],"3830":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":49,"line":124},"start":{"col":12,"line":124}}]],"3831":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":49,"line":124},"start":{"col":12,"line":124}}]],"3832":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":49,"line":124},"start":{"col":12,"line":124}}]],"3833":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":49,"line":124},"start":{"col":12,"line":124}}]],"3834":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":18,"line":123}}]],"3835":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":18,"line":123}}]],"3836":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":18,"line":123}}]],"3837":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":18,"line":123}}]],"3838":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":18,"line":123}}]],"3839":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":18,"line":123}}]],"3840":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":125},"start":{"col":18,"line":123}}]],"3841":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3842":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3843":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3844":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3845":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3846":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3847":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3848":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":40,"line":124},"start":{"col":12,"line":124}}]],"3849":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":75,"line":302},"start":{"col":37,"line":302}}]],"3850":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":75,"line":302},"start":{"col":37,"line":302}}]],"3851":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":75,"line":302},"start":{"col":37,"line":302}}]],"3852":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":75,"line":302},"start":{"col":37,"line":302}}]],"3853":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"3854":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"3855":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"3856":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"3857":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"3858":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"3859":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"386":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"3860":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"3861":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"3862":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":44,"line":304},"start":{"col":12,"line":304}}]],"3863":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":44,"line":304},"start":{"col":12,"line":304}}]],"3864":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":44,"line":304},"start":{"col":12,"line":304}}]],"3865":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":44,"line":304},"start":{"col":12,"line":304}}]],"3866":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":44,"line":304},"start":{"col":12,"line":304}}]],"3867":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":44,"line":304},"start":{"col":12,"line":304}}]],"3868":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":44,"line":304},"start":{"col":12,"line":304}}]],"3869":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":44,"line":304},"start":{"col":12,"line":304}}]],"387":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"3870":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":44,"line":304},"start":{"col":12,"line":304}}]],"3871":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":44,"line":304},"start":{"col":12,"line":304}}]],"3872":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":44,"line":304},"start":{"col":12,"line":304}}]],"3873":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"3874":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"3875":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"3876":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"3877":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"3878":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"3879":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"388":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"3880":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"3881":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"3882":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":66,"line":303},"start":{"col":12,"line":303}}]],"3883":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":75,"line":141},"start":{"col":37,"line":141}}]],"3884":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":75,"line":141},"start":{"col":37,"line":141}}]],"3885":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":75,"line":141},"start":{"col":37,"line":141}}]],"3886":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":75,"line":141},"start":{"col":37,"line":141}}]],"3887":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"3888":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"3889":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"389":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"3890":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"3891":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"3892":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"3893":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"3894":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"3895":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"3896":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"3897":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"3898":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":143},"start":{"col":65,"line":140}}]],"3899":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":143},"start":{"col":65,"line":140}}]],"39":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"390":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"3900":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":143},"start":{"col":65,"line":140}}]],"3901":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":143},"start":{"col":65,"line":140}}]],"3902":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":143},"start":{"col":65,"line":140}}]],"3903":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":143},"start":{"col":65,"line":140}}]],"3904":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":9,"line":143},"start":{"col":65,"line":140}}]],"3905":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"3906":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"3907":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"3908":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"3909":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"391":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"3910":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"3911":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"3912":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"3913":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":69,"line":142},"start":{"col":12,"line":142}}]],"3914":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":69},"start":{"col":4,"line":69}}]],"3915":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":69},"start":{"col":4,"line":69}}]],"3916":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":69},"start":{"col":4,"line":69}}]],"3917":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":69},"start":{"col":4,"line":69}}]],"3918":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":69},"start":{"col":4,"line":69}}]],"3919":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":69},"start":{"col":4,"line":69}}]],"392":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"3920":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":39,"line":69},"start":{"col":4,"line":69}}]],"3921":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":39,"line":69},"start":{"col":4,"line":69}}]],"3922":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":39,"line":69},"start":{"col":4,"line":69}}]],"3923":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":39,"line":69},"start":{"col":4,"line":69}}]],"3924":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":39,"line":69},"start":{"col":4,"line":69}}]],"3925":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":39,"line":69},"start":{"col":4,"line":69}}]],"3926":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":39,"line":69},"start":{"col":4,"line":69}}]],"3927":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":39,"line":69},"start":{"col":4,"line":69}}]],"3928":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":70},"start":{"col":47,"line":68}}]],"3929":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":70},"start":{"col":47,"line":68}}]],"393":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"3930":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":70},"start":{"col":47,"line":68}}]],"3931":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":70},"start":{"col":47,"line":68}}]],"3932":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":70},"start":{"col":47,"line":68}}]],"3933":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":69},"start":{"col":4,"line":69}}]],"3934":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":69},"start":{"col":4,"line":69}}]],"3935":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":69},"start":{"col":4,"line":69}}]],"3936":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":69},"start":{"col":4,"line":69}}]],"3937":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":69},"start":{"col":4,"line":69}}]],"3938":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":69},"start":{"col":4,"line":69}}]],"3939":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":76},"start":{"col":4,"line":76}}]],"394":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"3940":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":76},"start":{"col":4,"line":76}}]],"3941":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":76},"start":{"col":4,"line":76}}]],"3942":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":76},"start":{"col":4,"line":76}}]],"3943":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":76},"start":{"col":4,"line":76}}]],"3944":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":76},"start":{"col":4,"line":76}}]],"3945":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":41,"line":76},"start":{"col":4,"line":76}}]],"3946":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":41,"line":76},"start":{"col":4,"line":76}}]],"3947":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":41,"line":76},"start":{"col":4,"line":76}}]],"3948":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":41,"line":76},"start":{"col":4,"line":76}}]],"3949":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":41,"line":76},"start":{"col":4,"line":76}}]],"395":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"3950":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":41,"line":76},"start":{"col":4,"line":76}}]],"3951":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":41,"line":76},"start":{"col":4,"line":76}}]],"3952":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":41,"line":76},"start":{"col":4,"line":76}}]],"3953":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":77},"start":{"col":49,"line":75}}]],"3954":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":77},"start":{"col":49,"line":75}}]],"3955":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":77},"start":{"col":49,"line":75}}]],"3956":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":77},"start":{"col":49,"line":75}}]],"3957":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":77},"start":{"col":49,"line":75}}]],"3958":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":76},"start":{"col":4,"line":76}}]],"3959":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":76},"start":{"col":4,"line":76}}]],"396":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"3960":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":76},"start":{"col":4,"line":76}}]],"3961":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":76},"start":{"col":4,"line":76}}]],"3962":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":76},"start":{"col":4,"line":76}}]],"3963":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":76},"start":{"col":4,"line":76}}]],"3964":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":40,"line":63},"start":{"col":37,"line":63}}]],"3965":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":41,"line":63},"start":{"col":8,"line":63}}]],"3966":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":77,"line":63},"start":{"col":74,"line":63}}]],"3967":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":78,"line":63},"start":{"col":45,"line":63}}]],"3968":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":41,"line":63},"start":{"col":8,"line":63}}]],"3969":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":41,"line":63},"start":{"col":8,"line":63}}]],"397":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"3970":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":78,"line":63},"start":{"col":45,"line":63}}]],"3971":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":78,"line":63},"start":{"col":45,"line":63}}]],"3972":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":78,"line":63},"start":{"col":8,"line":63}}]],"3973":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":78,"line":63},"start":{"col":8,"line":63}}]],"3974":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":78,"line":63},"start":{"col":8,"line":63}}]],"3975":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":78,"line":63},"start":{"col":8,"line":63}}]],"3976":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":23,"line":38},"start":{"col":9,"line":38}}]],"3977":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":23,"line":38},"start":{"col":9,"line":38}}]],"3978":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":23,"line":38},"start":{"col":8,"line":38}}]],"3979":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":23,"line":38},"start":{"col":8,"line":38}}]],"398":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"3980":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"3981":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"3982":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"3983":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":5,"line":173},"start":{"col":51,"line":168}}]],"3984":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":5,"line":173},"start":{"col":51,"line":168}}]],"3985":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":5,"line":173},"start":{"col":51,"line":168}}]],"3986":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"3987":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"3988":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"3989":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":62,"line":171},"start":{"col":42,"line":171}}]],"399":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"3990":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":62,"line":171},"start":{"col":42,"line":171}}]],"3991":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":62,"line":171},"start":{"col":42,"line":171}}]],"3992":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"3993":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"3994":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"3995":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"3996":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"3997":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"3998":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"3999":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"40":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"400":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4000":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4001":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4002":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4003":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4004":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4005":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4006":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4007":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4008":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4009":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"401":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4010":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4011":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4012":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4013":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4014":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4015":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4016":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4017":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":18,"line":193},"start":{"col":15,"line":193}}]],"4018":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":25,"line":193},"start":{"col":22,"line":193}}]],"4019":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":25,"line":193},"start":{"col":14,"line":193}}]],"402":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4020":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":25,"line":193},"start":{"col":14,"line":193}}]],"4021":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":25,"line":193},"start":{"col":14,"line":193}}]],"4022":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":196},"start":{"col":8,"line":193}}]],"4023":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":196},"start":{"col":8,"line":193}}]],"4024":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":196},"start":{"col":8,"line":193}}]],"4025":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":21,"line":194},"start":{"col":17,"line":194}}]],"4026":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":21,"line":194},"start":{"col":17,"line":194}}]],"4027":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":21,"line":194},"start":{"col":17,"line":194}}]],"4028":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":196},"start":{"col":8,"line":193}}]],"4029":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":196},"start":{"col":8,"line":193}}]],"403":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4030":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":196},"start":{"col":8,"line":193}}]],"4031":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":22,"line":195},"start":{"col":17,"line":195}}]],"4032":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":22,"line":195},"start":{"col":17,"line":195}}]],"4033":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":22,"line":195},"start":{"col":17,"line":195}}]],"4034":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4035":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4036":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4037":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4038":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4039":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"404":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4040":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4041":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4042":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4043":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4044":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4045":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4046":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4047":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4048":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4049":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"405":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4050":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4051":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4052":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4053":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4054":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4055":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4056":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4057":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4058":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4059":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"406":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4060":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4061":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4062":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4063":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4064":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4065":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4066":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4067":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4068":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4069":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"407":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4070":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4071":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4072":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4073":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4074":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4075":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4076":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4077":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4078":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4079":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"408":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4080":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4081":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4082":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4083":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4084":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4085":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4086":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4087":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4088":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/account.cairo",{"end":{"col":26,"line":16},"start":{"col":21,"line":16}}]],"4089":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":37,"line":135},"start":{"col":8,"line":135}}]],"409":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4090":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":22,"line":134},"start":{"col":18,"line":134}}]],"4091":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":22,"line":134},"start":{"col":18,"line":134}}]],"4092":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":29,"line":155},"start":{"col":8,"line":155}}]],"4093":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":29,"line":155},"start":{"col":8,"line":155}}]],"4094":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":29,"line":155},"start":{"col":8,"line":155}}]],"4097":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":73},"start":{"col":25,"line":73}}]],"4098":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":73},"start":{"col":25,"line":73}}]],"4099":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":73},"start":{"col":25,"line":73}}]],"41":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"410":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4100":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":73},"start":{"col":25,"line":73}}]],"4101":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":73},"start":{"col":25,"line":73}}]],"4102":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":73},"start":{"col":25,"line":73}}]],"4103":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":25,"line":74},"start":{"col":19,"line":74}}]],"4104":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":25,"line":74},"start":{"col":19,"line":74}}]],"4105":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":74},"start":{"col":19,"line":74}}]],"4106":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":74},"start":{"col":19,"line":74}}]],"4107":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":74},"start":{"col":19,"line":74}}]],"4108":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":74},"start":{"col":12,"line":74}}]],"4109":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":74},"start":{"col":12,"line":74}}]],"411":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4110":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":74},"start":{"col":12,"line":74}}]],"4111":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":74},"start":{"col":12,"line":74}}]],"4112":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":74},"start":{"col":12,"line":74}}]],"4113":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":40,"line":75},"start":{"col":19,"line":75}}]],"4114":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":40,"line":75},"start":{"col":19,"line":75}}]],"4115":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":40,"line":75},"start":{"col":19,"line":75}}]],"4116":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":40,"line":75},"start":{"col":19,"line":75}}]],"4117":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":40,"line":75},"start":{"col":19,"line":75}}]],"4118":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":40,"line":75},"start":{"col":19,"line":75}}]],"4119":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":40,"line":75},"start":{"col":19,"line":75}}]],"412":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4120":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":40,"line":75},"start":{"col":19,"line":75}}]],"4121":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":69,"line":75},"start":{"col":12,"line":75}}]],"4122":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":69,"line":75},"start":{"col":12,"line":75}}]],"4123":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":69,"line":75},"start":{"col":12,"line":75}}]],"4124":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":69,"line":75},"start":{"col":12,"line":75}}]],"4125":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":69,"line":75},"start":{"col":12,"line":75}}]],"4126":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":69,"line":75},"start":{"col":12,"line":75}}]],"4127":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":31,"line":77},"start":{"col":26,"line":77}}]],"4128":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":31,"line":77},"start":{"col":26,"line":77}}]],"4129":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":38,"line":77},"start":{"col":26,"line":77}}]],"413":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4130":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":38,"line":77},"start":{"col":26,"line":77}}]],"4131":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":77},"start":{"col":12,"line":77}}]],"4132":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":77},"start":{"col":12,"line":77}}]],"4133":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":77},"start":{"col":12,"line":77}}]],"4134":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":77},"start":{"col":12,"line":77}}]],"4135":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":77},"start":{"col":12,"line":77}}]],"4136":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":77},"start":{"col":12,"line":77}}]],"4137":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":69,"line":75},"start":{"col":12,"line":75}}]],"4138":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":69,"line":75},"start":{"col":12,"line":75}}]],"4139":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":69,"line":75},"start":{"col":12,"line":75}}]],"414":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4140":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":69,"line":75},"start":{"col":12,"line":75}}]],"4141":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":69,"line":75},"start":{"col":12,"line":75}}]],"4142":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":69,"line":75},"start":{"col":12,"line":75}}]],"4143":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":69,"line":75},"start":{"col":12,"line":75}}]],"4144":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":69,"line":75},"start":{"col":12,"line":75}}]],"4145":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":40,"line":75},"start":{"col":19,"line":75}}]],"4146":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":40,"line":75},"start":{"col":19,"line":75}}]],"4147":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":40,"line":75},"start":{"col":19,"line":75}}]],"4148":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":40,"line":75},"start":{"col":19,"line":75}}]],"4149":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":40,"line":75},"start":{"col":19,"line":75}}]],"415":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4150":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":40,"line":75},"start":{"col":19,"line":75}}]],"4151":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":40,"line":75},"start":{"col":19,"line":75}}]],"4152":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":40,"line":75},"start":{"col":19,"line":75}}]],"4153":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":74},"start":{"col":12,"line":74}}]],"4154":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":74},"start":{"col":12,"line":74}}]],"4155":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":74},"start":{"col":12,"line":74}}]],"4156":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":74},"start":{"col":12,"line":74}}]],"4157":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":74},"start":{"col":12,"line":74}}]],"4158":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":74},"start":{"col":12,"line":74}}]],"4159":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":74},"start":{"col":12,"line":74}}]],"416":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4160":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":60,"line":74},"start":{"col":12,"line":74}}]],"4161":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":73},"start":{"col":25,"line":73}}]],"4162":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":73},"start":{"col":25,"line":73}}]],"4163":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":73},"start":{"col":25,"line":73}}]],"4164":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":73},"start":{"col":25,"line":73}}]],"4165":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":73},"start":{"col":25,"line":73}}]],"4166":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":73},"start":{"col":25,"line":73}}]],"4167":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":73},"start":{"col":25,"line":73}}]],"4168":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":73},"start":{"col":25,"line":73}}]],"4169":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":28,"line":1189},"start":{"col":8,"line":1189}}]],"417":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4170":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":28,"line":1189},"start":{"col":8,"line":1189}}]],"4171":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":28,"line":1189},"start":{"col":8,"line":1189}}]],"4173":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":25,"line":277},"start":{"col":8,"line":277}}]],"4174":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":25,"line":277},"start":{"col":8,"line":277}}]],"4175":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":479},"start":{"col":27,"line":479}}]],"4176":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"4177":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"4178":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"4179":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"418":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4180":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"4181":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"4182":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"4183":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"4184":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"4185":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"4186":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"4187":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"4188":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":485},"start":{"col":8,"line":482}}]],"4189":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":485},"start":{"col":8,"line":482}}]],"419":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4190":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":483},"start":{"col":44,"line":483}}]],"4191":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":483},"start":{"col":44,"line":483}}]],"4192":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":483},"start":{"col":44,"line":483}}]],"4193":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":54,"line":483},"start":{"col":31,"line":483}}]],"4194":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":54,"line":483},"start":{"col":31,"line":483}}]],"4195":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":54,"line":483},"start":{"col":31,"line":483}}]],"4196":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":485},"start":{"col":8,"line":482}}]],"4197":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":485},"start":{"col":8,"line":482}}]],"4198":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":485},"start":{"col":8,"line":482}}]],"4199":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":484},"start":{"col":28,"line":484}}]],"42":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"420":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4200":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":484},"start":{"col":28,"line":484}}]],"4201":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":484},"start":{"col":28,"line":484}}]],"4202":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":484},"start":{"col":28,"line":484}}]],"4204":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":14,"line":411},"start":{"col":10,"line":411}}]],"4205":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":14,"line":411},"start":{"col":10,"line":411}}]],"4206":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":21,"line":411},"start":{"col":8,"line":411}}]],"4207":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":21,"line":411},"start":{"col":8,"line":411}}]],"4208":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":21,"line":411},"start":{"col":8,"line":411}}]],"4209":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":21,"line":411},"start":{"col":8,"line":411}}]],"421":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4210":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":43,"line":411},"start":{"col":8,"line":411}}]],"4211":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":43,"line":411},"start":{"col":8,"line":411}}]],"4212":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":36,"line":412},"start":{"col":32,"line":412}}]],"4213":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":49,"line":412},"start":{"col":8,"line":412}}]],"4214":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":49,"line":412},"start":{"col":8,"line":412}}]],"4215":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":49,"line":412},"start":{"col":8,"line":412}}]],"4216":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":49,"line":412},"start":{"col":8,"line":412}}]],"4217":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":49,"line":412},"start":{"col":8,"line":412}}]],"4218":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":49,"line":412},"start":{"col":8,"line":412}}]],"422":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4220":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":83},"start":{"col":12,"line":83}}]],"4221":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":83},"start":{"col":12,"line":83}}]],"4222":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":83},"start":{"col":12,"line":83}}]],"4223":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":83},"start":{"col":12,"line":83}}]],"4224":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":83},"start":{"col":12,"line":83}}]],"4225":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":83},"start":{"col":12,"line":83}}]],"4226":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":90},"start":{"col":46,"line":90}}]],"4227":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":90},"start":{"col":46,"line":90}}]],"4228":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":90},"start":{"col":46,"line":90}}]],"4229":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":90},"start":{"col":46,"line":90}}]],"423":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4230":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":90},"start":{"col":15,"line":90}}]],"4231":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":90},"start":{"col":15,"line":90}}]],"4232":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":90},"start":{"col":15,"line":90}}]],"4233":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":90},"start":{"col":15,"line":90}}]],"4234":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":90},"start":{"col":15,"line":90}}]],"4235":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":90},"start":{"col":15,"line":90}}]],"4236":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":90},"start":{"col":15,"line":90}}]],"4237":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":90},"start":{"col":15,"line":90}}]],"4238":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":90},"start":{"col":15,"line":90}}]],"4239":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":90},"start":{"col":15,"line":90}}]],"424":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4240":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":13,"line":94},"start":{"col":12,"line":90}}]],"4241":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":13,"line":94},"start":{"col":12,"line":90}}]],"4242":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":13,"line":94},"start":{"col":12,"line":90}}]],"4243":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":13,"line":94},"start":{"col":12,"line":90}}]],"4244":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":17,"line":93},"start":{"col":16,"line":93}}]],"4245":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":17,"line":93},"start":{"col":16,"line":93}}]],"4246":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":13,"line":94},"start":{"col":12,"line":90}}]],"4247":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":13,"line":94},"start":{"col":12,"line":90}}]],"4248":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":13,"line":94},"start":{"col":12,"line":90}}]],"4249":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":91},"start":{"col":16,"line":91}}]],"425":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4250":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":91},"start":{"col":16,"line":91}}]],"4251":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":95},"start":{"col":21,"line":89}}]],"4252":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":95},"start":{"col":21,"line":89}}]],"4253":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":95},"start":{"col":21,"line":89}}]],"4254":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":95},"start":{"col":21,"line":89}}]],"4255":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":95},"start":{"col":21,"line":89}}]],"4256":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":95},"start":{"col":21,"line":89}}]],"4257":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":95},"start":{"col":21,"line":89}}]],"4258":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":90},"start":{"col":15,"line":90}}]],"4259":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":90},"start":{"col":15,"line":90}}]],"426":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4260":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":90},"start":{"col":15,"line":90}}]],"4261":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":90},"start":{"col":15,"line":90}}]],"4262":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":90},"start":{"col":15,"line":90}}]],"4263":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":90},"start":{"col":15,"line":90}}]],"4264":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":90},"start":{"col":15,"line":90}}]],"4265":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":90},"start":{"col":15,"line":90}}]],"4266":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":179},"start":{"col":12,"line":179}}]],"4267":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":179},"start":{"col":12,"line":179}}]],"4268":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":179},"start":{"col":12,"line":179}}]],"4269":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":179},"start":{"col":12,"line":179}}]],"427":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4270":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":179},"start":{"col":12,"line":179}}]],"4271":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":179},"start":{"col":12,"line":179}}]],"4272":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":179},"start":{"col":12,"line":179}}]],"4273":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":179},"start":{"col":12,"line":179}}]],"4275":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":110},"start":{"col":12,"line":110}}]],"4276":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":110},"start":{"col":12,"line":110}}]],"4277":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":110},"start":{"col":12,"line":110}}]],"4278":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":110},"start":{"col":12,"line":110}}]],"4279":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":110},"start":{"col":12,"line":110}}]],"428":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4280":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":110},"start":{"col":12,"line":110}}]],"4284":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":129},"start":{"col":12,"line":129}}]],"4285":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":129},"start":{"col":12,"line":129}}]],"4286":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":129},"start":{"col":12,"line":129}}]],"4287":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":129},"start":{"col":12,"line":129}}]],"4288":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":129},"start":{"col":12,"line":129}}]],"4289":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":39,"line":129},"start":{"col":12,"line":129}}]],"429":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4290":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":142},"start":{"col":12,"line":142}}]],"4291":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":142},"start":{"col":12,"line":142}}]],"4292":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":142},"start":{"col":12,"line":142}}]],"4293":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":142},"start":{"col":12,"line":142}}]],"4294":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":142},"start":{"col":12,"line":142}}]],"4295":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":42,"line":142},"start":{"col":12,"line":142}}]],"4296":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":42,"line":142},"start":{"col":12,"line":142}}]],"4297":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":42,"line":142},"start":{"col":12,"line":142}}]],"4298":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":42,"line":142},"start":{"col":12,"line":142}}]],"4299":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":42,"line":142},"start":{"col":12,"line":142}}]],"43":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"430":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4300":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":42,"line":142},"start":{"col":12,"line":142}}]],"4301":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":9,"line":21},"start":{"col":8,"line":18}}]],"4302":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":9,"line":21},"start":{"col":8,"line":18}}]],"4303":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":9,"line":21},"start":{"col":8,"line":18}}]],"4304":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":9,"line":21},"start":{"col":8,"line":18}}]],"4305":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":5,"line":22},"start":{"col":72,"line":17}}]],"4306":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":5,"line":22},"start":{"col":72,"line":17}}]],"4307":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":5,"line":22},"start":{"col":72,"line":17}}]],"4308":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":9,"line":21},"start":{"col":8,"line":18}}]],"4309":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":60,"line":20},"start":{"col":30,"line":20}}]],"431":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4310":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":60,"line":20},"start":{"col":30,"line":20}}]],"4311":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":60,"line":20},"start":{"col":30,"line":20}}]],"4312":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":60,"line":20},"start":{"col":30,"line":20}}]],"4313":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":60,"line":20},"start":{"col":30,"line":20}}]],"4314":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":60,"line":20},"start":{"col":30,"line":20}}]],"4315":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":60,"line":20},"start":{"col":30,"line":20}}]],"4316":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":5,"line":22},"start":{"col":4,"line":17}}]],"4317":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":5,"line":22},"start":{"col":4,"line":17}}]],"4318":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":5,"line":22},"start":{"col":4,"line":17}}]],"4319":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":5,"line":22},"start":{"col":4,"line":17}}]],"432":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4320":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":60,"line":20},"start":{"col":30,"line":20}}]],"4321":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":60,"line":20},"start":{"col":30,"line":20}}]],"4322":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":60,"line":20},"start":{"col":30,"line":20}}]],"4323":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":16,"line":158},"start":{"col":12,"line":158}}]],"4324":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":158},"start":{"col":12,"line":158}}]],"4325":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":158},"start":{"col":12,"line":158}}]],"4326":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":158},"start":{"col":12,"line":158}}]],"4327":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":158},"start":{"col":12,"line":158}}]],"4328":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":158},"start":{"col":12,"line":158}}]],"4329":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":158},"start":{"col":12,"line":158}}]],"433":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4330":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":160},"start":{"col":32,"line":160}}]],"4331":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":160},"start":{"col":32,"line":160}}]],"4332":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":160},"start":{"col":32,"line":160}}]],"4333":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":160},"start":{"col":32,"line":160}}]],"4334":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":160},"start":{"col":32,"line":160}}]],"4335":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"4336":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"4337":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"4338":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"4339":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"434":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4340":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"4341":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"4342":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":16,"line":161},"start":{"col":12,"line":161}}]],"4343":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"4344":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4345":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4346":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4347":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4348":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4349":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"435":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4350":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4351":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4352":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4353":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4354":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4355":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4356":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4357":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4358":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4359":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":73,"line":163},"start":{"col":12,"line":163}}]],"436":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4360":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":73,"line":163},"start":{"col":12,"line":163}}]],"4361":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":73,"line":163},"start":{"col":12,"line":163}}]],"4362":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":73,"line":163},"start":{"col":12,"line":163}}]],"4363":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":73,"line":163},"start":{"col":12,"line":163}}]],"4364":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":73,"line":163},"start":{"col":12,"line":163}}]],"4365":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":73,"line":163},"start":{"col":12,"line":163}}]],"4366":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":73,"line":163},"start":{"col":12,"line":163}}]],"4367":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":164},"start":{"col":12,"line":164}}]],"4368":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":164},"start":{"col":12,"line":164}}]],"4369":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":164},"start":{"col":12,"line":164}}]],"437":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4370":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":164},"start":{"col":12,"line":164}}]],"4371":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":164},"start":{"col":12,"line":164}}]],"4372":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":164},"start":{"col":12,"line":164}}]],"4373":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":164},"start":{"col":12,"line":164}}]],"4374":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":164},"start":{"col":12,"line":164}}]],"4375":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":164},"start":{"col":12,"line":164}}]],"4376":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":164},"start":{"col":12,"line":164}}]],"4377":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":164},"start":{"col":12,"line":164}}]],"4378":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":164},"start":{"col":12,"line":164}}]],"4379":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":73,"line":163},"start":{"col":12,"line":163}}]],"438":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4380":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":73,"line":163},"start":{"col":12,"line":163}}]],"4381":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":73,"line":163},"start":{"col":12,"line":163}}]],"4382":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":73,"line":163},"start":{"col":12,"line":163}}]],"4383":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":73,"line":163},"start":{"col":12,"line":163}}]],"4384":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":73,"line":163},"start":{"col":12,"line":163}}]],"4385":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":73,"line":163},"start":{"col":12,"line":163}}]],"4386":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":73,"line":163},"start":{"col":12,"line":163}}]],"4387":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":73,"line":163},"start":{"col":12,"line":163}}]],"4388":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":73,"line":163},"start":{"col":12,"line":163}}]],"4389":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"439":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4390":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4391":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4392":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4393":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4394":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4395":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4396":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4397":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4398":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4399":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"44":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"440":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4400":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":81,"line":161},"start":{"col":12,"line":161}}]],"4401":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"4402":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"4403":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"4404":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"4405":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"4406":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"4407":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"4408":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"4409":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"441":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4410":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"4411":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"4412":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":160},"start":{"col":32,"line":160}}]],"4413":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":158},"start":{"col":12,"line":158}}]],"4414":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":158},"start":{"col":12,"line":158}}]],"4415":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":158},"start":{"col":12,"line":158}}]],"4416":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":158},"start":{"col":12,"line":158}}]],"4417":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":158},"start":{"col":12,"line":158}}]],"4418":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":158},"start":{"col":12,"line":158}}]],"4419":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":158},"start":{"col":12,"line":158}}]],"442":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4420":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":158},"start":{"col":12,"line":158}}]],"4421":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":158},"start":{"col":12,"line":158}}]],"4422":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":158},"start":{"col":12,"line":158}}]],"4423":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":158},"start":{"col":12,"line":158}}]],"4424":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":158},"start":{"col":12,"line":158}}]],"4425":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":192},"start":{"col":12,"line":192}}]],"4426":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":192},"start":{"col":12,"line":192}}]],"4427":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":192},"start":{"col":12,"line":192}}]],"4428":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":192},"start":{"col":12,"line":192}}]],"4429":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":192},"start":{"col":12,"line":192}}]],"443":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4430":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":42,"line":192},"start":{"col":12,"line":192}}]],"4431":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":42,"line":192},"start":{"col":12,"line":192}}]],"4432":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":42,"line":192},"start":{"col":12,"line":192}}]],"4433":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":42,"line":192},"start":{"col":12,"line":192}}]],"4434":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":42,"line":192},"start":{"col":12,"line":192}}]],"4435":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":42,"line":192},"start":{"col":12,"line":192}}]],"4436":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":72,"line":200},"start":{"col":12,"line":200}}]],"4437":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":72,"line":200},"start":{"col":12,"line":200}}]],"4438":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":72,"line":200},"start":{"col":12,"line":200}}]],"4439":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":72,"line":200},"start":{"col":12,"line":200}}]],"444":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4440":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":72,"line":200},"start":{"col":12,"line":200}}]],"4441":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":72,"line":200},"start":{"col":12,"line":200}}]],"4442":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":72,"line":200},"start":{"col":12,"line":200}}]],"4443":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":72,"line":200},"start":{"col":12,"line":200}}]],"4444":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":72,"line":200},"start":{"col":12,"line":200}}]],"4446":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"4447":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"4448":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"4449":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"445":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4451":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":69,"line":17},"start":{"col":4,"line":17}}]],"4452":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":69,"line":17},"start":{"col":4,"line":17}}]],"4453":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":69,"line":17},"start":{"col":4,"line":17}}]],"4454":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":69,"line":17},"start":{"col":4,"line":17}}]],"4455":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":27,"line":32},"start":{"col":15,"line":32}}]],"4456":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":27,"line":32},"start":{"col":15,"line":32}}]],"4457":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":50,"line":32},"start":{"col":31,"line":32}}]],"4458":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":50,"line":32},"start":{"col":31,"line":32}}]],"4459":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":50,"line":32},"start":{"col":15,"line":32}}]],"446":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4460":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":50,"line":32},"start":{"col":15,"line":32}}]],"4461":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":50,"line":32},"start":{"col":15,"line":32}}]],"4462":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":13,"line":34},"start":{"col":12,"line":32}}]],"4463":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":13,"line":34},"start":{"col":12,"line":32}}]],"4464":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":13,"line":34},"start":{"col":12,"line":32}}]],"4465":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":42,"line":35},"start":{"col":12,"line":35}}]],"4466":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":42,"line":35},"start":{"col":12,"line":35}}]],"4467":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":42,"line":35},"start":{"col":12,"line":35}}]],"4468":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":61,"line":35},"start":{"col":12,"line":35}}]],"4469":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":61,"line":35},"start":{"col":12,"line":35}}]],"447":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4470":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":61,"line":35},"start":{"col":12,"line":35}}]],"4471":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":61,"line":35},"start":{"col":12,"line":35}}]],"4472":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":61,"line":35},"start":{"col":12,"line":35}}]],"4473":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":61,"line":35},"start":{"col":12,"line":35}}]],"4474":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":61,"line":35},"start":{"col":12,"line":35}}]],"4475":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":61,"line":35},"start":{"col":12,"line":35}}]],"4476":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":13,"line":34},"start":{"col":12,"line":32}}]],"4477":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":13,"line":34},"start":{"col":12,"line":32}}]],"4478":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":13,"line":34},"start":{"col":12,"line":32}}]],"4479":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":13,"line":34},"start":{"col":12,"line":32}}]],"448":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4480":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":13,"line":34},"start":{"col":12,"line":32}}]],"4481":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":27,"line":33},"start":{"col":23,"line":33}}]],"4482":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":27,"line":33},"start":{"col":23,"line":33}}]],"4483":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":28,"line":33},"start":{"col":16,"line":33}}]],"4484":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":28,"line":33},"start":{"col":16,"line":33}}]],"4485":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":28,"line":33},"start":{"col":16,"line":33}}]],"4486":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":28,"line":33},"start":{"col":16,"line":33}}]],"4487":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":28,"line":33},"start":{"col":16,"line":33}}]],"4488":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":28,"line":33},"start":{"col":16,"line":33}}]],"4489":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":28,"line":33},"start":{"col":16,"line":33}}]],"449":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4490":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1194},"start":{"col":8,"line":1194}}]],"4491":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1194},"start":{"col":8,"line":1194}}]],"4492":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1194},"start":{"col":8,"line":1194}}]],"4493":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1194},"start":{"col":8,"line":1194}}]],"4494":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1194},"start":{"col":8,"line":1194}}]],"4495":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1194},"start":{"col":8,"line":1194}}]],"4496":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1194},"start":{"col":8,"line":1194}}]],"4497":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1194},"start":{"col":8,"line":1194}}]],"4498":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1194},"start":{"col":8,"line":1194}}]],"4499":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1194},"start":{"col":8,"line":1194}}]],"45":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"450":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4500":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1194},"start":{"col":8,"line":1194}}]],"4501":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":1194},"start":{"col":8,"line":1194}}]],"4502":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":30,"line":650},"start":{"col":8,"line":650}}]],"4503":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":30,"line":650},"start":{"col":8,"line":650}}]],"4504":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":30,"line":650},"start":{"col":8,"line":650}}]],"4505":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":41,"line":27},"start":{"col":8,"line":27}}]],"4506":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":41,"line":27},"start":{"col":8,"line":27}}]],"4507":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":41,"line":27},"start":{"col":8,"line":27}}]],"4508":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":27,"line":72},"start":{"col":9,"line":72}}]],"4509":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":27,"line":72},"start":{"col":9,"line":72}}]],"451":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4510":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":27,"line":72},"start":{"col":9,"line":72}}]],"4511":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":27,"line":72},"start":{"col":8,"line":72}}]],"4512":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":27,"line":72},"start":{"col":8,"line":72}}]],"4513":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":20,"line":91},"start":{"col":4,"line":91}}]],"4514":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":20,"line":91},"start":{"col":4,"line":91}}]],"4515":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":20,"line":91},"start":{"col":4,"line":91}}]],"4516":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":20,"line":91},"start":{"col":4,"line":91}}]],"4517":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":20,"line":91},"start":{"col":4,"line":91}}]],"4518":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":20,"line":91},"start":{"col":4,"line":91}}]],"4519":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":36,"line":91},"start":{"col":4,"line":91}}]],"452":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4520":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":36,"line":91},"start":{"col":4,"line":91}}]],"4521":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":36,"line":91},"start":{"col":4,"line":91}}]],"4522":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":36,"line":91},"start":{"col":4,"line":91}}]],"4523":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":36,"line":91},"start":{"col":4,"line":91}}]],"4524":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":36,"line":91},"start":{"col":4,"line":91}}]],"4525":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":92},"start":{"col":36,"line":90}}]],"4526":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":92},"start":{"col":36,"line":90}}]],"4527":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":92},"start":{"col":36,"line":90}}]],"4528":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":92},"start":{"col":36,"line":90}}]],"4529":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":92},"start":{"col":36,"line":90}}]],"453":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4530":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":20,"line":91},"start":{"col":4,"line":91}}]],"4531":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":20,"line":91},"start":{"col":4,"line":91}}]],"4532":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":20,"line":91},"start":{"col":4,"line":91}}]],"4533":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":20,"line":91},"start":{"col":4,"line":91}}]],"4534":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":20,"line":91},"start":{"col":4,"line":91}}]],"4535":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":20,"line":91},"start":{"col":4,"line":91}}]],"4536":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":695},"start":{"col":8,"line":695}}]],"4537":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":695},"start":{"col":8,"line":695}}]],"4538":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":695},"start":{"col":8,"line":695}}]],"4539":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":695},"start":{"col":8,"line":695}}]],"454":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4540":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":695},"start":{"col":8,"line":695}}]],"4541":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":695},"start":{"col":8,"line":695}}]],"4542":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":695},"start":{"col":8,"line":695}}]],"4543":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":695},"start":{"col":8,"line":695}}]],"4544":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":695},"start":{"col":8,"line":695}}]],"4545":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":37,"line":695},"start":{"col":8,"line":695}}]],"4546":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":51,"line":695},"start":{"col":8,"line":695}}]],"4547":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":51,"line":695},"start":{"col":8,"line":695}}]],"4548":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":51,"line":695},"start":{"col":8,"line":695}}]],"4549":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":51,"line":695},"start":{"col":8,"line":695}}]],"455":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4551":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":5,"line":25},"start":{"col":4,"line":22}}]],"4552":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":26,"line":51},"start":{"col":8,"line":51}}]],"4553":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":26,"line":51},"start":{"col":8,"line":51}}]],"4554":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":12,"line":95},"start":{"col":8,"line":95}}]],"4555":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":12,"line":95},"start":{"col":8,"line":95}}]],"4556":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":22,"line":95},"start":{"col":8,"line":95}}]],"4557":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":22,"line":95},"start":{"col":8,"line":95}}]],"4558":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":95},"start":{"col":8,"line":95}}]],"4559":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":95},"start":{"col":8,"line":95}}]],"456":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4560":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":95},"start":{"col":8,"line":95}}]],"4561":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":95},"start":{"col":8,"line":95}}]],"4562":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":95},"start":{"col":8,"line":95}}]],"4563":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":95},"start":{"col":8,"line":95}}]],"4564":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":95},"start":{"col":8,"line":95}}]],"4565":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":95},"start":{"col":8,"line":95}}]],"4566":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":12,"line":152},"start":{"col":8,"line":152}}]],"4567":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":12,"line":152},"start":{"col":8,"line":152}}]],"4568":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":22,"line":152},"start":{"col":8,"line":152}}]],"4569":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":22,"line":152},"start":{"col":8,"line":152}}]],"457":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4570":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":40,"line":152},"start":{"col":8,"line":152}}]],"4571":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":40,"line":152},"start":{"col":8,"line":152}}]],"4572":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":40,"line":152},"start":{"col":8,"line":152}}]],"4573":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":40,"line":152},"start":{"col":8,"line":152}}]],"4574":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":40,"line":152},"start":{"col":8,"line":152}}]],"4575":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":40,"line":152},"start":{"col":8,"line":152}}]],"4576":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":40,"line":152},"start":{"col":8,"line":152}}]],"4577":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":40,"line":152},"start":{"col":8,"line":152}}]],"4578":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":40,"line":152},"start":{"col":8,"line":152}}]],"458":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4583":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":34,"line":66},"start":{"col":18,"line":66}}]],"4584":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":40,"line":67},"start":{"col":21,"line":67}}]],"4585":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"4586":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"4587":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"4588":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"4589":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"459":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4590":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"4591":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"4592":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":43,"line":68},"start":{"col":22,"line":68}}]],"4593":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":43,"line":68},"start":{"col":22,"line":68}}]],"4594":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":44,"line":71},"start":{"col":24,"line":71}}]],"4595":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":44,"line":71},"start":{"col":24,"line":71}}]],"4596":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":53,"line":72},"start":{"col":16,"line":72}}]],"4597":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":53,"line":72},"start":{"col":16,"line":72}}]],"4598":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":53,"line":72},"start":{"col":16,"line":72}}]],"4599":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":53,"line":72},"start":{"col":16,"line":72}}]],"46":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"460":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4600":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":43,"line":68},"start":{"col":22,"line":68}}]],"4601":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":43,"line":68},"start":{"col":22,"line":68}}]],"4602":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":43,"line":68},"start":{"col":22,"line":68}}]],"4603":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":43,"line":68},"start":{"col":22,"line":68}}]],"4604":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":43,"line":68},"start":{"col":22,"line":68}}]],"4605":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":43,"line":68},"start":{"col":22,"line":68}}]],"4606":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":43,"line":68},"start":{"col":22,"line":68}}]],"4607":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":43,"line":68},"start":{"col":22,"line":68}}]],"4608":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":43,"line":68},"start":{"col":22,"line":68}}]],"4609":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":43,"line":68},"start":{"col":22,"line":68}}]],"461":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4610":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":43,"line":68},"start":{"col":22,"line":68}}]],"4611":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":43,"line":68},"start":{"col":22,"line":68}}]],"4612":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":43,"line":68},"start":{"col":22,"line":68}}]],"4613":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":43,"line":68},"start":{"col":22,"line":68}}]],"4614":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":43,"line":68},"start":{"col":22,"line":68}}]],"4615":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":40,"line":73},"start":{"col":34,"line":73}}]],"4616":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":40,"line":73},"start":{"col":34,"line":73}}]],"4617":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":54,"line":73},"start":{"col":34,"line":73}}]],"4618":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":54,"line":73},"start":{"col":34,"line":73}}]],"4619":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":54,"line":73},"start":{"col":34,"line":73}}]],"462":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4620":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":55,"line":73},"start":{"col":16,"line":73}}]],"4621":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":55,"line":73},"start":{"col":16,"line":73}}]],"4622":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":55,"line":73},"start":{"col":16,"line":73}}]],"4623":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":55,"line":73},"start":{"col":16,"line":73}}]],"4624":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":41,"line":74},"start":{"col":16,"line":74}}]],"4625":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":41,"line":74},"start":{"col":16,"line":74}}]],"4626":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":52,"line":75},"start":{"col":34,"line":75}}]],"4627":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":52,"line":75},"start":{"col":34,"line":75}}]],"4628":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":52,"line":75},"start":{"col":34,"line":75}}]],"4629":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":52,"line":75},"start":{"col":34,"line":75}}]],"463":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4630":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":52,"line":75},"start":{"col":34,"line":75}}]],"4631":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":52,"line":75},"start":{"col":34,"line":75}}]],"4632":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":52,"line":75},"start":{"col":34,"line":75}}]],"4633":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":52,"line":75},"start":{"col":34,"line":75}}]],"4634":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":52,"line":75},"start":{"col":34,"line":75}}]],"4635":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":53,"line":75},"start":{"col":16,"line":75}}]],"4636":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":53,"line":75},"start":{"col":16,"line":75}}]],"4637":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":53,"line":75},"start":{"col":16,"line":75}}]],"4638":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":53,"line":75},"start":{"col":16,"line":75}}]],"4639":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":24,"line":76},"start":{"col":8,"line":76}}]],"464":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4640":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":24,"line":76},"start":{"col":8,"line":76}}]],"4641":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":5,"line":77},"start":{"col":70,"line":64}}]],"4642":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":5,"line":77},"start":{"col":70,"line":64}}]],"4643":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":5,"line":77},"start":{"col":70,"line":64}}]],"4644":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":5,"line":77},"start":{"col":70,"line":64}}]],"4645":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":5,"line":77},"start":{"col":70,"line":64}}]],"4646":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":5,"line":77},"start":{"col":70,"line":64}}]],"4647":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":5,"line":77},"start":{"col":70,"line":64}}]],"4648":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":52,"line":75},"start":{"col":34,"line":75}}]],"4649":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":52,"line":75},"start":{"col":34,"line":75}}]],"465":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4650":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":52,"line":75},"start":{"col":34,"line":75}}]],"4651":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":52,"line":75},"start":{"col":34,"line":75}}]],"4652":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":52,"line":75},"start":{"col":34,"line":75}}]],"4653":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":52,"line":75},"start":{"col":34,"line":75}}]],"4654":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":52,"line":75},"start":{"col":34,"line":75}}]],"4655":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":52,"line":75},"start":{"col":34,"line":75}}]],"4656":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":52,"line":75},"start":{"col":34,"line":75}}]],"4657":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"4658":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"4659":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"466":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4660":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"4661":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"4662":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"4663":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"4664":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"4665":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"4666":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"4667":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"4668":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"4669":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":35,"line":68},"start":{"col":22,"line":68}}]],"467":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4671":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":30,"line":387},"start":{"col":22,"line":387}}]],"4672":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":388},"start":{"col":8,"line":388}}]],"4673":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":388},"start":{"col":8,"line":388}}]],"4674":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":388},"start":{"col":8,"line":388}}]],"4675":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":388},"start":{"col":8,"line":388}}]],"4676":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":388},"start":{"col":8,"line":388}}]],"4677":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":388},"start":{"col":8,"line":388}}]],"4678":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":388},"start":{"col":8,"line":388}}]],"4679":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":388},"start":{"col":8,"line":388}}]],"468":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4680":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":388},"start":{"col":8,"line":388}}]],"4681":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":388},"start":{"col":8,"line":388}}]],"4682":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":390},"start":{"col":39,"line":386}}]],"4683":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":390},"start":{"col":39,"line":386}}]],"4684":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":390},"start":{"col":39,"line":386}}]],"4685":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":390},"start":{"col":39,"line":386}}]],"4686":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":390},"start":{"col":39,"line":386}}]],"4687":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":388},"start":{"col":8,"line":388}}]],"4688":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":388},"start":{"col":8,"line":388}}]],"4689":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":388},"start":{"col":8,"line":388}}]],"469":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4690":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":388},"start":{"col":8,"line":388}}]],"4691":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":388},"start":{"col":8,"line":388}}]],"4692":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":388},"start":{"col":8,"line":388}}]],"4694":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4695":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":45,"line":18},"start":{"col":41,"line":18}}]],"4696":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":45,"line":18},"start":{"col":41,"line":18}}]],"4697":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4698":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4699":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"47":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"470":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4700":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":65,"line":18},"start":{"col":56,"line":18}}]],"4701":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":65,"line":18},"start":{"col":56,"line":18}}]],"4702":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4703":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4704":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4705":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4706":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4707":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4708":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4709":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"471":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4710":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4711":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4712":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4713":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4714":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4715":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4716":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4717":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4718":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4719":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"472":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4720":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4721":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4722":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4723":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4724":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4725":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4726":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4727":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4728":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4729":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"473":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4730":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4731":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4732":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4733":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4734":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4735":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4736":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4737":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4738":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4739":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"474":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4740":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4741":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4742":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":5,"line":247},"start":{"col":50,"line":242}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4743":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":5,"line":247},"start":{"col":50,"line":242}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4744":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":5,"line":247},"start":{"col":50,"line":242}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4745":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":5,"line":247},"start":{"col":50,"line":242}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4746":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":5,"line":247},"start":{"col":50,"line":242}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4747":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":5,"line":247},"start":{"col":50,"line":242}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4748":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4749":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"475":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4750":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4751":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4752":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4753":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4754":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4755":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4756":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4757":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4758":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4759":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"476":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4760":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4761":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4762":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4763":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4764":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4765":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4766":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4767":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4768":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4769":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"477":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4770":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4771":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4772":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4773":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4774":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4775":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4776":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4777":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4778":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4779":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"478":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4780":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4781":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/interface.cairo",{"end":{"col":22,"line":14},"start":{"col":0,"line":14}}]],"4783":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":26,"line":17},"start":{"col":18,"line":17}}]],"4784":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4785":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4786":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4787":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4788":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4789":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"479":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4790":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4791":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4792":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4793":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4794":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4795":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4796":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4797":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4798":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":1,"line":22},"start":{"col":64,"line":16}}]],"4799":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":1,"line":22},"start":{"col":64,"line":16}}]],"48":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"480":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4800":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":1,"line":22},"start":{"col":64,"line":16}}]],"4801":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":1,"line":22},"start":{"col":64,"line":16}}]],"4802":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":1,"line":22},"start":{"col":64,"line":16}}]],"4803":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":1,"line":22},"start":{"col":64,"line":16}}]],"4804":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4805":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4806":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4807":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4808":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4809":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"481":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4810":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"4811":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ops/deref.cairo",{"end":{"col":29,"line":35},"start":{"col":8,"line":35}}]],"4812":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ops/deref.cairo",{"end":{"col":29,"line":35},"start":{"col":8,"line":35}}]],"4813":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":22,"line":40},"start":{"col":8,"line":40}}]],"4814":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":22,"line":40},"start":{"col":8,"line":40}}]],"4815":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":12,"line":95},"start":{"col":8,"line":95}}]],"4816":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":12,"line":95},"start":{"col":8,"line":95}}]],"4817":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":22,"line":95},"start":{"col":8,"line":95}}]],"4818":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":22,"line":95},"start":{"col":8,"line":95}}]],"4819":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":95},"start":{"col":8,"line":95}}]],"482":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4820":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":95},"start":{"col":8,"line":95}}]],"4821":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":95},"start":{"col":8,"line":95}}]],"4822":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":95},"start":{"col":8,"line":95}}]],"4823":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":95},"start":{"col":8,"line":95}}]],"4824":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":95},"start":{"col":8,"line":95}}]],"4825":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":95},"start":{"col":8,"line":95}}]],"4826":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":95},"start":{"col":8,"line":95}}]],"4827":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":76},"start":{"col":8,"line":73}}]],"4828":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":76},"start":{"col":8,"line":73}}]],"4829":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":76},"start":{"col":8,"line":73}}]],"483":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4830":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":26,"line":74},"start":{"col":23,"line":74}}]],"4831":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":26,"line":74},"start":{"col":21,"line":74}}]],"4832":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":26,"line":74},"start":{"col":21,"line":74}}]],"4833":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":26,"line":74},"start":{"col":21,"line":74}}]],"4834":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":76},"start":{"col":8,"line":73}}]],"4835":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":9,"line":76},"start":{"col":8,"line":73}}]],"4836":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":24,"line":75},"start":{"col":21,"line":75}}]],"4837":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":24,"line":75},"start":{"col":20,"line":75}}]],"4838":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":24,"line":75},"start":{"col":20,"line":75}}]],"4839":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"484":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4840":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"4841":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":69,"line":17},"start":{"col":4,"line":17}}]],"4842":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":69,"line":17},"start":{"col":4,"line":17}}]],"4843":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":42,"line":49},"start":{"col":12,"line":49}}]],"4844":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":42,"line":49},"start":{"col":12,"line":49}}]],"4845":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":42,"line":49},"start":{"col":12,"line":49}}]],"4846":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":42,"line":49},"start":{"col":12,"line":49}}]],"4847":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":67,"line":49},"start":{"col":63,"line":49}}]],"4848":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4849":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"485":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4850":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4851":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4852":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4853":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4854":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4855":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4856":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4857":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4858":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4859":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"486":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4860":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4861":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":9,"line":50},"start":{"col":95,"line":48}}]],"4862":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":9,"line":50},"start":{"col":95,"line":48}}]],"4863":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":9,"line":50},"start":{"col":95,"line":48}}]],"4864":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":9,"line":50},"start":{"col":95,"line":48}}]],"4865":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":9,"line":50},"start":{"col":95,"line":48}}]],"4866":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":9,"line":50},"start":{"col":95,"line":48}}]],"4867":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":9,"line":50},"start":{"col":95,"line":48}}]],"4868":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4869":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"487":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4870":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4871":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4872":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4873":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4874":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4875":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4876":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":68,"line":49},"start":{"col":12,"line":49}}]],"4877":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":354},"start":{"col":12,"line":354}}]],"4878":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":354},"start":{"col":12,"line":354}}]],"4879":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":35,"line":354},"start":{"col":12,"line":354}}]],"488":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4880":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4881":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4882":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4883":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4884":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4885":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4886":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4887":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4888":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4889":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"489":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4890":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4891":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":68,"line":355},"start":{"col":12,"line":355}}]],"4892":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":68,"line":355},"start":{"col":12,"line":355}}]],"4893":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":68,"line":355},"start":{"col":12,"line":355}}]],"4894":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":68,"line":355},"start":{"col":12,"line":355}}]],"4895":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":68,"line":355},"start":{"col":12,"line":355}}]],"4896":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":68,"line":355},"start":{"col":12,"line":355}}]],"4897":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":68,"line":355},"start":{"col":12,"line":355}}]],"4898":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":68,"line":355},"start":{"col":12,"line":355}}]],"4899":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":68,"line":355},"start":{"col":12,"line":355}}]],"49":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"490":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4900":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4901":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4902":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4903":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4904":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4905":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4906":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4907":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4908":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":354},"start":{"col":12,"line":354}}]],"4909":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":69,"line":18},"start":{"col":4,"line":18}}]],"491":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4910":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":69,"line":18},"start":{"col":4,"line":18}}]],"4911":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":55,"line":61},"start":{"col":4,"line":61}}]],"4912":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":55,"line":61},"start":{"col":4,"line":61}}]],"4913":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":55,"line":61},"start":{"col":4,"line":61}}]],"4914":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":55,"line":61},"start":{"col":4,"line":61}}]],"4915":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":55,"line":61},"start":{"col":4,"line":61}}]],"4916":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":55,"line":61},"start":{"col":4,"line":61}}]],"4917":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":55,"line":61},"start":{"col":4,"line":61}}]],"4918":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":55,"line":61},"start":{"col":4,"line":61}}]],"4919":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":55,"line":61},"start":{"col":4,"line":61}}]],"492":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4920":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":55,"line":61},"start":{"col":4,"line":61}}]],"4921":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":55,"line":61},"start":{"col":4,"line":61}}]],"4922":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":55,"line":61},"start":{"col":4,"line":61}}]],"4923":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":72,"line":61},"start":{"col":4,"line":61}}]],"4924":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":72,"line":61},"start":{"col":4,"line":61}}]],"4925":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":72,"line":61},"start":{"col":4,"line":61}}]],"4926":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":72,"line":61},"start":{"col":4,"line":61}}]],"4927":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":72,"line":61},"start":{"col":4,"line":61}}]],"4928":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":20,"line":113},"start":{"col":8,"line":113}}]],"4929":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":20,"line":113},"start":{"col":8,"line":113}}]],"493":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4930":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":20,"line":113},"start":{"col":8,"line":113}}]],"4931":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":80,"line":34},"start":{"col":76,"line":34}}]],"4932":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":81,"line":34},"start":{"col":53,"line":34}}]],"4933":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":81,"line":34},"start":{"col":53,"line":34}}]],"4934":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":81,"line":34},"start":{"col":53,"line":34}}]],"4935":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":82,"line":34},"start":{"col":8,"line":34}}]],"4936":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":82,"line":34},"start":{"col":8,"line":34}}]],"4937":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":82,"line":34},"start":{"col":8,"line":34}}]],"4938":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":15},"start":{"col":37,"line":15}}]],"4939":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":15},"start":{"col":37,"line":15}}]],"494":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4940":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":15},"start":{"col":37,"line":15}}]],"4941":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4942":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":90,"line":19},"start":{"col":4,"line":19}}]],"4943":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4944":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4945":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4946":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4947":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4948":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4949":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"495":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4950":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4951":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4952":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4953":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4954":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4955":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4956":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4957":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4958":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4959":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"496":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4960":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4961":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4962":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4963":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4964":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4965":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4966":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4967":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4968":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4969":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"497":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4970":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4971":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4972":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4973":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4974":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4975":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4976":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4977":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4978":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4979":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"498":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4980":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4981":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4982":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4983":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4984":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4985":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4986":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4987":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4988":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4989":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"499":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"4990":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":30,"line":7},"start":{"col":0,"line":7}}]],"4991":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":86,"line":38},"start":{"col":82,"line":38}}]],"4992":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":87,"line":38},"start":{"col":53,"line":38}}]],"4993":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":87,"line":38},"start":{"col":53,"line":38}}]],"4994":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":87,"line":38},"start":{"col":53,"line":38}}]],"4995":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":88,"line":38},"start":{"col":8,"line":38}}]],"4996":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":88,"line":38},"start":{"col":8,"line":38}}]],"4997":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/contract_address.cairo",{"end":{"col":88,"line":38},"start":{"col":8,"line":38}}]],"4998":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":41,"line":28},"start":{"col":18,"line":28}}]],"4999":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":41,"line":28},"start":{"col":18,"line":28}}]],"5":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"50":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"500":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5000":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":41,"line":28},"start":{"col":18,"line":28}}]],"5001":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":41,"line":28},"start":{"col":18,"line":28}}]],"5002":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":41,"line":28},"start":{"col":18,"line":28}}]],"5003":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":41,"line":28},"start":{"col":18,"line":28}}]],"5004":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":49,"line":28},"start":{"col":18,"line":28}}]],"5005":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":49,"line":28},"start":{"col":18,"line":28}}]],"5006":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":36,"line":29},"start":{"col":21,"line":29}}]],"5007":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":36,"line":29},"start":{"col":21,"line":29}}]],"5008":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":36,"line":29},"start":{"col":21,"line":29}}]],"5009":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":36,"line":29},"start":{"col":21,"line":29}}]],"501":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5010":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":36,"line":29},"start":{"col":21,"line":29}}]],"5011":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":36,"line":29},"start":{"col":21,"line":29}}]],"5012":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":36,"line":29},"start":{"col":21,"line":29}}]],"5013":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":36,"line":29},"start":{"col":21,"line":29}}]],"5014":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":36,"line":29},"start":{"col":21,"line":29}}]],"5015":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":36,"line":29},"start":{"col":21,"line":29}}]],"5016":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":36,"line":29},"start":{"col":21,"line":29}}]],"5017":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":36,"line":29},"start":{"col":21,"line":29}}]],"5018":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":36,"line":29},"start":{"col":21,"line":29}}]],"5019":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":43,"line":29},"start":{"col":21,"line":29}}]],"502":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5020":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":43,"line":29},"start":{"col":21,"line":29}}]],"5021":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":43,"line":29},"start":{"col":21,"line":29}}]],"5022":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":43,"line":29},"start":{"col":21,"line":29}}]],"5023":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":33,"line":30},"start":{"col":7,"line":30}}]],"5024":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":33,"line":30},"start":{"col":7,"line":30}}]],"5025":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":33,"line":30},"start":{"col":7,"line":30}}]],"5026":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":34},"start":{"col":4,"line":30}}]],"5027":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":34},"start":{"col":4,"line":30}}]],"5028":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":34},"start":{"col":4,"line":30}}]],"5029":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":34},"start":{"col":4,"line":30}}]],"503":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5030":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":45,"line":33},"start":{"col":8,"line":33}}]],"5031":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":45,"line":33},"start":{"col":8,"line":33}}]],"5032":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":45,"line":33},"start":{"col":8,"line":33}}]],"5033":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":45,"line":33},"start":{"col":8,"line":33}}]],"5034":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":45,"line":33},"start":{"col":8,"line":33}}]],"5035":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":45,"line":33},"start":{"col":8,"line":33}}]],"5036":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":45,"line":33},"start":{"col":8,"line":33}}]],"5037":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":34},"start":{"col":4,"line":30}}]],"5038":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":34},"start":{"col":4,"line":30}}]],"5039":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":34},"start":{"col":4,"line":30}}]],"504":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5040":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":34},"start":{"col":4,"line":30}}]],"5041":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":46,"line":31},"start":{"col":8,"line":31}}]],"5042":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":46,"line":31},"start":{"col":8,"line":31}}]],"5043":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":46,"line":31},"start":{"col":8,"line":31}}]],"5044":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":46,"line":31},"start":{"col":8,"line":31}}]],"5045":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":46,"line":31},"start":{"col":8,"line":31}}]],"5046":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":46,"line":31},"start":{"col":8,"line":31}}]],"5047":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":46,"line":31},"start":{"col":8,"line":31}}]],"5048":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":60,"line":31},"start":{"col":8,"line":31}}]],"5049":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":60,"line":31},"start":{"col":8,"line":31}}]],"505":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5050":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":60,"line":31},"start":{"col":8,"line":31}}]],"5051":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":60,"line":31},"start":{"col":8,"line":31}}]],"5052":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":60,"line":31},"start":{"col":8,"line":31}}]],"5053":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":60,"line":31},"start":{"col":8,"line":31}}]],"5054":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":60,"line":31},"start":{"col":8,"line":31}}]],"5055":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":1,"line":35},"start":{"col":37,"line":27}}]],"5056":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":1,"line":35},"start":{"col":37,"line":27}}]],"5057":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":1,"line":35},"start":{"col":37,"line":27}}]],"5058":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":1,"line":35},"start":{"col":37,"line":27}}]],"5059":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":1,"line":35},"start":{"col":37,"line":27}}]],"506":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5060":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":1,"line":35},"start":{"col":37,"line":27}}]],"5061":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":46,"line":31},"start":{"col":8,"line":31}}]],"5062":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":46,"line":31},"start":{"col":8,"line":31}}]],"5063":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":46,"line":31},"start":{"col":8,"line":31}}]],"5064":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":46,"line":31},"start":{"col":8,"line":31}}]],"5065":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":46,"line":31},"start":{"col":8,"line":31}}]],"5066":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":46,"line":31},"start":{"col":8,"line":31}}]],"5067":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":46,"line":31},"start":{"col":8,"line":31}}]],"5068":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":46,"line":31},"start":{"col":8,"line":31}}]],"5069":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":41,"line":28},"start":{"col":18,"line":28}}]],"507":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5070":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":41,"line":28},"start":{"col":18,"line":28}}]],"5071":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":41,"line":28},"start":{"col":18,"line":28}}]],"5072":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":41,"line":28},"start":{"col":18,"line":28}}]],"5073":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":41,"line":28},"start":{"col":18,"line":28}}]],"5074":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":41,"line":28},"start":{"col":18,"line":28}}]],"5075":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":41,"line":28},"start":{"col":18,"line":28}}]],"5076":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":19,"line":81},"start":{"col":8,"line":81}}]],"5077":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":19,"line":81},"start":{"col":8,"line":81}}]],"5078":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":19,"line":81},"start":{"col":8,"line":81}}]],"508":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5080":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"5081":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"5082":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":27,"line":337},"start":{"col":10,"line":337}}]],"5083":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":27,"line":337},"start":{"col":10,"line":337}}]],"5084":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":343},"start":{"col":4,"line":337}}]],"5085":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":343},"start":{"col":4,"line":337}}]],"5086":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":343},"start":{"col":4,"line":337}}]],"5087":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"5088":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"5089":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":39,"line":339},"start":{"col":12,"line":339}}]],"509":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5090":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":340},"start":{"col":12,"line":340}}]],"5091":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":340},"start":{"col":12,"line":340}}]],"5092":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":340},"start":{"col":12,"line":340}}]],"5093":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":340},"start":{"col":12,"line":340}}]],"5094":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":340},"start":{"col":12,"line":340}}]],"5095":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":340},"start":{"col":12,"line":340}}]],"5096":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":343},"start":{"col":4,"line":337}}]],"5097":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":343},"start":{"col":4,"line":337}}]],"5098":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":343},"start":{"col":4,"line":337}}]],"5099":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":343},"start":{"col":4,"line":337}}]],"51":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"510":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5100":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":343},"start":{"col":4,"line":337}}]],"5101":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":98,"line":336}}]],"5102":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":98,"line":336}}]],"5103":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":98,"line":336}}]],"5104":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":98,"line":336}}]],"5105":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":98,"line":336}}]],"5106":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"5107":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"5108":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"5109":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"511":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5110":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"5111":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"5112":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"5113":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"5114":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"5115":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"5116":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"5117":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"5118":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"5119":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":1,"line":344},"start":{"col":0,"line":336}}]],"512":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5120":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":342},"start":{"col":26,"line":342}}]],"5121":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":342},"start":{"col":26,"line":342}}]],"5122":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":342},"start":{"col":26,"line":342}}]],"5123":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":342},"start":{"col":26,"line":342}}]],"5124":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":342},"start":{"col":26,"line":342}}]],"5125":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":342},"start":{"col":26,"line":342}}]],"5126":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":342},"start":{"col":26,"line":342}}]],"5127":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":57,"line":342},"start":{"col":26,"line":342}}]],"5128":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":50,"line":343},"start":{"col":26,"line":343}}]],"5129":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":50,"line":343},"start":{"col":26,"line":343}}]],"513":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5130":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":50,"line":343},"start":{"col":26,"line":343}}]],"5131":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":50,"line":343},"start":{"col":26,"line":343}}]],"5132":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":50,"line":343},"start":{"col":26,"line":343}}]],"5133":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":50,"line":343},"start":{"col":26,"line":343}}]],"5134":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":50,"line":343},"start":{"col":26,"line":343}}]],"5135":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":50,"line":343},"start":{"col":26,"line":343}}]],"5136":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":50,"line":343},"start":{"col":26,"line":343}}]],"5137":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":50,"line":343},"start":{"col":26,"line":343}}]],"5138":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":50,"line":343},"start":{"col":26,"line":343}}]],"5139":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":50,"line":343},"start":{"col":26,"line":343}}]],"514":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5140":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"5141":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"5142":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"5143":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"5144":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"5145":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"5146":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"5147":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"5148":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"5149":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"515":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5150":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"5151":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":91,"line":345},"start":{"col":12,"line":345}}]],"5152":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":91,"line":345},"start":{"col":12,"line":345}}]],"5153":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":91,"line":345},"start":{"col":12,"line":345}}]],"5154":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":91,"line":345},"start":{"col":12,"line":345}}]],"5155":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":91,"line":345},"start":{"col":12,"line":345}}]],"5156":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":91,"line":345},"start":{"col":12,"line":345}}]],"5157":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":91,"line":345},"start":{"col":12,"line":345}}]],"5158":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":91,"line":345},"start":{"col":12,"line":345}}]],"5159":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":347},"start":{"col":82,"line":341}}]],"516":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5160":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":347},"start":{"col":82,"line":341}}]],"5161":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":347},"start":{"col":82,"line":341}}]],"5162":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":347},"start":{"col":82,"line":341}}]],"5163":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":347},"start":{"col":82,"line":341}}]],"5164":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":347},"start":{"col":82,"line":341}}]],"5165":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":347},"start":{"col":82,"line":341}}]],"5166":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":91,"line":345},"start":{"col":12,"line":345}}]],"5167":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":91,"line":345},"start":{"col":12,"line":345}}]],"5168":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":91,"line":345},"start":{"col":12,"line":345}}]],"5169":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":91,"line":345},"start":{"col":12,"line":345}}]],"517":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5170":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":91,"line":345},"start":{"col":12,"line":345}}]],"5171":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":91,"line":345},"start":{"col":12,"line":345}}]],"5172":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":91,"line":345},"start":{"col":12,"line":345}}]],"5173":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":91,"line":345},"start":{"col":12,"line":345}}]],"5174":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"5175":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"5176":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"5177":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"5178":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"5179":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"518":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5180":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"5181":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":63,"line":345},"start":{"col":19,"line":345}}]],"5182":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":342},"start":{"col":26,"line":342}}]],"5183":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":342},"start":{"col":26,"line":342}}]],"5184":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":342},"start":{"col":26,"line":342}}]],"5185":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":342},"start":{"col":26,"line":342}}]],"5186":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":342},"start":{"col":26,"line":342}}]],"5187":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":342},"start":{"col":26,"line":342}}]],"5188":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":342},"start":{"col":26,"line":342}}]],"5189":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":342},"start":{"col":26,"line":342}}]],"519":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5190":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":49,"line":342},"start":{"col":26,"line":342}}]],"5191":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":30,"line":650},"start":{"col":8,"line":650}}]],"5192":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":30,"line":650},"start":{"col":8,"line":650}}]],"5193":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":30,"line":650},"start":{"col":8,"line":650}}]],"5194":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":363},"start":{"col":29,"line":363}}]],"5195":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":363},"start":{"col":29,"line":363}}]],"5196":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":363},"start":{"col":29,"line":363}}]],"5197":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":363},"start":{"col":29,"line":363}}]],"5198":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":363},"start":{"col":29,"line":363}}]],"5199":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":363},"start":{"col":29,"line":363}}]],"52":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"520":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5200":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":363},"start":{"col":29,"line":363}}]],"5201":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":363},"start":{"col":29,"line":363}}]],"5202":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":363},"start":{"col":29,"line":363}}]],"5203":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":363},"start":{"col":29,"line":363}}]],"5204":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":363},"start":{"col":29,"line":363}}]],"5205":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":363},"start":{"col":29,"line":363}}]],"5206":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":363},"start":{"col":29,"line":363}}]],"5207":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":65,"line":364},"start":{"col":12,"line":364}}]],"5208":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":65,"line":364},"start":{"col":12,"line":364}}]],"5209":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":65,"line":364},"start":{"col":12,"line":364}}]],"521":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5210":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":65,"line":364},"start":{"col":12,"line":364}}]],"5211":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":65,"line":364},"start":{"col":12,"line":364}}]],"5212":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":65,"line":364},"start":{"col":12,"line":364}}]],"5213":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":65,"line":364},"start":{"col":12,"line":364}}]],"5214":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":65,"line":364},"start":{"col":12,"line":364}}]],"5215":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":65,"line":364},"start":{"col":12,"line":364}}]],"5216":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":65,"line":364},"start":{"col":12,"line":364}}]],"5217":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":65,"line":364},"start":{"col":12,"line":364}}]],"5218":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":65,"line":364},"start":{"col":12,"line":364}}]],"5219":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":363},"start":{"col":29,"line":363}}]],"522":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5220":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":363},"start":{"col":29,"line":363}}]],"5221":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":363},"start":{"col":29,"line":363}}]],"5222":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":363},"start":{"col":29,"line":363}}]],"5223":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":363},"start":{"col":29,"line":363}}]],"5224":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":363},"start":{"col":29,"line":363}}]],"5225":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":363},"start":{"col":29,"line":363}}]],"5226":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":363},"start":{"col":29,"line":363}}]],"5227":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":363},"start":{"col":29,"line":363}}]],"5228":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":59,"line":363},"start":{"col":29,"line":363}}]],"5229":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ops/deref.cairo",{"end":{"col":29,"line":35},"start":{"col":8,"line":35}}]],"523":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5230":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ops/deref.cairo",{"end":{"col":29,"line":35},"start":{"col":8,"line":35}}]],"5231":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":22,"line":40},"start":{"col":8,"line":40}}]],"5232":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":22,"line":40},"start":{"col":8,"line":40}}]],"5233":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":21,"line":334},"start":{"col":8,"line":334}}]],"5234":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":21,"line":334},"start":{"col":8,"line":334}}]],"5235":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":21,"line":334},"start":{"col":8,"line":334}}]],"5236":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":21,"line":334},"start":{"col":8,"line":334}}]],"5237":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":21,"line":334},"start":{"col":8,"line":334}}]],"5238":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":334},"start":{"col":8,"line":334}}]],"5239":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":334},"start":{"col":8,"line":334}}]],"524":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5240":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":334},"start":{"col":8,"line":334}}]],"5241":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":334},"start":{"col":8,"line":334}}]],"5242":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":334},"start":{"col":8,"line":334}}]],"5243":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":334},"start":{"col":8,"line":334}}]],"5244":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":334},"start":{"col":8,"line":334}}]],"5245":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":334},"start":{"col":8,"line":334}}]],"5246":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":334},"start":{"col":8,"line":334}}]],"5247":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":32,"line":191},"start":{"col":8,"line":191}}]],"5248":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":32,"line":191},"start":{"col":8,"line":191}}]],"5249":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":40,"line":190},"start":{"col":35,"line":190}}]],"525":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5251":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":5,"line":22},"start":{"col":4,"line":19}}]],"5252":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":26,"line":51},"start":{"col":8,"line":51}}]],"5253":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":26,"line":51},"start":{"col":8,"line":51}}]],"5254":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":21,"line":334},"start":{"col":8,"line":334}}]],"5255":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":21,"line":334},"start":{"col":8,"line":334}}]],"5256":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":21,"line":334},"start":{"col":8,"line":334}}]],"5257":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":21,"line":334},"start":{"col":8,"line":334}}]],"5258":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":21,"line":334},"start":{"col":8,"line":334}}]],"5259":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":334},"start":{"col":8,"line":334}}]],"526":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5260":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":334},"start":{"col":8,"line":334}}]],"5261":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":334},"start":{"col":8,"line":334}}]],"5262":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":334},"start":{"col":8,"line":334}}]],"5263":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":334},"start":{"col":8,"line":334}}]],"5264":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":334},"start":{"col":8,"line":334}}]],"5265":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":334},"start":{"col":8,"line":334}}]],"5266":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":334},"start":{"col":8,"line":334}}]],"5267":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":334},"start":{"col":8,"line":334}}]],"5269":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":51,"line":328},"start":{"col":31,"line":328}}]],"527":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5270":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":51,"line":328},"start":{"col":31,"line":328}}]],"5271":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":329},"start":{"col":31,"line":328}}]],"5272":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":329},"start":{"col":31,"line":328}}]],"5273":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":329},"start":{"col":31,"line":328}}]],"5274":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":329},"start":{"col":31,"line":328}}]],"5275":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":329},"start":{"col":31,"line":328}}]],"5276":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":330},"start":{"col":31,"line":328}}]],"5277":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":48,"line":330},"start":{"col":31,"line":328}}]],"5278":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"5279":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"528":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5280":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"5281":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"5282":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"5283":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"5284":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":331},"start":{"col":31,"line":328}}]],"5285":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":331},"start":{"col":31,"line":328}}]],"5286":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":331},"start":{"col":31,"line":328}}]],"5287":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":62,"line":331},"start":{"col":31,"line":328}}]],"5288":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":43,"line":332},"start":{"col":31,"line":328}}]],"5289":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":43,"line":332},"start":{"col":31,"line":328}}]],"529":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5290":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":27,"line":333},"start":{"col":31,"line":328}}]],"5291":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"5292":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"5293":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"5294":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"5295":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"5296":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"5297":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"5298":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"5299":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"53":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"530":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5300":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"5301":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":336},"start":{"col":12,"line":336}}]],"5302":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":336},"start":{"col":12,"line":336}}]],"5303":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":336},"start":{"col":12,"line":336}}]],"5304":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":336},"start":{"col":12,"line":336}}]],"5305":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":336},"start":{"col":12,"line":336}}]],"5306":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":336},"start":{"col":12,"line":336}}]],"5307":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":336},"start":{"col":12,"line":336}}]],"5308":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":336},"start":{"col":12,"line":336}}]],"5309":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":336},"start":{"col":12,"line":336}}]],"531":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5310":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":55,"line":336},"start":{"col":12,"line":336}}]],"5311":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"5312":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"5313":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"5314":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"5315":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"5316":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"5317":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"5318":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"5319":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":87,"line":335},"start":{"col":27,"line":335}}]],"532":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5320":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"5321":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"5322":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"5323":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"5324":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"5325":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"5326":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"5327":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"5328":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"5329":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"533":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5330":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"5331":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"5332":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":61,"line":331},"start":{"col":29,"line":331}}]],"5333":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5334":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5335":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5336":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5337":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5338":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5339":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"534":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5340":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5341":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5342":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5343":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5344":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5345":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5346":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5347":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5348":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5349":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"535":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5350":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5351":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5352":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5353":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5354":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5355":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5356":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5357":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5358":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ops/deref.cairo",{"end":{"col":29,"line":35},"start":{"col":8,"line":35}}]],"5359":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ops/deref.cairo",{"end":{"col":29,"line":35},"start":{"col":8,"line":35}}]],"536":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5360":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":22,"line":40},"start":{"col":8,"line":40}}]],"5361":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":22,"line":40},"start":{"col":8,"line":40}}]],"5363":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":25,"line":277},"start":{"col":8,"line":277}}]],"5364":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":25,"line":277},"start":{"col":8,"line":277}}]],"5365":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":81},"start":{"col":4,"line":81}}]],"5366":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":81},"start":{"col":4,"line":81}}]],"5367":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":81},"start":{"col":4,"line":81}}]],"5368":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":81},"start":{"col":4,"line":81}}]],"5369":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":81},"start":{"col":4,"line":81}}]],"537":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5370":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":81},"start":{"col":4,"line":81}}]],"5371":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":35,"line":81},"start":{"col":4,"line":81}}]],"5372":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":35,"line":81},"start":{"col":4,"line":81}}]],"5373":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":35,"line":81},"start":{"col":4,"line":81}}]],"5374":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":35,"line":81},"start":{"col":4,"line":81}}]],"5375":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":35,"line":81},"start":{"col":4,"line":81}}]],"5376":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":35,"line":81},"start":{"col":4,"line":81}}]],"5377":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":35,"line":81},"start":{"col":4,"line":81}}]],"5378":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":35,"line":81},"start":{"col":4,"line":81}}]],"5379":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":82},"start":{"col":42,"line":80}}]],"538":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5380":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":82},"start":{"col":42,"line":80}}]],"5381":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":82},"start":{"col":42,"line":80}}]],"5382":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":82},"start":{"col":42,"line":80}}]],"5383":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":82},"start":{"col":42,"line":80}}]],"5384":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":81},"start":{"col":4,"line":81}}]],"5385":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":81},"start":{"col":4,"line":81}}]],"5386":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":81},"start":{"col":4,"line":81}}]],"5387":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":81},"start":{"col":4,"line":81}}]],"5388":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":81},"start":{"col":4,"line":81}}]],"5389":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":81},"start":{"col":4,"line":81}}]],"539":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5390":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":20,"line":113},"start":{"col":8,"line":113}}]],"5391":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":20,"line":113},"start":{"col":8,"line":113}}]],"5392":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":20,"line":113},"start":{"col":8,"line":113}}]],"5393":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":9,"line":76},"start":{"col":8,"line":73}}]],"5394":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":9,"line":76},"start":{"col":8,"line":73}}]],"5395":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":24,"line":74},"start":{"col":23,"line":74}}]],"5396":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":24,"line":74},"start":{"col":23,"line":74}}]],"5397":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":24,"line":74},"start":{"col":23,"line":74}}]],"5398":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":34,"line":74},"start":{"col":29,"line":74}}]],"5399":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":34,"line":74},"start":{"col":29,"line":74}}]],"54":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"540":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5400":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":34,"line":74},"start":{"col":29,"line":74}}]],"5401":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":9,"line":76},"start":{"col":8,"line":73}}]],"5402":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":25,"line":75},"start":{"col":24,"line":75}}]],"5403":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":25,"line":75},"start":{"col":24,"line":75}}]],"5404":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":25,"line":75},"start":{"col":24,"line":75}}]],"5405":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":34,"line":75},"start":{"col":30,"line":75}}]],"5406":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":34,"line":75},"start":{"col":30,"line":75}}]],"5407":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":34,"line":75},"start":{"col":30,"line":75}}]],"541":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5412":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":14,"line":22},"start":{"col":4,"line":22}}]],"5413":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":14,"line":22},"start":{"col":4,"line":22}}]],"5414":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":35,"line":15},"start":{"col":31,"line":15}}]],"5415":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":52,"line":15},"start":{"col":31,"line":15}}]],"5416":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":53,"line":15},"start":{"col":8,"line":15}}]],"5417":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":53,"line":15},"start":{"col":8,"line":15}}]],"5418":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":53,"line":15},"start":{"col":8,"line":15}}]],"5419":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":23,"line":114},"start":{"col":8,"line":114}}]],"542":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5420":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":23,"line":114},"start":{"col":8,"line":114}}]],"5421":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":23,"line":114},"start":{"col":8,"line":114}}]],"5422":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":23,"line":114},"start":{"col":8,"line":114}}]],"5423":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":23,"line":114},"start":{"col":8,"line":114}}]],"5424":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":23,"line":114},"start":{"col":8,"line":114}}]],"5425":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":114},"start":{"col":8,"line":114}}]],"5426":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":114},"start":{"col":8,"line":114}}]],"5427":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":114},"start":{"col":8,"line":114}}]],"5428":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":114},"start":{"col":8,"line":114}}]],"5429":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":114},"start":{"col":8,"line":114}}]],"543":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5430":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":114},"start":{"col":8,"line":114}}]],"5431":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":114},"start":{"col":8,"line":114}}]],"5432":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":114},"start":{"col":8,"line":114}}]],"5433":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":114},"start":{"col":8,"line":114}}]],"5434":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":114},"start":{"col":8,"line":114}}]],"5435":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":114},"start":{"col":8,"line":114}}]],"5436":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":114},"start":{"col":8,"line":114}}]],"5437":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":114},"start":{"col":8,"line":114}}]],"5438":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":114},"start":{"col":8,"line":114}}]],"5439":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":114},"start":{"col":8,"line":114}}]],"544":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5440":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":23,"line":136},"start":{"col":8,"line":136}}]],"5441":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":23,"line":136},"start":{"col":8,"line":136}}]],"5442":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":23,"line":136},"start":{"col":8,"line":136}}]],"5443":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":23,"line":136},"start":{"col":8,"line":136}}]],"5444":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":23,"line":136},"start":{"col":8,"line":136}}]],"5445":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":23,"line":136},"start":{"col":8,"line":136}}]],"5446":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":136},"start":{"col":8,"line":136}}]],"5447":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":136},"start":{"col":8,"line":136}}]],"5448":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":136},"start":{"col":8,"line":136}}]],"5449":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":45,"line":136},"start":{"col":8,"line":136}}]],"545":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5450":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":45,"line":136},"start":{"col":8,"line":136}}]],"5451":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":45,"line":136},"start":{"col":8,"line":136}}]],"5452":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":45,"line":136},"start":{"col":8,"line":136}}]],"5453":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":45,"line":136},"start":{"col":8,"line":136}}]],"5454":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":45,"line":136},"start":{"col":8,"line":136}}]],"5455":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":45,"line":136},"start":{"col":8,"line":136}}]],"5456":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":45,"line":136},"start":{"col":8,"line":136}}]],"5457":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":45,"line":136},"start":{"col":8,"line":136}}]],"5458":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":45,"line":136},"start":{"col":8,"line":136}}]],"5459":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":45,"line":136},"start":{"col":8,"line":136}}]],"546":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5461":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":42,"line":38},"start":{"col":12,"line":38}}]],"5462":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":42,"line":38},"start":{"col":12,"line":38}}]],"5464":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":13,"line":41},"start":{"col":12,"line":41}}]],"5465":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":13,"line":41},"start":{"col":12,"line":41}}]],"5466":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":86},"start":{"col":4,"line":86}}]],"5467":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":86},"start":{"col":4,"line":86}}]],"5468":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":86},"start":{"col":4,"line":86}}]],"5469":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":86},"start":{"col":4,"line":86}}]],"547":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5470":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":86},"start":{"col":4,"line":86}}]],"5471":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":86},"start":{"col":4,"line":86}}]],"5472":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":32,"line":86},"start":{"col":4,"line":86}}]],"5473":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":32,"line":86},"start":{"col":4,"line":86}}]],"5474":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":32,"line":86},"start":{"col":4,"line":86}}]],"5475":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":32,"line":86},"start":{"col":4,"line":86}}]],"5476":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":32,"line":86},"start":{"col":4,"line":86}}]],"5477":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":32,"line":86},"start":{"col":4,"line":86}}]],"5478":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":32,"line":86},"start":{"col":4,"line":86}}]],"5479":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":32,"line":86},"start":{"col":4,"line":86}}]],"548":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":226},"start":{"col":8,"line":222}}]],"5480":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":87},"start":{"col":40,"line":85}}]],"5481":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":87},"start":{"col":40,"line":85}}]],"5482":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":87},"start":{"col":40,"line":85}}]],"5483":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":87},"start":{"col":40,"line":85}}]],"5484":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":1,"line":87},"start":{"col":40,"line":85}}]],"5485":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":86},"start":{"col":4,"line":86}}]],"5486":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":86},"start":{"col":4,"line":86}}]],"5487":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":86},"start":{"col":4,"line":86}}]],"5488":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":86},"start":{"col":4,"line":86}}]],"5489":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":86},"start":{"col":4,"line":86}}]],"5490":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/info.cairo",{"end":{"col":24,"line":86},"start":{"col":4,"line":86}}]],"5491":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":19,"line":81},"start":{"col":8,"line":81}}]],"5492":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":19,"line":81},"start":{"col":8,"line":81}}]],"5493":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":19,"line":81},"start":{"col":8,"line":81}}]],"5498":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":51,"line":59},"start":{"col":46,"line":59}}]],"5499":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":51,"line":59},"start":{"col":46,"line":59}}]],"55":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"5500":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":53,"line":59},"start":{"col":8,"line":59}}]],"5501":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":53,"line":59},"start":{"col":8,"line":59}}]],"5502":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"5503":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"5504":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"5505":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"5506":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"5507":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":45,"line":40},"start":{"col":25,"line":40}}]],"5508":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":45,"line":40},"start":{"col":25,"line":40}}]],"5509":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":57,"line":41},"start":{"col":8,"line":41}}]],"551":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5510":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":57,"line":41},"start":{"col":8,"line":41}}]],"5511":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":57,"line":41},"start":{"col":8,"line":41}}]],"5512":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":57,"line":41},"start":{"col":8,"line":41}}]],"5513":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":75,"line":41},"start":{"col":71,"line":41}}]],"5514":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":76,"line":41},"start":{"col":8,"line":41}}]],"5515":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":76,"line":41},"start":{"col":8,"line":41}}]],"5516":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":87,"line":41},"start":{"col":8,"line":41}}]],"5517":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":87,"line":41},"start":{"col":8,"line":41}}]],"5518":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"5519":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"552":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5520":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"5521":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"5522":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"5526":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":39,"line":37},"start":{"col":31,"line":37}}]],"5527":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":34,"line":36},"start":{"col":30,"line":36}}]],"5528":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":34,"line":36},"start":{"col":30,"line":36}}]],"5529":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":34,"line":36},"start":{"col":30,"line":36}}]],"553":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5530":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":34,"line":36},"start":{"col":30,"line":36}}]],"5531":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":34,"line":36},"start":{"col":30,"line":36}}]],"5532":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":34,"line":36},"start":{"col":30,"line":36}}]],"5533":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":40,"line":36},"start":{"col":30,"line":36}}]],"5534":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5535":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5536":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5537":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5538":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5539":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"554":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5540":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5541":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5542":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5543":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5544":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":45,"line":43},"start":{"col":25,"line":43}}]],"5545":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":45,"line":43},"start":{"col":25,"line":43}}]],"5546":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":53,"line":45},"start":{"col":8,"line":44}}]],"5547":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":53,"line":45},"start":{"col":8,"line":44}}]],"5548":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":53,"line":45},"start":{"col":8,"line":44}}]],"5549":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":53,"line":45},"start":{"col":8,"line":44}}]],"555":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5550":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":46},"start":{"col":26,"line":46}}]],"5551":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":46},"start":{"col":26,"line":46}}]],"5552":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":46},"start":{"col":26,"line":46}}]],"5553":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":46},"start":{"col":26,"line":46}}]],"5554":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":46},"start":{"col":26,"line":46}}]],"5555":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":46},"start":{"col":26,"line":46}}]],"5556":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":37,"line":46},"start":{"col":26,"line":46}}]],"5557":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":38,"line":46},"start":{"col":8,"line":44}}]],"5558":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":38,"line":46},"start":{"col":8,"line":44}}]],"5559":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":47},"start":{"col":26,"line":47}}]],"556":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5560":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":47},"start":{"col":26,"line":47}}]],"5561":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":47},"start":{"col":26,"line":47}}]],"5562":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":47},"start":{"col":26,"line":47}}]],"5563":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":47},"start":{"col":26,"line":47}}]],"5564":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":47},"start":{"col":26,"line":47}}]],"5565":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":36,"line":47},"start":{"col":26,"line":47}}]],"5566":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":37,"line":47},"start":{"col":8,"line":44}}]],"5567":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":37,"line":47},"start":{"col":8,"line":44}}]],"5568":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":48},"start":{"col":26,"line":48}}]],"5569":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":48},"start":{"col":26,"line":48}}]],"557":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5570":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":48},"start":{"col":26,"line":48}}]],"5571":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":48},"start":{"col":26,"line":48}}]],"5572":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":48},"start":{"col":26,"line":48}}]],"5573":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":48},"start":{"col":26,"line":48}}]],"5574":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":44,"line":48},"start":{"col":26,"line":48}}]],"5575":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":45,"line":48},"start":{"col":8,"line":44}}]],"5576":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":45,"line":48},"start":{"col":8,"line":44}}]],"5577":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":49},"start":{"col":26,"line":49}}]],"5578":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":49},"start":{"col":26,"line":49}}]],"5579":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":49},"start":{"col":26,"line":49}}]],"558":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5580":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":49},"start":{"col":26,"line":49}}]],"5581":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":49},"start":{"col":26,"line":49}}]],"5582":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":45,"line":49},"start":{"col":26,"line":49}}]],"5583":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":46,"line":49},"start":{"col":8,"line":44}}]],"5584":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":46,"line":49},"start":{"col":8,"line":44}}]],"5585":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5586":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5587":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5588":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":56,"line":50},"start":{"col":44,"line":50}}]],"5589":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":56,"line":50},"start":{"col":44,"line":50}}]],"559":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5590":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":63,"line":50},"start":{"col":44,"line":50}}]],"5591":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":63,"line":50},"start":{"col":44,"line":50}}]],"5592":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":64,"line":50},"start":{"col":25,"line":50}}]],"5593":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":64,"line":50},"start":{"col":25,"line":50}}]],"5594":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":64,"line":50},"start":{"col":25,"line":50}}]],"5595":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":64,"line":50},"start":{"col":25,"line":50}}]],"5596":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":64,"line":50},"start":{"col":25,"line":50}}]],"5597":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":64,"line":50},"start":{"col":25,"line":50}}]],"5598":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":64,"line":50},"start":{"col":25,"line":50}}]],"5599":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":64,"line":50},"start":{"col":25,"line":50}}]],"56":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"560":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5600":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":64,"line":50},"start":{"col":25,"line":50}}]],"5601":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":65,"line":50},"start":{"col":8,"line":44}}]],"5602":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":65,"line":50},"start":{"col":8,"line":44}}]],"5603":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":65,"line":50},"start":{"col":8,"line":44}}]],"5604":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":65,"line":50},"start":{"col":8,"line":44}}]],"5605":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":23,"line":51},"start":{"col":8,"line":44}}]],"5606":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":23,"line":51},"start":{"col":8,"line":44}}]],"5607":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":5,"line":52},"start":{"col":55,"line":35}}]],"5608":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":5,"line":52},"start":{"col":55,"line":35}}]],"5609":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":5,"line":52},"start":{"col":55,"line":35}}]],"561":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5610":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":5,"line":52},"start":{"col":55,"line":35}}]],"5611":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":5,"line":52},"start":{"col":55,"line":35}}]],"5612":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":5,"line":52},"start":{"col":55,"line":35}}]],"5613":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":64,"line":50},"start":{"col":25,"line":50}}]],"5614":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":64,"line":50},"start":{"col":25,"line":50}}]],"5615":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":64,"line":50},"start":{"col":25,"line":50}}]],"5616":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":64,"line":50},"start":{"col":25,"line":50}}]],"5617":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":64,"line":50},"start":{"col":25,"line":50}}]],"5618":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":64,"line":50},"start":{"col":25,"line":50}}]],"5619":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":64,"line":50},"start":{"col":25,"line":50}}]],"562":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5620":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":64,"line":50},"start":{"col":25,"line":50}}]],"5621":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5622":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5623":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5624":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5625":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5626":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5627":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5628":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"5629":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"563":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5630":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":19,"line":106},"start":{"col":11,"line":106}}]],"5631":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":9,"line":112},"start":{"col":8,"line":106}}]],"5632":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":9,"line":112},"start":{"col":8,"line":106}}]],"5633":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":9,"line":112},"start":{"col":8,"line":106}}]],"5634":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":9,"line":112},"start":{"col":8,"line":106}}]],"5635":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":57,"line":110},"start":{"col":46,"line":110}}]],"5636":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":57,"line":110},"start":{"col":46,"line":110}}]],"5637":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":57,"line":110},"start":{"col":46,"line":110}}]],"5638":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":76,"line":110},"start":{"col":28,"line":110}}]],"5639":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":76,"line":110},"start":{"col":28,"line":110}}]],"564":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5640":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":76,"line":110},"start":{"col":28,"line":110}}]],"5641":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":13,"line":111},"start":{"col":12,"line":111}}]],"5642":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":13,"line":111},"start":{"col":12,"line":111}}]],"5643":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":13,"line":111},"start":{"col":12,"line":111}}]],"5644":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":9,"line":112},"start":{"col":8,"line":106}}]],"5645":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":9,"line":112},"start":{"col":8,"line":106}}]],"5646":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":9,"line":112},"start":{"col":8,"line":106}}]],"5647":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":66,"line":107},"start":{"col":55,"line":107}}]],"5648":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":66,"line":107},"start":{"col":55,"line":107}}]],"5649":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":66,"line":107},"start":{"col":55,"line":107}}]],"565":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5650":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":76,"line":107},"start":{"col":28,"line":107}}]],"5651":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":76,"line":107},"start":{"col":28,"line":107}}]],"5652":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":76,"line":107},"start":{"col":28,"line":107}}]],"5653":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":13,"line":108},"start":{"col":12,"line":108}}]],"5654":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":13,"line":108},"start":{"col":12,"line":108}}]],"5655":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":13,"line":108},"start":{"col":12,"line":108}}]],"5657":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":4,"line":147}}]],"5658":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":4,"line":147}}]],"5659":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":30,"line":148},"start":{"col":14,"line":148}}]],"566":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5660":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":30,"line":148},"start":{"col":14,"line":148}}]],"5661":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":154},"start":{"col":8,"line":148}}]],"5662":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":154},"start":{"col":8,"line":148}}]],"5663":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":154},"start":{"col":8,"line":148}}]],"5664":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":43,"line":150},"start":{"col":28,"line":150}}]],"5665":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":43,"line":150},"start":{"col":28,"line":150}}]],"5666":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":44,"line":150},"start":{"col":16,"line":150}}]],"5667":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":44,"line":150},"start":{"col":16,"line":150}}]],"5668":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":44,"line":150},"start":{"col":16,"line":150}}]],"5669":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":38,"line":151},"start":{"col":16,"line":151}}]],"567":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5670":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":38,"line":151},"start":{"col":16,"line":151}}]],"5671":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":38,"line":151},"start":{"col":16,"line":151}}]],"5672":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":38,"line":151},"start":{"col":16,"line":151}}]],"5673":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":38,"line":151},"start":{"col":16,"line":151}}]],"5674":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":38,"line":151},"start":{"col":16,"line":151}}]],"5675":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":154},"start":{"col":8,"line":148}}]],"5676":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":154},"start":{"col":8,"line":148}}]],"5677":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":154},"start":{"col":8,"line":148}}]],"5678":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":154},"start":{"col":8,"line":148}}]],"5679":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":154},"start":{"col":8,"line":148}}]],"568":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5680":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":79,"line":147}}]],"5681":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":79,"line":147}}]],"5682":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":79,"line":147}}]],"5683":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":79,"line":147}}]],"5684":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":79,"line":147}}]],"5685":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":4,"line":147}}]],"5686":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":4,"line":147}}]],"5687":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":4,"line":147}}]],"5688":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":4,"line":147}}]],"5689":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":4,"line":147}}]],"569":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5690":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":4,"line":147}}]],"5691":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":4,"line":147}}]],"5692":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":4,"line":147}}]],"5693":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":4,"line":147}}]],"5694":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":4,"line":147}}]],"5695":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":4,"line":147}}]],"5696":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":4,"line":147}}]],"5697":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":4,"line":147}}]],"5698":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":155},"start":{"col":4,"line":147}}]],"5699":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":25,"line":285},"start":{"col":8,"line":285}}]],"57":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"570":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5700":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":25,"line":285},"start":{"col":8,"line":285}}]],"5702":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":18,"line":316},"start":{"col":8,"line":316}}]],"5703":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":18,"line":316},"start":{"col":8,"line":316}}]],"5704":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":18,"line":316},"start":{"col":8,"line":316}}]],"5705":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":18,"line":316},"start":{"col":8,"line":316}}]],"5706":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":18,"line":316},"start":{"col":8,"line":316}}]],"5707":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":316},"start":{"col":8,"line":316}}]],"5708":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":316},"start":{"col":8,"line":316}}]],"5709":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":42,"line":317},"start":{"col":31,"line":317}}]],"571":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5710":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":42,"line":317},"start":{"col":31,"line":317}}]],"5711":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":55,"line":317},"start":{"col":8,"line":317}}]],"5712":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":55,"line":317},"start":{"col":8,"line":317}}]],"5713":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":55,"line":317},"start":{"col":8,"line":317}}]],"5714":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":55,"line":317},"start":{"col":8,"line":317}}]],"5715":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":55,"line":317},"start":{"col":8,"line":317}}]],"5716":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":55,"line":317},"start":{"col":8,"line":317}}]],"5717":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"5718":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"5719":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"572":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5720":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":5,"line":173},"start":{"col":51,"line":168}}]],"5721":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":5,"line":173},"start":{"col":51,"line":168}}]],"5722":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":5,"line":173},"start":{"col":51,"line":168}}]],"5723":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"5724":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"5725":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"5726":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":62,"line":171},"start":{"col":42,"line":171}}]],"5727":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":62,"line":171},"start":{"col":42,"line":171}}]],"5728":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":62,"line":171},"start":{"col":42,"line":171}}]],"5729":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":19,"line":121},"start":{"col":8,"line":121}}]],"573":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5730":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":19,"line":121},"start":{"col":8,"line":121}}]],"5731":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":19,"line":121},"start":{"col":8,"line":121}}]],"5733":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":31,"line":816},"start":{"col":8,"line":816}}]],"5734":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":31,"line":816},"start":{"col":8,"line":816}}]],"5736":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5737":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5738":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5739":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"574":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5740":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5741":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5742":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5743":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":44,"line":19},"start":{"col":19,"line":19}}]],"5744":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":44,"line":19},"start":{"col":19,"line":19}}]],"5745":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":44,"line":19},"start":{"col":19,"line":19}}]],"5746":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":44,"line":19},"start":{"col":19,"line":19}}]],"5747":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":44,"line":19},"start":{"col":19,"line":19}}]],"5748":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":44,"line":19},"start":{"col":19,"line":19}}]],"5749":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":44,"line":19},"start":{"col":19,"line":19}}]],"575":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5750":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":45,"line":19},"start":{"col":8,"line":19}}]],"5751":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":45,"line":19},"start":{"col":8,"line":19}}]],"5752":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":45,"line":19},"start":{"col":8,"line":19}}]],"5753":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5754":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5755":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5756":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5757":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5758":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5759":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"576":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5760":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":44,"line":19},"start":{"col":19,"line":19}}]],"5761":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":44,"line":19},"start":{"col":19,"line":19}}]],"5762":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":44,"line":19},"start":{"col":19,"line":19}}]],"5763":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":44,"line":19},"start":{"col":19,"line":19}}]],"5764":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":44,"line":19},"start":{"col":19,"line":19}}]],"5765":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":44,"line":19},"start":{"col":19,"line":19}}]],"5766":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":44,"line":19},"start":{"col":19,"line":19}}]],"5767":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":44,"line":19},"start":{"col":19,"line":19}}]],"5768":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":44,"line":19},"start":{"col":19,"line":19}}]],"5769":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"577":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5770":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5771":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5772":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5773":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5774":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5775":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5776":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5777":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5778":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5779":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"578":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5780":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5781":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5782":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5783":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5784":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5785":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5786":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5787":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5788":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5789":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"579":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5790":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5791":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5792":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5793":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":5,"line":20},"start":{"col":4,"line":18}}]],"5796":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":5,"line":25},"start":{"col":4,"line":22}}]],"58":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"580":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5801":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":14,"line":22},"start":{"col":4,"line":22}}]],"5802":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":14,"line":22},"start":{"col":4,"line":22}}]],"5803":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":35,"line":15},"start":{"col":31,"line":15}}]],"5804":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":52,"line":15},"start":{"col":31,"line":15}}]],"5805":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":53,"line":15},"start":{"col":8,"line":15}}]],"5806":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":53,"line":15},"start":{"col":8,"line":15}}]],"5807":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":53,"line":15},"start":{"col":8,"line":15}}]],"5808":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":23,"line":80},"start":{"col":8,"line":80}}]],"5809":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":23,"line":80},"start":{"col":8,"line":80}}]],"581":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5810":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":23,"line":80},"start":{"col":8,"line":80}}]],"5811":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":23,"line":80},"start":{"col":8,"line":80}}]],"5812":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":23,"line":80},"start":{"col":8,"line":80}}]],"5813":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":23,"line":80},"start":{"col":8,"line":80}}]],"5814":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":80},"start":{"col":8,"line":80}}]],"5815":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":80},"start":{"col":8,"line":80}}]],"5816":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":80},"start":{"col":8,"line":80}}]],"5817":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":80},"start":{"col":8,"line":80}}]],"5818":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":32,"line":80},"start":{"col":8,"line":80}}]],"5819":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":80},"start":{"col":8,"line":80}}]],"582":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5820":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":80},"start":{"col":8,"line":80}}]],"5821":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":80},"start":{"col":8,"line":80}}]],"5822":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":80},"start":{"col":8,"line":80}}]],"5823":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":80},"start":{"col":8,"line":80}}]],"5824":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":80},"start":{"col":8,"line":80}}]],"5825":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":80},"start":{"col":8,"line":80}}]],"5826":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":80},"start":{"col":8,"line":80}}]],"5827":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":80},"start":{"col":8,"line":80}}]],"5828":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":39,"line":80},"start":{"col":8,"line":80}}]],"583":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5830":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":5,"line":14},"start":{"col":4,"line":11}}]],"5831":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":26,"line":51},"start":{"col":8,"line":51}}]],"5832":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":26,"line":51},"start":{"col":8,"line":51}}]],"5833":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":65,"line":348},"start":{"col":61,"line":348}}]],"5834":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":65,"line":348},"start":{"col":61,"line":348}}]],"5835":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":74,"line":348},"start":{"col":61,"line":348}}]],"5836":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":74,"line":348},"start":{"col":61,"line":348}}]],"5837":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":74,"line":348},"start":{"col":61,"line":348}}]],"5838":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":24,"line":349},"start":{"col":8,"line":349}}]],"5839":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":24,"line":349},"start":{"col":8,"line":349}}]],"584":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5840":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":24,"line":349},"start":{"col":8,"line":349}}]],"5841":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":24,"line":349},"start":{"col":8,"line":349}}]],"5842":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":24,"line":349},"start":{"col":8,"line":349}}]],"5843":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":24,"line":349},"start":{"col":8,"line":349}}]],"5844":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":24,"line":349},"start":{"col":8,"line":349}}]],"5845":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":24,"line":349},"start":{"col":8,"line":349}}]],"5846":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":24,"line":349},"start":{"col":8,"line":349}}]],"5847":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":24,"line":349},"start":{"col":8,"line":349}}]],"5848":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5849":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"585":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5850":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5851":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5852":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5853":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5854":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5855":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5856":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5857":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5858":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5859":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"586":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5860":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5861":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5862":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5863":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5864":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5865":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5866":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5867":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5868":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5869":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"587":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5870":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5871":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5872":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":78,"line":16},"start":{"col":4,"line":16}}]],"5873":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"5874":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"5875":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"5876":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":5,"line":173},"start":{"col":51,"line":168}}]],"5877":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":5,"line":173},"start":{"col":51,"line":168}}]],"5878":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":5,"line":173},"start":{"col":51,"line":168}}]],"5879":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"588":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5880":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"5881":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"5882":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":62,"line":171},"start":{"col":42,"line":171}}]],"5883":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":62,"line":171},"start":{"col":42,"line":171}}]],"5884":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":62,"line":171},"start":{"col":42,"line":171}}]],"5885":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":19,"line":81},"start":{"col":8,"line":81}}]],"5886":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":19,"line":81},"start":{"col":8,"line":81}}]],"5887":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":19,"line":81},"start":{"col":8,"line":81}}]],"5888":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/felt_252.cairo",{"end":{"col":29,"line":11},"start":{"col":17,"line":11}}]],"5889":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/felt_252.cairo",{"end":{"col":13,"line":11},"start":{"col":9,"line":11}}]],"589":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5890":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/felt_252.cairo",{"end":{"col":13,"line":11},"start":{"col":8,"line":11}}]],"5891":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/felt_252.cairo",{"end":{"col":13,"line":11},"start":{"col":8,"line":11}}]],"5892":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/felt_252.cairo",{"end":{"col":29,"line":11},"start":{"col":17,"line":11}}]],"5893":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/felt_252.cairo",{"end":{"col":29,"line":11},"start":{"col":17,"line":11}}]],"5894":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/felt_252.cairo",{"end":{"col":29,"line":11},"start":{"col":8,"line":11}}]],"5895":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/felt_252.cairo",{"end":{"col":29,"line":11},"start":{"col":8,"line":11}}]],"5896":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/felt_252.cairo",{"end":{"col":29,"line":11},"start":{"col":8,"line":11}}]],"5897":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/felt_252.cairo",{"end":{"col":29,"line":11},"start":{"col":8,"line":11}}]],"5898":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":12,"line":136},"start":{"col":8,"line":136}}]],"5899":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":12,"line":136},"start":{"col":8,"line":136}}]],"59":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"590":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5900":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5901":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5902":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5903":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5904":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5905":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5906":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5907":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5908":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5909":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"591":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5910":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5911":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5912":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5913":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5914":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5915":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5916":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5917":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5918":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5919":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"592":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5920":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5921":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5922":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5923":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5924":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":34,"line":49},"start":{"col":19,"line":49}}]],"5925":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":31,"line":1214},"start":{"col":8,"line":1214}}]],"5926":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":31,"line":1214},"start":{"col":8,"line":1214}}]],"5927":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":31,"line":1214},"start":{"col":8,"line":1214}}]],"5928":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":31,"line":1214},"start":{"col":8,"line":1214}}]],"5929":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":27,"line":103},"start":{"col":9,"line":103}}]],"593":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5930":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":27,"line":103},"start":{"col":9,"line":103}}]],"5931":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":27,"line":103},"start":{"col":9,"line":103}}]],"5932":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":27,"line":103},"start":{"col":9,"line":103}}]],"5933":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":27,"line":103},"start":{"col":8,"line":103}}]],"5934":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":27,"line":103},"start":{"col":8,"line":103}}]],"5935":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":27,"line":103},"start":{"col":8,"line":103}}]],"5936":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":27,"line":103},"start":{"col":8,"line":103}}]],"5937":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":26,"line":109},"start":{"col":8,"line":109}}]],"5938":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":26,"line":109},"start":{"col":8,"line":109}}]],"5939":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":26,"line":109},"start":{"col":8,"line":109}}]],"594":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5940":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":26,"line":109},"start":{"col":8,"line":109}}]],"5941":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/traits.cairo",{"end":{"col":26,"line":109},"start":{"col":8,"line":109}}]],"5942":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":918},"start":{"col":8,"line":918}}]],"5943":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":918},"start":{"col":8,"line":918}}]],"5944":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":918},"start":{"col":8,"line":918}}]],"5945":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":34,"line":918},"start":{"col":8,"line":918}}]],"5946":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5947":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5948":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5949":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":5,"line":247},"start":{"col":50,"line":242}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"595":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5950":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":5,"line":247},"start":{"col":50,"line":242}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5951":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":5,"line":247},"start":{"col":50,"line":242}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5952":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":5,"line":247},"start":{"col":50,"line":242}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5953":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5954":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5955":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5956":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5957":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5958":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5959":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"596":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5960":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5961":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5962":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5963":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5964":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5965":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5966":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":918},"start":{"col":8,"line":918}}]],"5967":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":38,"line":23},"start":{"col":23,"line":23}}]],"5968":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":38,"line":23},"start":{"col":23,"line":23}}]],"5969":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":38,"line":23},"start":{"col":23,"line":23}}]],"597":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5970":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":38,"line":23},"start":{"col":23,"line":23}}]],"5971":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":38,"line":23},"start":{"col":23,"line":23}}]],"5972":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":38,"line":23},"start":{"col":23,"line":23}}]],"5973":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":43,"line":23},"start":{"col":42,"line":23}}]],"5974":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":43,"line":23},"start":{"col":42,"line":23}}]],"5975":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":43,"line":23},"start":{"col":23,"line":23}}]],"5976":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":43,"line":23},"start":{"col":23,"line":23}}]],"5977":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":5,"line":29},"start":{"col":4,"line":25}}]],"5978":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":5,"line":29},"start":{"col":4,"line":25}}]],"5979":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":5,"line":29},"start":{"col":4,"line":25}}]],"598":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5980":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":5,"line":29},"start":{"col":4,"line":25}}]],"5981":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":5,"line":29},"start":{"col":4,"line":25}}]],"5982":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":5,"line":29},"start":{"col":4,"line":25}}]],"5983":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":5,"line":29},"start":{"col":4,"line":25}}]],"5984":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":13,"line":28},"start":{"col":8,"line":28}}]],"5985":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":13,"line":28},"start":{"col":8,"line":28}}]],"5986":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":1,"line":30},"start":{"col":10,"line":22}}]],"5987":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":1,"line":30},"start":{"col":10,"line":22}}]],"5988":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":1,"line":30},"start":{"col":10,"line":22}}]],"5989":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":1,"line":30},"start":{"col":10,"line":22}}]],"599":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"5990":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":1,"line":30},"start":{"col":10,"line":22}}]],"5991":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":5,"line":29},"start":{"col":4,"line":25}}]],"5992":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":5,"line":29},"start":{"col":4,"line":25}}]],"5993":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":5,"line":29},"start":{"col":4,"line":25}}]],"5994":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"5995":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"5996":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"5997":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"5998":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"5999":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"6":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"60":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"600":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6000":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"6001":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"6002":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":94,"line":26},"start":{"col":75,"line":26}}]],"6003":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":94,"line":26},"start":{"col":75,"line":26}}]],"6004":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":94,"line":26},"start":{"col":75,"line":26}}]],"6005":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":94,"line":26},"start":{"col":75,"line":26}}]],"6006":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":94,"line":26},"start":{"col":75,"line":26}}]],"6007":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":94,"line":26},"start":{"col":75,"line":26}}]],"6008":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"6009":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"601":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6010":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":94,"line":26},"start":{"col":75,"line":26}}]],"6011":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":94,"line":26},"start":{"col":75,"line":26}}]],"6012":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":95,"line":26},"start":{"col":8,"line":26}}]],"6013":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":95,"line":26},"start":{"col":8,"line":26}}]],"6014":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":95,"line":26},"start":{"col":8,"line":26}}]],"6015":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":95,"line":26},"start":{"col":8,"line":26}}]],"6016":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":95,"line":26},"start":{"col":8,"line":26}}]],"6017":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":95,"line":26},"start":{"col":8,"line":26}}]],"6018":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":95,"line":26},"start":{"col":8,"line":26}}]],"6019":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":95,"line":26},"start":{"col":8,"line":26}}]],"602":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6020":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":94,"line":26},"start":{"col":75,"line":26}}]],"6021":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":94,"line":26},"start":{"col":75,"line":26}}]],"6022":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":94,"line":26},"start":{"col":75,"line":26}}]],"6023":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":94,"line":26},"start":{"col":75,"line":26}}]],"6024":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":94,"line":26},"start":{"col":75,"line":26}}]],"6025":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":94,"line":26},"start":{"col":75,"line":26}}]],"6026":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":94,"line":26},"start":{"col":75,"line":26}}]],"6027":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":94,"line":26},"start":{"col":75,"line":26}}]],"6028":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":94,"line":26},"start":{"col":75,"line":26}}]],"6029":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"603":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6030":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"6031":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"6032":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"6033":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"6034":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"6035":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"6036":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"6037":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils/signature.cairo",{"end":{"col":72,"line":26},"start":{"col":53,"line":26}}]],"604":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6040":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":5,"line":22},"start":{"col":4,"line":19}}]],"6045":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":14,"line":19},"start":{"col":4,"line":19}}]],"6046":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":14,"line":19},"start":{"col":4,"line":19}}]],"6047":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":33,"line":320},"start":{"col":19,"line":320}}]],"6048":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":33,"line":320},"start":{"col":19,"line":320}}]],"6049":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":12,"line":321},"start":{"col":8,"line":321}}]],"605":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6050":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":12,"line":321},"start":{"col":8,"line":321}}]],"6051":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":21,"line":321},"start":{"col":8,"line":321}}]],"6052":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":21,"line":321},"start":{"col":8,"line":321}}]],"6053":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":21,"line":321},"start":{"col":8,"line":321}}]],"6054":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":21,"line":321},"start":{"col":8,"line":321}}]],"6056":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":47,"line":72},"start":{"col":43,"line":72}}]],"6057":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":75,"line":72},"start":{"col":43,"line":72}}]],"6058":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":76,"line":72},"start":{"col":12,"line":72}}]],"6059":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":76,"line":72},"start":{"col":12,"line":72}}]],"606":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6060":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":76,"line":72},"start":{"col":12,"line":72}}]],"6061":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":76,"line":72},"start":{"col":12,"line":72}}]],"6062":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":76,"line":72},"start":{"col":12,"line":72}}]],"6063":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":73},"start":{"col":8,"line":71}}]],"6064":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":73},"start":{"col":8,"line":71}}]],"6065":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":73},"start":{"col":8,"line":71}}]],"6066":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":73},"start":{"col":8,"line":71}}]],"6067":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":73},"start":{"col":8,"line":71}}]],"607":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6074":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":14,"line":19},"start":{"col":4,"line":19}}]],"6075":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":14,"line":19},"start":{"col":4,"line":19}}]],"6076":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":33,"line":320},"start":{"col":19,"line":320}}]],"6077":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":33,"line":320},"start":{"col":19,"line":320}}]],"6078":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":12,"line":321},"start":{"col":8,"line":321}}]],"6079":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":12,"line":321},"start":{"col":8,"line":321}}]],"608":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6080":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":21,"line":321},"start":{"col":8,"line":321}}]],"6081":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":21,"line":321},"start":{"col":8,"line":321}}]],"6082":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":21,"line":321},"start":{"col":8,"line":321}}]],"6083":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":21,"line":321},"start":{"col":8,"line":321}}]],"6085":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":87},"start":{"col":24,"line":87}}]],"6086":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":56,"line":87},"start":{"col":24,"line":87}}]],"6087":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":57,"line":87},"start":{"col":12,"line":85}}]],"6088":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":57,"line":87},"start":{"col":12,"line":85}}]],"6089":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":57,"line":87},"start":{"col":12,"line":85}}]],"609":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6090":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":57,"line":87},"start":{"col":12,"line":85}}]],"6091":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":57,"line":87},"start":{"col":12,"line":85}}]],"6092":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":88},"start":{"col":8,"line":84}}]],"6093":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":88},"start":{"col":8,"line":84}}]],"6094":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":88},"start":{"col":8,"line":84}}]],"6095":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":88},"start":{"col":8,"line":84}}]],"6096":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":88},"start":{"col":8,"line":84}}]],"6097":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6098":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6099":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"61":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"610":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6102":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":5,"line":14},"start":{"col":4,"line":11}}]],"6107":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":14,"line":11},"start":{"col":4,"line":11}}]],"6108":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":14,"line":11},"start":{"col":4,"line":11}}]],"6109":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":19,"line":81},"start":{"col":8,"line":81}}]],"611":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6110":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":19,"line":81},"start":{"col":8,"line":81}}]],"6111":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":19,"line":81},"start":{"col":8,"line":81}}]],"6114":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":84,"line":186},"start":{"col":38,"line":186}}]],"6115":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":84,"line":186},"start":{"col":38,"line":186}}]],"6116":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":84,"line":186},"start":{"col":38,"line":186}}]],"6117":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":86,"line":186},"start":{"col":8,"line":186}}]],"6118":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":24,"line":66},"start":{"col":8,"line":66}}]],"6119":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":24,"line":66},"start":{"col":8,"line":66}}]],"612":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6120":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":24,"line":66},"start":{"col":8,"line":66}}]],"6121":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":24,"line":66},"start":{"col":8,"line":66}}]],"6122":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":24,"line":66},"start":{"col":8,"line":66}}]],"6123":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":67,"line":239},"start":{"col":63,"line":239}}]],"6124":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":79,"line":239},"start":{"col":61,"line":239}}]],"6125":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":79,"line":239},"start":{"col":61,"line":239}}]],"6126":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":79,"line":239},"start":{"col":61,"line":239}}]],"6127":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":79,"line":239},"start":{"col":61,"line":239}}]],"6128":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":81,"line":239},"start":{"col":8,"line":239}}]],"613":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6130":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":28,"line":87},"start":{"col":24,"line":87}}]],"6131":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":56,"line":87},"start":{"col":24,"line":87}}]],"6132":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":57,"line":87},"start":{"col":12,"line":85}}]],"6133":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":57,"line":87},"start":{"col":12,"line":85}}]],"6134":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":57,"line":87},"start":{"col":12,"line":85}}]],"6135":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":57,"line":87},"start":{"col":12,"line":85}}]],"6136":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":57,"line":87},"start":{"col":12,"line":85}}]],"6137":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":88},"start":{"col":8,"line":84}}]],"6138":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":88},"start":{"col":8,"line":84}}]],"6139":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":88},"start":{"col":8,"line":84}}]],"614":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6140":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":88},"start":{"col":8,"line":84}}]],"6141":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":88},"start":{"col":8,"line":84}}]],"6143":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":56,"line":102},"start":{"col":24,"line":102}}]],"6144":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":64,"line":102},"start":{"col":12,"line":100}}]],"6145":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":64,"line":102},"start":{"col":12,"line":100}}]],"6146":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":64,"line":102},"start":{"col":12,"line":100}}]],"6147":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":64,"line":102},"start":{"col":12,"line":100}}]],"6148":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":64,"line":102},"start":{"col":12,"line":100}}]],"6149":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":64,"line":102},"start":{"col":12,"line":100}}]],"615":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6150":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":103},"start":{"col":8,"line":99}}]],"6151":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":103},"start":{"col":8,"line":99}}]],"6152":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":103},"start":{"col":8,"line":99}}]],"6153":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":103},"start":{"col":8,"line":99}}]],"6154":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":103},"start":{"col":8,"line":99}}]],"6155":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":27,"line":51},"start":{"col":8,"line":51}}]],"6156":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":27,"line":51},"start":{"col":8,"line":51}}]],"6157":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":27,"line":51},"start":{"col":8,"line":51}}]],"6158":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":27,"line":51},"start":{"col":8,"line":51}}]],"6159":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":27,"line":51},"start":{"col":8,"line":51}}]],"616":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6160":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":25,"line":19},"start":{"col":21,"line":19}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"6161":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":25,"line":19},"start":{"col":21,"line":19}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"6162":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":25,"line":19},"start":{"col":21,"line":19}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"6163":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":25,"line":19},"start":{"col":21,"line":19}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"6164":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":25,"line":19},"start":{"col":21,"line":19}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"6165":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":25,"line":19},"start":{"col":21,"line":19}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"6166":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":25,"line":19},"start":{"col":21,"line":19}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"6167":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":25,"line":19},"start":{"col":21,"line":19}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"6168":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":25,"line":19},"start":{"col":21,"line":19}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"6169":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":25,"line":19},"start":{"col":21,"line":19}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"617":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6170":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":25,"line":19},"start":{"col":21,"line":19}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"6171":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/utils/src/cryptography/snip12.cairo",{"end":{"col":25,"line":19},"start":{"col":21,"line":19}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"6172":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":37,"line":67},"start":{"col":25,"line":67}}]],"6173":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":37,"line":67},"start":{"col":25,"line":67}}]],"6174":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":38,"line":67},"start":{"col":12,"line":67}}]],"6175":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":38,"line":67},"start":{"col":12,"line":67}}]],"6176":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":38,"line":67},"start":{"col":12,"line":67}}]],"6177":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":38,"line":67},"start":{"col":12,"line":67}}]],"6178":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":38,"line":67},"start":{"col":12,"line":67}}]],"618":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6182":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6183":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6184":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6185":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6186":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6187":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6188":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6189":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"619":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6190":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":50,"line":40},"start":{"col":32,"line":40}}]],"6191":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":50,"line":40},"start":{"col":32,"line":40}}]],"6192":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":50,"line":40},"start":{"col":32,"line":40}}]],"6193":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":50,"line":40},"start":{"col":32,"line":40}}]],"6194":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":50,"line":40},"start":{"col":32,"line":40}}]],"6195":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":50,"line":40},"start":{"col":32,"line":40}}]],"6196":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":50,"line":40},"start":{"col":32,"line":40}}]],"6197":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":50,"line":40},"start":{"col":32,"line":40}}]],"6198":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":51,"line":40},"start":{"col":12,"line":40}}]],"6199":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":51,"line":40},"start":{"col":12,"line":40}}]],"62":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"620":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6200":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":51,"line":40},"start":{"col":12,"line":40}}]],"6201":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6202":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6203":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6204":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6205":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6206":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6207":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6208":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":50,"line":40},"start":{"col":32,"line":40}}]],"6209":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":50,"line":40},"start":{"col":32,"line":40}}]],"621":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6210":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":50,"line":40},"start":{"col":32,"line":40}}]],"6211":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":50,"line":40},"start":{"col":32,"line":40}}]],"6212":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":50,"line":40},"start":{"col":32,"line":40}}]],"6213":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":50,"line":40},"start":{"col":32,"line":40}}]],"6214":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":50,"line":40},"start":{"col":32,"line":40}}]],"6215":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":50,"line":40},"start":{"col":32,"line":40}}]],"6216":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":50,"line":40},"start":{"col":32,"line":40}}]],"6217":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6218":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6219":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"622":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6220":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6221":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6222":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6223":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6224":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6225":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6226":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6227":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6228":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6229":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"623":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6230":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6231":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6232":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6233":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6234":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6235":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6236":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6237":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6238":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6239":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"624":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6240":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6241":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6242":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":9,"line":41},"start":{"col":8,"line":39}}]],"6243":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"6244":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"6245":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"6246":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"6247":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":39,"line":44},"start":{"col":8,"line":44}}]],"6249":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":61,"line":131},"start":{"col":30,"line":131}}]],"625":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6250":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":61,"line":131},"start":{"col":30,"line":131}}]],"6251":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":61,"line":131},"start":{"col":30,"line":131}}]],"6252":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":61,"line":131},"start":{"col":30,"line":131}}]],"6253":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":61,"line":131},"start":{"col":30,"line":131}}]],"6254":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"6255":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"6256":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"6257":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"6258":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"6259":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"626":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6260":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"6261":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"6262":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"6263":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"6264":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"6265":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"6266":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":132},"start":{"col":62,"line":130}}]],"6267":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":132},"start":{"col":62,"line":130}}]],"6268":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":132},"start":{"col":62,"line":130}}]],"6269":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":132},"start":{"col":62,"line":130}}]],"627":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6270":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":132},"start":{"col":62,"line":130}}]],"6271":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":132},"start":{"col":62,"line":130}}]],"6272":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"6273":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"6274":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"6275":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"6276":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"6277":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"6278":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":131},"start":{"col":4,"line":131}}]],"6279":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":29,"line":141},"start":{"col":8,"line":141}}]],"628":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6280":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":29,"line":141},"start":{"col":8,"line":141}}]],"6281":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":29,"line":141},"start":{"col":8,"line":141}}]],"6282":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/clone.cairo",{"end":{"col":13,"line":65},"start":{"col":9,"line":65}}]],"6283":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/clone.cairo",{"end":{"col":13,"line":65},"start":{"col":8,"line":65}}]],"6284":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/clone.cairo",{"end":{"col":13,"line":65},"start":{"col":8,"line":65}}]],"6285":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":23,"line":243},"start":{"col":8,"line":243}}]],"6286":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":23,"line":243},"start":{"col":8,"line":243}}]],"6287":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":23,"line":243},"start":{"col":8,"line":243}}]],"6288":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":17,"line":809},"start":{"col":8,"line":809}}]],"6289":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":809},"start":{"col":8,"line":809}}]],"629":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6290":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":809},"start":{"col":8,"line":809}}]],"6291":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":809},"start":{"col":8,"line":809}}]],"6292":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":29,"line":809},"start":{"col":8,"line":809}}]],"6293":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":47,"line":38},"start":{"col":43,"line":38}}]],"6294":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":47,"line":38},"start":{"col":42,"line":38}}]],"6295":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":69,"line":39},"start":{"col":4,"line":39}}]],"6296":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":69,"line":39},"start":{"col":4,"line":39}}]],"6297":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":69,"line":39},"start":{"col":4,"line":39}}]],"6298":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":69,"line":39},"start":{"col":4,"line":39}}]],"6299":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":69,"line":39},"start":{"col":4,"line":39}}]],"63":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"630":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6300":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":69,"line":39},"start":{"col":4,"line":39}}]],"6301":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":69,"line":39},"start":{"col":4,"line":39}}]],"6302":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":69,"line":39},"start":{"col":4,"line":39}}]],"6303":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":69,"line":39},"start":{"col":4,"line":39}}]],"6304":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":69,"line":39},"start":{"col":4,"line":39}}]],"6305":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":69,"line":39},"start":{"col":4,"line":39}}]],"6306":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":69,"line":39},"start":{"col":4,"line":39}}]],"6307":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":86,"line":39},"start":{"col":4,"line":39}}]],"6308":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":86,"line":39},"start":{"col":4,"line":39}}]],"6309":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":86,"line":39},"start":{"col":4,"line":39}}]],"631":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6310":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":86,"line":39},"start":{"col":4,"line":39}}]],"6311":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/utils.cairo",{"end":{"col":86,"line":39},"start":{"col":4,"line":39}}]],"6312":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":37,"line":135},"start":{"col":8,"line":135}}]],"6313":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":22,"line":134},"start":{"col":18,"line":134}}]],"6314":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":22,"line":134},"start":{"col":18,"line":134}}]],"6315":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":84,"line":186},"start":{"col":38,"line":186}}]],"6316":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":84,"line":186},"start":{"col":38,"line":186}}]],"6317":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":84,"line":186},"start":{"col":38,"line":186}}]],"6318":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":86,"line":186},"start":{"col":8,"line":186}}]],"6319":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":24,"line":51},"start":{"col":8,"line":51}}]],"632":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6320":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":24,"line":51},"start":{"col":8,"line":51}}]],"6321":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":24,"line":51},"start":{"col":8,"line":51}}]],"6322":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":24,"line":51},"start":{"col":8,"line":51}}]],"6323":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/map.cairo",{"end":{"col":24,"line":51},"start":{"col":8,"line":51}}]],"6324":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":67,"line":228},"start":{"col":63,"line":228}}]],"6325":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":79,"line":228},"start":{"col":61,"line":228}}]],"6326":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":79,"line":228},"start":{"col":61,"line":228}}]],"6327":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":79,"line":228},"start":{"col":61,"line":228}}]],"6328":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":79,"line":228},"start":{"col":61,"line":228}}]],"6329":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":81,"line":228},"start":{"col":8,"line":228}}]],"633":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6331":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":47,"line":72},"start":{"col":43,"line":72}}]],"6332":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":75,"line":72},"start":{"col":43,"line":72}}]],"6333":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":76,"line":72},"start":{"col":12,"line":72}}]],"6334":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":76,"line":72},"start":{"col":12,"line":72}}]],"6335":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":76,"line":72},"start":{"col":12,"line":72}}]],"6336":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":76,"line":72},"start":{"col":12,"line":72}}]],"6337":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":76,"line":72},"start":{"col":12,"line":72}}]],"6338":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":73},"start":{"col":8,"line":71}}]],"6339":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":73},"start":{"col":8,"line":71}}]],"634":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6340":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":73},"start":{"col":8,"line":71}}]],"6341":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":73},"start":{"col":8,"line":71}}]],"6342":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":73},"start":{"col":8,"line":71}}]],"6347":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":14,"line":11},"start":{"col":4,"line":11}}]],"6348":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":14,"line":11},"start":{"col":4,"line":11}}]],"635":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6350":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":56,"line":102},"start":{"col":24,"line":102}}]],"6351":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":64,"line":102},"start":{"col":12,"line":100}}]],"6352":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":64,"line":102},"start":{"col":12,"line":100}}]],"6353":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":64,"line":102},"start":{"col":12,"line":100}}]],"6354":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":64,"line":102},"start":{"col":12,"line":100}}]],"6355":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":64,"line":102},"start":{"col":12,"line":100}}]],"6356":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":64,"line":102},"start":{"col":12,"line":100}}]],"6357":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":103},"start":{"col":8,"line":99}}]],"6358":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":103},"start":{"col":8,"line":99}}]],"6359":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":103},"start":{"col":8,"line":99}}]],"636":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6360":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":103},"start":{"col":8,"line":99}}]],"6361":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":9,"line":103},"start":{"col":8,"line":99}}]],"6362":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6363":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6364":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6366":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/felt_252.cairo",{"end":{"col":9,"line":6},"start":{"col":8,"line":6}}]],"6367":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/felt_252.cairo",{"end":{"col":9,"line":6},"start":{"col":8,"line":6}}]],"6368":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6369":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"637":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6370":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6371":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6372":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6373":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6374":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6375":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6376":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6377":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6378":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6379":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"638":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6380":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6381":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6382":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6383":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6384":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6385":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6386":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6387":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6388":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":25},"start":{"col":37,"line":25}}]],"6389":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/introspection/src/src5.cairo",{"end":{"col":22,"line":6},"start":{"col":0,"line":6}}]],"639":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6390":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/src9.cairo",{"end":{"col":22,"line":10},"start":{"col":0,"line":10}}]],"6391":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":15},"start":{"col":37,"line":15}}]],"6392":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":15},"start":{"col":37,"line":15}}]],"6393":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":15},"start":{"col":37,"line":15}}]],"6394":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":15},"start":{"col":37,"line":15}}]],"6395":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":15},"start":{"col":37,"line":15}}]],"6396":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":15},"start":{"col":37,"line":15}}]],"6397":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":15},"start":{"col":37,"line":15}}]],"6398":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":15},"start":{"col":37,"line":15}}]],"6399":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":15},"start":{"col":37,"line":15}}]],"64":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"640":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6400":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":15},"start":{"col":37,"line":15}}]],"6401":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":15},"start":{"col":37,"line":15}}]],"6402":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":33,"line":985},"start":{"col":10,"line":985}}]],"6403":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":33,"line":985},"start":{"col":10,"line":985}}]],"6404":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":33,"line":985},"start":{"col":10,"line":985}}]],"6405":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":33,"line":985},"start":{"col":10,"line":985}}]],"6406":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":73,"line":986},"start":{"col":47,"line":986}}]],"6407":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":73,"line":986},"start":{"col":47,"line":986}}]],"6408":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":73,"line":986},"start":{"col":47,"line":986}}]],"6409":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":33,"line":985},"start":{"col":10,"line":985}}]],"641":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6410":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":33,"line":985},"start":{"col":10,"line":985}}]],"6411":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":71,"line":987},"start":{"col":53,"line":987}}]],"6412":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":71,"line":987},"start":{"col":53,"line":987}}]],"6413":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":71,"line":987},"start":{"col":53,"line":987}}]],"6414":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":19,"line":955},"start":{"col":11,"line":955}}]],"6415":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":30,"line":955},"start":{"col":22,"line":955}}]],"6416":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":30,"line":955},"start":{"col":11,"line":955}}]],"6417":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":30,"line":955},"start":{"col":11,"line":955}}]],"6418":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":30,"line":955},"start":{"col":11,"line":955}}]],"6419":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":30,"line":955},"start":{"col":11,"line":955}}]],"642":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6420":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":30,"line":955},"start":{"col":11,"line":955}}]],"6421":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":30,"line":955},"start":{"col":11,"line":955}}]],"6422":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":9,"line":961},"start":{"col":8,"line":955}}]],"6423":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":9,"line":961},"start":{"col":8,"line":955}}]],"6424":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":9,"line":961},"start":{"col":8,"line":955}}]],"6425":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":26,"line":957},"start":{"col":18,"line":957}}]],"6426":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":26,"line":957},"start":{"col":18,"line":957}}]],"6427":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":38,"line":957},"start":{"col":30,"line":957}}]],"6428":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":38,"line":957},"start":{"col":30,"line":957}}]],"6429":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":38,"line":957},"start":{"col":18,"line":957}}]],"643":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6430":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":38,"line":957},"start":{"col":18,"line":957}}]],"6431":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":38,"line":957},"start":{"col":18,"line":957}}]],"6432":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":9,"line":961},"start":{"col":15,"line":957}}]],"6433":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":9,"line":961},"start":{"col":15,"line":957}}]],"6434":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":9,"line":961},"start":{"col":15,"line":957}}]],"6435":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":9,"line":961},"start":{"col":15,"line":957}}]],"6436":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":9,"line":961},"start":{"col":15,"line":957}}]],"6437":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":9,"line":961},"start":{"col":15,"line":957}}]],"6438":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":17,"line":960},"start":{"col":12,"line":960}}]],"6439":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":17,"line":960},"start":{"col":12,"line":960}}]],"644":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6440":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":17,"line":960},"start":{"col":12,"line":960}}]],"6441":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":17,"line":960},"start":{"col":12,"line":960}}]],"6442":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":9,"line":961},"start":{"col":15,"line":957}}]],"6443":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":9,"line":961},"start":{"col":15,"line":957}}]],"6444":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":29,"line":958},"start":{"col":12,"line":958}}]],"6445":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":29,"line":958},"start":{"col":12,"line":958}}]],"6446":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":29,"line":958},"start":{"col":12,"line":958}}]],"6447":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":29,"line":958},"start":{"col":12,"line":958}}]],"6448":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":29,"line":958},"start":{"col":12,"line":958}}]],"6449":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":9,"line":961},"start":{"col":8,"line":955}}]],"645":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6450":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":9,"line":961},"start":{"col":8,"line":955}}]],"6451":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":9,"line":961},"start":{"col":8,"line":955}}]],"6452":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":9,"line":961},"start":{"col":8,"line":955}}]],"6453":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":9,"line":961},"start":{"col":8,"line":955}}]],"6454":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":9,"line":961},"start":{"col":8,"line":955}}]],"6455":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":9,"line":961},"start":{"col":8,"line":955}}]],"6456":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":16,"line":956},"start":{"col":12,"line":956}}]],"6457":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":16,"line":956},"start":{"col":12,"line":956}}]],"6458":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":16,"line":956},"start":{"col":12,"line":956}}]],"6459":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":16,"line":956},"start":{"col":12,"line":956}}]],"646":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6460":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":54,"line":908},"start":{"col":24,"line":908}}]],"6461":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":54,"line":908},"start":{"col":24,"line":908}}]],"6462":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":54,"line":908},"start":{"col":24,"line":908}}]],"6463":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":54,"line":908},"start":{"col":24,"line":908}}]],"6464":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":54,"line":908},"start":{"col":24,"line":908}}]],"6465":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":5,"line":913},"start":{"col":4,"line":909}}]],"6466":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":5,"line":913},"start":{"col":4,"line":909}}]],"6467":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":5,"line":913},"start":{"col":4,"line":909}}]],"6468":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":22,"line":912},"start":{"col":21,"line":912}}]],"6469":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":23,"line":912},"start":{"col":8,"line":912}}]],"647":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6470":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":23,"line":912},"start":{"col":8,"line":912}}]],"6471":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":23,"line":912},"start":{"col":8,"line":912}}]],"6472":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":5,"line":913},"start":{"col":4,"line":909}}]],"6473":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":5,"line":913},"start":{"col":4,"line":909}}]],"6474":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":5,"line":913},"start":{"col":4,"line":909}}]],"6475":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":5,"line":913},"start":{"col":4,"line":909}}]],"6476":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":20,"line":910},"start":{"col":8,"line":910}}]],"6477":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":20,"line":910},"start":{"col":8,"line":910}}]],"6478":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":20,"line":910},"start":{"col":8,"line":910}}]],"6479":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":20,"line":910},"start":{"col":8,"line":910}}]],"648":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6480":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":19,"line":538},"start":{"col":16,"line":538}}]],"6481":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":25,"line":538},"start":{"col":22,"line":538}}]],"6482":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":26,"line":538},"start":{"col":8,"line":538}}]],"6483":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":26,"line":538},"start":{"col":8,"line":538}}]],"6484":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":26,"line":538},"start":{"col":8,"line":538}}]],"6485":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":26,"line":538},"start":{"col":8,"line":538}}]],"6486":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":26,"line":538},"start":{"col":8,"line":538}}]],"6487":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":26,"line":538},"start":{"col":8,"line":538}}]],"6488":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":26,"line":538},"start":{"col":8,"line":538}}]],"6489":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":26,"line":538},"start":{"col":8,"line":538}}]],"649":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6490":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":26,"line":538},"start":{"col":8,"line":538}}]],"6491":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":26,"line":538},"start":{"col":8,"line":538}}]],"6492":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":26,"line":538},"start":{"col":8,"line":538}}]],"6493":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":30,"line":571},"start":{"col":17,"line":571}}]],"6494":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":38,"line":571},"start":{"col":8,"line":571}}]],"6495":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":38,"line":571},"start":{"col":8,"line":571}}]],"6496":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":38,"line":571},"start":{"col":8,"line":571}}]],"6497":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":38,"line":571},"start":{"col":8,"line":571}}]],"6498":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":38,"line":571},"start":{"col":8,"line":571}}]],"6499":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":38,"line":571},"start":{"col":8,"line":571}}]],"65":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"650":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6500":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":38,"line":571},"start":{"col":8,"line":571}}]],"6501":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":571},"start":{"col":8,"line":571}}]],"6502":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":571},"start":{"col":8,"line":571}}]],"6503":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":571},"start":{"col":8,"line":571}}]],"6504":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":572},"start":{"col":45,"line":570}}]],"6505":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":572},"start":{"col":45,"line":570}}]],"6506":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":572},"start":{"col":45,"line":570}}]],"6507":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":5,"line":572},"start":{"col":45,"line":570}}]],"6508":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":38,"line":571},"start":{"col":8,"line":571}}]],"6509":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":38,"line":571},"start":{"col":8,"line":571}}]],"651":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6510":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":38,"line":571},"start":{"col":8,"line":571}}]],"6511":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":38,"line":571},"start":{"col":8,"line":571}}]],"6512":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":38,"line":571},"start":{"col":8,"line":571}}]],"6513":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":18,"line":59},"start":{"col":7,"line":59}}]],"6514":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":18,"line":59},"start":{"col":7,"line":59}}]],"6515":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":23,"line":59},"start":{"col":22,"line":59}}]],"6516":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":23,"line":59},"start":{"col":22,"line":59}}]],"6517":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":23,"line":59},"start":{"col":7,"line":59}}]],"6518":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":23,"line":59},"start":{"col":7,"line":59}}]],"6519":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":23,"line":59},"start":{"col":7,"line":59}}]],"652":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6520":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":61},"start":{"col":4,"line":59}}]],"6521":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":61},"start":{"col":4,"line":59}}]],"6522":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":61},"start":{"col":4,"line":59}}]],"6523":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":18,"line":62},"start":{"col":7,"line":62}}]],"6524":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":18,"line":62},"start":{"col":7,"line":62}}]],"6525":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":44,"line":62},"start":{"col":22,"line":62}}]],"6526":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":44,"line":62},"start":{"col":22,"line":62}}]],"6527":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":44,"line":62},"start":{"col":7,"line":62}}]],"6528":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":44,"line":62},"start":{"col":7,"line":62}}]],"6529":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":44,"line":62},"start":{"col":7,"line":62}}]],"653":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6530":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":64},"start":{"col":4,"line":62}}]],"6531":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":64},"start":{"col":4,"line":62}}]],"6532":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":64},"start":{"col":4,"line":62}}]],"6533":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":18,"line":65},"start":{"col":7,"line":65}}]],"6534":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":18,"line":65},"start":{"col":7,"line":65}}]],"6535":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":44,"line":65},"start":{"col":22,"line":65}}]],"6536":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":44,"line":65},"start":{"col":22,"line":65}}]],"6537":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":44,"line":65},"start":{"col":7,"line":65}}]],"6538":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":44,"line":65},"start":{"col":7,"line":65}}]],"6539":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":44,"line":65},"start":{"col":7,"line":65}}]],"654":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6540":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":67},"start":{"col":4,"line":65}}]],"6541":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":67},"start":{"col":4,"line":65}}]],"6542":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":67},"start":{"col":4,"line":65}}]],"6543":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":72,"line":70},"start":{"col":33,"line":70}}]],"6544":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":72,"line":70},"start":{"col":33,"line":70}}]],"6545":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":72,"line":70},"start":{"col":33,"line":70}}]],"6546":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":73},"start":{"col":27,"line":70}}]],"6547":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":73},"start":{"col":27,"line":70}}]],"6548":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":74,"line":77},"start":{"col":34,"line":77}}]],"6549":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":74,"line":77},"start":{"col":34,"line":77}}]],"655":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6550":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":74,"line":77},"start":{"col":34,"line":77}}]],"6551":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":74,"line":77},"start":{"col":34,"line":77}}]],"6552":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":80},"start":{"col":28,"line":77}}]],"6553":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":80},"start":{"col":28,"line":77}}]],"6554":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":80},"start":{"col":28,"line":77}}]],"6555":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":80},"start":{"col":28,"line":77}}]],"6556":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":94,"line":83},"start":{"col":26,"line":83}}]],"6557":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":94,"line":83},"start":{"col":26,"line":83}}]],"6558":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":94,"line":83},"start":{"col":26,"line":83}}]],"6559":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":86},"start":{"col":20,"line":83}}]],"656":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6560":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":86},"start":{"col":20,"line":83}}]],"6561":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":38,"line":89},"start":{"col":18,"line":89}}]],"6562":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":30,"line":100},"start":{"col":23,"line":100}}]],"6563":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":38,"line":100},"start":{"col":23,"line":100}}]],"6564":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":52,"line":101},"start":{"col":4,"line":101}}]],"6565":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":52,"line":101},"start":{"col":4,"line":101}}]],"6566":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":52,"line":101},"start":{"col":4,"line":101}}]],"6567":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":52,"line":101},"start":{"col":4,"line":101}}]],"6568":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":52,"line":101},"start":{"col":4,"line":101}}]],"6569":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":43,"line":102},"start":{"col":21,"line":102}}]],"657":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6570":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":105},"start":{"col":15,"line":102}}]],"6571":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":105},"start":{"col":15,"line":102}}]],"6572":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":34,"line":103},"start":{"col":28,"line":103}}]],"6573":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":34,"line":103},"start":{"col":28,"line":103}}]],"6574":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":30,"line":108},"start":{"col":23,"line":108}}]],"6575":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":38,"line":108},"start":{"col":23,"line":108}}]],"6576":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":38,"line":108},"start":{"col":23,"line":108}}]],"6577":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":45,"line":109},"start":{"col":4,"line":109}}]],"6578":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":45,"line":109},"start":{"col":4,"line":109}}]],"6579":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":45,"line":109},"start":{"col":4,"line":109}}]],"658":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6580":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":45,"line":109},"start":{"col":4,"line":109}}]],"6581":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":45,"line":109},"start":{"col":4,"line":109}}]],"6582":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":51,"line":113},"start":{"col":4,"line":113}}]],"6583":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":51,"line":113},"start":{"col":4,"line":113}}]],"6584":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":51,"line":113},"start":{"col":4,"line":113}}]],"6585":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":51,"line":113},"start":{"col":4,"line":113}}]],"6586":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":51,"line":113},"start":{"col":4,"line":113}}]],"6587":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":41,"line":114},"start":{"col":19,"line":114}}]],"6588":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":118},"start":{"col":13,"line":114}}]],"6589":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":118},"start":{"col":13,"line":114}}]],"659":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6590":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":121},"start":{"col":31,"line":121}}]],"6591":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":47,"line":121},"start":{"col":31,"line":121}}]],"6592":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":47,"line":121},"start":{"col":31,"line":121}}]],"6593":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":28,"line":122},"start":{"col":4,"line":122}}]],"6594":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":28,"line":122},"start":{"col":4,"line":122}}]],"6595":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":28,"line":122},"start":{"col":4,"line":122}}]],"6596":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":60,"line":123},"start":{"col":30,"line":123}}]],"6597":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":127},"start":{"col":4,"line":123}}]],"6598":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":127},"start":{"col":4,"line":123}}]],"6599":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":17,"line":124},"start":{"col":11,"line":124}}]],"66":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"660":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6600":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":17,"line":124},"start":{"col":11,"line":124}}]],"6601":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":25,"line":124},"start":{"col":21,"line":124}}]],"6602":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":17,"line":124},"start":{"col":11,"line":124}}]],"6603":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":17,"line":124},"start":{"col":11,"line":124}}]],"6604":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":25,"line":124},"start":{"col":11,"line":124}}]],"6605":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":25,"line":124},"start":{"col":11,"line":124}}]],"6606":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":9,"line":126},"start":{"col":8,"line":124}}]],"6607":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":9,"line":126},"start":{"col":8,"line":124}}]],"6608":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":9,"line":126},"start":{"col":8,"line":124}}]],"6609":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":127},"start":{"col":4,"line":123}}]],"661":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6610":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":127},"start":{"col":4,"line":123}}]],"6611":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":9,"line":126},"start":{"col":8,"line":124}}]],"6612":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":9,"line":126},"start":{"col":8,"line":124}}]],"6613":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":9,"line":126},"start":{"col":8,"line":124}}]],"6614":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":9,"line":126},"start":{"col":8,"line":124}}]],"6615":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":9,"line":126},"start":{"col":8,"line":124}}]],"6616":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":9,"line":126},"start":{"col":8,"line":124}}]],"6617":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":23,"line":125},"start":{"col":19,"line":125}}]],"6618":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":23,"line":125},"start":{"col":19,"line":125}}]],"6619":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":24,"line":125},"start":{"col":12,"line":125}}]],"662":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6620":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":24,"line":125},"start":{"col":12,"line":125}}]],"6621":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":24,"line":125},"start":{"col":12,"line":125}}]],"6622":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":24,"line":125},"start":{"col":12,"line":125}}]],"6623":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":24,"line":125},"start":{"col":12,"line":125}}]],"6624":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":127},"start":{"col":4,"line":123}}]],"6625":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":127},"start":{"col":4,"line":123}}]],"6626":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":127},"start":{"col":4,"line":123}}]],"6627":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":29,"line":131},"start":{"col":4,"line":131}}]],"6628":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":29,"line":131},"start":{"col":4,"line":131}}]],"6629":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":29,"line":131},"start":{"col":4,"line":131}}]],"663":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6630":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":29,"line":131},"start":{"col":4,"line":131}}]],"6631":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":29,"line":131},"start":{"col":4,"line":131}}]],"6632":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":29,"line":131},"start":{"col":4,"line":131}}]],"6633":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":29,"line":131},"start":{"col":4,"line":131}}]],"6634":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":61,"line":132},"start":{"col":30,"line":132}}]],"6635":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":61,"line":132},"start":{"col":30,"line":132}}]],"6636":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":136},"start":{"col":4,"line":132}}]],"6637":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":136},"start":{"col":4,"line":132}}]],"6638":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":17,"line":133},"start":{"col":11,"line":133}}]],"6639":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":17,"line":133},"start":{"col":11,"line":133}}]],"664":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6640":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":17,"line":133},"start":{"col":11,"line":133}}]],"6641":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":17,"line":133},"start":{"col":11,"line":133}}]],"6642":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":25,"line":133},"start":{"col":21,"line":133}}]],"6643":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":25,"line":133},"start":{"col":21,"line":133}}]],"6644":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":25,"line":133},"start":{"col":11,"line":133}}]],"6645":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":25,"line":133},"start":{"col":11,"line":133}}]],"6646":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":9,"line":135},"start":{"col":8,"line":133}}]],"6647":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":9,"line":135},"start":{"col":8,"line":133}}]],"6648":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":9,"line":135},"start":{"col":8,"line":133}}]],"6649":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":9,"line":135},"start":{"col":8,"line":133}}]],"665":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6650":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":9,"line":135},"start":{"col":8,"line":133}}]],"6651":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":9,"line":135},"start":{"col":8,"line":133}}]],"6652":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":9,"line":135},"start":{"col":8,"line":133}}]],"6653":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":23,"line":134},"start":{"col":19,"line":134}}]],"6654":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":23,"line":134},"start":{"col":19,"line":134}}]],"6655":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":24,"line":134},"start":{"col":12,"line":134}}]],"6656":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":24,"line":134},"start":{"col":12,"line":134}}]],"6657":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":24,"line":134},"start":{"col":12,"line":134}}]],"6658":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":24,"line":134},"start":{"col":12,"line":134}}]],"6659":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":24,"line":134},"start":{"col":12,"line":134}}]],"666":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6660":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":136},"start":{"col":4,"line":132}}]],"6661":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":136},"start":{"col":4,"line":132}}]],"6662":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":136},"start":{"col":4,"line":132}}]],"6663":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":136},"start":{"col":4,"line":132}}]],"6664":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":9,"line":138},"start":{"col":4,"line":138}}]],"6665":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":9,"line":138},"start":{"col":4,"line":138}}]],"6666":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":1,"line":139},"start":{"col":10,"line":56}}]],"6667":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":1,"line":139},"start":{"col":10,"line":56}}]],"6668":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":1,"line":139},"start":{"col":10,"line":56}}]],"6669":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":1,"line":139},"start":{"col":10,"line":56}}]],"667":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6670":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":1,"line":139},"start":{"col":10,"line":56}}]],"6671":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":29,"line":131},"start":{"col":4,"line":131}}]],"6672":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":29,"line":131},"start":{"col":4,"line":131}}]],"6673":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":29,"line":131},"start":{"col":4,"line":131}}]],"6674":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":29,"line":131},"start":{"col":4,"line":131}}]],"6675":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":29,"line":131},"start":{"col":4,"line":131}}]],"6676":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":29,"line":131},"start":{"col":4,"line":131}}]],"6677":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":29,"line":131},"start":{"col":4,"line":131}}]],"6678":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":118},"start":{"col":13,"line":114}}]],"6679":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":118},"start":{"col":13,"line":114}}]],"668":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6680":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":118},"start":{"col":13,"line":114}}]],"6681":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":118},"start":{"col":13,"line":114}}]],"6682":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":118},"start":{"col":13,"line":114}}]],"6683":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":38,"line":117},"start":{"col":33,"line":117}}]],"6684":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":38,"line":117},"start":{"col":33,"line":117}}]],"6685":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":117},"start":{"col":26,"line":117}}]],"6686":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":117},"start":{"col":26,"line":117}}]],"6687":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":117},"start":{"col":26,"line":117}}]],"6688":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":117},"start":{"col":26,"line":117}}]],"6689":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":117},"start":{"col":26,"line":117}}]],"669":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6690":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":105},"start":{"col":15,"line":102}}]],"6691":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":105},"start":{"col":15,"line":102}}]],"6692":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":105},"start":{"col":15,"line":102}}]],"6693":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":105},"start":{"col":15,"line":102}}]],"6694":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":105},"start":{"col":15,"line":102}}]],"6695":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":105},"start":{"col":15,"line":102}}]],"6696":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":105},"start":{"col":15,"line":102}}]],"6697":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":105},"start":{"col":15,"line":102}}]],"6698":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":38,"line":104},"start":{"col":33,"line":104}}]],"6699":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":38,"line":104},"start":{"col":33,"line":104}}]],"67":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"670":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6700":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":104},"start":{"col":26,"line":104}}]],"6701":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":104},"start":{"col":26,"line":104}}]],"6702":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":104},"start":{"col":26,"line":104}}]],"6703":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":104},"start":{"col":26,"line":104}}]],"6704":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":104},"start":{"col":26,"line":104}}]],"6705":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":86},"start":{"col":20,"line":83}}]],"6706":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":86},"start":{"col":20,"line":83}}]],"6707":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":86},"start":{"col":20,"line":83}}]],"6708":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":86},"start":{"col":20,"line":83}}]],"6709":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":86},"start":{"col":20,"line":83}}]],"671":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6710":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":86},"start":{"col":20,"line":83}}]],"6711":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":86},"start":{"col":20,"line":83}}]],"6712":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":86},"start":{"col":20,"line":83}}]],"6713":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":38,"line":85},"start":{"col":33,"line":85}}]],"6714":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":38,"line":85},"start":{"col":33,"line":85}}]],"6715":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":85},"start":{"col":26,"line":85}}]],"6716":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":85},"start":{"col":26,"line":85}}]],"6717":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":85},"start":{"col":26,"line":85}}]],"6718":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":85},"start":{"col":26,"line":85}}]],"6719":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":85},"start":{"col":26,"line":85}}]],"672":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6720":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":80},"start":{"col":28,"line":77}}]],"6721":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":80},"start":{"col":28,"line":77}}]],"6722":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":80},"start":{"col":28,"line":77}}]],"6723":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":80},"start":{"col":28,"line":77}}]],"6724":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":80},"start":{"col":28,"line":77}}]],"6725":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":80},"start":{"col":28,"line":77}}]],"6726":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":80},"start":{"col":28,"line":77}}]],"6727":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":38,"line":79},"start":{"col":33,"line":79}}]],"6728":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":38,"line":79},"start":{"col":33,"line":79}}]],"6729":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":79},"start":{"col":26,"line":79}}]],"673":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6730":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":79},"start":{"col":26,"line":79}}]],"6731":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":79},"start":{"col":26,"line":79}}]],"6732":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":79},"start":{"col":26,"line":79}}]],"6733":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":79},"start":{"col":26,"line":79}}]],"6734":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":73},"start":{"col":27,"line":70}}]],"6735":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":73},"start":{"col":27,"line":70}}]],"6736":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":73},"start":{"col":27,"line":70}}]],"6737":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":73},"start":{"col":27,"line":70}}]],"6738":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":73},"start":{"col":27,"line":70}}]],"6739":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":73},"start":{"col":27,"line":70}}]],"674":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6740":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":38,"line":72},"start":{"col":33,"line":72}}]],"6741":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":38,"line":72},"start":{"col":33,"line":72}}]],"6742":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":72},"start":{"col":26,"line":72}}]],"6743":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":72},"start":{"col":26,"line":72}}]],"6744":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":72},"start":{"col":26,"line":72}}]],"6745":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":72},"start":{"col":26,"line":72}}]],"6746":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":39,"line":72},"start":{"col":26,"line":72}}]],"6747":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":67},"start":{"col":4,"line":65}}]],"6748":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":67},"start":{"col":4,"line":65}}]],"6749":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":67},"start":{"col":4,"line":65}}]],"675":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6750":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":67},"start":{"col":4,"line":65}}]],"6751":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":67},"start":{"col":4,"line":65}}]],"6752":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":67},"start":{"col":4,"line":65}}]],"6753":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":67},"start":{"col":4,"line":65}}]],"6754":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":20,"line":66},"start":{"col":15,"line":66}}]],"6755":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":20,"line":66},"start":{"col":15,"line":66}}]],"6756":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":21,"line":66},"start":{"col":8,"line":66}}]],"6757":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":21,"line":66},"start":{"col":8,"line":66}}]],"6758":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":21,"line":66},"start":{"col":8,"line":66}}]],"6759":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":21,"line":66},"start":{"col":8,"line":66}}]],"676":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6760":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":21,"line":66},"start":{"col":8,"line":66}}]],"6761":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":64},"start":{"col":4,"line":62}}]],"6762":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":64},"start":{"col":4,"line":62}}]],"6763":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":64},"start":{"col":4,"line":62}}]],"6764":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":64},"start":{"col":4,"line":62}}]],"6765":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":64},"start":{"col":4,"line":62}}]],"6766":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":64},"start":{"col":4,"line":62}}]],"6767":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":64},"start":{"col":4,"line":62}}]],"6768":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":20,"line":63},"start":{"col":15,"line":63}}]],"6769":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":20,"line":63},"start":{"col":15,"line":63}}]],"677":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6770":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":21,"line":63},"start":{"col":8,"line":63}}]],"6771":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":21,"line":63},"start":{"col":8,"line":63}}]],"6772":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":21,"line":63},"start":{"col":8,"line":63}}]],"6773":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":21,"line":63},"start":{"col":8,"line":63}}]],"6774":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":21,"line":63},"start":{"col":8,"line":63}}]],"6775":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":61},"start":{"col":4,"line":59}}]],"6776":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":61},"start":{"col":4,"line":59}}]],"6777":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":61},"start":{"col":4,"line":59}}]],"6778":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":61},"start":{"col":4,"line":59}}]],"6779":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":61},"start":{"col":4,"line":59}}]],"678":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6780":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":61},"start":{"col":4,"line":59}}]],"6781":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":5,"line":61},"start":{"col":4,"line":59}}]],"6782":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":20,"line":60},"start":{"col":15,"line":60}}]],"6783":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":20,"line":60},"start":{"col":15,"line":60}}]],"6784":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":21,"line":60},"start":{"col":8,"line":60}}]],"6785":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":21,"line":60},"start":{"col":8,"line":60}}]],"6786":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":21,"line":60},"start":{"col":8,"line":60}}]],"6787":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":21,"line":60},"start":{"col":8,"line":60}}]],"6788":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ecdsa.cairo",{"end":{"col":21,"line":60},"start":{"col":8,"line":60}}]],"6789":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":35,"line":15},"start":{"col":31,"line":15}}]],"679":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6790":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":52,"line":15},"start":{"col":31,"line":15}}]],"6791":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":53,"line":15},"start":{"col":8,"line":15}}]],"6792":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":53,"line":15},"start":{"col":8,"line":15}}]],"6793":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":53,"line":15},"start":{"col":8,"line":15}}]],"6794":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":67,"line":228},"start":{"col":63,"line":228}}]],"6795":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":79,"line":228},"start":{"col":61,"line":228}}]],"6796":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":79,"line":228},"start":{"col":61,"line":228}}]],"6797":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":79,"line":228},"start":{"col":61,"line":228}}]],"6798":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":79,"line":228},"start":{"col":61,"line":228}}]],"6799":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":81,"line":228},"start":{"col":8,"line":228}}]],"68":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"680":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6800":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":76,"line":142},"start":{"col":45,"line":142}}]],"6801":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":142},"start":{"col":8,"line":142}}]],"6802":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":142},"start":{"col":8,"line":142}}]],"6803":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":142},"start":{"col":8,"line":142}}]],"6804":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":142},"start":{"col":8,"line":142}}]],"6805":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":142},"start":{"col":8,"line":142}}]],"6806":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":142},"start":{"col":8,"line":142}}]],"6807":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":142},"start":{"col":8,"line":142}}]],"6808":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":142},"start":{"col":8,"line":142}}]],"6809":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":142},"start":{"col":8,"line":142}}]],"681":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6810":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":142},"start":{"col":8,"line":142}}]],"6811":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":142},"start":{"col":8,"line":142}}]],"6812":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":142},"start":{"col":8,"line":142}}]],"6813":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":142},"start":{"col":8,"line":142}}]],"6814":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"6815":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"6816":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"6817":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":5,"line":173},"start":{"col":51,"line":168}}]],"6818":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":5,"line":173},"start":{"col":51,"line":168}}]],"6819":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":5,"line":173},"start":{"col":51,"line":168}}]],"682":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6820":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"6821":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"6822":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"6823":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":62,"line":171},"start":{"col":42,"line":171}}]],"6824":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":62,"line":171},"start":{"col":42,"line":171}}]],"6825":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":62,"line":171},"start":{"col":42,"line":171}}]],"6826":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":35,"line":15},"start":{"col":31,"line":15}}]],"6827":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":52,"line":15},"start":{"col":31,"line":15}}]],"6828":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":53,"line":15},"start":{"col":8,"line":15}}]],"6829":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":53,"line":15},"start":{"col":8,"line":15}}]],"683":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6830":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage/storage_base.cairo",{"end":{"col":53,"line":15},"start":{"col":8,"line":15}}]],"6831":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":67,"line":239},"start":{"col":63,"line":239}}]],"6832":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":79,"line":239},"start":{"col":61,"line":239}}]],"6833":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":79,"line":239},"start":{"col":61,"line":239}}]],"6834":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":79,"line":239},"start":{"col":61,"line":239}}]],"6835":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":79,"line":239},"start":{"col":61,"line":239}}]],"6836":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":81,"line":239},"start":{"col":8,"line":239}}]],"6838":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/pedersen.cairo",{"end":{"col":33,"line":56},"start":{"col":8,"line":56}}]],"6839":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/pedersen.cairo",{"end":{"col":33,"line":56},"start":{"col":8,"line":56}}]],"684":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6840":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":80,"line":204},"start":{"col":61,"line":204}}]],"6841":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":88,"line":204},"start":{"col":38,"line":204}}]],"6842":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":88,"line":204},"start":{"col":38,"line":204}}]],"6843":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":88,"line":204},"start":{"col":38,"line":204}}]],"6844":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":88,"line":204},"start":{"col":38,"line":204}}]],"6845":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":88,"line":204},"start":{"col":38,"line":204}}]],"6846":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":90,"line":204},"start":{"col":8,"line":204}}]],"6847":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":61,"line":189},"start":{"col":42,"line":189}}]],"6848":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":72,"line":189},"start":{"col":42,"line":189}}]],"6849":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":72,"line":189},"start":{"col":42,"line":189}}]],"685":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6850":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":73,"line":189},"start":{"col":8,"line":189}}]],"6851":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":73,"line":189},"start":{"col":8,"line":189}}]],"6852":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":73,"line":189},"start":{"col":8,"line":189}}]],"6853":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":73,"line":189},"start":{"col":8,"line":189}}]],"6854":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":76,"line":115},"start":{"col":36,"line":115}}]],"6855":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":76,"line":115},"start":{"col":36,"line":115}}]],"6856":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":76,"line":115},"start":{"col":36,"line":115}}]],"6857":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":76,"line":115},"start":{"col":36,"line":115}}]],"6858":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":76,"line":115},"start":{"col":36,"line":115}}]],"6859":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":115},"start":{"col":36,"line":115}}]],"686":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6860":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":115},"start":{"col":36,"line":115}}]],"6861":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":78,"line":115},"start":{"col":19,"line":115}}]],"6862":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":78,"line":115},"start":{"col":19,"line":115}}]],"6863":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":78,"line":115},"start":{"col":19,"line":115}}]],"6864":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":79,"line":115},"start":{"col":8,"line":115}}]],"6865":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":79,"line":115},"start":{"col":8,"line":115}}]],"6866":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":79,"line":115},"start":{"col":8,"line":115}}]],"6867":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":79,"line":115},"start":{"col":8,"line":115}}]],"6868":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":115},"start":{"col":36,"line":115}}]],"6869":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":115},"start":{"col":36,"line":115}}]],"687":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6870":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":115},"start":{"col":36,"line":115}}]],"6871":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":115},"start":{"col":36,"line":115}}]],"6872":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":115},"start":{"col":36,"line":115}}]],"6873":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":115},"start":{"col":36,"line":115}}]],"6874":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"6875":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"6876":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"6877":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":5,"line":173},"start":{"col":51,"line":168}}]],"6878":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":5,"line":173},"start":{"col":51,"line":168}}]],"6879":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":5,"line":173},"start":{"col":51,"line":168}}]],"688":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6880":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"6881":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"6882":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":9,"line":172},"start":{"col":8,"line":169}}]],"6883":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":62,"line":171},"start":{"col":42,"line":171}}]],"6884":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":62,"line":171},"start":{"col":42,"line":171}}]],"6885":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet.cairo",{"end":{"col":62,"line":171},"start":{"col":42,"line":171}}]],"6886":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":71,"line":119},"start":{"col":50,"line":119}}]],"6887":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":71,"line":119},"start":{"col":50,"line":119}}]],"6888":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":72,"line":119},"start":{"col":8,"line":119}}]],"6889":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":72,"line":119},"start":{"col":8,"line":119}}]],"689":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6890":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":72,"line":119},"start":{"col":8,"line":119}}]],"6891":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":72,"line":119},"start":{"col":8,"line":119}}]],"6892":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":72,"line":119},"start":{"col":8,"line":119}}]],"6893":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":72,"line":119},"start":{"col":8,"line":119}}]],"6894":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":72,"line":119},"start":{"col":8,"line":119}}]],"6895":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":19,"line":83},"start":{"col":11,"line":83}}]],"6896":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":9,"line":88},"start":{"col":8,"line":83}}]],"6897":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":9,"line":88},"start":{"col":8,"line":83}}]],"6898":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":9,"line":88},"start":{"col":8,"line":83}}]],"6899":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":43,"line":87},"start":{"col":28,"line":87}}]],"69":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"690":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6900":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":43,"line":87},"start":{"col":28,"line":87}}]],"6901":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":43,"line":87},"start":{"col":28,"line":87}}]],"6902":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":43,"line":87},"start":{"col":28,"line":87}}]],"6903":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":80,"line":87},"start":{"col":76,"line":87}}]],"6904":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":80,"line":87},"start":{"col":76,"line":87}}]],"6905":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":82,"line":87},"start":{"col":12,"line":87}}]],"6906":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":82,"line":87},"start":{"col":12,"line":87}}]],"6907":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":82,"line":87},"start":{"col":12,"line":87}}]],"6908":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":9,"line":88},"start":{"col":8,"line":83}}]],"6909":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":9,"line":88},"start":{"col":8,"line":83}}]],"691":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6910":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":73,"line":84},"start":{"col":58,"line":84}}]],"6911":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":73,"line":84},"start":{"col":58,"line":84}}]],"6912":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":73,"line":84},"start":{"col":58,"line":84}}]],"6913":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":84},"start":{"col":31,"line":84}}]],"6914":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":83,"line":84},"start":{"col":31,"line":84}}]],"6915":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":46,"line":85},"start":{"col":41,"line":85}}]],"6916":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":46,"line":85},"start":{"col":41,"line":85}}]],"6917":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":48,"line":85},"start":{"col":12,"line":85}}]],"6918":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":48,"line":85},"start":{"col":12,"line":85}}]],"6919":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":48,"line":85},"start":{"col":12,"line":85}}]],"692":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6923":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":45,"line":24},"start":{"col":25,"line":24}}]],"6924":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":45,"line":24},"start":{"col":25,"line":24}}]],"6925":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":40,"line":26},"start":{"col":8,"line":25}}]],"6926":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":40,"line":26},"start":{"col":8,"line":25}}]],"6927":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":40,"line":26},"start":{"col":8,"line":25}}]],"6928":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":40,"line":26},"start":{"col":8,"line":25}}]],"6929":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":27},"start":{"col":26,"line":27}}]],"693":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6930":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":27},"start":{"col":26,"line":27}}]],"6931":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":27},"start":{"col":26,"line":27}}]],"6932":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":27},"start":{"col":26,"line":27}}]],"6933":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":33,"line":27},"start":{"col":26,"line":27}}]],"6934":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":34,"line":27},"start":{"col":8,"line":25}}]],"6935":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":34,"line":27},"start":{"col":8,"line":25}}]],"6936":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":28},"start":{"col":26,"line":28}}]],"6937":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":28},"start":{"col":26,"line":28}}]],"6938":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":28},"start":{"col":26,"line":28}}]],"6939":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":30,"line":28},"start":{"col":26,"line":28}}]],"694":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6940":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":39,"line":28},"start":{"col":26,"line":28}}]],"6941":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":40,"line":28},"start":{"col":8,"line":25}}]],"6942":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":40,"line":28},"start":{"col":8,"line":25}}]],"6943":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":49,"line":29},"start":{"col":45,"line":29}}]],"6944":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":49,"line":29},"start":{"col":45,"line":29}}]],"6945":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":49,"line":29},"start":{"col":45,"line":29}}]],"6946":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":58,"line":29},"start":{"col":45,"line":29}}]],"6947":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":59,"line":29},"start":{"col":25,"line":29}}]],"6948":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":59,"line":29},"start":{"col":25,"line":29}}]],"6949":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":59,"line":29},"start":{"col":25,"line":29}}]],"695":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6950":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":59,"line":29},"start":{"col":25,"line":29}}]],"6951":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":59,"line":29},"start":{"col":25,"line":29}}]],"6952":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":59,"line":29},"start":{"col":25,"line":29}}]],"6953":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":59,"line":29},"start":{"col":25,"line":29}}]],"6954":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":59,"line":29},"start":{"col":25,"line":29}}]],"6955":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":59,"line":29},"start":{"col":25,"line":29}}]],"6956":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":60,"line":29},"start":{"col":8,"line":25}}]],"6957":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":60,"line":29},"start":{"col":8,"line":25}}]],"6958":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":60,"line":29},"start":{"col":8,"line":25}}]],"6959":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":60,"line":29},"start":{"col":8,"line":25}}]],"696":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6960":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":23,"line":30},"start":{"col":8,"line":25}}]],"6961":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":23,"line":30},"start":{"col":8,"line":25}}]],"6962":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":5,"line":31},"start":{"col":43,"line":23}}]],"6963":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":5,"line":31},"start":{"col":43,"line":23}}]],"6964":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":5,"line":31},"start":{"col":43,"line":23}}]],"6965":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":5,"line":31},"start":{"col":43,"line":23}}]],"6966":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":5,"line":31},"start":{"col":43,"line":23}}]],"6967":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":5,"line":31},"start":{"col":43,"line":23}}]],"6968":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":59,"line":29},"start":{"col":25,"line":29}}]],"6969":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":59,"line":29},"start":{"col":25,"line":29}}]],"697":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6970":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":59,"line":29},"start":{"col":25,"line":29}}]],"6971":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":59,"line":29},"start":{"col":25,"line":29}}]],"6972":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":59,"line":29},"start":{"col":25,"line":29}}]],"6973":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":59,"line":29},"start":{"col":25,"line":29}}]],"6974":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":59,"line":29},"start":{"col":25,"line":29}}]],"6975":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/extensions/src9/snip12_utils.cairo",{"end":{"col":59,"line":29},"start":{"col":25,"line":29}}]],"6976":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":37,"line":67},"start":{"col":25,"line":67}}]],"6977":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":37,"line":67},"start":{"col":25,"line":67}}]],"6978":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":38,"line":67},"start":{"col":12,"line":67}}]],"6979":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":38,"line":67},"start":{"col":12,"line":67}}]],"698":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6980":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":38,"line":67},"start":{"col":12,"line":67}}]],"6981":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":38,"line":67},"start":{"col":12,"line":67}}]],"6982":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":38,"line":67},"start":{"col":12,"line":67}}]],"6984":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":152},"start":{"col":0,"line":135}}]],"6985":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":152},"start":{"col":0,"line":135}}]],"6986":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":35,"line":141},"start":{"col":19,"line":141}}]],"6987":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":35,"line":141},"start":{"col":19,"line":141}}]],"6988":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":28,"line":140},"start":{"col":23,"line":140}}]],"6989":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":5,"line":144},"start":{"col":13,"line":141}}]],"699":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"6990":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":5,"line":144},"start":{"col":13,"line":141}}]],"6991":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":5,"line":144},"start":{"col":13,"line":141}}]],"6992":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":35,"line":145},"start":{"col":19,"line":145}}]],"6993":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":35,"line":145},"start":{"col":19,"line":145}}]],"6994":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":5,"line":144},"start":{"col":13,"line":141}}]],"6995":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":5,"line":148},"start":{"col":13,"line":145}}]],"6996":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":5,"line":148},"start":{"col":13,"line":145}}]],"6997":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":45,"line":149},"start":{"col":39,"line":149}}]],"6998":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":45,"line":149},"start":{"col":39,"line":149}}]],"6999":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":45,"line":149},"start":{"col":39,"line":149}}]],"7":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"70":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"700":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"7000":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":5,"line":148},"start":{"col":13,"line":145}}]],"7001":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":53,"line":149},"start":{"col":47,"line":149}}]],"7002":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":53,"line":149},"start":{"col":47,"line":149}}]],"7003":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":53,"line":149},"start":{"col":47,"line":149}}]],"7004":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":58,"line":149},"start":{"col":21,"line":149}}]],"7005":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":47,"line":150},"start":{"col":4,"line":150}}]],"7006":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":47,"line":150},"start":{"col":4,"line":150}}]],"7007":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":47,"line":150},"start":{"col":4,"line":150}}]],"7008":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":47,"line":150},"start":{"col":4,"line":150}}]],"7009":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":47,"line":150},"start":{"col":4,"line":150}}]],"701":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"7010":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":47,"line":150},"start":{"col":4,"line":150}}]],"7011":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":47,"line":150},"start":{"col":4,"line":150}}]],"7012":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":47,"line":150},"start":{"col":4,"line":150}}]],"7013":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":66,"line":151},"start":{"col":4,"line":151}}]],"7014":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":66,"line":151},"start":{"col":4,"line":151}}]],"7015":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":66,"line":151},"start":{"col":4,"line":151}}]],"7016":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":66,"line":151},"start":{"col":4,"line":151}}]],"7017":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":66,"line":151},"start":{"col":4,"line":151}}]],"7018":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":66,"line":151},"start":{"col":4,"line":151}}]],"7019":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":66,"line":151},"start":{"col":4,"line":151}}]],"702":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"7020":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":66,"line":151},"start":{"col":4,"line":151}}]],"7021":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":47,"line":150},"start":{"col":4,"line":150}}]],"7022":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":47,"line":150},"start":{"col":4,"line":150}}]],"7023":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":47,"line":150},"start":{"col":4,"line":150}}]],"7024":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":47,"line":150},"start":{"col":4,"line":150}}]],"7025":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":47,"line":150},"start":{"col":4,"line":150}}]],"7026":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":47,"line":150},"start":{"col":4,"line":150}}]],"7027":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":47,"line":150},"start":{"col":4,"line":150}}]],"7028":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":68,"line":150},"start":{"col":4,"line":150}}]],"7029":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":68,"line":150},"start":{"col":4,"line":150}}]],"703":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"7030":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":68,"line":150},"start":{"col":4,"line":150}}]],"7031":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":68,"line":150},"start":{"col":4,"line":150}}]],"7032":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":68,"line":150},"start":{"col":4,"line":150}}]],"7033":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":68,"line":150},"start":{"col":4,"line":150}}]],"7034":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":68,"line":150},"start":{"col":4,"line":150}}]],"7035":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":68,"line":150},"start":{"col":4,"line":150}}]],"7036":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":68,"line":150},"start":{"col":4,"line":150}}]],"7037":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":68,"line":150},"start":{"col":4,"line":150}}]],"7038":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":68,"line":150},"start":{"col":4,"line":150}}]],"7039":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":68,"line":150},"start":{"col":4,"line":150}}]],"704":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"7040":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":68,"line":150},"start":{"col":4,"line":150}}]],"7041":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":68,"line":150},"start":{"col":4,"line":150}}]],"7042":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":5,"line":148},"start":{"col":13,"line":145}}]],"7043":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":5,"line":148},"start":{"col":13,"line":145}}]],"7044":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":5,"line":148},"start":{"col":13,"line":145}}]],"7045":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":55,"line":147},"start":{"col":49,"line":147}}]],"7046":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":55,"line":147},"start":{"col":49,"line":147}}]],"7047":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":55,"line":147},"start":{"col":49,"line":147}}]],"7048":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":55,"line":147},"start":{"col":49,"line":147}}]],"7049":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":74,"line":147},"start":{"col":70,"line":147}}]],"705":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"7050":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":74,"line":147},"start":{"col":70,"line":147}}]],"7051":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":87,"line":147},"start":{"col":33,"line":147}}]],"7052":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":87,"line":147},"start":{"col":33,"line":147}}]],"7053":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":87,"line":147},"start":{"col":33,"line":147}}]],"7054":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":87,"line":147},"start":{"col":33,"line":147}}]],"7055":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":88,"line":147},"start":{"col":26,"line":147}}]],"7056":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":88,"line":147},"start":{"col":26,"line":147}}]],"7057":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":88,"line":147},"start":{"col":26,"line":147}}]],"7058":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":88,"line":147},"start":{"col":26,"line":147}}]],"7059":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":88,"line":147},"start":{"col":26,"line":147}}]],"706":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"7060":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":88,"line":147},"start":{"col":26,"line":147}}]],"7061":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":5,"line":144},"start":{"col":13,"line":141}}]],"7062":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":5,"line":144},"start":{"col":13,"line":141}}]],"7063":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":5,"line":144},"start":{"col":13,"line":141}}]],"7064":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":5,"line":144},"start":{"col":13,"line":141}}]],"7065":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":67,"line":143},"start":{"col":62,"line":143}}]],"7066":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":67,"line":143},"start":{"col":62,"line":143}}]],"7067":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":80,"line":143},"start":{"col":33,"line":143}}]],"7068":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":80,"line":143},"start":{"col":33,"line":143}}]],"7069":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":80,"line":143},"start":{"col":33,"line":143}}]],"707":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"7070":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":80,"line":143},"start":{"col":33,"line":143}}]],"7071":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":81,"line":143},"start":{"col":26,"line":143}}]],"7072":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":81,"line":143},"start":{"col":26,"line":143}}]],"7073":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":81,"line":143},"start":{"col":26,"line":143}}]],"7074":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":81,"line":143},"start":{"col":26,"line":143}}]],"7075":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":81,"line":143},"start":{"col":26,"line":143}}]],"7076":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":81,"line":143},"start":{"col":26,"line":143}}]],"7077":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":152},"start":{"col":0,"line":135}}]],"7078":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":152},"start":{"col":0,"line":135}}]],"7079":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":152},"start":{"col":0,"line":135}}]],"708":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"7080":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":152},"start":{"col":0,"line":135}}]],"7081":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":152},"start":{"col":0,"line":135}}]],"7082":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":152},"start":{"col":0,"line":135}}]],"7083":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":152},"start":{"col":0,"line":135}}]],"7084":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":152},"start":{"col":0,"line":135}}]],"7085":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":152},"start":{"col":0,"line":135}}]],"7086":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":152},"start":{"col":0,"line":135}}]],"7087":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":152},"start":{"col":0,"line":135}}]],"7088":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":152},"start":{"col":0,"line":135}}]],"7089":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":152},"start":{"col":0,"line":135}}]],"709":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"7090":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":152},"start":{"col":0,"line":135}}]],"7091":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":152},"start":{"col":0,"line":135}}]],"7092":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/poseidon.cairo",{"end":{"col":1,"line":152},"start":{"col":0,"line":135}}]],"7093":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":479},"start":{"col":27,"line":479}}]],"7094":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"7095":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"7096":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"7097":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"7098":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"7099":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"71":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"710":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"7100":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"7101":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"7102":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"7103":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"7104":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"7105":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":57,"line":480},"start":{"col":19,"line":480}}]],"7106":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":485},"start":{"col":8,"line":482}}]],"7107":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":485},"start":{"col":8,"line":482}}]],"7108":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":483},"start":{"col":44,"line":483}}]],"7109":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":483},"start":{"col":44,"line":483}}]],"711":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"7110":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":53,"line":483},"start":{"col":44,"line":483}}]],"7111":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":54,"line":483},"start":{"col":31,"line":483}}]],"7112":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":54,"line":483},"start":{"col":31,"line":483}}]],"7113":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":54,"line":483},"start":{"col":31,"line":483}}]],"7114":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":485},"start":{"col":8,"line":482}}]],"7115":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":485},"start":{"col":8,"line":482}}]],"7116":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":9,"line":485},"start":{"col":8,"line":482}}]],"7117":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":484},"start":{"col":28,"line":484}}]],"7118":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":484},"start":{"col":28,"line":484}}]],"7119":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":484},"start":{"col":28,"line":484}}]],"712":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"7120":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":40,"line":484},"start":{"col":28,"line":484}}]],"7121":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":80,"line":204},"start":{"col":61,"line":204}}]],"7122":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":88,"line":204},"start":{"col":38,"line":204}}]],"7123":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":88,"line":204},"start":{"col":38,"line":204}}]],"7124":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":88,"line":204},"start":{"col":38,"line":204}}]],"7125":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":88,"line":204},"start":{"col":38,"line":204}}]],"7126":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":88,"line":204},"start":{"col":38,"line":204}}]],"7127":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":90,"line":204},"start":{"col":8,"line":204}}]],"7128":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":61,"line":189},"start":{"col":42,"line":189}}]],"7129":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":72,"line":189},"start":{"col":42,"line":189}}]],"713":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":233},"start":{"col":8,"line":229}}]],"7130":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":72,"line":189},"start":{"col":42,"line":189}}]],"7131":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":73,"line":189},"start":{"col":8,"line":189}}]],"7132":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":73,"line":189},"start":{"col":8,"line":189}}]],"7133":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":73,"line":189},"start":{"col":8,"line":189}}]],"7134":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":73,"line":189},"start":{"col":8,"line":189}}]],"7135":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":77,"line":146},"start":{"col":46,"line":146}}]],"7136":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":85,"line":146},"start":{"col":8,"line":146}}]],"7137":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":85,"line":146},"start":{"col":8,"line":146}}]],"7138":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":85,"line":146},"start":{"col":8,"line":146}}]],"7139":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":85,"line":146},"start":{"col":8,"line":146}}]],"714":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7140":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":85,"line":146},"start":{"col":8,"line":146}}]],"7141":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":85,"line":146},"start":{"col":8,"line":146}}]],"7142":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":85,"line":146},"start":{"col":8,"line":146}}]],"7143":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":85,"line":146},"start":{"col":8,"line":146}}]],"7144":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":85,"line":146},"start":{"col":8,"line":146}}]],"7145":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":85,"line":146},"start":{"col":8,"line":146}}]],"7146":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":85,"line":146},"start":{"col":8,"line":146}}]],"7147":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":85,"line":146},"start":{"col":8,"line":146}}]],"7148":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":85,"line":146},"start":{"col":8,"line":146}}]],"7149":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":85,"line":146},"start":{"col":8,"line":146}}]],"715":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7150":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":31},"start":{"col":37,"line":31}}]],"7151":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":31},"start":{"col":37,"line":31}}]],"7152":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":31},"start":{"col":37,"line":31}}]],"7153":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":31},"start":{"col":37,"line":31}}]],"7154":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":31},"start":{"col":37,"line":31}}]],"7155":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":31},"start":{"col":37,"line":31}}]],"7156":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":37},"start":{"col":37,"line":37}}]],"7157":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":37},"start":{"col":37,"line":37}}]],"7158":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":37},"start":{"col":37,"line":37}}]],"7159":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":37},"start":{"col":37,"line":37}}]],"716":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7160":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":37},"start":{"col":37,"line":37}}]],"7161":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":52,"line":37},"start":{"col":37,"line":37}}]],"7162":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":21},"start":{"col":37,"line":21}}]],"7163":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":21},"start":{"col":37,"line":21}}]],"7164":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":21},"start":{"col":37,"line":21}}]],"7165":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":21},"start":{"col":37,"line":21}}]],"7166":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":21},"start":{"col":37,"line":21}}]],"7167":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":21},"start":{"col":37,"line":21}}]],"7168":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/upgrades/src/upgradeable.cairo",{"end":{"col":52,"line":21},"start":{"col":37,"line":21}}]],"7169":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":38,"line":190},"start":{"col":8,"line":190}}]],"717":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7170":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":38,"line":190},"start":{"col":8,"line":190}}]],"7171":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":38,"line":190},"start":{"col":8,"line":190}}]],"7172":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":38,"line":190},"start":{"col":8,"line":190}}]],"7173":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":38,"line":190},"start":{"col":8,"line":190}}]],"7174":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":38,"line":190},"start":{"col":8,"line":190}}]],"7175":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":38,"line":190},"start":{"col":8,"line":190}}]],"7176":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":38,"line":190},"start":{"col":8,"line":190}}]],"7177":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":38,"line":190},"start":{"col":8,"line":190}}]],"7178":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":38,"line":190},"start":{"col":8,"line":190}}]],"7179":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":52,"line":190},"start":{"col":8,"line":190}}]],"718":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7180":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":52,"line":190},"start":{"col":8,"line":190}}]],"7181":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":52,"line":190},"start":{"col":8,"line":190}}]],"7182":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":52,"line":190},"start":{"col":8,"line":190}}]],"7183":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":20,"line":179},"start":{"col":17,"line":179}}]],"7184":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":26,"line":179},"start":{"col":23,"line":179}}]],"7185":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":27,"line":179},"start":{"col":8,"line":179}}]],"7186":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":27,"line":179},"start":{"col":8,"line":179}}]],"7187":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":27,"line":179},"start":{"col":8,"line":179}}]],"7188":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":27,"line":179},"start":{"col":8,"line":179}}]],"7189":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":27,"line":179},"start":{"col":8,"line":179}}]],"719":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7190":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":27,"line":179},"start":{"col":8,"line":179}}]],"7191":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":27,"line":179},"start":{"col":8,"line":179}}]],"7192":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":27,"line":179},"start":{"col":8,"line":179}}]],"7193":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":27,"line":179},"start":{"col":8,"line":179}}]],"7194":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":27,"line":179},"start":{"col":8,"line":179}}]],"7195":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":27,"line":179},"start":{"col":8,"line":179}}]],"7196":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":834},"start":{"col":54,"line":834}}]],"7197":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":72,"line":834},"start":{"col":64,"line":834}}]],"7198":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":73,"line":834},"start":{"col":33,"line":834}}]],"7199":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":73,"line":834},"start":{"col":33,"line":834}}]],"72":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"720":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7200":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":73,"line":834},"start":{"col":33,"line":834}}]],"7201":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":40,"line":835},"start":{"col":35,"line":835}}]],"7202":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":41,"line":835},"start":{"col":28,"line":835}}]],"7203":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":41,"line":835},"start":{"col":28,"line":835}}]],"7204":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":41,"line":835},"start":{"col":28,"line":835}}]],"7205":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":41,"line":835},"start":{"col":28,"line":835}}]],"7206":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":73,"line":834},"start":{"col":33,"line":834}}]],"7207":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":73,"line":834},"start":{"col":33,"line":834}}]],"7208":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":40,"line":836},"start":{"col":36,"line":836}}]],"7209":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":41,"line":836},"start":{"col":29,"line":836}}]],"721":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7210":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":41,"line":836},"start":{"col":29,"line":836}}]],"7211":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":41,"line":836},"start":{"col":29,"line":836}}]],"7212":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":48,"line":838},"start":{"col":10,"line":838}}]],"7213":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":48,"line":838},"start":{"col":10,"line":838}}]],"7214":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":48,"line":838},"start":{"col":10,"line":838}}]],"7215":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":48,"line":838},"start":{"col":10,"line":838}}]],"7216":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":57,"line":839},"start":{"col":27,"line":839}}]],"7217":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":57,"line":839},"start":{"col":27,"line":839}}]],"7218":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":57,"line":839},"start":{"col":27,"line":839}}]],"7219":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":48,"line":838},"start":{"col":10,"line":838}}]],"722":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7220":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":48,"line":838},"start":{"col":10,"line":838}}]],"7221":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":52,"line":841},"start":{"col":18,"line":841}}]],"7222":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":52,"line":841},"start":{"col":18,"line":841}}]],"7223":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":52,"line":841},"start":{"col":18,"line":841}}]],"7224":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":52,"line":841},"start":{"col":18,"line":841}}]],"7225":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":52,"line":841},"start":{"col":18,"line":841}}]],"7226":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":66,"line":842},"start":{"col":36,"line":842}}]],"7227":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":66,"line":842},"start":{"col":36,"line":842}}]],"7228":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":66,"line":842},"start":{"col":36,"line":842}}]],"7229":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":52,"line":841},"start":{"col":18,"line":841}}]],"723":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7230":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":52,"line":841},"start":{"col":18,"line":841}}]],"7231":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":52,"line":841},"start":{"col":18,"line":841}}]],"7232":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":843},"start":{"col":58,"line":843}}]],"7233":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":843},"start":{"col":58,"line":843}}]],"7234":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":62,"line":843},"start":{"col":58,"line":843}}]],"7235":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":63,"line":843},"start":{"col":37,"line":843}}]],"7236":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":63,"line":843},"start":{"col":37,"line":843}}]],"7237":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":63,"line":843},"start":{"col":37,"line":843}}]],"7238":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":92},"start":{"col":0,"line":92}}]],"7239":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":92},"start":{"col":0,"line":92}}]],"724":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7240":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":92},"start":{"col":0,"line":92}}]],"7241":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":92},"start":{"col":0,"line":92}}]],"7242":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":92},"start":{"col":0,"line":92}}]],"7243":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":92},"start":{"col":0,"line":92}}]],"7244":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":92},"start":{"col":0,"line":92}}]],"7245":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":92},"start":{"col":0,"line":92}}]],"7246":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":92},"start":{"col":0,"line":92}}]],"7247":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":92},"start":{"col":0,"line":92}}]],"7248":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":92},"start":{"col":0,"line":92}}]],"7249":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":92},"start":{"col":0,"line":92}}]],"725":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7250":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":92},"start":{"col":0,"line":92}}]],"7251":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":92},"start":{"col":0,"line":92}}]],"7252":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":92},"start":{"col":0,"line":92}}]],"7253":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":92},"start":{"col":0,"line":92}}]],"7254":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":92},"start":{"col":0,"line":92}}]],"7255":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/array.cairo",{"end":{"col":46,"line":92},"start":{"col":0,"line":92}}]],"7256":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":30,"line":144},"start":{"col":8,"line":144}}]],"7257":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":30,"line":144},"start":{"col":8,"line":144}}]],"7258":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":30,"line":144},"start":{"col":8,"line":144}}]],"7259":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":30,"line":144},"start":{"col":8,"line":144}}]],"726":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7260":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":30,"line":144},"start":{"col":8,"line":144}}]],"7261":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":30,"line":144},"start":{"col":8,"line":144}}]],"7262":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":30,"line":144},"start":{"col":8,"line":144}}]],"7263":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":30,"line":144},"start":{"col":8,"line":144}}]],"7264":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":30,"line":144},"start":{"col":8,"line":144}}]],"7265":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":30,"line":144},"start":{"col":8,"line":144}}]],"7266":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":30,"line":144},"start":{"col":8,"line":144}}]],"7267":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":30,"line":144},"start":{"col":8,"line":144}}]],"7268":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":35,"line":134},"start":{"col":8,"line":134}}]],"7269":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":35,"line":134},"start":{"col":8,"line":134}}]],"727":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7270":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":35,"line":134},"start":{"col":8,"line":134}}]],"7271":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":35,"line":134},"start":{"col":8,"line":134}}]],"7272":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":35,"line":134},"start":{"col":8,"line":134}}]],"7273":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":35,"line":134},"start":{"col":8,"line":134}}]],"7274":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":35,"line":134},"start":{"col":8,"line":134}}]],"7275":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":35,"line":134},"start":{"col":8,"line":134}}]],"7276":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":35,"line":134},"start":{"col":8,"line":134}}]],"7277":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":35,"line":134},"start":{"col":8,"line":134}}]],"7278":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":23,"line":87},"start":{"col":8,"line":87}}]],"7279":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":23,"line":87},"start":{"col":8,"line":87}}]],"728":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7280":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":17,"line":63},"start":{"col":13,"line":63}}]],"7281":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":17,"line":63},"start":{"col":12,"line":63}}]],"7282":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":17,"line":63},"start":{"col":12,"line":63}}]],"7283":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":47,"line":106},"start":{"col":8,"line":106}}]],"7284":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":23,"line":105},"start":{"col":19,"line":105}}]],"7285":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":23,"line":105},"start":{"col":19,"line":105}}]],"7286":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":23,"line":105},"start":{"col":19,"line":105}}]],"7287":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":38,"line":112},"start":{"col":8,"line":112}}]],"7288":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":38,"line":112},"start":{"col":8,"line":112}}]],"7289":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":38,"line":112},"start":{"col":8,"line":112}}]],"729":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7290":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":38,"line":112},"start":{"col":8,"line":112}}]],"7291":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":38,"line":112},"start":{"col":8,"line":112}}]],"7292":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":38,"line":112},"start":{"col":8,"line":112}}]],"7293":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":38,"line":112},"start":{"col":8,"line":112}}]],"7294":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":38,"line":112},"start":{"col":8,"line":112}}]],"7295":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":38,"line":112},"start":{"col":8,"line":112}}]],"7296":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":38,"line":112},"start":{"col":8,"line":112}}]],"7297":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":39,"line":152},"start":{"col":21,"line":152}}]],"7298":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":39,"line":152},"start":{"col":21,"line":152}}]],"7299":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":39,"line":152},"start":{"col":21,"line":152}}]],"73":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"730":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7300":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":39,"line":152},"start":{"col":21,"line":152}}]],"7301":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":9,"line":153},"start":{"col":8,"line":153}}]],"7302":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":9,"line":153},"start":{"col":8,"line":153}}]],"7303":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":34,"line":92},"start":{"col":8,"line":92}}]],"7304":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":19,"line":91},"start":{"col":15,"line":91}}]],"7305":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":19,"line":91},"start":{"col":15,"line":91}}]],"7306":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":33,"line":98},"start":{"col":25,"line":98}}]],"7307":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":33,"line":98},"start":{"col":25,"line":98}}]],"7308":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":29,"line":99},"start":{"col":20,"line":99}}]],"7309":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":39,"line":100},"start":{"col":23,"line":100}}]],"731":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7310":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":39,"line":100},"start":{"col":23,"line":100}}]],"7311":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":45,"line":251},"start":{"col":8,"line":251}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":48,"line":100},"start":{"col":23,"line":100}}]],"7312":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":45,"line":251},"start":{"col":8,"line":251}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":48,"line":100},"start":{"col":23,"line":100}}]],"7313":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":40,"line":101},"start":{"col":8,"line":101}}]],"7314":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":40,"line":101},"start":{"col":8,"line":101}}]],"7315":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":40,"line":101},"start":{"col":8,"line":101}}]],"7316":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":5,"line":102},"start":{"col":49,"line":96}}]],"7317":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":5,"line":102},"start":{"col":49,"line":96}}]],"7318":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":5,"line":102},"start":{"col":49,"line":96}}]],"7319":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":45,"line":251},"start":{"col":8,"line":251}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":48,"line":100},"start":{"col":23,"line":100}}]],"732":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7320":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":45,"line":251},"start":{"col":8,"line":251}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":48,"line":100},"start":{"col":23,"line":100}}]],"7321":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":45,"line":251},"start":{"col":8,"line":251}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":48,"line":100},"start":{"col":23,"line":100}}]],"7322":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":45,"line":251},"start":{"col":8,"line":251}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":48,"line":100},"start":{"col":23,"line":100}}]],"7323":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":45,"line":251},"start":{"col":8,"line":251}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":48,"line":100},"start":{"col":23,"line":100}}]],"7324":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":45,"line":251},"start":{"col":8,"line":251}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":48,"line":100},"start":{"col":23,"line":100}}]],"7325":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":45,"line":251},"start":{"col":8,"line":251}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":48,"line":100},"start":{"col":23,"line":100}}]],"7326":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":45,"line":251},"start":{"col":8,"line":251}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":48,"line":100},"start":{"col":23,"line":100}}]],"7327":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":45,"line":251},"start":{"col":8,"line":251}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":48,"line":100},"start":{"col":23,"line":100}}]],"7328":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":45,"line":251},"start":{"col":8,"line":251}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":48,"line":100},"start":{"col":23,"line":100}}]],"7329":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":45,"line":251},"start":{"col":8,"line":251}}],["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":48,"line":100},"start":{"col":23,"line":100}}]],"733":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7330":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":48,"line":100},"start":{"col":23,"line":100}}]],"7331":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":48,"line":100},"start":{"col":23,"line":100}}]],"7332":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":48,"line":100},"start":{"col":23,"line":100}}]],"7333":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":84,"line":186},"start":{"col":38,"line":186}}]],"7334":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":84,"line":186},"start":{"col":38,"line":186}}]],"7335":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":84,"line":186},"start":{"col":38,"line":186}}]],"7336":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":86,"line":186},"start":{"col":8,"line":186}}]],"7337":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":61,"line":189},"start":{"col":42,"line":189}}]],"7338":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":72,"line":189},"start":{"col":42,"line":189}}]],"7339":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":72,"line":189},"start":{"col":42,"line":189}}]],"734":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7340":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":73,"line":189},"start":{"col":8,"line":189}}]],"7341":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":73,"line":189},"start":{"col":8,"line":189}}]],"7342":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":73,"line":189},"start":{"col":8,"line":189}}]],"7343":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":73,"line":189},"start":{"col":8,"line":189}}]],"7344":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":84,"line":186},"start":{"col":38,"line":186}}]],"7345":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":84,"line":186},"start":{"col":38,"line":186}}]],"7346":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":84,"line":186},"start":{"col":38,"line":186}}]],"7347":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":86,"line":186},"start":{"col":8,"line":186}}]],"7348":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":61,"line":189},"start":{"col":42,"line":189}}]],"7349":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":72,"line":189},"start":{"col":42,"line":189}}]],"735":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7350":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":72,"line":189},"start":{"col":42,"line":189}}]],"7351":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":73,"line":189},"start":{"col":8,"line":189}}]],"7352":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":73,"line":189},"start":{"col":8,"line":189}}]],"7353":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":73,"line":189},"start":{"col":8,"line":189}}]],"7354":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage.cairo",{"end":{"col":73,"line":189},"start":{"col":8,"line":189}}]],"7355":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":27,"line":51},"start":{"col":8,"line":51}}]],"7356":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":27,"line":51},"start":{"col":8,"line":51}}]],"7357":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":27,"line":51},"start":{"col":8,"line":51}}]],"7358":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":27,"line":51},"start":{"col":8,"line":51}}]],"7359":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/hash.cairo",{"end":{"col":27,"line":51},"start":{"col":8,"line":51}}]],"736":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7360":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/pedersen.cairo",{"end":{"col":18,"line":96},"start":{"col":8,"line":96}}]],"7361":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/pedersen.cairo",{"end":{"col":18,"line":96},"start":{"col":8,"line":96}}]],"7362":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/pedersen.cairo",{"end":{"col":18,"line":96},"start":{"col":8,"line":96}}]],"7363":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":13,"line":174},"start":{"col":8,"line":174}}]],"7364":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":13,"line":174},"start":{"col":8,"line":174}}]],"7365":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":13,"line":174},"start":{"col":8,"line":174}}]],"7366":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":18,"line":174},"start":{"col":17,"line":174}}]],"7367":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":18,"line":174},"start":{"col":17,"line":174}}]],"7368":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":18,"line":174},"start":{"col":8,"line":174}}]],"7369":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":18,"line":174},"start":{"col":8,"line":174}}]],"737":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7370":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":18,"line":174},"start":{"col":8,"line":174}}]],"7371":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":18,"line":174},"start":{"col":8,"line":174}}]],"7372":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":20,"line":170},"start":{"col":8,"line":170}}]],"7373":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":20,"line":170},"start":{"col":8,"line":170}}]],"7374":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/storage_access.cairo",{"end":{"col":20,"line":170},"start":{"col":8,"line":170}}]],"7375":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":28,"line":1199},"start":{"col":8,"line":1199}}]],"7376":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":28,"line":1199},"start":{"col":8,"line":1199}}]],"7377":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/integer.cairo",{"end":{"col":28,"line":1199},"start":{"col":8,"line":1199}}]],"7378":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":19,"line":81},"start":{"col":8,"line":81}}]],"7379":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":19,"line":81},"start":{"col":8,"line":81}}]],"738":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7380":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/box.cairo",{"end":{"col":19,"line":81},"start":{"col":8,"line":81}}]],"7381":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":35,"line":47},"start":{"col":31,"line":47}}]],"7382":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":36,"line":47},"start":{"col":8,"line":47}}]],"7383":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":36,"line":47},"start":{"col":8,"line":47}}]],"7384":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":36,"line":47},"start":{"col":8,"line":47}}]],"7385":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":58,"line":47},"start":{"col":8,"line":47}}]],"7386":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":58,"line":47},"start":{"col":8,"line":47}}]],"7387":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":58,"line":47},"start":{"col":8,"line":47}}]],"7388":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/starknet/class_hash.cairo",{"end":{"col":45,"line":46},"start":{"col":39,"line":46}}]],"7389":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":9,"line":76},"start":{"col":8,"line":73}}]],"739":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7390":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":9,"line":76},"start":{"col":8,"line":73}}]],"7391":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":24,"line":74},"start":{"col":23,"line":74}}]],"7392":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":24,"line":74},"start":{"col":23,"line":74}}]],"7393":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":24,"line":74},"start":{"col":23,"line":74}}]],"7394":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":34,"line":74},"start":{"col":29,"line":74}}]],"7395":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":34,"line":74},"start":{"col":29,"line":74}}]],"7396":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":34,"line":74},"start":{"col":29,"line":74}}]],"7397":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":9,"line":76},"start":{"col":8,"line":73}}]],"7398":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":25,"line":75},"start":{"col":24,"line":75}}]],"7399":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":25,"line":75},"start":{"col":24,"line":75}}]],"74":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"740":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7400":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":25,"line":75},"start":{"col":24,"line":75}}]],"7401":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":34,"line":75},"start":{"col":30,"line":75}}]],"7402":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":34,"line":75},"start":{"col":30,"line":75}}]],"7403":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/result.cairo",{"end":{"col":34,"line":75},"start":{"col":30,"line":75}}]],"7404":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":29,"line":148},"start":{"col":8,"line":148}}]],"7405":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":29,"line":148},"start":{"col":8,"line":148}}]],"7406":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":29,"line":148},"start":{"col":8,"line":148}}]],"7407":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":29,"line":148},"start":{"col":8,"line":148}}]],"7408":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/zeroable.cairo",{"end":{"col":29,"line":104},"start":{"col":8,"line":104}}]],"7409":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/zeroable.cairo",{"end":{"col":29,"line":104},"start":{"col":8,"line":104}}]],"741":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7410":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/zeroable.cairo",{"end":{"col":29,"line":104},"start":{"col":8,"line":104}}]],"7411":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":36,"line":47},"start":{"col":14,"line":47}}]],"7412":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":36,"line":47},"start":{"col":14,"line":47}}]],"7413":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":36,"line":47},"start":{"col":14,"line":47}}]],"7414":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":46,"line":48},"start":{"col":34,"line":48}}]],"7415":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":46,"line":48},"start":{"col":34,"line":48}}]],"7416":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":46,"line":48},"start":{"col":34,"line":48}}]],"7417":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":36,"line":47},"start":{"col":14,"line":47}}]],"7418":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":60,"line":49},"start":{"col":56,"line":49}}]],"7419":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":61,"line":49},"start":{"col":43,"line":49}}]],"742":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"7420":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/ec.cairo",{"end":{"col":61,"line":49},"start":{"col":43,"line":49}}]],"7421":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/pedersen.cairo",{"end":{"col":46,"line":77},"start":{"col":36,"line":77}}]],"7422":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/pedersen.cairo",{"end":{"col":54,"line":77},"start":{"col":27,"line":77}}]],"7423":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/pedersen.cairo",{"end":{"col":54,"line":77},"start":{"col":27,"line":77}}]],"7424":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/pedersen.cairo",{"end":{"col":56,"line":77},"start":{"col":8,"line":77}}]],"7425":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/pedersen.cairo",{"end":{"col":56,"line":77},"start":{"col":8,"line":77}}]],"7426":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/pedersen.cairo",{"end":{"col":56,"line":77},"start":{"col":8,"line":77}}]],"7427":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":29,"line":99},"start":{"col":8,"line":99}}]],"7428":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":29,"line":99},"start":{"col":8,"line":99}}]],"7429":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/lib.cairo",{"end":{"col":29,"line":99},"start":{"col":8,"line":99}}]],"743":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"744":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"745":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"746":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"747":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"748":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"749":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"75":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"750":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"751":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"752":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"753":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"754":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"755":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"756":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"757":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"758":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"759":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"76":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"760":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"761":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"762":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"763":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"764":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"765":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"766":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"767":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"768":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"769":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"77":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"770":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"771":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"772":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"773":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"774":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"775":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"776":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"777":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"778":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"779":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"78":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"780":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"781":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"782":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"783":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"784":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"785":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"786":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"787":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"788":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"789":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"79":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"790":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"791":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"792":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"793":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"794":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"795":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"796":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"797":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"798":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"799":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"8":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"80":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"800":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"801":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"802":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"803":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"804":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"805":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"806":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"807":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"808":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"809":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"81":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"810":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"811":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"812":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"813":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"814":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"815":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"816":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"817":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"818":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"819":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"82":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"820":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"821":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"822":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"823":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"824":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"825":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"826":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"827":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"828":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"829":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"83":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"830":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"831":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"832":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"833":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":240},"start":{"col":8,"line":236}}]],"834":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"835":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"836":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"837":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"838":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"839":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"84":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"840":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"841":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"842":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"843":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"844":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"845":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"846":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"847":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"848":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"849":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"85":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"850":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"851":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"852":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"853":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"854":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"855":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"856":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"857":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"858":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"859":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"86":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"860":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"861":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"862":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"863":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"864":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"865":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"866":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"867":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"868":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"869":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"87":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"870":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"871":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"872":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"873":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"874":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"875":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"876":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"877":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"878":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"879":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"88":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"880":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"881":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"882":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"883":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"884":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"885":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"886":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"887":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"888":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"889":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"89":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"890":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"891":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"892":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"893":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"894":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"895":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"896":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"897":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"898":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"899":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"9":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"90":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"900":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"901":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"902":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"903":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"904":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"905":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"906":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"907":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"908":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"909":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"91":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"910":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"911":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"912":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"913":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"914":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"915":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"916":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"917":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"918":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"919":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"92":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"920":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"921":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"922":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"923":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"924":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"925":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"926":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"927":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"928":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"929":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"93":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"930":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"931":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"932":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"933":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"934":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"935":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"936":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"937":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"938":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"939":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"94":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"940":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"941":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"942":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"943":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"944":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"945":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"946":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"947":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"948":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"949":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"95":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"950":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"951":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"952":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"953":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"954":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"955":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"956":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"957":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"958":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"959":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"96":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"960":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"961":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"962":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"963":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"964":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"965":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"966":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"967":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"968":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"969":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"97":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"970":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"971":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"972":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"973":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"974":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":9,"line":246},"start":{"col":8,"line":243}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"975":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"976":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"977":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"978":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"979":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"98":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"980":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"981":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"982":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"983":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"984":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"985":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"986":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"987":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"988":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"989":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"99":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/presets/src/account.cairo",{"end":{"col":9,"line":72},"start":{"col":8,"line":69}}]],"990":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"991":[["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"992":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"993":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"994":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"995":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"996":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"997":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"998":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]],"999":[["/home/fabijanc/.cache/scarb/registry/std/v2.9.4/core/src/option.cairo",{"end":{"col":58,"line":245},"start":{"col":28,"line":245}}],["/home/fabijanc/OpenZeppelin/cairo-contracts/packages/account/src/account.cairo",{"end":{"col":9,"line":250},"start":{"col":8,"line":243}}]]}}}},"contract_class_version":"0.1.0","entry_points_by_type":{"EXTERNAL":[{"selector":"0xbc0eb87884ab91e330445c3584a50d7ddf4b568f02fbeb456a6242cce3f5d9","function_idx":10},{"selector":"0xf2f7c15cbe06c8d94597cd91fd7f3369eae842359235712def5584f8d270cd","function_idx":0},{"selector":"0xfe80f537b66d12a00b6d3c072b44afbb716e78dde5c3f0ef116ee93d3e3283","function_idx":11},{"selector":"0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad","function_idx":1},{"selector":"0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775","function_idx":2},{"selector":"0x1a35984e05126dbecb7c3bb9929e7dd9106d460c59b1633739a5c733a5fb13b","function_idx":7},{"selector":"0x1a6c6a0bdec86cc645c91997d8eea83e87148659e3e61122f72361fd5e94079","function_idx":9},{"selector":"0x1e6d35df2b9d989fb4b6bbcebda1314e4254cbe5e589dd94ff4f29ea935e91c","function_idx":13},{"selector":"0x213dfe25e2ca309c4d615a09cfc95fdb2fc7dc73fbcad12c450fe93b1f2ff9e","function_idx":4},{"selector":"0x28420862938116cb3bbdbedee07451ccc54d4e9412dbef71142ad1980a30941","function_idx":3},{"selector":"0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3","function_idx":5},{"selector":"0x2e3e21ff5952b2531241e37999d9c4c8b3034cccc89a202a6bf019bdf5294f9","function_idx":8},{"selector":"0x34cc13b274446654ca3233ed2c1620d4c5d1d32fd20b47146a3371064bdc57d","function_idx":12},{"selector":"0x36fcbf06cd96843058359e1a75928beacfac10727dab22a3972f0af8aa92895","function_idx":6}],"L1_HANDLER":[],"CONSTRUCTOR":[{"selector":"0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194","function_idx":14}]},"abi":[{"type":"impl","name":"UpgradeableImpl","interface_name":"openzeppelin_upgrades::interface::IUpgradeable"},{"type":"interface","name":"openzeppelin_upgrades::interface::IUpgradeable","items":[{"type":"function","name":"upgrade","inputs":[{"name":"new_class_hash","type":"core::starknet::class_hash::ClassHash"}],"outputs":[],"state_mutability":"external"}]},{"type":"impl","name":"AccountMixinImpl","interface_name":"openzeppelin_account::interface::AccountABI"},{"type":"struct","name":"core::array::Span::","members":[{"name":"snapshot","type":"@core::array::Array::"}]},{"type":"struct","name":"core::starknet::account::Call","members":[{"name":"to","type":"core::starknet::contract_address::ContractAddress"},{"name":"selector","type":"core::felt252"},{"name":"calldata","type":"core::array::Span::"}]},{"type":"enum","name":"core::bool","variants":[{"name":"False","type":"()"},{"name":"True","type":"()"}]},{"type":"interface","name":"openzeppelin_account::interface::AccountABI","items":[{"type":"function","name":"__execute__","inputs":[{"name":"calls","type":"core::array::Array::"}],"outputs":[{"type":"core::array::Array::>"}],"state_mutability":"view"},{"type":"function","name":"__validate__","inputs":[{"name":"calls","type":"core::array::Array::"}],"outputs":[{"type":"core::felt252"}],"state_mutability":"view"},{"type":"function","name":"is_valid_signature","inputs":[{"name":"hash","type":"core::felt252"},{"name":"signature","type":"core::array::Array::"}],"outputs":[{"type":"core::felt252"}],"state_mutability":"view"},{"type":"function","name":"supports_interface","inputs":[{"name":"interface_id","type":"core::felt252"}],"outputs":[{"type":"core::bool"}],"state_mutability":"view"},{"type":"function","name":"__validate_declare__","inputs":[{"name":"class_hash","type":"core::felt252"}],"outputs":[{"type":"core::felt252"}],"state_mutability":"view"},{"type":"function","name":"__validate_deploy__","inputs":[{"name":"class_hash","type":"core::felt252"},{"name":"contract_address_salt","type":"core::felt252"},{"name":"public_key","type":"core::felt252"}],"outputs":[{"type":"core::felt252"}],"state_mutability":"view"},{"type":"function","name":"get_public_key","inputs":[],"outputs":[{"type":"core::felt252"}],"state_mutability":"view"},{"type":"function","name":"set_public_key","inputs":[{"name":"new_public_key","type":"core::felt252"},{"name":"signature","type":"core::array::Span::"}],"outputs":[],"state_mutability":"external"},{"type":"function","name":"isValidSignature","inputs":[{"name":"hash","type":"core::felt252"},{"name":"signature","type":"core::array::Array::"}],"outputs":[{"type":"core::felt252"}],"state_mutability":"view"},{"type":"function","name":"getPublicKey","inputs":[],"outputs":[{"type":"core::felt252"}],"state_mutability":"view"},{"type":"function","name":"setPublicKey","inputs":[{"name":"newPublicKey","type":"core::felt252"},{"name":"signature","type":"core::array::Span::"}],"outputs":[],"state_mutability":"external"}]},{"type":"impl","name":"OutsideExecutionV2Impl","interface_name":"openzeppelin_account::extensions::src9::interface::ISRC9_V2"},{"type":"struct","name":"core::array::Span::","members":[{"name":"snapshot","type":"@core::array::Array::"}]},{"type":"struct","name":"openzeppelin_account::extensions::src9::interface::OutsideExecution","members":[{"name":"caller","type":"core::starknet::contract_address::ContractAddress"},{"name":"nonce","type":"core::felt252"},{"name":"execute_after","type":"core::integer::u64"},{"name":"execute_before","type":"core::integer::u64"},{"name":"calls","type":"core::array::Span::"}]},{"type":"interface","name":"openzeppelin_account::extensions::src9::interface::ISRC9_V2","items":[{"type":"function","name":"execute_from_outside_v2","inputs":[{"name":"outside_execution","type":"openzeppelin_account::extensions::src9::interface::OutsideExecution"},{"name":"signature","type":"core::array::Span::"}],"outputs":[{"type":"core::array::Array::>"}],"state_mutability":"external"},{"type":"function","name":"is_valid_outside_execution_nonce","inputs":[{"name":"nonce","type":"core::felt252"}],"outputs":[{"type":"core::bool"}],"state_mutability":"view"}]},{"type":"constructor","name":"constructor","inputs":[{"name":"public_key","type":"core::felt252"}]},{"type":"event","name":"openzeppelin_account::account::AccountComponent::OwnerAdded","kind":"struct","members":[{"name":"new_owner_guid","type":"core::felt252","kind":"key"}]},{"type":"event","name":"openzeppelin_account::account::AccountComponent::OwnerRemoved","kind":"struct","members":[{"name":"removed_owner_guid","type":"core::felt252","kind":"key"}]},{"type":"event","name":"openzeppelin_account::account::AccountComponent::Event","kind":"enum","variants":[{"name":"OwnerAdded","type":"openzeppelin_account::account::AccountComponent::OwnerAdded","kind":"nested"},{"name":"OwnerRemoved","type":"openzeppelin_account::account::AccountComponent::OwnerRemoved","kind":"nested"}]},{"type":"event","name":"openzeppelin_introspection::src5::SRC5Component::Event","kind":"enum","variants":[]},{"type":"event","name":"openzeppelin_account::extensions::src9::src9::SRC9Component::Event","kind":"enum","variants":[]},{"type":"event","name":"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded","kind":"struct","members":[{"name":"class_hash","type":"core::starknet::class_hash::ClassHash","kind":"data"}]},{"type":"event","name":"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event","kind":"enum","variants":[{"name":"Upgraded","type":"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded","kind":"nested"}]},{"type":"event","name":"openzeppelin_presets::account::AccountUpgradeable::Event","kind":"enum","variants":[{"name":"AccountEvent","type":"openzeppelin_account::account::AccountComponent::Event","kind":"flat"},{"name":"SRC5Event","type":"openzeppelin_introspection::src5::SRC5Component::Event","kind":"flat"},{"name":"SRC9Event","type":"openzeppelin_account::extensions::src9::src9::SRC9Component::Event","kind":"flat"},{"name":"UpgradeableEvent","type":"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event","kind":"flat"}]}]} \ No newline at end of file diff --git a/crates/pathfinder/src/devnet/fixtures/account/OpenZeppelin/1.0.0/Account.cairo/compilation_info.txt b/crates/pathfinder/src/devnet/fixtures/account/OpenZeppelin/1.0.0/Account.cairo/compilation_info.txt new file mode 100644 index 0000000000..903cf63d0b --- /dev/null +++ b/crates/pathfinder/src/devnet/fixtures/account/OpenZeppelin/1.0.0/Account.cairo/compilation_info.txt @@ -0,0 +1,2 @@ +The exact version as in OpenZeppelin/cairo-contracts v1.0.0 +Compiled with scarb 2.9.4 diff --git a/crates/pathfinder/src/devnet/fixtures/hello_starknet.sierra b/crates/pathfinder/src/devnet/fixtures/hello_starknet.sierra new file mode 100644 index 0000000000..508cc1bab9 --- /dev/null +++ b/crates/pathfinder/src/devnet/fixtures/hello_starknet.sierra @@ -0,0 +1 @@ +{"sierra_program":["0x1","0x7","0x0","0x2","0xf","0x0","0x9c","0x64","0x18","0x52616e6765436865636b","0x800000000000000100000000000000000000000000000000","0x436f6e7374","0x800000000000000000000000000000000000000000000002","0x1","0x10","0x2","0x4f7574206f6620676173","0x4661696c656420746f20646573657269616c697a6520706172616d202331","0x416d6f756e742063616e6e6f742062652030","0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473","0x53746f726167654261736541646472657373","0x800000000000000700000000000000000000000000000000","0x537472756374","0x800000000000000700000000000000000000000000000002","0x0","0x145cc613954179acf89d43c94ed0e091828cbddcca83f5b408785785036d36d","0x5","0x4172726179","0x800000000000000300000000000000000000000000000001","0x536e617073686f74","0x800000000000000700000000000000000000000000000001","0x7","0x1baeba72e79e9db2587cf44fedb2f3700b2075a5e8e39a562584862c4b71f62","0x8","0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3","0x9","0xc","0x753332","0x53746f7261676541646472657373","0x31448060506164e4d1df7635613bacfbea8af9c3dc85ea9a55935292a4acddc","0x800000000000000f00000000000000000000000000000001","0x16a4c8d7c05909052238a862d8cc3e7975bf05a07b3a69c6b28951083a6d672","0x66656c74323532","0x4e6f6e5a65726f","0x4275696c74696e436f737473","0x53797374656d","0x800000000000000300000000000000000000000000000003","0xf","0x456e756d","0x9931c641b913035ae674b400b61a51476d506bbe8bba2ff8a6272790aba9e6","0xa","0x14","0x426f78","0x4761734275696c74696e","0x42","0x7265766f6b655f61705f747261636b696e67","0x77697468647261775f676173","0x6272616e63685f616c69676e","0x7374727563745f6465636f6e737472756374","0x61727261795f736e617073686f745f706f705f66726f6e74","0x73746f72655f74656d70","0x64726f70","0x16","0x66756e6374696f6e5f63616c6c","0x3","0x656e756d5f696e6974","0x15","0x17","0x13","0x6765745f6275696c74696e5f636f737473","0x12","0x77697468647261775f6761735f616c6c","0x756e626f78","0x72656e616d65","0x647570","0x66656c743235325f69735f7a65726f","0x7374727563745f636f6e737472756374","0x11","0x73746f726167655f626173655f616464726573735f636f6e7374","0x206f38f7e4f15e87567361213c28f235cccdaa1d7fd34c9db1dfe9489c6a091","0xe","0x736e617073686f745f74616b65","0x73746f726167655f616464726573735f66726f6d5f62617365","0x636f6e73745f61735f696d6d656469617465","0xb","0xd","0x73746f726167655f726561645f73797363616c6c","0x66656c743235325f616464","0x73746f726167655f77726974655f73797363616c6c","0x72656465706f7369745f676173","0x61727261795f6e6577","0x6a756d70","0x4","0x6","0x61727261795f617070656e64","0xe0","0xffffffffffffffff","0x74","0x6b","0x65","0x2b","0x19","0x1a","0x1b","0x1c","0x1d","0x1e","0x1f","0x20","0x21","0x22","0x23","0x24","0x25","0x26","0x27","0x28","0x29","0x2a","0x5a","0x2c","0x2d","0x2e","0x2f","0x30","0x31","0x32","0x33","0x51","0x34","0x35","0x36","0x37","0x38","0x39","0x3a","0x3b","0x3c","0x3d","0x3e","0x3f","0x40","0x41","0x43","0x44","0x45","0x46","0x79","0x47","0x48","0x49","0x4a","0x4b","0xbe","0x8f","0xb9","0xb0","0xc3","0x80","0xca","0xce","0xd2","0xd6","0xda","0x85b","0xf0e0d0c0b07060504030a0706050403090706050403080706050403020100","0x1d10071c0504031b051a100f0e190518100f0e170516150605141312051110","0x170527051a10260e02250d24060516230d222110200e12051f100f0e0d1e0d","0x534060505331b05053210311030102f2e022d0605162c2b052a0529102628","0x505343b0505341005053405073a0507390738053736050535190505351905","0x104306050542060505340605054106050540103f3e050534103d3a0505343c","0x70546450505352b05054427050544270505352b0505323838053706050535","0x1c0505424c05054b104a120505414805053248050535480505494805054447","0x5054417050535170505490605055210511050104f104e4d0505341c050534","0x544123805371b0505355438053710531c05053510073a0507392a0505441b","0x4b3805054b553805375405054b060505565505053255050535550505495505","0x55075912540758070510070510105805101010572b0505340505054b070505","0x51007104c055a2a1b07580719055410190558053805381010580510071017","0x5551010580510071048053c4d1c0758071b0554101b0558051b0512101058","0x580527051b10270558051019101058052a0517101058054d0517101058051c","0x506054d100705580507051c101205580512054c105405580554052a100605","0x27104505580510481010580548055510105805100710060712545405060558","0x2a0545101058051007103a2b075b3c3e075807451254380610450558054505","0x3a10003b0758053b052b103b0558053b053c103b05580536053e1036055805","0x500105e055805103b101058053b0536101058051007105d055c1058070005","0x1b10620558056061075f1061055805105e101058055f055d10605f0758055e","0x100705580507051c103c0558053c054c103e0558053e052a10630558056205","0x58051061101058055d05601010580510071063073c3e54056305580563054d","0x5670565101058056605641067660758056505631065055805640562106405","0x56b0569106b0558051068106a055805690567106905580568056610680558","0x6d3858076a6c073c546c106a0558056a056b106c0558056c056a106c6b0758","0x53c10740558057305671073055805106110105805100710727170386f5c6e","0x106b0558056b056a106d0558056d054c10750558053b5c076d105c0558055c","0x793878777607580775746b6e6d126e107505580575053c107405580574056b","0x7d0558051070107c05580576055c107605580576054c101058051007107b7a","0x5580580057410800558057f0573101058057e0572107f7e0758057d057110","0x580577051c107c0558057c054c103e0558053e052a10820558058105751081","0x5f1083055805105e1010580510071082777c3e54058205580582054d107705","0x7905580579054c103e0558053e052a108505580584051b10840558057b8307","0x53610105805100710857a793e54058505580585054d107a0558057a051c10","0x2e051b102e0558057286075f1086055805105e101058056b0576101058053b","0x54d107105580571051c107005580570054c103e0558053e052a1087055805","0x558053a055c101058052a0517101058051007108771703e54058705580587","0x5510105805100710108b051077108a05580588054c10890558052b052a1088","0x54c105405580554052a108d0558058c051b108c0558051079101058054c05","0x51007108d07125454058d0558058d054d100705580507051c101205580512","0x58058e054c108905580555052a108e05580517055c1010580538057a101058","0x58058a054c108905580589052a10900558058f051b108f055805107b108a05","0x1010580510101090078a8954059005580590054d100705580507051c108a05","0x19055410190558053805381010580510071017550791125407580705100705","0x1019101058052a0517101058051b0555101058051007104c05922a1b075807","0x51c101205580512054c105405580554052a104d0558051c051b101c055805","0x58054c0555101058051007104d07125454054d0558054d054d100705580507","0x3e450793062707580748125438061048055805480527104805580510481010","0x10363a0758052b057d102b0558053c057c103c055805106110105805100710","0x105d05580500056710000558053b0566103b05580536057f101058053a057e","0x58075d5e0706546c105d0558055d056b105e0558055e056a105e0558051068","0x650558055f055c105f0558055f054c10105805100710646362389461605f38","0x75805670571106705580561660780106105580561053c1066055805107010","0x58056b0575106b0558056a0574106a05580569057310105805680572106968","0x56c054d106005580560051c106505580565054c102705580527052a106c05","0x6e055805646d075f106d055805105e101058051007106c60652754056c0558","0x5580563051c106205580562054c102705580527052a105c0558056e051b10","0x2a10700558053e055c101058051007105c63622754055c0558055c054d1063","0x538057a101058051007101095051077107205580570054c10710558054505","0x5805107b107205580573054c107105580555052a107305580517055c101058","0x507051c107205580572054c107105580571052a107505580574051b107405","0x5580510053c10100558051081107507727154057505580575054d10070558","0x100582101005580510053c1010055805108310050505050558051005821010","0x505055805100582101005580510053c101005580510841005050505055805","0x10701005050505055805100582101005580510053c10100558051085100505","0x8610540558050738075f1038055805105e1007055805100507801005055805","0x541b3c3b105410380705103a3c3b10541b3c3b105417540505540558055405","0x9b102b0506059a2b0510992b0510982b0510972b051096380705103a3c3b10"],"sierra_program_debug_info":{"type_names":[],"libfunc_names":[],"user_func_names":[]},"contract_class_version":"0.1.0","entry_points_by_type":{"EXTERNAL":[{"selector":"0x362398bec32bc0ebb411203221a35a0301193a96f317ebe5e40be9f60d15320","function_idx":0},{"selector":"0x39e11d48192e4333233c7eb19d10ad67c362bb28580c604d67884c85da39695","function_idx":1}],"L1_HANDLER":[],"CONSTRUCTOR":[]},"abi":[{"type":"impl","name":"HelloStarknetImpl","interface_name":"hello_starknet::IHelloStarknet"},{"type":"interface","name":"hello_starknet::IHelloStarknet","items":[{"type":"function","name":"increase_balance","inputs":[{"name":"amount","type":"core::felt252"}],"outputs":[],"state_mutability":"external"},{"type":"function","name":"get_balance","inputs":[],"outputs":[{"type":"core::felt252"}],"state_mutability":"view"}]},{"type":"event","name":"hello_starknet::HelloStarknet::Event","kind":"enum","variants":[]}]} \ No newline at end of file diff --git a/crates/pathfinder/src/devnet/fixtures/system/erc20_strk.sierra b/crates/pathfinder/src/devnet/fixtures/system/erc20_strk.sierra new file mode 100644 index 0000000000..109c97f3f4 --- /dev/null +++ b/crates/pathfinder/src/devnet/fixtures/system/erc20_strk.sierra @@ -0,0 +1 @@ +{"abi":[{"type":"impl","name":"LockingContract","interface_name":"src::mintable_lock_interface::ILockingContract"},{"type":"interface","name":"src::mintable_lock_interface::ILockingContract","items":[{"type":"function","name":"set_locking_contract","inputs":[{"name":"locking_contract","type":"core::starknet::contract_address::ContractAddress"}],"outputs":[],"state_mutability":"external"},{"type":"function","name":"get_locking_contract","inputs":[],"outputs":[{"type":"core::starknet::contract_address::ContractAddress"}],"state_mutability":"view"}]},{"type":"impl","name":"LockAndDelegate","interface_name":"src::mintable_lock_interface::ILockAndDelegate"},{"type":"struct","name":"core::integer::u256","members":[{"name":"low","type":"core::integer::u128"},{"name":"high","type":"core::integer::u128"}]},{"type":"interface","name":"src::mintable_lock_interface::ILockAndDelegate","items":[{"type":"function","name":"lock_and_delegate","inputs":[{"name":"delegatee","type":"core::starknet::contract_address::ContractAddress"},{"name":"amount","type":"core::integer::u256"}],"outputs":[],"state_mutability":"external"},{"type":"function","name":"lock_and_delegate_by_sig","inputs":[{"name":"account","type":"core::starknet::contract_address::ContractAddress"},{"name":"delegatee","type":"core::starknet::contract_address::ContractAddress"},{"name":"amount","type":"core::integer::u256"},{"name":"nonce","type":"core::felt252"},{"name":"expiry","type":"core::integer::u64"},{"name":"signature","type":"core::array::Array::"}],"outputs":[],"state_mutability":"external"}]},{"type":"impl","name":"MintableToken","interface_name":"src::mintable_token_interface::IMintableToken"},{"type":"interface","name":"src::mintable_token_interface::IMintableToken","items":[{"type":"function","name":"permissioned_mint","inputs":[{"name":"account","type":"core::starknet::contract_address::ContractAddress"},{"name":"amount","type":"core::integer::u256"}],"outputs":[],"state_mutability":"external"},{"type":"function","name":"permissioned_burn","inputs":[{"name":"account","type":"core::starknet::contract_address::ContractAddress"},{"name":"amount","type":"core::integer::u256"}],"outputs":[],"state_mutability":"external"}]},{"type":"impl","name":"MintableTokenCamelImpl","interface_name":"src::mintable_token_interface::IMintableTokenCamel"},{"type":"interface","name":"src::mintable_token_interface::IMintableTokenCamel","items":[{"type":"function","name":"permissionedMint","inputs":[{"name":"account","type":"core::starknet::contract_address::ContractAddress"},{"name":"amount","type":"core::integer::u256"}],"outputs":[],"state_mutability":"external"},{"type":"function","name":"permissionedBurn","inputs":[{"name":"account","type":"core::starknet::contract_address::ContractAddress"},{"name":"amount","type":"core::integer::u256"}],"outputs":[],"state_mutability":"external"}]},{"type":"impl","name":"Replaceable","interface_name":"src::replaceability_interface::IReplaceable"},{"type":"struct","name":"core::array::Span::","members":[{"name":"snapshot","type":"@core::array::Array::"}]},{"type":"struct","name":"src::replaceability_interface::EICData","members":[{"name":"eic_hash","type":"core::starknet::class_hash::ClassHash"},{"name":"eic_init_data","type":"core::array::Span::"}]},{"type":"enum","name":"core::option::Option::","variants":[{"name":"Some","type":"src::replaceability_interface::EICData"},{"name":"None","type":"()"}]},{"type":"enum","name":"core::bool","variants":[{"name":"False","type":"()"},{"name":"True","type":"()"}]},{"type":"struct","name":"src::replaceability_interface::ImplementationData","members":[{"name":"impl_hash","type":"core::starknet::class_hash::ClassHash"},{"name":"eic_data","type":"core::option::Option::"},{"name":"final","type":"core::bool"}]},{"type":"interface","name":"src::replaceability_interface::IReplaceable","items":[{"type":"function","name":"get_upgrade_delay","inputs":[],"outputs":[{"type":"core::integer::u64"}],"state_mutability":"view"},{"type":"function","name":"get_impl_activation_time","inputs":[{"name":"implementation_data","type":"src::replaceability_interface::ImplementationData"}],"outputs":[{"type":"core::integer::u64"}],"state_mutability":"view"},{"type":"function","name":"add_new_implementation","inputs":[{"name":"implementation_data","type":"src::replaceability_interface::ImplementationData"}],"outputs":[],"state_mutability":"external"},{"type":"function","name":"remove_implementation","inputs":[{"name":"implementation_data","type":"src::replaceability_interface::ImplementationData"}],"outputs":[],"state_mutability":"external"},{"type":"function","name":"replace_to","inputs":[{"name":"implementation_data","type":"src::replaceability_interface::ImplementationData"}],"outputs":[],"state_mutability":"external"}]},{"type":"impl","name":"AccessControlImplExternal","interface_name":"src::access_control_interface::IAccessControl"},{"type":"interface","name":"src::access_control_interface::IAccessControl","items":[{"type":"function","name":"has_role","inputs":[{"name":"role","type":"core::felt252"},{"name":"account","type":"core::starknet::contract_address::ContractAddress"}],"outputs":[{"type":"core::bool"}],"state_mutability":"view"},{"type":"function","name":"get_role_admin","inputs":[{"name":"role","type":"core::felt252"}],"outputs":[{"type":"core::felt252"}],"state_mutability":"view"}]},{"type":"impl","name":"RolesImpl","interface_name":"src::roles_interface::IMinimalRoles"},{"type":"interface","name":"src::roles_interface::IMinimalRoles","items":[{"type":"function","name":"is_governance_admin","inputs":[{"name":"account","type":"core::starknet::contract_address::ContractAddress"}],"outputs":[{"type":"core::bool"}],"state_mutability":"view"},{"type":"function","name":"is_upgrade_governor","inputs":[{"name":"account","type":"core::starknet::contract_address::ContractAddress"}],"outputs":[{"type":"core::bool"}],"state_mutability":"view"},{"type":"function","name":"register_governance_admin","inputs":[{"name":"account","type":"core::starknet::contract_address::ContractAddress"}],"outputs":[],"state_mutability":"external"},{"type":"function","name":"remove_governance_admin","inputs":[{"name":"account","type":"core::starknet::contract_address::ContractAddress"}],"outputs":[],"state_mutability":"external"},{"type":"function","name":"register_upgrade_governor","inputs":[{"name":"account","type":"core::starknet::contract_address::ContractAddress"}],"outputs":[],"state_mutability":"external"},{"type":"function","name":"remove_upgrade_governor","inputs":[{"name":"account","type":"core::starknet::contract_address::ContractAddress"}],"outputs":[],"state_mutability":"external"},{"type":"function","name":"renounce","inputs":[{"name":"role","type":"core::felt252"}],"outputs":[],"state_mutability":"external"}]},{"type":"impl","name":"ERC20Impl","interface_name":"openzeppelin::token::erc20::interface::IERC20"},{"type":"interface","name":"openzeppelin::token::erc20::interface::IERC20","items":[{"type":"function","name":"name","inputs":[],"outputs":[{"type":"core::felt252"}],"state_mutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"type":"core::felt252"}],"state_mutability":"view"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"type":"core::integer::u8"}],"state_mutability":"view"},{"type":"function","name":"total_supply","inputs":[],"outputs":[{"type":"core::integer::u256"}],"state_mutability":"view"},{"type":"function","name":"balance_of","inputs":[{"name":"account","type":"core::starknet::contract_address::ContractAddress"}],"outputs":[{"type":"core::integer::u256"}],"state_mutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"core::starknet::contract_address::ContractAddress"},{"name":"spender","type":"core::starknet::contract_address::ContractAddress"}],"outputs":[{"type":"core::integer::u256"}],"state_mutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"recipient","type":"core::starknet::contract_address::ContractAddress"},{"name":"amount","type":"core::integer::u256"}],"outputs":[{"type":"core::bool"}],"state_mutability":"external"},{"type":"function","name":"transfer_from","inputs":[{"name":"sender","type":"core::starknet::contract_address::ContractAddress"},{"name":"recipient","type":"core::starknet::contract_address::ContractAddress"},{"name":"amount","type":"core::integer::u256"}],"outputs":[{"type":"core::bool"}],"state_mutability":"external"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"core::starknet::contract_address::ContractAddress"},{"name":"amount","type":"core::integer::u256"}],"outputs":[{"type":"core::bool"}],"state_mutability":"external"}]},{"type":"impl","name":"ERC20CamelOnlyImpl","interface_name":"openzeppelin::token::erc20::interface::IERC20CamelOnly"},{"type":"interface","name":"openzeppelin::token::erc20::interface::IERC20CamelOnly","items":[{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"type":"core::integer::u256"}],"state_mutability":"view"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"core::starknet::contract_address::ContractAddress"}],"outputs":[{"type":"core::integer::u256"}],"state_mutability":"view"},{"type":"function","name":"transferFrom","inputs":[{"name":"sender","type":"core::starknet::contract_address::ContractAddress"},{"name":"recipient","type":"core::starknet::contract_address::ContractAddress"},{"name":"amount","type":"core::integer::u256"}],"outputs":[{"type":"core::bool"}],"state_mutability":"external"}]},{"type":"constructor","name":"constructor","inputs":[{"name":"name","type":"core::felt252"},{"name":"symbol","type":"core::felt252"},{"name":"decimals","type":"core::integer::u8"},{"name":"initial_supply","type":"core::integer::u256"},{"name":"recipient","type":"core::starknet::contract_address::ContractAddress"},{"name":"permitted_minter","type":"core::starknet::contract_address::ContractAddress"},{"name":"provisional_governance_admin","type":"core::starknet::contract_address::ContractAddress"},{"name":"upgrade_delay","type":"core::integer::u64"}]},{"type":"function","name":"increase_allowance","inputs":[{"name":"spender","type":"core::starknet::contract_address::ContractAddress"},{"name":"added_value","type":"core::integer::u256"}],"outputs":[{"type":"core::bool"}],"state_mutability":"external"},{"type":"function","name":"decrease_allowance","inputs":[{"name":"spender","type":"core::starknet::contract_address::ContractAddress"},{"name":"subtracted_value","type":"core::integer::u256"}],"outputs":[{"type":"core::bool"}],"state_mutability":"external"},{"type":"function","name":"increaseAllowance","inputs":[{"name":"spender","type":"core::starknet::contract_address::ContractAddress"},{"name":"addedValue","type":"core::integer::u256"}],"outputs":[{"type":"core::bool"}],"state_mutability":"external"},{"type":"function","name":"decreaseAllowance","inputs":[{"name":"spender","type":"core::starknet::contract_address::ContractAddress"},{"name":"subtractedValue","type":"core::integer::u256"}],"outputs":[{"type":"core::bool"}],"state_mutability":"external"},{"type":"event","name":"src::strk::erc20_lockable::ERC20Lockable::Transfer","kind":"struct","members":[{"name":"from","type":"core::starknet::contract_address::ContractAddress","kind":"data"},{"name":"to","type":"core::starknet::contract_address::ContractAddress","kind":"data"},{"name":"value","type":"core::integer::u256","kind":"data"}]},{"type":"event","name":"src::strk::erc20_lockable::ERC20Lockable::Approval","kind":"struct","members":[{"name":"owner","type":"core::starknet::contract_address::ContractAddress","kind":"data"},{"name":"spender","type":"core::starknet::contract_address::ContractAddress","kind":"data"},{"name":"value","type":"core::integer::u256","kind":"data"}]},{"type":"event","name":"src::replaceability_interface::ImplementationAdded","kind":"struct","members":[{"name":"implementation_data","type":"src::replaceability_interface::ImplementationData","kind":"data"}]},{"type":"event","name":"src::replaceability_interface::ImplementationRemoved","kind":"struct","members":[{"name":"implementation_data","type":"src::replaceability_interface::ImplementationData","kind":"data"}]},{"type":"event","name":"src::replaceability_interface::ImplementationReplaced","kind":"struct","members":[{"name":"implementation_data","type":"src::replaceability_interface::ImplementationData","kind":"data"}]},{"type":"event","name":"src::replaceability_interface::ImplementationFinalized","kind":"struct","members":[{"name":"impl_hash","type":"core::starknet::class_hash::ClassHash","kind":"data"}]},{"type":"event","name":"src::access_control_interface::RoleGranted","kind":"struct","members":[{"name":"role","type":"core::felt252","kind":"data"},{"name":"account","type":"core::starknet::contract_address::ContractAddress","kind":"data"},{"name":"sender","type":"core::starknet::contract_address::ContractAddress","kind":"data"}]},{"type":"event","name":"src::access_control_interface::RoleRevoked","kind":"struct","members":[{"name":"role","type":"core::felt252","kind":"data"},{"name":"account","type":"core::starknet::contract_address::ContractAddress","kind":"data"},{"name":"sender","type":"core::starknet::contract_address::ContractAddress","kind":"data"}]},{"type":"event","name":"src::access_control_interface::RoleAdminChanged","kind":"struct","members":[{"name":"role","type":"core::felt252","kind":"data"},{"name":"previous_admin_role","type":"core::felt252","kind":"data"},{"name":"new_admin_role","type":"core::felt252","kind":"data"}]},{"type":"event","name":"src::roles_interface::GovernanceAdminAdded","kind":"struct","members":[{"name":"added_account","type":"core::starknet::contract_address::ContractAddress","kind":"data"},{"name":"added_by","type":"core::starknet::contract_address::ContractAddress","kind":"data"}]},{"type":"event","name":"src::roles_interface::GovernanceAdminRemoved","kind":"struct","members":[{"name":"removed_account","type":"core::starknet::contract_address::ContractAddress","kind":"data"},{"name":"removed_by","type":"core::starknet::contract_address::ContractAddress","kind":"data"}]},{"type":"event","name":"src::roles_interface::UpgradeGovernorAdded","kind":"struct","members":[{"name":"added_account","type":"core::starknet::contract_address::ContractAddress","kind":"data"},{"name":"added_by","type":"core::starknet::contract_address::ContractAddress","kind":"data"}]},{"type":"event","name":"src::roles_interface::UpgradeGovernorRemoved","kind":"struct","members":[{"name":"removed_account","type":"core::starknet::contract_address::ContractAddress","kind":"data"},{"name":"removed_by","type":"core::starknet::contract_address::ContractAddress","kind":"data"}]},{"type":"event","name":"src::strk::erc20_lockable::ERC20Lockable::Event","kind":"enum","variants":[{"name":"Transfer","type":"src::strk::erc20_lockable::ERC20Lockable::Transfer","kind":"nested"},{"name":"Approval","type":"src::strk::erc20_lockable::ERC20Lockable::Approval","kind":"nested"},{"name":"ImplementationAdded","type":"src::replaceability_interface::ImplementationAdded","kind":"nested"},{"name":"ImplementationRemoved","type":"src::replaceability_interface::ImplementationRemoved","kind":"nested"},{"name":"ImplementationReplaced","type":"src::replaceability_interface::ImplementationReplaced","kind":"nested"},{"name":"ImplementationFinalized","type":"src::replaceability_interface::ImplementationFinalized","kind":"nested"},{"name":"RoleGranted","type":"src::access_control_interface::RoleGranted","kind":"nested"},{"name":"RoleRevoked","type":"src::access_control_interface::RoleRevoked","kind":"nested"},{"name":"RoleAdminChanged","type":"src::access_control_interface::RoleAdminChanged","kind":"nested"},{"name":"GovernanceAdminAdded","type":"src::roles_interface::GovernanceAdminAdded","kind":"nested"},{"name":"GovernanceAdminRemoved","type":"src::roles_interface::GovernanceAdminRemoved","kind":"nested"},{"name":"UpgradeGovernorAdded","type":"src::roles_interface::UpgradeGovernorAdded","kind":"nested"},{"name":"UpgradeGovernorRemoved","type":"src::roles_interface::UpgradeGovernorRemoved","kind":"nested"}]}],"contract_class_version":"0.1.0","entry_points_by_type":{"CONSTRUCTOR":[{"function_idx":38,"selector":"0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194"}],"EXTERNAL":[{"function_idx":20,"selector":"0xb2ef42a25c95687d1a3e7c2584885fd4058d102e05c44f65cf35988451bc8"},{"function_idx":12,"selector":"0xc30ffbeb949d3447fd4acd61251803e8ab9c8a777318abb5bd5fbf28015eb"},{"function_idx":6,"selector":"0x151e58b29179122a728eab07c8847e5baf5802379c5db3a7d57a8263a7bd1d"},{"function_idx":35,"selector":"0x41b033f4a31df8067c24d1e9b550a2ce75fd4a29e1147af9752174f0e6cb20"},{"function_idx":24,"selector":"0x4c4fb1ab068f6039d5780c68dd0fa2f8742cceb3426d19667778ca7f3518a9"},{"function_idx":33,"selector":"0x80aa9fdbfaf9615e4afc7f5f722e265daca5ccc655360fa5ccacf9c267936d"},{"function_idx":28,"selector":"0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e"},{"function_idx":21,"selector":"0x95604234097c6fe6314943092b1aa8fb6ee781cf32ac6d5b78d856f52a540f"},{"function_idx":2,"selector":"0xc357e0791efd20abc629024da92179b10fce7f1b3d10edc62ef40a57984697"},{"function_idx":1,"selector":"0xd4612fb377c4d51f0397aeb18757d3d580a7f22f58d516141cfcce5333b010"},{"function_idx":7,"selector":"0xd63a78e4cd7fb4c41bc18d089154af78d400a5e837f270baea6cf8db18c8dd"},{"function_idx":25,"selector":"0x1557182e4359a1f0c6301278e8f5b35a776ab58d39892581e357578fb287836"},{"function_idx":36,"selector":"0x16cc063b8338363cf388ce7fe1df408bf10f16cd51635d392e21d852fafb683"},{"function_idx":17,"selector":"0x183420eb7aafd9caad318b543d9252c94857340f4768ac83cf4b6472f0bf515"},{"function_idx":37,"selector":"0x1aaf3e6107dd1349c81543ff4221a326814f77dadcc5810807b74f1a49ded4e"},{"function_idx":4,"selector":"0x1c67057e2995950900dbf33db0f5fc9904f5a18aae4a3768f721c43efe5d288"},{"function_idx":31,"selector":"0x1d13ab0a76d7407b1d5faccd4b3d8a9efe42f3d3c21766431d4fafb30f45bd4"},{"function_idx":27,"selector":"0x1e888a1026b19c8c0b57c72d63ed1737106aa10034105b980ba117bd0c29fe1"},{"function_idx":9,"selector":"0x1fa400a40ac35b4aa2c5383c3bb89afee2a9698b86ebb405cf25a6e63428605"},{"function_idx":23,"selector":"0x216b05c387bab9ac31918a3e61672f4618601f3c598a2f3f2710f37053e1ea4"},{"function_idx":30,"selector":"0x219209e083275171774dab1df80982e9df2096516f06319c5c6d71ae0a8480c"},{"function_idx":18,"selector":"0x225faa998b63ad3d277e950e8091f07d28a4c45ef6de7f3f7095e89be92d701"},{"function_idx":19,"selector":"0x24643b0aa4f24549ae7cd884195db7950c3a79a96cb7f37bde40549723559d9"},{"function_idx":15,"selector":"0x25a5317fee78a3601253266ed250be22974a6b6eb116c875a2596585df6a400"},{"function_idx":3,"selector":"0x2842cf0fb9cd347687a6bfcf564c97b007cc28c3e25566d4b71c8935857767d"},{"function_idx":8,"selector":"0x284a2f635301a0bf3a171bb8e4292667c6c70d23d48b0ae8ec4df336e84bccd"},{"function_idx":34,"selector":"0x2e4263afad30923c891518314c3c95dbe830a16874e8abc5777a9a20b54c76e"},{"function_idx":14,"selector":"0x302e0454f48778e0ca3a2e714a289c4e8d8e03d614b370130abb1a524a47f22"},{"function_idx":13,"selector":"0x30559321b47d576b645ed7bd24089943dd5fd3a359ecdd6fa8f05c1bab67d6b"},{"function_idx":11,"selector":"0x338dd2002b6f7ac6471742691de72611381e3fc4ce2b0361c29d42cb2d53a90"},{"function_idx":10,"selector":"0x33fe3600cdfaa48261a8c268c66363562da383d5dd26837ba63b66ebbc04e3c"},{"function_idx":26,"selector":"0x35a73cd311a05d46deda634c5ee045db92f811b4e74bca4437fcb5302b7af33"},{"function_idx":0,"selector":"0x35ba35ba82b63d56c50ba3393af144616a46a2d2a79d13a5db1635a3386bd48"},{"function_idx":22,"selector":"0x361458367e696363fbcc70777d07ebbd2394e89fd0adcaf147faccd1d294d60"},{"function_idx":29,"selector":"0x3704ffe8fba161be0e994951751a5033b1462b918ff785c0a636be718dfdb68"},{"function_idx":16,"selector":"0x37791de85f8a3be5014988a652f6cf025858f3532706c18f8cf24f2f81800d5"},{"function_idx":5,"selector":"0x3a07502a2e0e18ad6178ca530615148b9892d000199dbb29e402c41913c3d1a"},{"function_idx":32,"selector":"0x3b076186c19fe96221e4dfacd40c519f612eae02e0555e4e115a2a6cf2f1c1f"}],"L1_HANDLER":[]},"sierra_program":["0x1","0x7","0x0","0x2","0xa","0x1","0x7b3","0x4d","0xde","0x52616e6765436865636b","0x800000000000000100000000000000000000000000000000","0x66656c74323532","0x800000000000000700000000000000000000000000000000","0x537472756374","0x800000000000000700000000000000000000000000000002","0x0","0x3ae3c0242bd1c83caced6e5a82afedd0a39d6a01aa4f144085f91115f9678ee","0x1","0x436f6e7374","0x800000000000000000000000000000000000000000000002","0x2","0x7533325f737562204f766572666c6f77","0x496e646578206f7574206f6620626f756e6473","0x4172726179","0x800000000000000300000000000000000000000000000001","0x10","0x536e617073686f74","0x800000000000000700000000000000000000000000000001","0x5","0x1597b831feeb60c71f259624b79cf66995ea4f7e383403583674ab9c33b9cec","0x6","0x436f6e747261637441646472657373","0x75313238","0xa","0x1baeba72e79e9db2587cf44fedb2f3700b2075a5e8e39a562584862c4b71f62","0xb","0x753332","0x80000000000000070000000000000000000000000000000e","0x348a62b7a38c0673e61e888d83a3ac1bf334ee7361a8514593d3d9532ed8b39","0x8","0x9","0xc","0x7","0xd","0x753634","0x800000000000000700000000000000000000000000000004","0x3342418ef16b3e2799b906b1e4e89dbb9b111332dd44f72458ce44f9895b508","0xf","0x312e302e30","0x544f4b454e5f4c4f434b5f414e445f44454c45474154494f4e","0x1bfc207425a47a5dfa1a50a4f5241203f50624ca5fdf5e18755765416b8e288","0x524f4c45535f414c52454144595f494e495449414c495a4544","0x5a45524f5f50524f564953494f4e414c5f474f565f41444d494e","0xeff755ce128e250e5e48eee49e67255703385cad7eccf2d161dd1a70320dc8","0x43414c4c45525f49535f4d495353494e475f524f4c45","0x25e2d538533284b9d61dfe45b9aaa563d33ef8374d9bb26d77a009b8e21f0de","0x2143175c365244751ccde24dd8f54f934672d6bc9110175c9e58e1e73705531","0x2d8a82390cce552844e57407d23a1e48a38c4b979d525b1673171e503e116ab","0x3ae95723946e49d38f0cf844cef1fb25870e9a74999a4b96271625efa849b4c","0x2b23b0c08c7b22209aea4100552de1b7876a49f04ee5a4d94f83ad24bc4ec1c","0x2842fd3b01bb0858fef6a2da51cdd9f995c7d36d7625fb68dd5d69fcc0a6d76","0x9d4a59b844ac9d98627ddba326ab3707a7d7e105fd03c777569d0f61a91f1e","0xd1831486d8c46712712653f17d3414869aa50b4c16836d0b3d4afcfeafa024","0x34bb683f971572e1b0f230f3dd40f3dbcee94e0b3e3261dd0a91229a1adc4b7","0x7633a8d8b49c5c6002a1329e2c9791ea2ced86e06e01e17b5d0d1d5312c792","0x38a81c7fd04bac40e22e3eab2bcb3a09398bba67d0c5a263c6665c9c0b13a3","0x134692b230b9e1ffa39098904722134159652b09c5bc41d88d6698779d228ff","0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9","0x384c2e98e3af0acf314102dc8ebe9011cefe220e3f77edc819db2a94915b72f","0x2ba68e64706519b3231e99b4d3007f1c776142d93afafaa0b53549870381466","0x30f406b1d8bc98143cf38cf66d9152a9ad605c5cc90a602d7460776ec6718ed","0x556e696e697469616c697a6564","0x800000000000000200000000000000000000000000000001","0x2a31bbb25d4dfa03fe73a91cbbab880b7c9cc4461880193ae5819ca6bbfe7cc","0x3be21cb653a577e120092d2cff591fabab878e99c4b7022c727c67d57516cd8","0x800000000000000f00000000000000000000000000000001","0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3","0x456e756d","0x800000000000000700000000000000000000000000000003","0x1d49f7a4b277bf7b55a2664ce8cef5d6922b5ffb806b89644b9e0cdbbcac378","0x2b","0x2c","0x16a4c8d7c05909052238a862d8cc3e7975bf05a07b3a69c6b28951083a6d672","0x800000000000000300000000000000000000000000000003","0x2e","0x13fdd7105045794a99550ae1c4ac13faa62610dfab62c16422bfcf5803baa6e","0x2d","0x2f","0x45524332303a206275726e2066726f6d2030","0x74131f8ccbce54c69d6f110fe2e023877ad5757b22c113da2a3f525c6601fe","0x45524332303a206d696e7420746f2030","0x52657475726e6564206461746120746f6f2073686f7274","0x28420862938116cb3bbdbedee07451ccc54d4e9412dbef71142ad1980a30941","0x2ab9656e71e13c39f9f290cc5354d2e50a410992032118a1779539be0e4e75","0x4f4e4c595f555047524144455f474f5645524e4f52","0x494e56414c49445f4d494e5445525f41444452455353","0x25e2ca4b84968c2d8b83ef476ca8549410346b00836ce79beaf538155990bb2","0x1a77856a06400f72f18e726d873574afab3e95aa51b4716ef6d0acf6829f8c1","0x39","0x45524332303a20617070726f766520746f2030","0x45524332303a20617070726f76652066726f6d2030","0x800000000000000000000000000000000000000000000003","0x3f","0x20c573050f4f72ab687d1e30ab9e3112f066656a1db232d4e8d586e1bc52772","0xffffffffffffffffffffffffffffffff","0x753235365f737562204f766572666c6f77","0x753235365f616464204f766572666c6f77","0xe6233b230a29adb5a1b63acb3ba07ae52fe13c078aad5943b391b6dadf32c2","0x53746f726167654261736541646472657373","0x1802098ad3a768b9070752b9c76d78739119b657863faee996237047e2cd718","0x44","0x11956ef5427d8b17839ef1ab259882b25c0eabf6d6a15c034942faee6617e37","0x45524332303a207472616e7366657220746f2030","0x45524332303a207472616e736665722066726f6d2030","0x53746f726555313238202d206e6f6e2075313238","0xa8","0x350d9416f58c95be8ef9cdc9ecb299df23021512fdc0110a670111a3553ab86","0x4f4e4c595f53454c465f43414e5f52454e4f554e4345","0x474f565f41444d494e5f43414e4e4f545f53454c465f52454d4f5645","0x494e56414c49445f4143434f554e545f41444452455353","0x46494e414c495a4544","0x4e4f545f454e41424c45445f594554","0x494d504c454d454e544154494f4e5f45585049524544","0x5245504c4143455f434c4153535f484153485f4641494c4544","0x101dc0399934cc08fa0d6f6f2daead4e4a38cabeea1c743e1fc28d2d6e58e99","0x53","0x4549435f4c49425f43414c4c5f4641494c4544","0x161ee0e6962e56453b5d68e09d1cabe5633858c1ba3a7e73fee8c70867eced0","0x56","0x3ea3b9a8522d36784cb325f9c7e2ec3c9f3e6d63031a6c6b8743cc22412f604","0x436c61737348617368","0x1f9a1062ac03e73c63c8574617d89a41e50eb3926ee6ff58d745aff3ed7ec3e","0x59","0x3d45f050e8f86640c1cd0e872be7e3dc76ed0eda574063d96a53b357e031c7","0x1eb8c2b265a8dd4f6f6ab20e681628834ae7a5c26760cd72fc69a3c4bb44dab","0x5a","0x3288d594b9a45d15bb2fcb7903f06cdb06b27f0ba88186ec4cfaa98307cb972","0x1a8bf5d1a8e0851ea228a7ae8c8f441e6643a41506f11d60bb3054232e46b95","0x5c","0x5d","0x135aa353c4e9ebb36233f8f2703f5db3515fb70d807690fadd89b1cf5dc520","0x5e","0x554e4b4e4f574e5f494d504c454d454e544154494f4e","0x3808c701a5d13e100ab11b6c02f91f752ecae7e420d21b56c90ec0a475cc7e5","0x61","0x63","0xa678ae40fd2d13e2520a2beedaeef6c85548a5754c350c4e75f44a3c525faf","0x4e6f6e5a65726f","0x7536345f616464204f766572666c6f77","0x800000000000000300000000000000000000000000000004","0x104eb68e98232f2362ae8fd62c9465a5910d805fa88b305d1f7721b8727f04","0x69","0x3bdb842447cc485dba916ec038afc2e5b4ae0014590b0453990ec44786aaec6","0x127500","0x506f736569646f6e","0x6e","0x24da7b26caf58d2c846cc549220abc95aa4c5ccd434fb667e23290a812e0eff","0x1ac8d354f2e793629cb233a16f10d13cf15b9c45bbc620577c8e1df95ede545","0x2a594b95e3522276fe0ac7ac7a7e4ad8c47eaa6223bc0fd6991aa683b7ee495","0x72","0x74584e9f10ffb1a40aa5a3582e203f6758defc4a497d1a2d5a89f274a320e9","0x75","0x10ac6c4f67d35926c92ed1ab5d9d4ea829204d1a1d17959320017075724351","0x77","0x2818750775d9b3854858668772cca198f62185a4b470b9f675cfb70da36156d","0x78","0x4d494e5445525f4f4e4c59","0x5349474e41545552455f45585049524544","0x5349474e41545552455f56414c49444154494f4e5f4641494c4544","0x56414c4944","0x2198e829398b164aa21bc7404598350cfdf200d1477c45ff8947aef0a2bb77","0x5349474e45445f524551554553545f414c52454144595f55534544","0x2c4be14f60c29d8dedd01a1091ea8c1572e3277b511cfff4179da99e219457e","0x2487213a2e92e8c6a8727c551b670514a7796fa30e2e4c9ef4309fa53c3c313","0x15de4ee18ebfb6453b53db283bb13bc3b7d746ca2d79f8163920e1b68d594ee","0x373b493f983dad093b686940e34994a648ff8ce21d397cbd532b20f12f5e501","0x83","0x5265717569726573206174206c65617374206f6e6520656c656d656e74","0x537461726b4e6574204d657373616765","0x10203be321c62a7bd4c060d69539c1fbe065baa9e253c74d2cc48be163e259","0x87","0x31448060506164e4d1df7635613bacfbea8af9c3dc85ea9a55935292a4acddc","0x53797374656d","0x8a","0x506564657273656e","0x8d","0x2b7080bbeb1d6f069b6c264f329194905a30d16c6b2dba4f2d59935c2c3896a","0x4c4f434b494e475f434f4e54524143545f4e4f545f534554","0x4c4f434b494e475f434f4e54524143545f414c52454144595f534554","0x5a45524f5f41444452455353","0x924583257a47dd83702b92d1bcf41027fba06c39486295102ef8c82b4f8b94","0x800000000000000f00000000000000000000000000000002","0xcc5e86243f861d2d64b08c35db21013e773ac5cf10097946fe0011304886d5","0x94","0x4661696c656420746f20646573657269616c697a6520706172616d202337","0x4661696c656420746f20646573657269616c697a6520706172616d202338","0x3d3865303b024ab911a8b57c1213df541b97c832d538faa59f78c9fe92dc496","0x98","0x1c62a3830d5f39b2d601627910e74a72c9a3ad68f243990b86375ea39b36215","0x99","0x1166fe35572d4e7764dac0caf1fd7fc591901fd01156db2561a07b68ab8dca2","0x141ea21bd03254e41074504de8465806cb179228cd769ab9e55224c660a57c4","0x9c","0x2a69c3f2ee27bbe2624c4ffcb3563ad31a1d6caee2eef9aed347284f5f8a34d","0x3c87bf42ed4f01f11883bf54f43d91d2cbbd5fec26d1df9c74c57ae138800a4","0x12ec76808d96ca2583b0dd3fb55396ab8783beaa30b8e3bf084a606e215849e","0x2b22539ea90e179bb2e7ef5f6db1255a5f497b922386e746219ec855ba7ab0c","0x3a4e8ec16e258a799fe707996fd5d21d42b29adc1499a370edf7f809d8c458a","0x2ce4352eafa6073ab4ecf9445ae96214f99c2c33a29c01fcae68ba501d10e2c","0xa3","0x268e4078627d9364ab472ed410c0ea6fe44919b24eafd69d665019c5a1c0c88","0x110e2f729c9c2b988559994a3daccd838cf52faf88e18101373e67dd061455a","0x53746f72655538202d206e6f6e207538","0x7538","0x30df86604b54525ae11ba1b715c090c35576488a1286b0453186a976e6c9a32","0x1f0276ceff5f304ab767218fb2429b54172c97619edc12a91a021250db8a0b7","0x2373fd1de0b8d5ec68c0d52be7f26647290724ab4ec76a73eded043e8afe9ff","0x3669d262224f83a907cd80dcaa64fb9f032b637610e98e1d0b3a238e07e649f","0x3f468b8e29e48ca204978f36d94fb2063e513df163f22a2fa47bc786b012b51","0x16f28d6f3b2a7dfac638005d9e46c164fc9b898b2216243d1878b919f86fd0e","0x42","0x3a","0x6b","0x65","0x5f","0x5b","0x27","0x26","0x25","0xad","0xac","0xab","0xaa","0x251e864ca2a080f55bce5da2452e8cfcafdbc951a3e7fff5023d558452ec228","0x3711c9d994faf6055172091cb841fd4831aa743e6f3315163b06a122c841846","0x145cc613954179acf89d43c94ed0e091828cbddcca83f5b408785785036d36d","0xb5bead4e6ae52c02db5eed7e8c77847e0a0464a2c43ebf6aef909306904b0","0x2e9f66c6eea14532c94ad25405a4fcb32faa4969559c128d837caa0ec50a655","0x28a1868d4e0a4c6ae678a74db4e55a60b628ba8668dc128cf0c8e418d0a7945","0x3251fdd4097aa7f9b1c72b843473cc881750ab77a439fd36053ccde60c46cea","0x52c476292b358ba7d29adb58502341b4cc5437d07f67d3e285e085828bc820","0x1ee471fea880cdb75aff7b143b1653e4803b9dca47f4fcdd349d11fec9d7a16","0x188c31424ca3e90a81e1850a514ea86e69a51a7fb942da9a5a393c0917c9adb","0xbb","0x7b24f2ab8be536ba809156d60d6a2e8a906291e31b2728d5aec00cebaf0c92","0xbc","0x53746f7265553634202d206e6f6e20753634","0xbf2492c70c48a67545fd03e684bf9c7f453360a13c67b42fa1560540564415","0x4661696c656420746f20646573657269616c697a6520706172616d202333","0x4661696c656420746f20646573657269616c697a6520706172616d202334","0x4661696c656420746f20646573657269616c697a6520706172616d202335","0x4661696c656420746f20646573657269616c697a6520706172616d202336","0x17b6ecc31946835b0d9d92c2dd7a9c14f29af0371571ae74a1b228828b2242","0xc4","0x34f9bd7c6cb2dd4263175964ad75f1ff1461ddc332fbfb274e0fb2a5d7ab968","0xc5","0x4661696c656420746f20646573657269616c697a6520706172616d202332","0x426f78","0xe","0x800000000000000700000000000000000000000000000006","0x7d4d99e9ed8d285b5c61b493cedb63976bc3d9da867933d829f49ce838b5e7","0xcb","0xca","0xcc","0x29d7d57c04a880978e7b3689f6218e507f3be17588744b58dc17762447ad0e7","0xce","0x4e6f6e20436f6e747261637441646472657373","0x53746f7261676541646472657373","0x183a1b309b77fa43aa409ee3681db27df849965d2e5d22fb671795a0d00c912","0x4661696c656420746f20646573657269616c697a6520706172616d202331","0x4f7574206f6620676173","0x800000000000000f00000000000000000000000000000003","0x4bcfe09b87d6fb3b5f279023143a5c36344ce2e99868571461ba745a181df8","0xd7","0x4275696c74696e436f737473","0x9931c641b913035ae674b400b61a51476d506bbe8bba2ff8a6272790aba9e6","0xd6","0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473","0x11c6d8087e00642489f92d2821ad6ebd6532ad1a3b6d12833da6d6810391511","0x4761734275696c74696e","0x26e","0x7265766f6b655f61705f747261636b696e67","0x77697468647261775f676173","0x6272616e63685f616c69676e","0x72656465706f7369745f676173","0x7374727563745f6465636f6e737472756374","0x656e61626c655f61705f747261636b696e67","0x73746f72655f74656d70","0xdd","0x61727261795f736e617073686f745f706f705f66726f6e74","0x756e626f78","0x72656e616d65","0x656e756d5f696e6974","0xdc","0x6a756d70","0x7374727563745f636f6e737472756374","0x656e756d5f6d61746368","0x64697361626c655f61705f747261636b696e67","0x21adb5788e32c84f69a1863d85ef9394b7bf761a0ce1190f826984e5075c371","0x64726f70","0x61727261795f6e6577","0x636f6e73745f61735f696d6d656469617465","0xdb","0x61727261795f617070656e64","0xda","0x6765745f6275696c74696e5f636f737473","0xd9","0x77697468647261775f6761735f616c6c","0x66756e6374696f6e5f63616c6c","0x3","0xd8","0x736e617073686f745f74616b65","0xd5","0xd4","0x73746f726167655f626173655f616464726573735f636f6e7374","0x6894a7eacac1683e1e290e1df9a86c47bc34cd609052ca3e176955bc0958ee","0xd3","0x73746f726167655f616464726573735f66726f6d5f62617365","0xd1","0xd2","0x73746f726167655f726561645f73797363616c6c","0x636f6e74726163745f616464726573735f746f5f66656c74323532","0xd0","0xcf","0x75313238735f66726f6d5f66656c74323532","0x6765745f657865637574696f6e5f696e666f5f76325f73797363616c6c","0xcd","0x28","0xc9","0x616c6c6f635f6c6f63616c","0x66696e616c697a655f6c6f63616c73","0x73746f72655f6c6f63616c","0x7536345f7472795f66726f6d5f66656c74323532","0x29","0xc6","0x2a","0xc3","0xc7","0xc2","0xc8","0xc1","0xc0","0x3fc801c47df4de8d5835f8bfd4d0b8823ba63e5a3f278086901402d680abfc","0xbf","0x7536345f746f5f66656c74323532","0xbe","0xbd","0xba","0x30","0x31","0xb9","0xb8","0x706564657273656e","0xad292db4ff05a993c318438c1b6c8a8303266af2da151aa28ccece6726f1f1","0xb7","0x66656c743235325f69735f7a65726f","0xb6","0x626f6f6c5f6e6f745f696d706c","0xb5","0xb4","0xb3","0xb2","0xb1","0xb0","0xaf","0x647570","0xae","0x32","0x33","0x34","0x341c1bdfd89f69748aa00b5742b03adbffd79b8e80cab5c50d91cd8c2a79be1","0xb6ce5410fca59d078ee9b2a4371a9d684c530d697c64fbef0ae6d5e8f0ac72","0x1f0d4aa99431d246bac9b8e48c33e888245b15e9678f64f9bdfc8823dc8f979","0xa9","0x75385f7472795f66726f6d5f66656c74323532","0x75385f746f5f66656c74323532","0xa7","0xa6","0xa5","0x35","0xa4","0x753132385f746f5f66656c74323532","0xa2","0xa1","0xa0","0x36","0x9f","0x9e","0x9d","0x9b","0x37","0x38","0x3b","0x9a","0x3c","0x3d","0x97","0x96","0x3e","0x95","0x93","0x92","0x73746f726167655f77726974655f73797363616c6c","0x91","0x90","0x8f","0x63616c6c5f636f6e74726163745f73797363616c6c","0x66656c743235325f737562","0x7536345f6f766572666c6f77696e675f737562","0x38bb9518f707d6868da0178f4ac498e320441f8f7e11ff8a35ed4ea8286e693","0x89","0x40","0x88","0x86","0x61727261795f6c656e","0x7533325f6f766572666c6f77696e675f737562","0x8e","0x85","0x41","0x84","0x7533325f746f5f66656c74323532","0x82","0x81","0x80","0x7f","0x626f6f6c5f746f5f66656c74323532","0x7e","0x7d","0x7c","0x8c","0x8b","0x7b","0x1390569bb0a3a722eb4228e8700301347da081211d5c2ded2db22ef389551ab","0x43","0x7a","0x636c6173735f686173685f7472795f66726f6d5f66656c74323532","0x45","0x79","0x46","0x76","0x74","0x47","0x73","0x71","0x70","0x7536345f6f766572666c6f77696e675f616464","0x6c","0x48","0x49","0x4a","0x6a","0x656d69745f6576656e745f73797363616c6c","0x6f","0x6d","0x68","0x7536345f69735f7a65726f","0x67","0x66","0xcfc0e4c73ce8e46b07c3167ce01ce17e6c2deaaa5b88b977bbb10abe25c9ad","0x4b","0x60","0x4","0x4c","0x58","0x6c6962726172795f63616c6c5f73797363616c6c","0x656e756d5f736e617073686f745f6d61746368","0x55","0x7265706c6163655f636c6173735f73797363616c6c","0x52","0x51","0x50","0x64","0x62","0x4f","0x4e","0x4d","0x2679d68052ccd03a53755ca9169677965fbd93e489df62f5f40d4f03c24f7a4","0x753132385f6f766572666c6f77696e675f737562","0x753132385f6f766572666c6f77696e675f616464","0x753132385f6571","0x636f6e74726163745f616464726573735f636f6e7374","0x636c6173735f686173685f746f5f66656c74323532","0x66656c743235325f616464","0x68616465735f7065726d75746174696f6e","0x24","0x23","0x22","0x21","0x20","0x1f","0x1e","0x1d","0x1c","0x1b","0x1a","0x19","0x18","0x17","0x16","0x15","0x54","0x14","0x13","0x12","0x11","0x7533325f7472795f66726f6d5f66656c74323532","0x61727261795f736c696365","0x4936","0xffffffffffffffff","0x57","0x105","0xf7","0xe8","0xef","0x239","0x126","0x12d","0x225","0x21f","0x140","0x147","0x208","0x1fe","0x15b","0x162","0x1f2","0x1e7","0x184","0x1d4","0x1bf","0x1b5","0x1cb","0x1fb","0x212","0x210","0x22c","0x46d","0x261","0x268","0x454","0x44a","0x27e","0x285","0x431","0x427","0x299","0x2a0","0x40c","0x3ff","0x2b6","0x2bd","0x3ef","0x3e0","0x3c8","0x2db","0x2e2","0x3af","0x3a5","0x2f8","0x2ff","0x38c","0x37e","0x372","0x32f","0x35d","0x354","0x398","0x3bb","0xdf","0xe0","0xe1","0xe2","0xe3","0xe4","0xe5","0x3fc","0xe6","0xe7","0x41a","0xe9","0xea","0xeb","0x418","0xec","0xed","0xee","0xf0","0xf1","0xf2","0xf3","0xf4","0xf5","0x43d","0xf6","0xf8","0xf9","0xfa","0xfb","0xfc","0xfd","0xfe","0xff","0x460","0x100","0x101","0x102","0x103","0x104","0x106","0x107","0x108","0x109","0x10a","0x10b","0x10c","0x10d","0x583","0x494","0x49b","0x56f","0x569","0x4ae","0x4b5","0x552","0x548","0x4c9","0x4d0","0x53c","0x531","0x4f2","0x51e","0x515","0x545","0x55c","0x55a","0x576","0x694","0x5a5","0x5ac","0x680","0x67a","0x5bf","0x5c6","0x663","0x659","0x5da","0x5e1","0x64d","0x642","0x603","0x62f","0x626","0x656","0x66d","0x66b","0x687","0x7a5","0x6b6","0x6bd","0x791","0x78b","0x6d0","0x6d7","0x774","0x76a","0x6eb","0x6f2","0x75e","0x753","0x714","0x740","0x737","0x767","0x77e","0x77c","0x798","0x8b6","0x7c7","0x7ce","0x8a2","0x89c","0x7e1","0x7e8","0x885","0x87b","0x7fc","0x803","0x86f","0x864","0x825","0x851","0x848","0x878","0x88f","0x88d","0x8a9","0x932","0x8de","0x924","0x915","0x90a","0x91c","0x9c4","0x9ba","0x9a8","0x967","0x997","0x98d","0xa54","0xa4a","0xa38","0x9fb","0xa27","0xa1d","0xae4","0xada","0xac8","0xa8b","0xab7","0xaad","0xb74","0xb6a","0xb58","0xb1b","0xb47","0xb3d","0xc65","0xc55","0xb9f","0xba6","0xc40","0xc38","0xbc4","0xc26","0xc19","0xbf4","0xbfb","0xc06","0xc0c","0xc48","0xcf3","0xce3","0xc96","0xcd3","0xcc7","0xdc7","0xd15","0xd1c","0xdb3","0xdad","0xd39","0xd9d","0xd91","0xd6c","0xd73","0xd7e","0xd84","0xdba","0xe9b","0xde9","0xdf0","0xe87","0xe81","0xe0d","0xe71","0xe65","0xe40","0xe47","0xe52","0xe58","0xe8e","0xf5a","0xebd","0xec4","0xf46","0xf40","0xee1","0xf30","0xf1e","0xf14","0xf27","0xf4d","0x1019","0xf7c","0xf83","0x1005","0xfff","0xfa0","0xfef","0xfdd","0xfd3","0xfe6","0x100c","0x10d8","0x103b","0x1042","0x10c4","0x10be","0x105f","0x10ae","0x109c","0x1092","0x10a5","0x10cb","0x1197","0x10fa","0x1101","0x1183","0x117d","0x111e","0x116d","0x115b","0x1151","0x1164","0x118a","0x1212","0x1202","0x11c8","0x11f2","0x11e9","0x1279","0x123a","0x126b","0x1260","0x12df","0x12a0","0x12d1","0x12c6","0x135a","0x1306","0x134c","0x133d","0x1332","0x1344","0x13c5","0x1381","0x13b7","0x13af","0x1472","0x13e6","0x13ed","0x145e","0x1458","0x140a","0x1448","0x143f","0x1465","0x155e","0x1494","0x149b","0x154a","0x1544","0x14b0","0x14b7","0x152f","0x1527","0x14d5","0x1515","0x150c","0x1537","0x1551","0x1696","0x1580","0x1587","0x1682","0x167c","0x159a","0x15a1","0x1665","0x165b","0x15b5","0x15bc","0x164f","0x1644","0x15de","0x1631","0x161c","0x1612","0x1628","0x1658","0x166f","0x166d","0x1689","0x1840","0x16bc","0x16c3","0x1829","0x1821","0x16d9","0x16e0","0x180a","0x1802","0x16f4","0x16fb","0x17e9","0x17de","0x1711","0x1718","0x17d0","0x17c3","0x173c","0x17ae","0x1797","0x178a","0x1780","0x17a5","0x17db","0x17f5","0x17f3","0x1814","0x1833","0x197b","0x1865","0x186c","0x1967","0x1961","0x187f","0x1886","0x194a","0x1940","0x189a","0x18a1","0x1934","0x1929","0x18c3","0x1916","0x1901","0x18f7","0x190d","0x193d","0x1954","0x1952","0x196e","0x1a9e","0x199d","0x19a4","0x1a8a","0x1a84","0x19b7","0x19be","0x1a6d","0x1a63","0x19d2","0x19d9","0x1a57","0x1a4c","0x19fb","0x1a39","0x1a30","0x1a1d","0x1a23","0x1a60","0x1a77","0x1a75","0x1a91","0x1bc1","0x1ac0","0x1ac7","0x1bad","0x1ba7","0x1ada","0x1ae1","0x1b90","0x1b86","0x1af5","0x1afc","0x1b7a","0x1b6f","0x1b1e","0x1b5c","0x1b53","0x1b40","0x1b46","0x1b83","0x1b9a","0x1b98","0x1bb4","0x1c2d","0x1be9","0x1c1f","0x1c17","0x1cda","0x1c4e","0x1c55","0x1cc6","0x1cc0","0x1c72","0x1cb0","0x1ca7","0x1ccd","0x1e84","0x1d00","0x1d07","0x1e6d","0x1e65","0x1d1d","0x1d24","0x1e4e","0x1e46","0x1d38","0x1d3f","0x1e2d","0x1e22","0x1d55","0x1d5c","0x1e14","0x1e07","0x1d80","0x1df2","0x1ddb","0x1dce","0x1dc4","0x1de9","0x1e1f","0x1e39","0x1e37","0x1e58","0x1e77","0x1faa","0x1ea9","0x1eb0","0x1f96","0x1f90","0x1ec3","0x1eca","0x1f79","0x1f6f","0x1ede","0x1ee5","0x1f63","0x1f58","0x1f07","0x1f45","0x1f3c","0x1f29","0x1f2f","0x1f6c","0x1f83","0x1f81","0x1f9d","0x20cd","0x1fcc","0x1fd3","0x20b9","0x20b3","0x1fe6","0x1fed","0x209c","0x2092","0x2001","0x2008","0x2086","0x207b","0x202a","0x2068","0x205f","0x204c","0x2052","0x208f","0x20a6","0x20a4","0x20c0","0x232d","0x231d","0x230c","0x20fd","0x2104","0x22f6","0x22ed","0x2118","0x211f","0x22d4","0x22c8","0x2133","0x213a","0x22ba","0x22ad","0x2152","0x2159","0x2295","0x228a","0x216c","0x2173","0x2271","0x2265","0x2186","0x218d","0x224b","0x223e","0x219e","0x21a5","0x2223","0x2215","0x21cc","0x21fd","0x21f4","0x2231","0x2258","0x227d","0x22a0","0x22c5","0x22e0","0x22de","0x22ff","0x10e","0x10f","0x110","0x111","0x112","0x113","0x114","0x115","0x116","0x117","0x118","0x119","0x11a","0x11b","0x11c","0x11d","0x11e","0x11f","0x120","0x121","0x122","0x123","0x124","0x125","0x127","0x23cc","0x23ba","0x23ad","0x239b","0x2377","0x238e","0x23c3","0x246a","0x245b","0x2407","0x244e","0x2441","0x2476","0x24c3","0x2491","0x24a1","0x24a8","0x24b7","0x2694","0x2679","0x2662","0x2649","0x2539","0x2659","0x2639","0x2626","0x2573","0x257a","0x2589","0x258e","0x25a7","0x128","0x129","0x12a","0x2613","0x12b","0x12c","0x25ff","0x12e","0x25dc","0x25e7","0x25f1","0x12f","0x2609","0x130","0x131","0x132","0x2714","0x133","0x134","0x2700","0x26f1","0x26de","0x135","0x136","0x137","0x270b","0x278c","0x2778","0x2769","0x2756","0x138","0x2783","0x27a4","0x27a9","0x27f7","0x139","0x27f4","0x13a","0x13b","0x27ee","0x13c","0x13d","0x27e6","0x27bd","0x27c2","0x27db","0x27ce","0x27d3","0x13e","0x13f","0x141","0x142","0x143","0x144","0x145","0x146","0x27fa","0x148","0x149","0x286f","0x14a","0x14b","0x14c","0x14d","0x14e","0x2868","0x14f","0x150","0x151","0x152","0x153","0x154","0x285b","0x284b","0x155","0x156","0x157","0x158","0x159","0x2875","0x15a","0x29a9","0x2996","0x15c","0x297d","0x296b","0x15d","0x2953","0x15e","0x293a","0x15f","0x160","0x161","0x292b","0x163","0x2920","0x164","0x165","0x166","0x167","0x168","0x169","0x2915","0x16a","0x16b","0x2907","0x16c","0x16d","0x16e","0x16f","0x298b","0x2a72","0x2a63","0x170","0x29e7","0x171","0x172","0x2a55","0x2a4a","0x173","0x174","0x2a3f","0x2a31","0x175","0x176","0x2d16","0x177","0x2d00","0x2aaf","0x2ab6","0x2ce5","0x2cce","0x178","0x2cbb","0x179","0x17a","0x2cab","0x2b03","0x17b","0x17c","0x2c94","0x2c7f","0x17d","0x17e","0x2c69","0x2c5e","0x17f","0x2b41","0x2b75","0x2c4a","0x180","0x181","0x182","0x2c33","0x2c27","0x183","0x2bd0","0x185","0x186","0x2bc2","0x187","0x188","0x2b9b","0x189","0x18a","0x2ba2","0x18b","0x18c","0x18d","0x18e","0x2bad","0x2bd6","0x18f","0x190","0x2be1","0x191","0x192","0x2be8","0x193","0x194","0x195","0x196","0x2c13","0x2c08","0x197","0x2c3f","0x2c74","0x198","0x199","0x19a","0x19b","0x19c","0x2e32","0x2d56","0x2d5d","0x2e20","0x2d7d","0x19d","0x2e09","0x19e","0x2df9","0x19f","0x2dee","0x2de4","0x2dd7","0x2e17","0x2f30","0x2e71","0x2e78","0x2e8d","0x2f19","0x2f09","0x1a0","0x2efe","0x2ef4","0x2ee7","0x2f27","0x2f59","0x1a1","0x2faa","0x2f9b","0x2f88","0x1a2","0x1a3","0x1a4","0x1a5","0x1a6","0x1a7","0x1a8","0x3015","0x2fff","0x1a9","0x1aa","0x2ff6","0x2fe8","0x1ab","0x1ac","0x1ad","0x1ae","0x300d","0x301e","0x1af","0x1b0","0x1b1","0x1b2","0x3089","0x3072","0x3069","0x305b","0x3080","0x3092","0x1b3","0x1b4","0x3102","0x30eb","0x30e2","0x30d4","0x30f9","0x310b","0x3130","0x314c","0x1b6","0x1b7","0x1b8","0x1b9","0x1ba","0x1bb","0x1bc","0x1bd","0x1be","0x33c9","0x33b0","0x33a1","0x338d","0x3192","0x1c0","0x319a","0x31a2","0x31ae","0x1c1","0x3371","0x3362","0x3349","0x333c","0x331f","0x3306","0x32f7","0x32e3","0x1c2","0x3215","0x321d","0x3225","0x3231","0x32c7","0x32b8","0x32a0","0x3294","0x1c3","0x1c4","0x328a","0x327d","0x32ae","0x32d5","0x1c5","0x331a","0x332e","0x1c6","0x1c7","0x3332","0x3358","0x337f","0x1c8","0x33c4","0x33d8","0x33dc","0x1c9","0x1ca","0x1cc","0x34e3","0x34cc","0x34bf","0x34ad","0x1cd","0x1ce","0x3436","0x3443","0x349d","0x344f","0x3457","0x345f","0x346b","0x3485","0x347a","0x348f","0x34de","0x34f0","0x34f4","0x351a","0x1cf","0x3536","0x1d0","0x35ad","0x35a1","0x1d1","0x1d2","0x3597","0x358a","0x35bb","0x36cc","0x36b1","0x369a","0x368d","0x367b","0x3616","0x361e","0x3626","0x3632","0x3663","0x3658","0x364f","0x1d3","0x1d5","0x1d6","0x366d","0x36ac","0x36be","0x36c2","0x37e2","0x37c7","0x37b0","0x37a3","0x3791","0x372c","0x3734","0x373c","0x3748","0x3779","0x376e","0x3765","0x3783","0x37c2","0x37d4","0x37d8","0x38d7","0x38c9","0x38bc","0x38b0","0x3831","0x1d7","0x38a1","0x1d8","0x3897","0x388a","0x1d9","0x3880","0x3873","0x38e5","0x3956","0x394a","0x3924","0x392b","0x393e","0x1da","0x1db","0x1dc","0x1dd","0x1de","0x3abd","0x3aa6","0x3a99","0x3a87","0x39aa","0x39b2","0x39bb","0x39c7","0x3a6c","0x3a5e","0x1df","0x3a4a","0x39dc","0x39e6","0x3a3f","0x39f1","0x39f9","0x3a01","0x3a0d","0x3a27","0x3a1c","0x3a31","0x3a56","0x3a79","0x3ab8","0x3aca","0x3ace","0x1e0","0x3b03","0x1e1","0x1e2","0x3b1d","0x1e3","0x1e4","0x3b59","0x3b36","0x3b3d","0x3b4d","0x1e5","0x1e6","0x1e8","0x3bb4","0x1e9","0x1ea","0x3ba9","0x3b9a","0x1eb","0x1ec","0x3bd8","0x1ed","0x1ee","0x1ef","0x1f0","0x1f1","0x3ddc","0x3bf7","0x3bff","0x3c07","0x3c13","0x3dc2","0x3db5","0x1f3","0x3d9d","0x1f4","0x3d91","0x3d75","0x3d5d","0x3d4f","0x3d3c","0x3c71","0x3c79","0x3c81","0x3c8d","0x3d21","0x3d13","0x3cfc","0x3cf1","0x1f5","0x3ce7","0x3cda","0x3d09","0x3d2e","0x3d70","0x3d83","0x3d87","0x3dab","0x3dce","0x3e05","0x1f6","0x4009","0x3e24","0x3e2c","0x3e34","0x3e40","0x3fef","0x3fe2","0x3fca","0x3fbe","0x3fa2","0x3f8a","0x3f7c","0x3f69","0x3e9e","0x3ea6","0x3eae","0x3eba","0x3f4e","0x3f40","0x3f29","0x3f1e","0x3f14","0x3f07","0x3f36","0x3f5b","0x3f9d","0x3fb0","0x3fb4","0x3fd8","0x3ffb","0x4020","0x4025","0x4095","0x4077","0x4036","0x403b","0x4069","0x4066","0x1f7","0x1f8","0x4060","0x1f9","0x1fa","0x404e","0x1fc","0x1fd","0x4054","0x405b","0x4084","0x1ff","0x4070","0x200","0x201","0x406c","0x202","0x203","0x204","0x408b","0x205","0x206","0x207","0x40d6","0x209","0x40ce","0x40df","0x20a","0x20b","0x20c","0x40ec","0x40f2","0x20d","0x20e","0x4172","0x20f","0x4161","0x4114","0x411b","0x414d","0x211","0x413a","0x213","0x214","0x215","0x216","0x217","0x218","0x41db","0x41d2","0x219","0x21a","0x21b","0x21c","0x41c4","0x41e3","0x4243","0x423a","0x21d","0x422c","0x424b","0x21e","0x4281","0x42a9","0x42cb","0x42ed","0x430f","0x431f","0x433e","0x435d","0x437a","0x4391","0x43a8","0x43bf","0x220","0x221","0x222","0x223","0x224","0x43d5","0x226","0x227","0x228","0x229","0x22a","0x42c3","0x22b","0x22d","0x22e","0x22f","0x230","0x42e5","0x231","0x232","0x4307","0x233","0x234","0x235","0x236","0x237","0x238","0x23a","0x23b","0x23c","0x23d","0x23e","0x23f","0x240","0x241","0x242","0x243","0x244","0x245","0x246","0x247","0x248","0x249","0x444b","0x4444","0x4437","0x4427","0x4451","0x4478","0x446e","0x44ed","0x44e1","0x44bb","0x44c2","0x44d5","0x24a","0x45cc","0x4527","0x452e","0x45bb","0x24b","0x24c","0x24d","0x24e","0x45ab","0x459b","0x24f","0x250","0x4591","0x4584","0x46af","0x460a","0x4611","0x4625","0x469f","0x468f","0x251","0x252","0x4685","0x4678","0x4742","0x4730","0x46f6","0x253","0x4727","0x254","0x471e","0x255","0x256","0x257","0x258","0x47be","0x259","0x25a","0x25b","0x25c","0x4799","0x47b4","0x25d","0x482a","0x4814","0x480b","0x47fd","0x4822","0x4833","0x4842","0x4847","0x4899","0x25e","0x4890","0x25f","0x4883","0x4874","0x4868","0x260","0x262","0x263","0x264","0x265","0x266","0x267","0x4925","0x269","0x26a","0x26b","0x4914","0x26c","0x26d","0x490a","0x48fd","0x482","0x593","0x6a4","0x7b5","0x8c6","0x941","0x9d5","0xa65","0xaf5","0xb85","0xc75","0xd03","0xdd7","0xeab","0xf6a","0x1029","0x10e8","0x11a7","0x1222","0x1288","0x12ee","0x1369","0x13d4","0x1482","0x156e","0x16a6","0x1853","0x198b","0x1aae","0x1bd1","0x1c3c","0x1cea","0x1e97","0x1fba","0x20dd","0x233d","0x23d7","0x247f","0x24d3","0x26ab","0x2723","0x279b","0x2800","0x287d","0x29b9","0x2a81","0x2d29","0x2e44","0x2f42","0x2fb8","0x3026","0x309b","0x3114","0x33e6","0x34fe","0x35c5","0x36db","0x37f1","0x38ee","0x3962","0x3ad8","0x3b26","0x3b69","0x3bbd","0x3dea","0x4017","0x409d","0x40fb","0x4183","0x41eb","0x4253","0x43dc","0x4459","0x4487","0x44fa","0x45dd","0x46c0","0x4750","0x47cd","0x483b","0x48a3","0x255af","0x600901202c0500d0180240480b0140240480800e0180280400600800800","0x481001e0100c00402e0580481500e0180281401204c090110120400780e","0x481f0120240481e00e0740280403806c0481a00e0180281901204c09009","0x1202101208c0482301208404820012088048090120240480901208404820","0x600901202c050280180240480b014080048270120240482600e09402804","0x380600a0b00600901202c0502b0180240480b0140a80600901202c05029","0x50300180240480b0140bc0600901202c0502e0180240480b0140240482d","0x600901202c050330180240480b0140c80600901202c050310180240480b","0x480b0140dc0600901202c050360180240480b0140d40600901202c05034","0x283b0180240480b0140e80600901202c050390180240480b0140e006009","0x382500a07c0481f0120240483d00e09402809012024048090120f003825","0x484200e018028410180240480b0140640484007e07c0481f0120240483e","0x28490120840484400e118028480120840484700e1182284400e10c02809","0x480b01413c0484e0121340384b08a0640484c0121100384b00a12803843","0x50530180240480b0141480600901202c050090121440380600a14006009","0x600901202c050560180240480b0141540600901202c050540180240480b","0x480b0141680481f01207c0485900e094028200120800485800e11802857","0x485f00e0180285e0121780485a0121740505c0180240480b01416c06009","0x382500a1880600901202c050610180240480b0141800602001202c05009","0x28660121940380600a010320090180800480b0141680481f01207c04863","0x600901202c050690180240480b0141a00600901202c0500901219c03806","0x480b0141b40600901202c050660121b00380600a0240606b01202c0506a","0x50710180240480b0141c00600901202c0506f0180240480b0141b806009","0x4813024064048480121d00384b08a1cc0600901202c050720180240480b","0x480b0141e004813024064048210121dc0384b08a1d80600901202c05075","0x384608a1f00487d00e018028210121f00487b00e118028040f41e406009","0x48820121f00488100e094028480121200488000e118228480121fc0487e","0x482701209c0488700e094028860180240480b0142140488400e01802883","0x50850122280380600a2240484007e09c0484400e018028880121001f81f","0x48190121100388d00a2300600901202c0502701204c4580701809c0480b","0x602701202c050850122400380600a13c0488f0122380384b08a12004819","0x600901202c050090122500380600a24c0484007e008490270121001f891","0x484400e0940284f01225c0489600e12c228090120840484400e11802895","0x2284f0122640489800e12c228480120640484400e12c0280901202404809","0x489d0122700384b08a26c048210121100384600a1200488201226803846","0x480b0142800600901202c0509f0180240480b0142780600901202c0504f","0x28660122900380600a28c0600901202c0501f0122880380600a28406009","0x22848012024048210121100382500a2980600901202c0500901229403806","0x380600a2a80600901202c050a90180240480b01413c048a801229c0384b","0x484007e008570660122b40380600a13c048ac0122ac0384b08a02404844","0x600901202c050b20180240480b0142c40484007e008580230121001f8af","0x38b700a198048b600e018028b50180240480b0142d00600901202c050b3","0x600901202c050ba0180240480b01413c048b90122e00384b08a12004844","0x284f0122fc048be00e12c228830122f40484400e118028bc00e10c028bb","0x380600a308048c100e018028090123000380600a07c0481f01211003846","0x50090123180380600a308048c500e018028c40180240480b014024048c3","0x380600a13c048c90123200384b08a1680484400e018028c70180240480b","0x48ce00e0180280419a3300600901202c050cb0180240480b014024048ca","0x48d100e1180281f01207c048d000e1180281f01207c048cf00e11802866","0x48d6012354048d401234c0381d08a07c0481f0123480384600a07c0481f","0x480b014380048df012378048dd012370048db012368048d9012360048d7","0x50090123900380600a198048e300e018028e20180240480b01438406009","0x280901204c458070180240480b0140240600901202c050e50180240480b","0x48e900e12c228e80180240480b014024048e700e0180286601239803806","0x384b08a3ac048210121100384600a120048850123a80384608a13c04889","0x600901202c050660123bc0380600a3b80600901202c0504f0123b4048ec","0x384b08a3cc0600901202c050f20180240480b0143c40600901202c050f0","0x1f84f0123dc048f600e12c228f50120840484400e12c02848012064048f4","0x288801204c7c8fa01204c7c8f80180240480b0141680484007e02404840","0x2280901204c7c8ff01204c7c80901207c0481f0123f8048fd0123f0038fb","0x280420601c0602301202c051020180240480b0141200490101240003846","0x484400e018029060180240480b0144140600901202c0506601241003806","0x384b08a0108504f0124240490800e12c228480122f40484400e41c02821","0x8800221e120048090124380384608a4340600901202c0504f0124300490b","0x8c00901245c0380901245c039160420240491500e4500391300e44803911","0xd80901245c0380c23a0240611c0120240491b0120240491a01202404919","0x392123a024049200120308e8090184702400901247c0391e23a02404917","0x93009012494048090124900f80901248c8080901248c0d80901248c03922","0x480c2500240611c09e0240491f0980240491f0120240492701202404917","0x491f00e4ac9500901245c039292500240491715e0240491716202404917","0xc8090124bc8480901248c970090124806d12d0124b00f80901245c5e809","0x980090124940380c2500240611c2180240491f0420240491f03202404923","0x492f2680240491f26603004932042024049232620240492509002404923","0x491726c0240492500e4d43300901246c9a0090124549a00901248c9a009","0x9d8090184700c80901245c9d0090124940393900e4e09b80901245c11809","0x1000901248c0393c276024049200120309d8090184709d80901245c0380c","0x7e80901248c7f8090124542d00901247c7f8090124689f00901245c0393d","0x492309e0240491527e4b40492c0b402404917012024049231fc02404923","0x48090125042d009012504a00090124948c00901246c0380901246c26009","0x492028a4b40492c0420240491700e5102d00901250c0480901250c03942","0x1380901245c2d00901248c1380901248c7a8090124807b809012454a3009","0x49252960240492329402404925292024049232900240492528e4b40492c","0xa780901247ca700c0124c82492d0124b02412d0124b0a6809012494a6009","0x2712d0124b0a88090124940395029e0240491529e0240492329e0240492f","0x492f1260240491710a024049231d6024049201da024049152a402404920","0x44809012454a98090124802612d0124b04280901245c5e80901248c5e809","0x492f2ae0240491f2ac024049252aa4b40492c2a84b40492c09e4b40492c","0xad0090124bcad00901247c0395900e560ab809012454ab80901248cab809","0x492310602404917012030418090184700395b2b4024049152b402404923","0xaf809012494af009012494418090124800395d00e03041809018470ae009","0x491f2c2024049152c2024049232c20240492f2c20240491f2c002404925","0xb2009012494b1809012494b1009012454b100901248cb10090124bcb1009","0xb392d0124b0b300901245c1000c2cc0240611c1ba0240491f03e02404965","0xb30090184706f80901247cb412d0124b00c80c2cc0240611c1bc0240491f","0x49322d4030049322d24b40492c042030b30090184707000901247c0d80c","0xb6809012454b680901248cb68090124bcb680901247cb600c0124c8b580c","0x49232e40240492f2e40240491f2e2024049252e00240492500e5bc0396e","0x2d0090124bc64809012454ba009012480b992d0124b0b900901245cb9009","0xbb80901247cbb009012494039750400240491b0b4024049150b402404965","0x49172f00240491f1840240491f2ee024049152ee024049232ee0240492f","0xbd80901248cbd8090124bcbd80901247cbd009012494bc92d0124b0bc009","0x492c2fa024049172f8024049172fa0240491f2f80240491f2f602404915","0xc012d0124b06a92d0124b0848090124542d12d0124b0bf92d0124b0bf12d","0x492c0d6024049170d6024049233044b40492c17e0240491530202404920","0x5c80901248cc3809012480c312d0124b0c2809012494c2009012494c192d","0x611c3120240492531002404915310024049233100240492f3100240491f","0x492500e030970090184708480901247c0398a25c0240491701203097009","0x611c0120240496500e638c68090124942f12d0124b0c6009012494c5809","0x611c00e63ca300901245c0380c28c0240611c1ee0240491f00e0307a809","0x5780901250411809012504588090125040480c28c0240611c0120307a809","0xc880c0124c80399004e02404965110024049151100240491a1fa02404917","0x492c15e0240494332402404915324024049233240240492f3240240491f","0x48090126580d80901259456009012454ca809012494ca009012480c992d","0xcc809012494cc00901248c1180901248c039970460240496504602404943","0xcf00901247cce809012494540090124540399c336024049203344b40492c","0x492333e0240492f33e0240491f33c0240491533c0240492333c0240492f","0x494300e684d00090124944180901248c418090124bccf809012454cf809","0xd2009012494d18090124946a12d0124b0d100901245cd100901247c58809","0x492c1fe024049173500300493234e0240492534c0240492334a02404923","0x49203584b40492c00e6ac3312d0124b07f80901248cd5009012494d492d","0x491f00e030758090184704280901247c4d8090124804e809012454d6809","0x611c104024049230f8024049232a40240491700e030a900901847076809","0xd7809012480d712d0124b0428090124bc0480c2a40240611c01203075809","0x4915364024049203624b40492c360024049173600240491f13202404915","0xda009012454da00901248cda0090124bcda00901247cd98090124944b809","0x4917012030a9809018470a980901245c0380c2a60240611c1120240491f","0x496536c0240492500e6d44400901245c138090125044980901250427809","0x6b00901247c4980901250cdc12d0124b0db92d0124b01380901250c42809","0xdd009012480dc92d0124b0b300901248cb30090124bc0600c2cc0240611c","0x4400901248cdf009012494de80901248cde00901248c039bb11e02404915","0x494125a030b30090184706b80901247ce0809012494e000901248c039bf","0xe192d0124b04480901250c4400901250ce100c0124c84400901250444809","0x42809012454e280c2cc0240611c1b00240491f3880240492511202404923","0x3f809012454410090124800a00c2cc0240611c1b20240491f0f802404965","0x491700e0303c009018470039c838e0240492538c4b40492c04202404965","0x49250f0024049c90f0024049230f00240492f0120303c0090184703c009","0x492f0120303a8090184703a80901245c0380c0ea0240611c00e72ce5009","0xe7009012494e6809012494e60090124943a8090127243a80901248c3a809","0x492c3a64b40492c3a4024049253a2024049253a00240492339e02404923","0xe180901247cb9009012454e3009012494e9809012494e892d0124b0e912d","0x39d4372024049250cc0240496538602404915386024049233860240492f","0x3300901248cdc009012494ba00901245c0380c2e80240611c1920240491f","0xbe009012454be80901245461009012454bc0090124540480c2e80240611c","0x491535c0240492335c0240492f35c0240491f3620240492536e02404925","0x491700e754d6009012454d600901248cd60090124bcd600901247cd7009","0xcd0090124940380c2cc0240611c1a80240491f00e758d480901249410009","0x492330c0240492f30c0240491f326024049250320240491b15e0240491b","0x491f300024049253040240492500e75cc1809012494c3009012454c3009","0xc080901245c0380c3020240611c17e0240491f012030b30090184706a809","0xbf009012494e692d0124b0e712d0124b0bf8090124940480c3020240611c","0x496500e030c38090184705c80901247cc380901245c0480c30e0240611c","0x611c1580240491f32802404917012030ca009018470bc80901249410009","0xcd809018470cd80901245c0380c3360240611c1500240491f00e030ca009","0xb4009012494d100901248cb4809012494b9809012494d10090124540480c","0x49323984b40492c2ce024049172ce024049232ce0240492f2ce0240491f","0xaa0090124803a92d0124b0aa8090124940380c0127603300901245c6580c","0x4100901245c0380c1040240611c0fe0240491f0920240492009c02404915","0x611c35a02404917012030d68090184702400901246c0480c1040240611c","0x491b00e0304d8090184700380c35a0240611c13a0240491f0120304d809","0xd780901245c0480c35e0240611c0420240491b0fe0240496500e7643e009","0x39db00e768d80090124540380c35e0240611c1320240491f1060240491b","0x4b80901247cd900901245c0480c3640240611c2540240492325402404965","0xa380901248ca38090124bca380901247cd800901248c0380c3640240611c","0x492527e024049232cc024049200320240494128a0240492528e02404915","0x6a809012594ee8090124940f80901246c6a0090124546a009012594ee009","0x611c11e0240491f032024049431ac024049153bc024049251aa02404915","0x6b809012454ef8090124940480c3740240611c3740240491700e030dd009","0x49653c4024049251b2024049153c2024049251b0024049153c002404925","0xf20090124946d8090124546d809012594f18090124946d0090124546d009","0x49251ba024049151ba024049653ca024049251b8024049151b802404965","0x6f8090124546f809012594f38090124946f0090124546f009012594f3009","0x492f3d40240491f3d2024049251c0024049151c0024049653d002404925","0x491f02c030b30090184706d00901247cf5009012454f500901248cf5009","0x49253da024049253d84b40492c3d602404925044030b30090184706d809","0x7d0090124547d0090124687f00901245cf8009012494f7809012494f7009","0x491f00e03024809018470048090127c8039f12ce0240491504402404923","0x480c2a80240611c38a024049252a80240491700e030aa00901847027009","0x600901248c060090124bc0600901247c0480c0920240611c25a02404925","0x38073e80240380700e7cc0f80c2cc0240611c1b80240491f01802404915","0x492d00e01cfa00900e0300381f044030c9016028030fa00c01802406009","0x481600e01cfa00900e050038190127d0049c5012714038200127d004816","0x1081b0187d00601901207c038200127d004820012088038140127d004814","0x4821012080038fa0127d0048200124b4038073e80240380c00e08c049ef","0x482200e7c0049f40120440481b00e044049f401209c0481900e09c049f4","0x39ed0127d0049f001208c039ee0127d00481b012084039ef0127d0048fa","0x382700e7ac049f40120800492d00e01cfa00900e030038073ce024038fa","0x108073de024fa0093d6024110073d2024fa0093d4024088073d4024fa009","0xf40093e8030f68093e001cf68093e8024f480904601cf70093e802411809","0x49f40127bc0492d00e01cfa00900e7bc038073e80240380c00e79c04899","0xf1809378790f280c3e8030f40140187b8039e60127d0049e6012088039e6","0xf28093e8024f280902c01cf10093e8024f300925a01c039f401201c06007","0x60073be024bc9e03c2030fa00c3dc0240f8073c4024fa0093c402411007","0xf20093d401c039f4012780049eb00e01cfa0093c2024f680700e7d004807","0x48073d001cee8093e8024039e900e778049f40127880492d00e01cfa009","0xf28071b8024fa0093b8774061e600e770049f4012770049e700e770049f4","0x9f8093e80246d0093c601c6d0093e80246e0db018790038db0127d004807","0xfa0093bc024110073ca024fa0093ca0240b00700e024fa00900e024f1007","0xf28070280249f8093e80249f8093c001c968093e8024968093c201cef009","0xfa0093c40249680700e7d0049df0127b4038073e80240380c00e4fc969de","0x4947012778039450127d004945012088039470127d0048073be01ca2809","0x480701801c2604e018360248480187d00614728a794969dd00e51c049f4","0x4848012058039540127d0048073b801c278093e80242480925a01c039f4","0x49e100e01c049f401201c049e200e13c049f401213c0482200e120049f4","0xf215425a01c2784802c36c039e40127d0049e40123700392d0127d00492d","0x380c00e5f8048782f2024fa00c2e60246d0072e65a4b41672aa050fa009","0x48073d201cbf8093e8024b380925a01c039f40125e40493f00e01cfa009","0x484800e01cfa0091aa024a3807300354061f40121680494500e168049f4","0x39860127d004983012138039830127d004982012124039820127d004980","0x49f40125fc0482200e554049f40125540481600e5a0049f40125a0049e2","0xbf9552d0050049860127d004986012780039690127d0049690127840397f","0xfa0092fc024f18070bc024fa0092ce0249680700e7d00480701801cc3169","0x2f00904401caa8093e8024aa80902c01cb40093e8024b40093c401cc9809","0xa009326024fa009326024f00072d2024fa0092d2024f08070bc024fa009","0x2600925a01c039f4012790049ea00e01cfa00900e030039932d2178aa968","0xd48093ce01cd48093e80240384c00e350049f401201cf4807334024fa009","0xf2007358024fa00900e794038660127d0049a91a8030f3007352024fa009","0x49f401201c049e200e6c4049f40126b8049e300e6b8049f4012198d600c","0x492d0127840399a0127d00499a0120880384e0127d00484e01205803807","0x480701801cd892d334138038140126c4049f40126c4049e000e4b4049f4","0x49e3012058039b70127d0049e60124b4038073e8024f70093da01c039f4","0xfa00900e03003807348024038fa00e6e4049f40126dc0482200e6e0049f4","0x38073e8024f70093da01c039f401279c0484f00e01cfa00900e7bc03807","0x49f401270c0482200e6e0049f40120500481600e70c049f40127bc0492d","0x49f401274c049e700e74c049f401201caa00738c024fa00900e7a4039b9","0xe91d1018790039d10127d0048073ca01ce90093e8024e99c6018798039d3","0xb00700e024fa00900e024f100739a024fa00939c024f180739c024fa009","0x968093e8024968093c201cdc8093e8024dc80904401cdc0093e8024dc009","0x38073e80240380c00e734969b937001c0a00939a024fa00939a024f0007","0x38750127d0048073d201ce60093e80240f80925a01c039f401271404955","0x49f40127b03a80c3cc01cf60093e8024f60093ce01cf60093e80240384c","0x49f501278c039f50127d0049ca0f0030f20070f0024fa00900e794039ca","0x482200e088049f40120880481600e01c049f401201c049e200e71c049f4","0x49c70127d0049c70127800392d0127d00492d012784039cc0127d0049cc","0xa1c50187d00600900e0300480700e7d00480700e01ce392d39808803814","0x9680938a01c0f8093e80240a00925a01c039f401201c06007044058061f6","0xf80703e024fa00903e0241100738a024fa00938a0240b007040024fa009","0xfa009032024f680700e7d00480701801c108092c406c0c80c3e803010009","0x49f401201cf4807046024fa00903e0249680700e7d00481b0127ac03807","0x48271f4030f300704e024fa00904e024f380704e024fa00900e7a0038fa","0x49e300e7bc049f4012044f800c3c801cf80093e8024039e500e044049f4","0x38230127d004823012088039c50127d0049c5012058039ee0127d0049ef","0x39ee01808ce29c50127b8049f40127b8049e000e030049f4012030049e1","0xef8073da024fa00903e0249680700e7d0048210127b4038073e80240380c","0x39eb0127d0049eb012778039ed0127d0049ed012088039eb0127d004807","0x9680700e7d00480701801cf39e80187dcf49ea0187d0061eb3da714969dd","0x39e40127d0049e50125a0039e50127d0048072ce01cf30093e8024f4809","0x49f40127880497900e01cfa0093c6024b98073c478c061f401279004969","0xfa00900e168039df0127d0049e00125fc039e00127d0049e10125f8039e1","0xef80930001cef0093e8024ef0091aa01cf30093e8024f300904401cef009","0x969f401877cef00c3cc714c10073d4024fa0093d40240b0073be024fa009","0xee8093e8024ee80904401c039f401201c0600727e3686d92d3f0370ee1dd","0xfa0093b8024f08071b8024fa0091b8024f380728a024fa0093ba02496807","0x491809051c061f4018370f500c3dc01ca28093e8024a280904401cee009","0x260093e8024039e900e138049f40125140492d00e01cfa00900e03003849","0x4954012514039540127d00484f098030f300709e024fa009090024c1807","0x484900e5a0049f401259c0484800e01cfa0092aa024a38072ce554061f4","0x39470127d004947012058039730127d004969012138039690127d004968","0x49f40125cc049e000e770049f4012770049e100e138049f401213804822","0x39790127d0049450124b4038073e80240380c00e5ccee04e28e71404973","0x397f0127d00497f01279c0397f0127d00480730c01cbf0093e8024039e9","0xfa0092f2024110071aa024fa0090920240b0070b4024fa0092fe5f8061e6","0x48071f401cc18093e80242d0090bc01cc10093e8024ee0093c201cc0009","0xfa0091b6024968071b6024fa0091b60241100700e7d00480701801c039f9","0x6d0093c201cc00093e8024c300904401c6a8093e8024f500902c01cc3009","0x61e400e178049f401201cf2807306024fa00927e0242f007304024fa009","0x6a8093e80246a80902c01ccd0093e8024c98093c601cc98093e8024c185e","0xfa009334024f0007304024fa009304024f0807300024fa00930002411007","0x6a0093e8024f380925a01c039f401201c06007334608c00d538a024cd009","0x330093e8024330093ce01c330093e80240384c00e6a4049f401201cf4807","0x49ac35c030f200735c024fa00900e794039ac0127d004866352030f3007","0x482200e7a0049f40127a00481600e6dc049f40126c4049e300e6c4049f4","0x49b70127d0049b70127800380c0127d00480c012784038d40127d0048d4","0x1100925a01c039f40124b40495500e01cfa00900e030039b7018350f41c5","0xe18093ce01ce18093e80240384c00e6e4049f401201cf4807370024fa009","0xf20073a6024fa00900e794039c60127d0049c3372030f3007386024fa009","0x49f40120580481600e744049f4012748049e300e748049f4012718e980c","0x49d10127800380c0127d00480c012784039b80127d0049b801208803816","0xfa00c0180240600900e01cfa00900e01c039d10186e00b1c5012744049f4","0x38200127d0048160124b4038073e80240380c00e07c1100c3f40580a00c","0x38140127d004814012058038073e80240381400e064049f4012714049c5","0x380c00e08c049fb04206c061f40180640481f00e080049f401208004822","0x481900e09c049f40120840482000e3e8049f40120800492d00e01cfa009","0x39ef0127d0048fa012088039f00127d00481101206c038110127d004827","0x38073f8024038fa00e7b4049f40127c00482300e7b8049f401206c04821","0x88073d4024fa00900e09c039eb0127d0048200124b4038073e80240380c","0xf70093e80241180904201cf78093e8024f580904401cf48093e8024f5009","0x380c00e79c049fd3d0024fa00c3da024f80073da024fa0093d202411807","0x49e6012088039e60127d0049ef0124b4038073e8024039ef00e01cfa009","0x39f401201c060073c6024ff1e43ca030fa00c3d0050061ee00e798049f4","0xf28093e8024f280902c01c039f401201c0a0073c4024fa0093cc02496807","0x60073be024ff9e03c2030fa00c3dc0240f8073c4024fa0093c402411007","0x110073ba024fa0093c0024c98073bc024fa0093c40249680700e7d004807","0x6d8093e8024ee80933401c6e0093e8024f080904201cee0093e8024ef009","0x138071b4024fa0093c40249680700e7d00480701801c03a0001201c7d007","0x39dc0127d0048da012088039450127d00493f0123500393f0127d004807","0x49f401836c049a900e36c049f40125140499a00e370049f401277c04821","0xa380904001c248093e8024ee00925a01c039f401201c0600709002500947","0x11007098024fa009098024f3807098024fa00909c0240c80709c024fa009","0x39682ce55496a022a813c061f4018130f280c0cc01c248093e802424809","0x384f0127d00484f012058039690127d0048490124b4038073e80240380c","0x380c00e5f804a032f25cc061f40183700481f00e5a4049f40125a404822","0x482200e168049f40125e40499300e5fc049f40125a40492d00e01cfa009","0x39820127d00485a012668039800127d004973012084038d50127d00497f","0x382700e60c049f40125a40492d00e01cfa00900e03003807408024038fa","0x108071aa024fa009306024110070bc024fa00930c0246a00730c024fa009","0xc98093e8030c100935201cc10093e80242f00933401cc00093e8024bf009","0x4993012080038d40127d0048d50124b4038073e80240380c00e66804a05","0x482200e198049f4012198049e700e198049f40126a40481900e6a4049f4","0x60073706dcd892d40c6b8d600c3e80303304f018198038d40127d0048d4","0x11007358024fa0093580240b007372024fa0091a80249680700e7d004807","0x480701801ce980940e718e180c3e8030c000903e01cdc8093e8024dc809","0x39f4012718049eb00e01cfa009386024f680700e7d0048073de01c039f4","0x38073e8024d700935801c039f4012790049ea00e01cfa0092a8024d6007","0x39ce0127d0048073d001ce88093e8024039e900e748049f40126e40492d","0x49f401201cf280739a024fa00939c744061e600e738049f4012738049e7","0x38093c401cf60093e80243a8093c601c3a8093e8024e69cc018790039cc","0xf08073a4024fa0093a402411007358024fa0093580240b00700e024fa009","0x39ec25a748d6007028024f60093e8024f60093c001c968093e802496809","0xef807394024fa0093720249680700e7d0049d30127b4038073e80240380c","0x38780127d004878012778039ca0127d0049ca012088038780127d004807","0x9680700e7d00480701801c3f87c018820e39f50187d0060783946b0969dd","0xfa8093e8024fa80902c01c6c8093e80246c80904401c6c8093e8024e3809","0x39f401201c060071107106c12d4122144188225a7d00612d1b2030d7007","0xe80093e80244100925a01c410093e80244100904401c039f401201cf7807","0x49ae2a8030dc007112024fa00910a024db80710a024fa00910a024d8807","0x39f401235c049c300e23cdf1c038235c0a1f4012224049b900e73c049f4","0x38073e8024478093a601c039f40126f8049ea00e01cfa009382024e3007","0xe80093e8024e800904401cfa8093e8024fa80902c01cdd0093e8024039dc","0xfa0093800246e007106024fa009106024f080700e024fa00900e024f1007","0xfa81f3a201ce78093e8024e78093a401cf20093e8024f20091b801ce0009","0x49f40186f0048da00e6f0499bd36c3580a1f401273cf21c037420c039d0","0x49b60124b4038073e8024da00927e01c039f401201c06007366025051b4","0x494700e264d800c3e8024d900928a01cd90093e8024039e900e25c049f4","0x27007136024fa00935e0242480735e024fa0091320242400700e7d0049b0","0x6b0093e80246b00902c01cde8093e8024de8093c401c4e8093e80244d809","0xfa00913a024f0007126024fa009126024f080712e024fa00912e02411007","0x49f40126d80492d00e01cfa00900e0300389d12625c6b1bd0280244e809","0x49bd012788038073e8024d500939a01cd39aa0187d0049b3012738039ad","0x49e100e688049f40126b40482200e68c049f40123580481600e690049f4","0x380c00e01d0580900e3e80399f0127d0049a7012178039a00127d004893","0xfa0093c8024f500700e7d0049540126b0038073e8024039ef00e01cfa009","0xfa0091b0024968071b0024fa0091b00241100700e7d0049ae0126b003807","0xcf00904401cd18093e8024fa80902c01cd20093e8024038093c401ccf009","0xf280733e024fa0091100242f007340024fa009388024f0807344024fa009","0xcd8093e8024540093c601c540093e8024cf99d0187900399d0127d004807","0xfa00934402411007346024fa0093460240b007348024fa009348024f1007","0xd19a4028024cd8093e8024cd8093c001cd00093e8024d00093c201cd1009","0x39f4012550049ac00e01cfa00900e7bc038073e80240380c00e66cd01a2","0xcc8093e80243f80925a01c039f40126b8049ac00e01cfa0093c8024f5007","0x560093e8024560093ce01c560093e80240384c00e654049f401201cf4807","0x4994324030f2007324024fa00900e794039940127d0048ac32a030f3007","0x481600e01c049f401201c049e200e698049f40122bc049e300e2bc049f4","0x392d0127d00492d012784039990127d0049990120880387c0127d00487c","0xf780700e7d00480701801cd312d3321f003814012698049f4012698049e0","0xc00093da01c039f40126e0049ac00e01cfa00936e024d600700e7d004807","0x48d40124b4038073e8024f20093d401c039f4012550049ac00e01cfa009","0x38fa00e660049f40126940482200e2c4049f40126c40481600e694049f4","0x39f40126680484f00e01cfa00900e7bc038073e80240380c00e01d06009","0x38073e8024f20093d401c039f4012550049ac00e01cfa009300024f6807","0x49f40126340482200e2c4049f401213c0481600e634049f40123540492d","0x10680900e3e80398b0127d0049980121d40398c0127d0048b101273003998","0xd600700e7d0049670126b0038073e8024039ef00e01cfa00900e03003807","0x492d00e01cfa0093c8024f500700e7d0048dc0127b4038073e8024b4009","0x38b90127d004989012088039880127d004955012058039890127d004849","0x484801213c038073e8024039ef00e01cfa00900e0300380741c024038fa","0xfa0093b80249680700e7d0049e40127a8038073e80246e0093da01c039f4","0xc400939801c5c8093e8024c380904401cc40093e8024f280902c01cc3809","0x39ec00e614049f401201cf4807316024fa0091720243a807318024fa009","0x38bd0127d00498430a030f3007308024fa009308024f3807308024fa009","0x49f4012604049e300e604049f40122f45f80c3c801c5f8093e8024039e5","0x498b0120880398c0127d00498c012058038070127d0048070127880397d","0x38140125f4049f40125f4049e000e4b4049f40124b4049e100e62c049f4","0x49e60124b4038073e8024f70093da01c039f401201c060072fa4b4c598c","0x38fa00e5ec049f40123080482200e5f0049f401278c0481600e308049f4","0x39f401279c0484f00e01cfa00900e7bc038073e80240380c00e01d07809","0x49f40120500481600e5e8049f40127bc0492d00e01cfa0093dc024f6807","0x49f401201caa0072f0024fa00900e7a40397b0127d00497a0120880397c","0x48073ca01cbb0093e8024bb978018798039770127d00497701279c03977","0xf10072e4024fa0092e8024f18072e8024fa0092ec324061e400e324049f4","0xbd8093e8024bd80904401cbe0093e8024be00902c01c038093e802403809","0x9697b2f801c0a0092e4024fa0092e4024f000725a024fa00925a024f0807","0xb88093e80240f80925a01c039f40127140495500e01cfa00900e03003972","0x358093e8024358093ce01c358093e80240384c00e5c0049f401201cf4807","0x496d1c0030f20071c0024fa00900e7940396d0127d00486b2e0030f3007","0x481600e01c049f401201c049e200e378049f401237c049e300e37c049f4","0x392d0127d00492d012784039710127d004971012088038220127d004822","0x38160127d00480739401c6f12d2e208803814012378049f4012378049e0","0x3c007042024fa00900e1e0038190127d0048070f001c0f8093e802403878","0x6009018024038073e80240380700e01cfa00900e7d4038fa0127d004807","0x49f40120440492d00e01cfa00900e030039ef3e00310801104e030fa00c","0x49f401209c0481600e01cfa00900e050039ed0127d0049c5012714039ee","0x39e9012844f51eb0187d0061ed01207c039ee0127d0049ee01208803827","0x39e70127d0049ea012080039e80127d0049ee0124b4038073e80240380c","0x49f40127a00482200e794049f40127980481b00e798049f401279c04819","0x10900900e3e8039e20127d0049e501208c039e30127d0049eb012084039e4","0xf00093e80240382700e784049f40127b80492d00e01cfa00900e03003807","0xfa0093d2024108073c8024fa0093c2024110073be024fa0093c002408807","0x39de01284c110093e8030f10093e001cf10093e8024ef80904601cf1809","0x61c700e774049f40127900492d00e01cfa00900e7bc038073e80240380c","0x61f40180881380c3dc01cee8093e8024ee80904401c110093e80241101f","0x381400e368049f40127740492d00e01cfa00900e030038db0128506e1dc","0x481f00e368049f40123680482200e770049f40127700481600e01cfa009","0x49f40123680492d00e01cfa00900e03003947012854a293f0187d0061e3","0x484e01206c0384e0127d004849012064038490127d00494501208003848","0x482300e550049f40124fc0482100e13c049f40121200482200e130049f4","0x48da0124b4038073e80240380c00e01d0b00900e3e8039550127d00484c","0xb380904401cb48093e8024b400902201cb40093e80240382700e59c049f4","0xf80072aa024fa0092d2024118072a8024fa00928e0241080709e024fa009","0x38073e8024039ef00e01cfa00900e0300397301285c100093e8030aa809","0xfa0092f202411007040024fa009040064061c700e5e4049f401213c0492d","0x38073e80240380c00e16804a182fe5f8061f4018080ee00c3dc01cbc809","0x397e0127d00497e012058038073e80240381400e354049f40125e40492d","0x380c00e60c04a19304600061f40185500481f00e354049f401235404822","0x482200e178049f40126080499300e618049f40123540492d00e01cfa009","0x38d40127d00485e0126680399a0127d004980012084039930127d004986","0x382700e6a4049f40123540492d00e01cfa00900e03003807434024038fa","0x10807326024fa00935202411007358024fa0090cc0246a0070cc024fa009","0xd70093e80306a00935201c6a0093e8024d600933401ccd0093e8024c1809","0x49f401264c0492d00e01cfa00900e7bc038073e80240380c00e6c404a1b","0x49b901279c039b90127d0049b8012064039b80127d0049ae012080039b7","0x10e1c6386030fa00c3725f80606600e6dc049f40126dc0482200e6e4049f4","0x480702801ce70093e8024db80925a01c039f401201c060073a2748e992d","0xcd00903e01ce70093e8024e700904401ce18093e8024e180902c01c039f4","0xf60093e8024e700925a01c039f401201c060070ea0250e9cc39a030fa00c","0xfa00939a024108070f0024fa0093d802411007394024fa009398024c9807","0x39f401201c0600700e878048071f401ce38093e8024e500933401cfa809","0x49f40121fc048d400e1fc049f401201c138070f8024fa00939c02496807","0x48d9012668039f50127d004875012084038780127d00487c012088038d9","0x9680700e7d00480701801c4180943e208049f401871c049a900e71c049f4","0xe20093e80246c00903201c6c0093e80244100904001c428093e80243c009","0x61c43860303300710a024fa00910a02411007388024fa009388024f3807","0x49f40122140492d00e01cfa00900e030038d739e22496a203a0220061f4","0x61f501207c039c10127d0049c1012088038880127d004888012058039c1","0x39ba0127d0049c10124b4038073e80240380c00e23c04a2137c700061f4","0x48231f4030e3807028024fa0093a0718061b800e08c049f40126f804820","0x482200e700049f40127000482100e358049f401208c0481900e08c049f4","0xdb00c3e8030e000903e01c0a0093e80240a0160181f0039ba0127d0049ba","0xde80932601cde0093e8024dd00925a01c039f401201c06007126025111bd","0xcd00712e024fa00936c02410807366024fa00937802411007368024fa009","0xdd00925a01c039f401201c0600700e88c048071f401cd90093e8024da009","0x482200e6bc049f4012264048d400e264049f401201c13807360024fa009","0x39b20127d0049af012668038970127d004893012084039b30127d0049b0","0x39f401201cf780700e7d00480701801c4e80944826c049f40186c8049a9","0x481b042030e3807036024fa0091360241000735a024fa00936602496807","0x607f00e6b4049f40126b40482200e6a8049f401206c0481900e06c049f4","0xfa00935a0249680700e7d00480701801cd180944a690d380c3e8030d5088","0xfa0093440241100734e024fa00934e0240b00700e7d00480702801cd1009","0x9680700e7d00480701801ccf00944c67cd000c3e80304b80903e01cd1009","0xcd8093e8024ce80904401c540093e8024cf80932601cce8093e8024d1009","0x3a2701201c7d00732a024fa009150024cd007332024fa00934002410807","0x39940127d00480704e01c560093e8024d100925a01c039f401201c06007","0x49f40126780482100e66c049f40122b00482200e648049f4012650048d4","0x600734c025140af0127d0061950126a4039950127d00499201266803999","0x5780904001cd28093e8024cd80925a01c039f401201cf780700e7d004807","0x481900e634049f40126640484800e660049f401201cf4807162024fa009","0x39a50127d0049a5012088039a70127d0049a70120580398c0127d0048b1","0x49f4012630049e700e660049f40126600485e00e634049f4012634048d9","0x49f40186200488300e620c498b25a7d00498c330634d29a70282080398c","0x5c80910a01cc28093e8024c480925a01c039f401201c0600730e025148b9","0x1150bf0127d0060bd012360039850127d004985012088038bd308030fa009","0xfa009308024e28072fa024fa00930a0249680700e7d00480701801cc0809","0xbd0094565ecbe00c3e80306100903e01cbe8093e8024be80904401c61009","0xa380700e7d00497b0127ac038073e8024be0093da01c039f401201c06007","0x488800e01cfa0091ac024e980700e7d0049a4012710038073e80245f809","0xbe80925a01c039f4012370049ea00e01cfa0092fe024f500700e7d004814","0xbb0093ce01cbb0093e8024039e800e5dc049f401201cf48072f0024fa009","0xf20072e8024fa00900e794038c90127d0049762ee030f30072ec024fa009","0x49f401201c049e200e5c4049f40125c8049e300e5c8049f4012324ba00c","0x492d012784039780127d0049780120880398b0127d00498b01205803807","0x480701801cb892d2f062c038140125c4049f40125c4049e000e4b4049f4","0xfa00900e77c039700127d00497d0124b4038073e8024bd0093da01c039f4","0xc592d3ba01c358093e8024358093bc01cb80093e8024b800904401c35809","0x48e00124b4038073e80240380c00e3786f80c458380b680c3e803035970","0x6e80904401cb68093e8024b680902c01cb30093e8024039dc00e374049f4","0x6e00725a024fa00925a024f080700e024fa00900e024f10071ba024fa009","0xa0093e80240a0093a401cbf8093e8024bf8091b801c6e0093e80246e009","0xfa00917e0242f007348024fa009348024e80071ac024fa0091ac024f3807","0xb11632c8050fa00917e6906b0142fe370b312d00e374b681b11201c5f809","0x493f00e01cfa00900e0300395e0128b4af8093e8030b00091b401cb0161","0x494500e568049f401201cf48072b8024fa0092c60249680700e7d00495f","0x39530127d004956012120038073e8024ab80928e01cab1570187d00495a","0x49f4012588049e200e3b4049f40123ac0484e00e3ac049f401254c04849","0x49610127840395c0127d00495c012088039640127d00496401205803962","0x480701801c769612b8590b10140123b4049f40123b4049e000e584049f4","0xb10093c401ca88093e8024af0093c601ca90093e8024b180925a01c039f4","0xf08072a4024fa0092a4024110072c8024fa0092c80240b0072c4024fa009","0x39512c2548b2162028024a88093e8024a88093c001cb08093e8024b0809","0x49d300e01cfa009348024e200700e7d0048bf01251c038073e80240380c","0x6e0093d401c039f40125fc049ea00e01cfa0090280244400700e7d0048d6","0x480709801ca68093e8024039e900e53c049f40123780492d00e01cfa009","0xf2807294024fa009298534061e600e530049f4012530049e700e530049f4","0x7b8093e80247a8093c601c7a8093e8024a5148018790039480127d004807","0xfa00929e024110071be024fa0091be0240b00700e024fa00900e024f1007","0x6f8070280247b8093e80247b8093c001c968093e8024968093c201ca7809","0xfa009308024aa80700e7d00498101213c038073e80240380c00e3dc9694f","0x39f40120500488800e01cfa0091ac024e980700e7d0049a401271003807","0xa30093e8024c280925a01c039f4012370049ea00e01cfa0092fe024f5007","0x3a2e01201c7d007296024fa00928c02411007292024fa0093160240b007","0xe980700e7d0049a4012710038073e80246e0093d401c039f401201c06007","0x492d00e01cfa0092fe024f500700e7d004814012220038073e80246b009","0x38070127d004807012788038fe0127d00498701278c039400127d004989","0x49f40124b4049e100e500049f40125000482200e62c049f401262c04816","0x39f401201c060071fc4b4a018b00e050048fe0127d0048fe0127800392d","0xf500700e7d004814012220038073e8024d300909e01c039f401201cf7807","0x49d300e01cfa009348024e200700e7d00497f0127a8038073e80246e009","0x481600e3f4049f401266c0492d00e01cfa009332024f680700e7d0048d6","0xe78071fe024fa00900e7a40394b0127d0048fd012088039490127d0049a7","0x808093e80249f0ff0187980393e0127d00493e01279c0393e0127d004807","0xfa009274024f1807274024fa0092024ec061e400e4ec049f401201cf2807","0xa580904401ca48093e8024a480902c01c038093e8024038093c401c9b009","0xa00926c024fa00926c024f000725a024fa00925a024f0807296024fa009","0x6e0093d401c039f40120500488800e01cfa00900e0300393625a52ca4807","0x48d601274c038073e80244b8093da01c039f40125fc049ea00e01cfa009","0x9b80904401c9a0093e8024d180902c01c9b8093e8024d680925a01c039f4","0x39f401201cf780700e7d00480701801c03a2f01201c7d007262024fa009","0x38073e80246e0093d401c039f40120500488800e01cfa00913a02427807","0x6b80700e7d0048d601274c038073e80244b8093da01c039f40125fc049ea","0x39340127d004888012058039300127d0049b30124b4038073e802410809","0x39090127d00480738201c860093e8024039e900e4c4049f40124c004822","0x49f401201cf280725c024fa009212430061e600e424049f4012424049e7","0x38093c401c930093e8024940093c601c940093e80249712a0187900392a","0xf0807262024fa00926202411007268024fa0092680240b00700e024fa009","0x392625a4c49a007028024930093e8024930093c001c968093e802496809","0xe300935801c039f401223c049ed00e01cfa00900e7bc038073e80240380c","0x482101235c038073e8024bf8093d401c039f4012370049ea00e01cfa009","0xfa0093a0024d600700e7d004816012700038073e80247d0091ae01c039f4","0x49f401201cdf007230024fa00900e7a40391d0127d0049c10124b403807","0x48073ca01d180093e802400118018798038000127d00480001279c03800","0xf1007466024fa009464024f1807464024fa0094608c4061e400e8c4049f4","0x8e8093e80248e80904401c440093e80244400902c01c038093e802403809","0x9691d11001c0a009466024fa009466024f000725a024fa00925a024f0807","0xd600700e7d0049cf0126b0038073e8024039ef00e01cfa00900e03003a33","0x49ea00e01cfa0091b8024f500700e7d0049c60126b0038073e80246b809","0x7d0091ae01c039f40127d4049ed00e01cfa0090420246b80700e7d00497f","0x4480902c01d1a0093e80244280925a01c039f4012058049c000e01cfa009","0x480701801c03a3701201c7d00746c024fa0094680241100746a024fa009","0x39f4012718049ac00e01cfa0091060242780700e7d0048073de01c039f4","0x38073e8024108091ae01c039f40125fc049ea00e01cfa0091b8024f5007","0x9680700e7d004816012700038073e80247d0091ae01c039f40127d4049ed","0x11b0093e80251c00904401d1a8093e8024e180902c01d1c0093e80243c009","0x3a3a01201c7d0073f0024fa00946c0243a807472024fa00946a024e6007","0xe000700e7d0049d10126b0038073e8024e900935801c039f401201c06007","0x48d700e01cfa0092fe024f500700e7d0048dc0127a8038073e80240b009","0xdb80925a01c039f4012668049ed00e01cfa0091f40246b80700e7d004821","0x7d00747a024fa00947602411007478024fa0093a60240b007476024fa009","0xfa0093620242780700e7d0048073de01c039f401201c0600700e8f804807","0x39f40125fc049ea00e01cfa0091b8024f500700e7d00481601270003807","0x38073e8024cd0093da01c039f40123e8048d700e01cfa0090420246b807","0x49f40128fc0482200e8f0049f40125f80481600e8fc049f401264c0492d","0xfa00900e7a4039f80127d004a3d0121d403a390127d004a3c01273003a3d","0x120a4001879803a410127d004a4101279c03a410127d00480711e01d20009","0xf1807486024fa0093f2908061e400e908049f401201cf28073f2024fa009","0x11c8093e80251c80902c01c038093e8024038093c401d220093e802521809","0xfa009488024f000725a024fa00925a024f08073f0024fa0093f002411007","0x39f4012058049c000e01cfa00900e03003a4425a7e11c80702802522009","0x38073e8024aa0093da01c039f4012084048d700e01cfa0091b8024f5007","0x1230093e80242d00902c01d228093e8024bc80925a01c039f40123e8048d7","0xf780700e7d00480701801c03a4801201c7d00748e024fa00948a02411007","0x6e0093d401c039f4012058049c000e01cfa0092e60242780700e7d004807","0x48fa01235c038073e8024aa0093da01c039f4012084048d700e01cfa009","0x49dc01205803a490127d00484f0124b4038073e80240c8091ae01c039f4","0x48073d801cfb8093e8024039e900e91c049f40129240482200e918049f4","0xf2807496024fa0094947dc061e600e928049f4012928049e700e928049f4","0x1270093e8025268093c601d268093e802525a4c01879003a4c0127d004807","0xfa00948e0241100748c024fa00948c0240b00700e024fa00900e024f1007","0x123007028025270093e8025270093c001c968093e8024968093c201d23809","0xfa0093c6024f680700e7d004816012700038073e80240380c00e93896a47","0x39f40123e8048d700e01cfa0090320246b80700e7d00482101235c03807","0xfa00949e024110074a0024fa0091b60240b00749e024fa0093ba02496807","0x2780700e7d0048073de01c039f401201c0600700e948048071f401d28809","0x48d700e01cfa0093c6024f680700e7d004816012700038073e8024ef009","0xf8091ae01c039f40123e8048d700e01cfa0090320246b80700e7d004821","0x482200e940049f401209c0481600e94c049f40127900492d00e01cfa009","0x49e700e954049f401201caa0074a8024fa00900e7a403a510127d004a53","0x3a570127d0048073ca01d2b0093e80252aa5401879803a550127d004a55","0xfa00900e024f10074b0024fa0093ec024f18073ec024fa0094ac95c061e4","0x968093c201d288093e80252880904401d280093e80252800902c01c03809","0x380c00e96096a514a001c0a0094b0024fa0094b0024f000725a024fa009","0x49c5012554038073e80240f8091ae01c039f4012058049c000e01cfa009","0xfa0091f40246b80700e7d00481901235c038073e8024108091ae01c039f4","0x49f401201c260074b4024fa00900e7a403a590127d0049ef0124b403807","0x48073ca01d2e0093e80252da5a01879803a5b0127d004a5b01279c03a5b","0xf10074be024fa0094bc024f18074bc024fa0094b8974061e400e974049f4","0x12c8093e80252c80904401cf80093e8024f800902c01c038093e802403809","0x96a593e001c0a0094be024fa0094be024f000725a024fa00925a024f0807","0x381f04403130016028030fa00c0180240600900e01cfa00900e01c03a5f","0x38190127d0049c5012714038200127d0048160124b4038073e80240380c","0x38200127d004820012088038140127d004814012058038073e802403814","0x48200124b4038073e80240380c00e08c04a6104206c061f40180640481f","0x481b00e044049f401209c0481900e09c049f40120840482000e3e8049f4","0x39ee0127d00481b012084039ef0127d0048fa012088039f00127d004811","0x492d00e01cfa00900e030038074c4024038fa00e7b4049f40127c004823","0x110073d2024fa0093d4024088073d4024fa00900e09c039eb0127d004820","0xf68093e8024f480904601cf70093e80241180904201cf78093e8024f5809","0xfa00900e7bc038073e80240380c00e79c04a633d0024fa00c3da024f8007","0xf40140187b8039e60127d0049e6012088039e60127d0049ef0124b403807","0xf10093e8024f300925a01c039f401201c060073c6025321e43ca030fa00c","0xf10093e8024f100904401cf28093e8024f280902c01c039f401201c0a007","0xf100925a01c039f401201c060073be025329e03c2030fa00c3dc0240f807","0x108073b8024fa0093bc024110073ba024fa0093c0024c98073bc024fa009","0x600700e998048071f401c6d8093e8024ee80933401c6e0093e8024f0809","0x48d400e4fc049f401201c138071b4024fa0093c40249680700e7d004807","0x38dc0127d0049df012084039dc0127d0048da012088039450127d00493f","0x480701801c240094ce51c049f401836c049a900e36c049f40125140499a","0x2700903201c270093e8024a380904001c248093e8024ee00925a01c039f4","0x33007092024fa00909202411007098024fa009098024f3807098024fa009","0x492d00e01cfa00900e030039682ce55496a682a813c061f4018130f280c","0x39690127d0049690120880384f0127d00484f012058039690127d004849","0x49690124b4038073e80240380c00e5f804a692f25cc061f40183700481f","0x482100e354049f40125fc0482200e168049f40125e40499300e5fc049f4","0x380c00e01d3500900e3e8039820127d00485a012668039800127d004973","0xc30091a801cc30093e80240382700e60c049f40125a40492d00e01cfa009","0xcd007300024fa0092fc024108071aa024fa009306024110070bc024fa009","0xfa00900e0300399a0129acc98093e8030c100935201cc10093e80242f009","0x49a9012064039a90127d004993012080038d40127d0048d50124b403807","0x606600e350049f40123500482200e198049f4012198049e700e198049f4","0x6a00925a01c039f401201c060073706dcd892d4d86b8d600c3e80303304f","0xf807372024fa00937202411007358024fa0093580240b007372024fa009","0x39f401201cf780700e7d00480701801ce98094da718e180c3e8030c0009","0x38073e8024aa00935801c039f4012718049eb00e01cfa009386024f6807","0x39d20127d0049b90124b4038073e8024d700935801c039f4012790049ea","0x39ce0127d0049ce01279c039ce0127d0048073d001ce88093e8024039e9","0xfa00939a730061e400e730049f401201cf280739a024fa00939c744061e6","0xd600902c01c038093e8024038093c401cf60093e80243a8093c601c3a809","0xf000725a024fa00925a024f08073a4024fa0093a402411007358024fa009","0x49ed00e01cfa00900e030039ec25a748d6007028024f60093e8024f6009","0x482200e1e0049f401201cef807394024fa0093720249680700e7d0049d3","0x61f40181e0e51ac25a774038780127d004878012778039ca0127d0049ca","0xe380925a01c039f401201cf780700e7d00480701801c3f87c0189b8e39f5","0xb007106024fa00900e770038820127d0049ae2a8030dc0071b2024fa009","0x38093e8024038093c401c6c8093e80246c80904401cfa8093e8024fa809","0xfa009104024e90073c8024fa0093c80246e00725a024fa00925a024f0807","0x6d0073a0220e20d810a050fa0091047904192d00e364fa82237401c41009","0x39f40122240493f00e01cfa00900e030039cf0129bc448093e8030e8009","0x61f40127040494500e704049f401201cf48071ae024fa0091b002496807","0x488f0121240388f0127d0049be012120038073e8024e000928e01cdf1c0","0x481600e710049f4012710049e200e358049f40126e80484e00e6e8049f4","0x38880127d004888012784038d70127d0048d7012088038850127d004885","0x9680700e7d00480701801c6b0881ae214e2014012358049f4012358049e0","0xe20093e8024e20093c401cde8093e8024e78093c601cdb0093e80246c009","0xfa009110024f080736c024fa00936c0241100710a024fa00910a0240b007","0xfa00900e030039bd1106d8429c4028024de8093e8024de8093c001c44009","0x38073e8024f20093d401c039f4012550049ac00e01cfa00900e7bc03807","0x39bc0127d0048073d201c498093e80243f80925a01c039f40126b8049ac","0x49f40126d0de00c3cc01cda0093e8024da0093ce01cda0093e80240384c","0x49b201278c039b20127d0049b312e030f200712e024fa00900e794039b3","0x482200e1f0049f40121f00481600e01c049f401201c049e200e6c0049f4","0x49b00127d0049b00127800392d0127d00492d012784038930127d004893","0xdb80935801c039f401201cf780700e7d00480701801cd812d1261f003814","0x49540126b0038073e8024c00093da01c039f40126e0049ac00e01cfa009","0x49b1012058038990127d0048d40124b4038073e8024f20093d401c039f4","0xfa00900e030038074e0024038fa00e26c049f40122640482200e6bc049f4","0x38073e8024c00093da01c039f40126680484f00e01cfa00900e7bc03807","0x389d0127d0048d50124b4038073e8024f20093d401c039f4012550049ac","0x49f40126bc049cc00e26c049f40122740482200e6bc049f401213c04816","0x38073e80240380c00e01d3880900e3e8039aa0127d00489b0121d4039ad","0x49ed00e01cfa0092d0024d600700e7d0049670126b0038073e8024039ef","0x481600e69c049f40121240492d00e01cfa0093c8024f500700e7d0048dc","0x380c00e01d3900900e3e8039a30127d0049a7012088039a40127d004955","0xfa0091b8024f680700e7d00484801213c038073e8024039ef00e01cfa009","0xfa0093ca0240b007344024fa0093b80249680700e7d0049e40127a803807","0xd18090ea01cd68093e8024d200939801cd18093e8024d100904401cd2009","0xcf8093ce01ccf8093e8024039ec00e680049f401201cf4807354024fa009","0xf200733a024fa00900e7940399e0127d00499f340030f300733e024fa009","0x49f401201c049e200e66c049f40122a0049e300e2a0049f4012678ce80c","0x492d012784039aa0127d0049aa012088039ad0127d0049ad01205803807","0x480701801ccd92d3546b40381401266c049f401266c049e000e4b4049f4","0x49e3012058039990127d0049e60124b4038073e8024f70093da01c039f4","0xfa00900e030038074e6024038fa00e2b0049f40126640482200e654049f4","0x38073e8024f70093da01c039f401279c0484f00e01cfa00900e7bc03807","0x49f40126500482200e654049f40120500481600e650049f40127bc0492d","0x49f40122bc049e700e2bc049f401201caa007324024fa00900e7a4038ac","0xd31a5018790039a50127d0048073ca01cd30093e802457992018798038af","0xb00700e024fa00900e024f1007330024fa009162024f1807162024fa009","0x968093e8024968093c201c560093e80245600904401cca8093e8024ca809","0x38073e80240380c00e660968ac32a01c0a009330024fa009330024f0007","0x398c0127d0048073d201cc68093e80240f80925a01c039f401271404955","0x49f401262cc600c3cc01cc58093e8024c58093ce01cc58093e80240384c","0x48b901278c038b90127d004989310030f2007310024fa00900e79403989","0x482200e088049f40120880481600e01c049f401201c049e200e61c049f4","0x49870127d0049870127800392d0127d00492d0127840398d0127d00498d","0xb0140187d00600c0120300480700e7d00480700e01cc392d31a08803814","0xe280938a01c100093e80240b00925a01c039f401201c0600703e08806274","0x1000904401c0a0093e80240a00902c01c039f401201c0a007032024fa009","0x39f401201c060070460253a821036030fa00c0320240f807040024fa009","0xfa00904e0240c80704e024fa009042024100071f4024fa00904002496807","0xd80904201cf78093e80247d00904401cf80093e80240880903601c08809","0x480701801c03a7601201c7d0073da024fa0093e0024118073dc024fa009","0x49ea012044039ea0127d00480704e01cf58093e80241000925a01c039f4","0x482300e7b8049f401208c0482100e7bc049f40127ac0482200e7a4049f4","0x39f401201c060073ce0253b9e80127d0061ed0127c0039ed0127d0049e9","0xf30093e8024f300904401cf30093e8024f780925a01c039f401201cf7807","0x492d00e01cfa00900e030039e30129e0f21e50187d0061e8028030f7007","0x482200e794049f40127940481600e01cfa00900e050039e20127d0049e6","0xfa00900e030039df0129e4f01e10187d0061ee01207c039e20127d0049e2","0x49de012088039dd0127d0049e001264c039de0127d0049e20124b403807","0x38fa00e36c049f40127740499a00e370049f40127840482100e770049f4","0xfa00900e09c038da0127d0049e20124b4038073e80240380c00e01d3d009","0xef80904201cee0093e80246d00904401ca28093e80249f8091a801c9f809","0x4a7b28e024fa00c1b6024d48071b6024fa00928a024cd0071b8024fa009","0x49f401251c0482000e124049f40127700492d00e01cfa00900e03003848","0x48490120880384c0127d00484c01279c0384c0127d00484e0120640384e","0x480701801cb41672aa4b53e15409e030fa00c0987940606600e124049f4","0xb480904401c278093e80242780902c01cb48093e80242480925a01c039f4","0x39f401201c060072fc0253e9792e6030fa00c1b80240f8072d2024fa009","0xfa0092fe024110070b4024fa0092f2024c98072fe024fa0092d202496807","0x48071f401cc10093e80242d00933401cc00093e8024b980904201c6a809","0x49f401201c13807306024fa0092d20249680700e7d00480701801c03a7e","0x497e012084038d50127d0049830120880385e0127d00498601235003986","0xcd0094fe64c049f4018608049a900e608049f40121780499a00e600049f4","0xd48093e8024c980904001c6a0093e80246a80925a01c039f401201c06007","0xfa0091a8024110070cc024fa0090cc024f38070cc024fa0093520240c807","0xfa00900e030039b836e6c496a8035c6b0061f40181982780c0cc01c6a009","0x49b9012088039ac0127d0049ac012058039b90127d0048d40124b403807","0x38073e80240380c00e74c04a8138c70c061f40186000481f00e6e4049f4","0x49ac00e01cfa00938c024f580700e7d0049c30127b4038073e8024039ef","0xdc80925a01c039f40126b8049ac00e01cfa0093c8024f500700e7d004954","0xe70093ce01ce70093e8024039e800e744049f401201cf48073a4024fa009","0xf2007398024fa00900e794039cd0127d0049ce3a2030f300739c024fa009","0x49f401201c049e200e7b0049f40121d4049e300e1d4049f4012734e600c","0x492d012784039d20127d0049d2012088039ac0127d0049ac01205803807","0x480701801cf612d3a46b0038140127b0049f40127b0049e000e4b4049f4","0xfa00900e77c039ca0127d0049b90124b4038073e8024e98093da01c039f4","0xd612d3ba01c3c0093e80243c0093bc01ce50093e8024e500904401c3c009","0xfa00900e7bc038073e80240380c00e1fc3e00c50471cfa80c3e80303c1ca","0x48073b801c410093e8024d71540186e0038d90127d0049c70124b403807","0x49e200e364049f40123640482200e7d4049f40127d40481600e20c049f4","0x39e40127d0049e40123700392d0127d00492d012784038070127d004807","0x6c0850287d0048823c820c968071b27d4110d600e208049f4012208049d2","0x9f80700e7d00480701801ce7809506224049f4018740048da00e740441c4","0xa2807382024fa00900e7a4038d70127d0048d80124b4038073e802444809","0x478093e8024df00909001c039f40127000494700e6f8e000c3e8024e0809","0xfa009388024f10071ac024fa00937402427007374024fa00911e02424807","0x440093c201c6b8093e80246b80904401c428093e80244280902c01ce2009","0x380c00e358440d710a7100a0091ac024fa0091ac024f0007110024fa009","0x49e200e6f4049f401273c049e300e6d8049f40123600492d00e01cfa009","0x39b60127d0049b6012088038850127d004885012058039c40127d0049c4","0xde88836c214e20140126f4049f40126f4049e000e220049f4012220049e1","0x49ea00e01cfa0092a8024d600700e7d0048073de01c039f401201c06007","0x39e900e24c049f40121fc0492d00e01cfa00935c024d600700e7d0049e4","0x61e600e6d0049f40126d0049e700e6d0049f401201c26007378024fa009","0xd90093e8024d9897018790038970127d0048073ca01cd98093e8024da1bc","0xfa0090f80240b00700e024fa00900e024f1007360024fa009364024f1807","0xd80093c001c968093e8024968093c201c498093e80244980904401c3e009","0xfa00900e7bc038073e80240380c00e6c0968930f801c0a009360024fa009","0x39f4012600049ed00e01cfa009370024d600700e7d0049b70126b003807","0x4c8093e80246a00925a01c039f4012790049ea00e01cfa0092a8024d6007","0x3a8401201c7d007136024fa0091320241100735e024fa0093620240b007","0x49ed00e01cfa0093340242780700e7d0048073de01c039f401201c06007","0x6a80925a01c039f4012790049ea00e01cfa0092a8024d600700e7d004980","0xe6007136024fa00913a0241100735e024fa00909e0240b00713a024fa009","0x600700ea14048071f401cd50093e80244d8090ea01cd68093e8024d7809","0x49680126b0038073e8024b380935801c039f401201cf780700e7d004807","0xfa0090920249680700e7d0049e40127a8038073e80246e0093da01c039f4","0x48071f401cd18093e8024d380904401cd20093e8024aa80902c01cd3809","0x38073e80242400909e01c039f401201cf780700e7d00480701801c03a86","0x39a20127d0049dc0124b4038073e8024f20093d401c039f4012370049ed","0x49f4012690049cc00e68c049f40126880482200e690049f401279404816","0x49f401201cf6007340024fa00900e7a4039aa0127d0049a30121d4039ad","0x48073ca01ccf0093e8024cf9a00187980399f0127d00499f01279c0399f","0xf1007336024fa009150024f1807150024fa00933c674061e400e674049f4","0xd50093e8024d500904401cd68093e8024d680902c01c038093e802403809","0x969aa35a01c0a009336024fa009336024f000725a024fa00925a024f0807","0xcc8093e8024f300925a01c039f40127b8049ed00e01cfa00900e0300399b","0x3a8701201c7d007158024fa0093320241100732a024fa0093c60240b007","0x49ed00e01cfa0093ce0242780700e7d0048073de01c039f401201c06007","0x1100732a024fa0090280240b007328024fa0093de0249680700e7d0049ee","0xf380715e024fa00900e550039920127d0048073d201c560093e8024ca009","0xd28093e8024039e500e698049f40122bcc900c3cc01c578093e802457809","0x4807012788039980127d0048b101278c038b10127d0049a634a030f2007","0x49e100e2b0049f40122b00482200e654049f40126540481600e01c049f4","0x60073304b45619500e050049980127d0049980127800392d0127d00492d","0x39e900e634049f401207c0492d00e01cfa00938a024aa80700e7d004807","0x61e600e62c049f401262c049e700e62c049f401201c26007318024fa009","0x5c8093e8024c4988018790039880127d0048073ca01cc48093e8024c598c","0xfa0090440240b00700e024fa00900e024f100730e024fa009172024f1807","0xc38093c001c968093e8024968093c201cc68093e8024c680904401c11009","0x6009018024038073e80240380700e61c9698d04401c0a00930e024fa009","0x49f40120580492d00e01cfa00900e0300381f04403144016028030fa00c","0x49f40120500481600e01cfa00900e050038190127d0049c501271403820","0x3823012a241081b0187d00601901207c038200127d00482001208803814","0x38270127d004821012080038fa0127d0048200124b4038073e80240380c","0x49f40123e80482200e7c0049f40120440481b00e044049f401209c04819","0x14500900e3e8039ed0127d0049f001208c039ee0127d00481b012084039ef","0xf50093e80240382700e7ac049f40120800492d00e01cfa00900e03003807","0xfa009046024108073de024fa0093d6024110073d2024fa0093d402408807","0x39e7012a2cf40093e8030f68093e001cf68093e8024f480904601cf7009","0x482200e798049f40127bc0492d00e01cfa00900e7bc038073e80240380c","0x480701801cf1809518790f280c3e8030f40140187b8039e60127d0049e6","0xfa0093ca0240b00700e7d00480702801cf10093e8024f300925a01c039f4","0xef80951a780f080c3e8030f700903e01cf10093e8024f100904401cf2809","0xee8093e8024f000932601cef0093e8024f100925a01c039f401201c06007","0xfa0093ba024cd0071b8024fa0093c2024108073b8024fa0093bc02411007","0x6d0093e8024f100925a01c039f401201c0600700ea38048071f401c6d809","0x49f40123680482200e514049f40124fc048d400e4fc049f401201c13807","0x60db0126a4038db0127d004945012668038dc0127d0049df012084039dc","0x10007092024fa0093b80249680700e7d00480701801c2400951e51c049f4","0x260093e8024260093ce01c260093e80242700903201c270093e8024a3809","0xb395525aa40aa04f0187d00604c3ca03033007092024fa00909202411007","0x49f401213c0481600e5a4049f40121240492d00e01cfa00900e03003968","0x397e012a44bc9730187d0060dc01207c039690127d0049690120880384f","0x385a0127d00497901264c0397f0127d0049690124b4038073e80240380c","0x49f40121680499a00e600049f40125cc0482100e354049f40125fc04822","0x39830127d0049690124b4038073e80240380c00e01d4900900e3e803982","0x6a8093e8024c180904401c2f0093e8024c30091a801cc30093e802403827","0xfa00c304024d4807304024fa0090bc024cd007300024fa0092fc02410807","0x482000e350049f40123540492d00e01cfa00900e0300399a012a4cc9809","0x38660127d00486601279c038660127d0049a9012064039a90127d004993","0xdc1b73624b54a1ae358030fa00c0cc13c0606600e350049f401235004822","0xd60093e8024d600902c01cdc8093e80246a00925a01c039f401201c06007","0x60073a60254a9c6386030fa00c3000240f807372024fa00937202411007","0x49c60127ac038073e8024e18093da01c039f401201cf780700e7d004807","0xfa00935c024d600700e7d0049e40127a8038073e8024aa00935801c039f4","0x49f401201cf40073a2024fa00900e7a4039d20127d0049b90124b403807","0x48073ca01ce68093e8024e71d1018798039ce0127d0049ce01279c039ce","0xf10073d8024fa0090ea024f18070ea024fa00939a730061e400e730049f4","0xe90093e8024e900904401cd60093e8024d600902c01c038093e802403809","0x969d235801c0a0093d8024fa0093d8024f000725a024fa00925a024f0807","0xe50093e8024dc80925a01c039f401274c049ed00e01cfa00900e030039ec","0x49f40121e0049de00e728049f40127280482200e1e0049f401201cef807","0x39f401201c060070fe1f00629638e7d4061f40181e0e51ac25a77403878","0x49f40126b8aa00c37001c6c8093e8024e380925a01c039f401201cf7807","0xfa0091b2024110073ea024fa0093ea0240b007106024fa00900e77003882","0xf20091b801c968093e8024968093c201c038093e8024038093c401c6c809","0x411e41064b4038d93ea088dd007104024fa009104024e90073c8024fa009","0x380c00e73c04a97112024fa00c3a00246d0073a0220e20d810a050fa009","0x48073d201c6b8093e80246c00925a01c039f40122240493f00e01cfa009","0x484800e01cfa009380024a380737c700061f40127040494500e704049f4","0x38d60127d0049ba012138039ba0127d00488f0121240388f0127d0049be","0x49f401235c0482200e214049f40122140481600e710049f4012710049e2","0x6b885388050048d60127d0048d6012780038880127d004888012784038d7","0xfa00939e024f180736c024fa0091b00249680700e7d00480701801c6b088","0xdb00904401c428093e80244280902c01ce20093e8024e20093c401cde809","0xa00937a024fa00937a024f0007110024fa009110024f080736c024fa009","0x49540126b0038073e8024039ef00e01cfa00900e030039bd1106d8429c4","0xfa0090fe0249680700e7d0049ae0126b0038073e8024f20093d401c039f4","0xfa009368024f3807368024fa00900e130039bc0127d0048073d201c49809","0x4b80c3c801c4b8093e8024039e500e6cc049f40126d0de00c3cc01cda009","0x38070127d004807012788039b00127d0049b201278c039b20127d0049b3","0x49f40124b4049e100e24c049f401224c0482200e1f0049f40121f004816","0x39f401201c060073604b44987c00e050049b00127d0049b00127800392d","0xf680700e7d0049b80126b0038073e8024db80935801c039f401201cf7807","0x492d00e01cfa0093c8024f500700e7d0049540126b0038073e8024c0009","0x389b0127d004899012088039af0127d0049b1012058038990127d0048d4","0x499a01213c038073e8024039ef00e01cfa00900e03003807530024038fa","0xfa0093c8024f500700e7d0049540126b0038073e8024c00093da01c039f4","0x489d012088039af0127d00484f0120580389d0127d0048d50124b403807","0x38fa00e6a8049f401226c0487500e6b4049f40126bc049cc00e26c049f4","0x39f401259c049ac00e01cfa00900e7bc038073e80240380c00e01d4c809","0x38073e8024f20093d401c039f4012370049ed00e01cfa0092d0024d6007","0x49f401269c0482200e690049f40125540481600e69c049f40121240492d","0x484f00e01cfa00900e7bc038073e80240380c00e01d4d00900e3e8039a3","0xee00925a01c039f4012790049ea00e01cfa0091b8024f680700e7d004848","0xe6007346024fa00934402411007348024fa0093ca0240b007344024fa009","0x39a00127d0048073d201cd50093e8024d18090ea01cd68093e8024d2009","0x49f401267cd000c3cc01ccf8093e8024cf8093ce01ccf8093e8024039ec","0x48a801278c038a80127d00499e33a030f200733a024fa00900e7940399e","0x482200e6b4049f40126b40481600e01c049f401201c049e200e66c049f4","0x499b0127d00499b0127800392d0127d00492d012784039aa0127d0049aa","0x492d00e01cfa0093dc024f680700e7d00480701801ccd92d3546b403814","0x38ac0127d004999012088039950127d0049e3012058039990127d0049e6","0x49e701213c038073e8024039ef00e01cfa00900e03003807536024038fa","0x4814012058039940127d0049ef0124b4038073e8024f70093da01c039f4","0x48072a801cc90093e8024039e900e2b0049f40126500482200e654049f4","0xf280734c024fa00915e648061e600e2bc049f40122bc049e700e2bc049f4","0xcc0093e8024588093c601c588093e8024d31a5018790039a50127d004807","0xfa0091580241100732a024fa00932a0240b00700e024fa00900e024f1007","0xca807028024cc0093e8024cc0093c001c968093e8024968093c201c56009","0xfa00903e0249680700e7d0049c5012554038073e80240380c00e660968ac","0xfa009316024f3807316024fa00900e1300398c0127d0048073d201cc6809","0xc400c3c801cc40093e8024039e500e624049f401262cc600c3cc01cc5809","0x38070127d004807012788039870127d0048b901278c038b90127d004989","0x49f40124b4049e100e634049f40126340482200e088049f401208804816","0x39f401201c0380730e4b4c682200e050049870127d0049870127800392d","0x9680700e7d00480701801c0f822018a700b0140187d00600c01203004807","0xb00700e7d00480702801c0c8093e8024e280938a01c100093e80240b009","0xd80c3e80300c80903e01c100093e80241000904401c0a0093e80240a009","0x1080904001c7d0093e80241000925a01c039f401201c060070460254e821","0x110073e0024fa0090220240d807022024fa00904e0240c80704e024fa009","0xf68093e8024f800904601cf70093e80240d80904201cf78093e80247d009","0x138073d6024fa0090400249680700e7d00480701801c03a9e01201c7d007","0x39ef0127d0049eb012088039e90127d0049ea012044039ea0127d004807","0x49f40187b4049f000e7b4049f40127a40482300e7b8049f401208c04821","0xfa0093de0249680700e7d0048073de01c039f401201c060073ce0254f9e8","0x4aa03c8794061f40187a00a00c3dc01cf30093e8024f300904401cf3009","0x38073e80240381400e788049f40127980492d00e01cfa00900e030039e3","0x61f40187b80481f00e788049f40127880482200e794049f401279404816","0x499300e778049f40127880492d00e01cfa00900e030039df012a84f01e1","0x38dc0127d0049e1012084039dc0127d0049de012088039dd0127d0049e0","0x492d00e01cfa00900e03003807544024038fa00e36c049f40127740499a","0x1100728a024fa00927e0246a00727e024fa00900e09c038da0127d0049e2","0x6d8093e8024a280933401c6e0093e8024ef80904201cee0093e80246d009","0x49dc0124b4038073e80240380c00e12004aa328e024fa00c1b6024d4807","0x49e700e130049f40121380481900e138049f401251c0482000e124049f4","0x2780c3e8030261e5018198038490127d0048490120880384c0127d00484c","0xb0072d2024fa0090920249680700e7d00480701801cb41672aa4b552154","0xb980c3e80306e00903e01cb48093e8024b480904401c278093e802427809","0xbc80932601cbf8093e8024b480925a01c039f401201c060072fc02552979","0xcd007300024fa0092e6024108071aa024fa0092fe024110070b4024fa009","0xb480925a01c039f401201c0600700ea98048071f401cc10093e80242d009","0x482200e178049f4012618048d400e618049f401201c13807306024fa009","0x39820127d00485e012668039800127d00497e012084038d50127d004983","0xfa0091aa0249680700e7d00480701801ccd00954e64c049f4018608049a9","0x330093ce01c330093e8024d480903201cd48093e8024c980904001c6a009","0xd71ac0187d00606609e030330071a8024fa0091a8024110070cc024fa009","0x481600e6e4049f40123500492d00e01cfa00900e030039b836e6c496aa8","0xe31c30187d00618001207c039b90127d0049b9012088039ac0127d0049ac","0x39f401270c049ed00e01cfa00900e7bc038073e80240380c00e74c04aa9","0x38073e8024f20093d401c039f4012550049ac00e01cfa00938c024f5807","0x39d10127d0048073d201ce90093e8024dc80925a01c039f40126b8049ac","0x49f4012738e880c3cc01ce70093e8024e70093ce01ce70093e8024039e8","0x487501278c038750127d0049cd398030f2007398024fa00900e794039cd","0x482200e6b0049f40126b00481600e01c049f401201c049e200e7b0049f4","0x49ec0127d0049ec0127800392d0127d00492d012784039d20127d0049d2","0x492d00e01cfa0093a6024f680700e7d00480701801cf612d3a46b003814","0xef007394024fa009394024110070f0024fa00900e77c039ca0127d0049b9","0x387f0f8031551c73ea030fa00c0f0728d612d3ba01c3c0093e80243c009","0x61b800e364049f401271c0492d00e01cfa00900e7bc038073e80240380c","0x39f50127d0049f5012058038830127d0048073b801c410093e8024d7154","0x49f40124b4049e100e01c049f401201c049e200e364049f401236404822","0x6c9f5044358038820127d004882012748039e40127d0049e40123700392d","0x1558890127d0061d0012368039d01107106c0850287d0048823c820c96807","0x49f40123600492d00e01cfa0091120249f80700e7d00480701801ce7809","0x49c001251c039be380030fa009382024a2807382024fa00900e7a4038d7","0xdd00909c01cdd0093e80244780909201c478093e8024df00909001c039f4","0x1100710a024fa00910a0240b007388024fa009388024f10071ac024fa009","0x6b0093e80246b0093c001c440093e8024440093c201c6b8093e80246b809","0x39b60127d0048d80124b4038073e80240380c00e358440d710a7100a009","0x49f40122140481600e710049f4012710049e200e6f4049f401273c049e3","0x49bd012780038880127d004888012784039b60127d0049b601208803885","0x39f401201cf780700e7d00480701801cde88836c214e20140126f4049f4","0x38073e8024d700935801c039f4012790049ea00e01cfa0092a8024d6007","0x39b40127d00480709801cde0093e8024039e900e24c049f40121fc0492d","0x49f401201cf2807366024fa0093686f0061e600e6d0049f40126d0049e7","0x38093c401cd80093e8024d90093c601cd90093e8024d989701879003897","0xf0807126024fa009126024110070f8024fa0090f80240b00700e024fa009","0x39b025a24c3e007028024d80093e8024d80093c001c968093e802496809","0xdc00935801c039f40126dc049ac00e01cfa00900e7bc038073e80240380c","0x49e40127a8038073e8024aa00935801c039f4012600049ed00e01cfa009","0x4c80904401cd78093e8024d880902c01c4c8093e80246a00925a01c039f4","0x39f401201cf780700e7d00480701801c03aac01201c7d007136024fa009","0x38073e8024aa00935801c039f4012600049ed00e01cfa00933402427807","0xd78093e80242780902c01c4e8093e80246a80925a01c039f4012790049ea","0xfa0091360243a80735a024fa00935e024e6007136024fa00913a02411007","0xd600700e7d0048073de01c039f401201c0600700eab4048071f401cd5009","0x49ea00e01cfa0091b8024f680700e7d0049680126b0038073e8024b3809","0x11007348024fa0092aa0240b00734e024fa0090920249680700e7d0049e4","0x48073de01c039f401201c0600700eab8048071f401cd18093e8024d3809","0xfa0093c8024f500700e7d0048dc0127b4038073e80242400909e01c039f4","0x49a2012088039a40127d0049e5012058039a20127d0049dc0124b403807","0x39e900e6a8049f401268c0487500e6b4049f4012690049cc00e68c049f4","0x61e600e67c049f401267c049e700e67c049f401201cf6007340024fa009","0x540093e8024cf19d0187900399d0127d0048073ca01ccf0093e8024cf9a0","0xfa00935a0240b00700e024fa00900e024f1007336024fa009150024f1807","0xcd8093c001c968093e8024968093c201cd50093e8024d500904401cd6809","0x49ee0127b4038073e80240380c00e66c969aa35a01c0a009336024fa009","0xcc80904401cca8093e8024f180902c01ccc8093e8024f300925a01c039f4","0x39f401201cf780700e7d00480701801c03aaf01201c7d007158024fa009","0xca0093e8024f780925a01c039f40127b8049ed00e01cfa0093ce02427807","0x49f401201cf4807158024fa0093280241100732a024fa0090280240b007","0x48af324030f300715e024fa00915e024f380715e024fa00900e55003992","0x49e300e2c4049f4012698d280c3c801cd28093e8024039e500e698049f4","0x39950127d004995012058038070127d004807012788039980127d0048b1","0x49f4012660049e000e4b4049f40124b4049e100e2b0049f40122b004822","0x38073e8024e28092aa01c039f401201c060073304b45619500e05004998","0x398b0127d00480709801cc60093e8024039e900e634049f401207c0492d","0x49f401201cf2807312024fa009316630061e600e62c049f401262c049e7","0x38093c401cc38093e80245c8093c601c5c8093e8024c498801879003988","0xf080731a024fa00931a02411007044024fa0090440240b00700e024fa009","0x398725a63411007028024c38093e8024c38093c001c968093e802496809","0x380c00e0880b00c560050e280c3e803004807018024038073e802403807","0x481600e080049f40124b4049c500e07c049f40120500492d00e01cfa009","0xd8190187d00602001207c0381f0127d00481f012088039c50127d0049c5","0xfa009036024f580700e7d0048190127b4038073e80240380c00e08404ab1","0x49f401201cf40071f4024fa00900e7a4038230127d00481f0124b403807","0x48073ca01c088093e8024138fa018798038270127d00482701279c03827","0xb0073dc024fa0093de024f18073de024fa0090227c0061e400e7c0049f4","0x60093e8024060093c201c118093e80241180904401ce28093e8024e2809","0xf680700e7d00480701801cf700c046714e28093dc024fa0093dc024f0007","0x110073d6024fa00900e77c039ed0127d00481f0124b4038073e802410809","0xfa00c3d67b4e292d3ba01cf58093e8024f58093bc01cf68093e8024f6809","0x39e60127d0049e90124b4038073e80240380c00e79cf400c5647a4f500c","0xf180c3e8024f200912601cf20093e8024f280937a01cf28093e8024039b6","0xfa0093c2024bf0073c2024fa0093c4024da00700e7d0049e30126f0039e2","0x49e6012088039de0127d0048070b401cef8093e8024f00092fe01cf0009","0x481600e77c049f401277c0498000e778049f4012778048d500e798049f4","0x6d0db25aacc6e1dc3ba4b4fa00c3be778061e638a608039ea0127d0049ea","0x49f40127740492d00e774049f40127740482200e01cfa00900e0300393f","0x4945012088039dc0127d0049dc012784038dc0127d0048dc01279c03945","0x39f401201c060070920255a04828e030fa00c1b87a80607f00e514049f4","0x49f4012120049b300e130049f401201cf480709c024fa00928a02496807","0x494700e59caa80c3e8024aa00928a01caa0093e80242784c0187980384f","0x270072d2024fa0092d0024248072d0024fa0092ce0242400700e7d004955","0x270093e80242700904401ca38093e8024a380902c01cb98093e8024b4809","0xb99dc09c51ce28092e6024fa0092e6024f00073b8024fa0093b8024f0807","0x397e0127d0048073d201cbc8093e8024a280925a01c039f401201c06007","0x49f40125fcbf00c3cc01cbf8093e8024bf8093ce01cbf8093e802403897","0x49dc012784039800127d004979012088038d50127d0048490120580385a","0xfa00900e0300380756a024038fa00e60c049f40121680485e00e608049f4","0x49ea012058039860127d0048db0124b4038db0127d0048db01208803807","0x485e00e608049f4012368049e100e600049f40126180482200e354049f4","0x39930127d0049830bc030f20070bc024fa00900e794039830127d00493f","0x49f40126000482200e354049f40123540481600e668049f401264c049e3","0xc11801aa7140499a0127d00499a012780039820127d00498201278403980","0xd48093e8024039e900e350049f401279c0492d00e01cfa00900e0300399a","0xfa0090cc6a4061e600e198049f4012198049e700e198049f401201c26007","0xd88093c601cd88093e8024d61ae018790039ae0127d0048073ca01cd6009","0xf08071a8024fa0091a8024110073d0024fa0093d00240b00736e024fa009","0x600736e0306a1e838a024db8093e8024db8093c001c060093e802406009","0x39e900e6e0049f40120880492d00e01cfa00925a024aa80700e7d004807","0x61e600e70c049f401270c049e700e70c049f401201c26007372024fa009","0xe90093e8024e31d3018790039d30127d0048073ca01ce30093e8024e19b9","0xfa0093700241100702c024fa00902c0240b0073a2024fa0093a4024f1807","0xdc01638a024e88093e8024e88093c001c060093e8024060093c201cdc009","0x1001f018ad8110160187d00612d0120300480700e7d00480700e01ce880c","0xb0093e80240b00902c01c0c8093e80241100925a01c039f401201c06007","0xc80904401c1081b0187d00481402c030d9007028024fa0090280246c807","0x38073e80240380c00e3e804ab7046024fa00c042024d8007032024fa009","0xfa00904e024110073e0044061f401208c0489900e09c049f40120640492d","0x492d00e01cfa00900e030039ee012ae0f78093e8030f800935e01c13809","0x39ed0127d0049ed012088039eb0127d004811012714039ed0127d004827","0x49ea0127b4038073e80240380c00e7a004ab93d27a8061f40187ac0481f","0xfa0093da0249680700e7d0049ef01226c038073e8024f48093d601c039f4","0xfa0093ca024f38073ca024fa00900e7a0039e60127d0048073d201cf3809","0xf180c3c801cf18093e8024039e500e790049f4012794f300c3cc01cf2809","0x38070127d004807012788039e10127d0049e201278c039e20127d0049e4","0x49f401279c0482200e030049f40120300489d00e06c049f401206c04816","0x601b00e058049e10127d0049e1012780039c50127d0049c5012784039e7","0xfa0093da0249680700e7d0049e80127b4038073e80240380c00e784e29e7","0x49df012778039e00127d0049e0012088039df0127d0048073be01cf0009","0x480701801c6e1dc018ae8ee9de0187d0061df3c006c969dd00e77c049f4","0x48da0126b4038da0127d0048073b801c6d8093e8024ee80925a01c039f4","0x482200e778049f40127780481600e01cfa00927e024d500728a4fc061f4","0x380c0127d00480c012274038070127d004807012788038db0127d0048db","0x60071b6778111a400e7bc049f40127bc049a700e714049f4012714049e1","0x4abb2a8024fa00c09e024d180709e1302704909051c0b1f40127bca29c5","0xb40093e8024039e900e59c049f40121200492d00e01cfa00900e03003955","0x49732d0030f30072e6024fa0092d2024d98072d2024fa0092a8024d1007","0x484800e01cfa0092fc024a38072fe5f8061f40125e40494500e5e4049f4","0x39800127d0048d5012138038d50127d00485a0121240385a0127d00497f","0x49f40121380489d00e51c049f401251c0481600e124049f4012124049e2","0x49800127800384c0127d00484c012784039670127d0049670120880384e","0x48480124b4038073e80240380c00e6002616709c51c24816012600049f4","0x481600e124049f4012124049e200e60c049f4012554049e300e608049f4","0x39820127d0049820120880384e0127d00484e012274039470127d004947","0x2618209c51c2481601260c049f401260c049e000e130049f4012130049e1","0xc30093e80246e00925a01c039f40127bc0489b00e01cfa00900e03003983","0xc98093e8024c98093ce01cc98093e80240384c00e178049f401201cf4807","0x499a1a8030f20071a8024fa00900e7940399a0127d0049930bc030f3007","0x481600e01c049f401201c049e200e198049f40126a4049e300e6a4049f4","0x39860127d0049860120880380c0127d00480c012274039dc0127d0049dc","0xe298601877003816012198049f4012198049e000e714049f4012714049e1","0x38073e8024088092aa01c039f40127b80484f00e01cfa00900e03003866","0x39b10127d0048072a801cd70093e8024039e900e6b0049f401209c0492d","0x49f401201cf280736e024fa0093626b8061e600e6c4049f40126c4049e7","0x38093c401ce18093e8024dc8093c601cdc8093e8024db9b8018790039b8","0x11007018024fa0090180244e807036024fa0090360240b00700e024fa009","0xe18093e8024e18093c001ce28093e8024e28093c201cd60093e8024d6009","0xe30093e80240c80925a01c039f401201c06007386714d600c03601c0b009","0xfa0090360240b00700e024fa00900e024f10073a6024fa0091f4024f1807","0xe28093c201ce30093e8024e300904401c060093e80240600913a01c0d809","0x60073a6714e300c03601c0b0093a6024fa0093a6024f000738a024fa009","0x39e900e748049f40120800492d00e01cfa009028024aa80700e7d004807","0x61e600e738049f4012738049e700e738049f401201c260073a2024fa009","0x3a8093e8024e69cc018790039cc0127d0048073ca01ce68093e8024e71d1","0xfa00903e0240b00700e024fa00900e024f10073d8024fa0090ea024f1807","0xe28093c201ce90093e8024e900904401c060093e80240600913a01c0f809","0x38073d8714e900c03e01c0b0093d8024fa0093d8024f000738a024fa009","0x480701801c1001f018af0110160187d00612d0120300480700e7d004807","0xa0091b201c0b0093e80240b00902c01c0c8093e80241100925a01c039f4","0xc8093e80240c80904401c1081b0187d00481402c030d9007028024fa009","0x48190124b4038073e80240380c00e3e804abd046024fa00c042024d8007","0xd780704e024fa00904e024110073e0044061f401208c0489900e09c049f4","0x49f401209c0492d00e01cfa00900e030039ee012af8f78093e8030f8009","0x61eb01207c039ed0127d0049ed012088039eb0127d004811012714039ed","0xf580700e7d0049ea0127b4038073e80240380c00e7a004abf3d27a8061f4","0xf48073ce024fa0093da0249680700e7d0049ef01226c038073e8024f4809","0xf30073ca024fa0093ca024f38073ca024fa00900e7a0039e60127d004807","0x49f4012790f180c3c801cf18093e8024039e500e790049f4012794f300c","0x481b012058038070127d004807012788039e10127d0049e201278c039e2","0x49e100e79c049f401279c0482200e030049f40120300489d00e06c049f4","0x39e138a79c0601b00e058049e10127d0049e1012780039c50127d0049c5","0xef8073c0024fa0093da0249680700e7d0049e80127b4038073e80240380c","0x39df0127d0049df012778039e00127d0049e0012088039df0127d004807","0x9680700e7d00480701801c6e1dc018b00ee9de0187d0061df3c006c969dd","0x39de0127d0049de012058038da0127d0048073b801c6d8093e8024ee809","0x49f40120300489d00e01c049f401201c049e200e36c049f401236c04822","0x6d9de044680039ef0127d0049ef01269c039c50127d0049c50127840380c","0x260093e8030270091b401c2704909051ca293f02c7d0049ef1b471406007","0xfa00928a0249680700e7d00484c0124fc038073e80240380c00e13c04ac1","0xb380928e01cb41670187d004955012514039550127d0048073d201caa009","0x484e00e5cc049f40125a40484900e5a4049f40125a00484800e01cfa009","0x393f0127d00493f012058039470127d004947012788039790127d004973","0x49f4012124049e100e550049f40125500482200e120049f40121200489d","0xfa00900e030039790925502413f28e058049790127d00497901278003849","0x49470127880397f0127d00484f01278c0397e0127d0049450124b403807","0x482200e120049f40121200489d00e4fc049f40124fc0481600e51c049f4","0x497f0127d00497f012780038490127d0048490127840397e0127d00497e","0x9680700e7d0049ef01226c038073e80240380c00e5fc2497e0904fca3816","0xf3807300024fa00900e130038d50127d0048073d201c2d0093e80246e009","0xc18093e8024039e500e608049f40126006a80c3cc01cc00093e8024c0009","0x48070127880385e0127d00498601278c039860127d004982306030f2007","0x482200e030049f40120300489d00e770049f40127700481600e01c049f4","0x485e0127d00485e012780039c50127d0049c50127840385a0127d00485a","0xaa80700e7d0049ee01213c038073e80240380c00e178e285a01877003816","0xaa007334024fa00900e7a4039930127d0048270124b4038073e802408809","0xd48093e80246a19a018798038d40127d0048d401279c038d40127d004807","0xfa009358024f1807358024fa009352198061e400e198049f401201cf2807","0x600913a01c0d8093e80240d80902c01c038093e8024038093c401cd7009","0xf000738a024fa00938a024f0807326024fa00932602411007018024fa009","0x9680700e7d00480701801cd71c53260300d80702c024d70093e8024d7009","0x38093e8024038093c401cdb8093e80247d0093c601cd88093e80240c809","0xfa00936202411007018024fa0090180244e807036024fa0090360240b007","0xd80702c024db8093e8024db8093c001ce28093e8024e28093c201cd8809","0x48200124b4038073e80240a0092aa01c039f401201c0600736e714d880c","0x49c301279c039c30127d00480709801cdc8093e8024039e900e6e0049f4","0x61e400e74c049f401201cf280738c024fa0093866e4061e600e70c049f4","0x38093e8024038093c401ce88093e8024e90093c601ce90093e8024e31d3","0xfa00937002411007018024fa0090180244e80703e024fa00903e0240b007","0xf80702c024e88093e8024e88093c001ce28093e8024e28093c201cdc009","0x62c2044058061f40184b40480c01201c039f401201c038073a2714dc00c","0xfa00902c0240b007032024fa0090440249680700e7d00480701801c1001f","0x1100704206c061f40120500b00c36401c0a0093e80240a0091b201c0b009","0xfa00900e030038fa012b0c118093e80301080936001c0c8093e80240c809","0x1380904401cf80110187d004823012264038270127d0048190124b403807","0x38073e80240380c00e7b804ac43de024fa00c3e0024d780704e024fa009","0x49f40127b40482200e7ac049f4012044049c500e7b4049f401209c0492d","0x49ed00e01cfa00900e030039e8012b14f49ea0187d0061eb01207c039ed","0xf680925a01c039f40127bc0489b00e01cfa0093d2024f580700e7d0049ea","0xf28093ce01cf28093e8024039e800e798049f401201cf48073ce024fa009","0xf20073c6024fa00900e794039e40127d0049e53cc030f30073ca024fa009","0x49f401201c049e200e784049f4012788049e300e788049f4012790f180c","0x49e70120880380c0127d00480c0122740381b0127d00481b01205803807","0x3816012784049f4012784049e000e714049f4012714049e100e79c049f4","0xf680925a01c039f40127a0049ed00e01cfa00900e030039e138a79c0601b","0x49de00e780049f40127800482200e77c049f401201cef8073c0024fa009","0x60071b8770062c63ba778061f401877cf001b25a774039df0127d0049df","0x481600e368049f401201cee0071b6024fa0093ba0249680700e7d004807","0x38070127d004807012788038db0127d0048db012088039de0127d0049de","0x49f40127bc049a700e714049f4012714049e100e030049f40120300489d","0x6d00709c1242414728a4fc0b1f40127bc6d1c501801c6d9de04467c039ef","0x39f40121300493f00e01cfa00900e0300384f012b1c260093e803027009","0x61f40125540494500e554049f401201cf48072a8024fa00928a02496807","0x4969012124039690127d004968012120038073e8024b380928e01cb4167","0x481600e51c049f401251c049e200e5e4049f40125cc0484e00e5cc049f4","0x39540127d004954012088038480127d0048480122740393f0127d00493f","0x249540904fca38160125e4049f40125e4049e000e124049f4012124049e1","0x49f401213c049e300e5f8049f40125140492d00e01cfa00900e03003979","0x48480122740393f0127d00493f012058039470127d0049470127880397f","0x49e000e124049f4012124049e100e5f8049f40125f80482200e120049f4","0x489b00e01cfa00900e0300397f0925f82413f28e0580497f0127d00497f","0x384c00e354049f401201cf48070b4024fa0091b80249680700e7d0049ef","0x39820127d0049801aa030f3007300024fa009300024f3807300024fa009","0x49f4012618049e300e618049f4012608c180c3c801cc18093e8024039e5","0x480c012274039dc0127d0049dc012058038070127d0048070127880385e","0x49e000e714049f4012714049e100e168049f40121680482200e030049f4","0x484f00e01cfa00900e0300385e38a168061dc00e0580485e0127d00485e","0x39e900e64c049f401209c0492d00e01cfa009022024aa80700e7d0049ee","0x61e600e350049f4012350049e700e350049f401201caa007334024fa009","0xd60093e8024d4866018790038660127d0048073ca01cd48093e80246a19a","0xfa0090360240b00700e024fa00900e024f100735c024fa009358024f1807","0xe28093c201cc98093e8024c980904401c060093e80240600913a01c0d809","0x600735c714c980c03601c0b00935c024fa00935c024f000738a024fa009","0xf100736e024fa0091f4024f1807362024fa0090320249680700e7d004807","0x60093e80240600913a01c0d8093e80240d80902c01c038093e802403809","0xfa00936e024f000738a024fa00938a024f0807362024fa00936202411007","0xfa009028024aa80700e7d00480701801cdb9c53620300d80702c024db809","0x49f401201c26007372024fa00900e7a4039b80127d0048200124b403807","0x48073ca01ce30093e8024e19b9018798039c30127d0049c301279c039c3","0xf10073a2024fa0093a4024f18073a4024fa00938c74c061e400e74c049f4","0x60093e80240600913a01c0f8093e80240f80902c01c038093e802403809","0xfa0093a2024f000738a024fa00938a024f0807370024fa00937002411007","0x612d0120300480700e7d00480700e01ce89c53700300f80702c024e8809","0xc8093e80241100925a01c039f401201c0600704007c062c8044058061f4","0x481402c030d9007028024fa0090280246c80702c024fa00902c0240b007","0x4ac9046024fa00c042024d8007032024fa0090320241100704206c061f4","0x61f401208c0489900e09c049f40120640492d00e01cfa00900e030038fa","0x39ee012b28f78093e8030f800935e01c138093e80241380904401cf8011","0x39eb0127d004811012714039ed0127d0048270124b4038073e80240380c","0x380c00e7a004acb3d27a8061f40187ac0481f00e7b4049f40127b404822","0x49ef01226c038073e8024f48093d601c039f40127a8049ed00e01cfa009","0xfa00900e7a0039e60127d0048073d201cf38093e8024f680925a01c039f4","0x39e500e790049f4012794f300c3cc01cf28093e8024f28093ce01cf2809","0x39e10127d0049e201278c039e20127d0049e43c6030f20073c6024fa009","0x49f40120300489d00e06c049f401206c0481600e01c049f401201c049e2","0x49e1012780039c50127d0049c5012784039e70127d0049e70120880380c","0x49e80127b4038073e80240380c00e784e29e701806c03816012784049f4","0x49e0012088039df0127d0048073be01cf00093e8024f680925a01c039f4","0xee9de0187d0061df3c006c969dd00e77c049f401277c049de00e780049f4","0x48073b801c6d8093e8024ee80925a01c039f401201c060071b8770062cc","0x49e200e36c049f401236c0482200e778049f40127780481600e368049f4","0x39c50127d0049c50127840380c0127d00480c012274038070127d004807","0xa293f02c7d0049ef1b4714060071b67781119e00e7bc049f40127bc049a7","0x38073e80240380c00e13c04acd098024fa00c09c0246d00709c12424147","0x39550127d0048073d201caa0093e8024a280925a01c039f40121300493f","0x49f40125a00484800e01cfa0092ce024a38072d059c061f401255404945","0x4947012788039790127d004973012138039730127d00496901212403969","0x482200e120049f40121200489d00e4fc049f40124fc0481600e51c049f4","0x49790127d004979012780038490127d004849012784039540127d004954","0x397e0127d0049450124b4038073e80240380c00e5e4249540904fca3816","0x49f40124fc0481600e51c049f401251c049e200e5fc049f401213c049e3","0x48490127840397e0127d00497e012088038480127d0048480122740393f","0x380c00e5fc2497e0904fca38160125fc049f40125fc049e000e124049f4","0x48073d201c2d0093e80246e00925a01c039f40127bc0489b00e01cfa009","0x6a80c3cc01cc00093e8024c00093ce01cc00093e80240384c00e354049f4","0x39860127d004982306030f2007306024fa00900e794039820127d004980","0x49f40127700481600e01c049f401201c049e200e178049f4012618049e3","0x49c50127840385a0127d00485a0120880380c0127d00480c012274039dc","0x380c00e178e285a01877003816012178049f4012178049e000e714049f4","0x48270124b4038073e8024088092aa01c039f40127b80484f00e01cfa009","0x48d401279c038d40127d0048072a801ccd0093e8024039e900e64c049f4","0x61e400e198049f401201cf2807352024fa0091a8668061e600e350049f4","0x38093e8024038093c401cd70093e8024d60093c601cd60093e8024d4866","0xfa00932602411007018024fa0090180244e807036024fa0090360240b007","0xd80702c024d70093e8024d70093c001ce28093e8024e28093c201cc9809","0x7d0093c601cd88093e80240c80925a01c039f401201c0600735c714c980c","0x4e807036024fa0090360240b00700e024fa00900e024f100736e024fa009","0xe28093e8024e28093c201cd88093e8024d880904401c060093e802406009","0x39f401201c0600736e714d880c03601c0b00936e024fa00936e024f0007","0xdc8093e8024039e900e6e0049f40120800492d00e01cfa009028024aa807","0xfa0093866e4061e600e70c049f401270c049e700e70c049f401201c26007","0xe90093c601ce90093e8024e31d3018790039d30127d0048073ca01ce3009","0x4e80703e024fa00903e0240b00700e024fa00900e024f10073a2024fa009","0xe28093e8024e28093c201cdc0093e8024dc00904401c060093e802406009","0x39f401201c038073a2714dc00c03e01c0b0093a2024fa0093a2024f0007","0x9680700e7d00480701801c0f822018b380b0140187d00600c01203004807","0xa0093e80240a00902c01c0c8093e8024e280938a01c100093e80240b009","0x600704602567821036030fa00c0320240f807040024fa00904002411007","0xc80704e024fa009042024100071f4024fa0090400249680700e7d004807","0x11007036024fa0090360241080700e7d00480702801c088093e802413809","0xf800c3e80300d80903e01c088093e8024088093ce01c7d0093e80247d009","0xf780904001cf68093e80247d00925a01c039f401201c060073dc025681ef","0x110073d2024fa0093d40240d8073d4024fa0093d60240c8073d6024fa009","0xf30093e8024f480904601cf38093e8024f800904201cf40093e8024f6809","0x138073ca024fa0091f40249680700e7d00480701801c03ad101201c7d007","0x39e80127d0049e5012088039e30127d0049e4012044039e40127d004807","0x49f4018798049f000e798049f401278c0482300e79c049f40127b804821","0xf000904401cf00093e8024f400925a01c039f401201c060073c2025691e2","0xfa00900e030039dd012b4cef1df0187d0061e2028030f70073c0024fa009","0x49dc012088039df0127d0049df012058039dc0127d0049e00124b403807","0x38073e80240380c00e36804ad41b6370061f401879c0481f00e770049f4","0x49d300e01cfa0091b6024f580700e7d0048dc0127b4038073e8024039ef","0x39e900e4fc049f40127700492d00e01cfa0093bc024f500700e7d004811","0x61e600e51c049f401251c049e700e51c049f401201cf400728a024fa009","0x270093e802424049018790038490127d0048073ca01c240093e8024a3945","0xfa0093be0240b00700e024fa00900e024f1007098024fa00909c024f1807","0x260093c001c968093e8024968093c201c9f8093e80249f80904401cef809","0x48da0127b4038073e80240380c00e1309693f3be01c0a009098024fa009","0x484f012088039540127d0048073be01c278093e8024ee00925a01c039f4","0xb39550187d00615409e77c969dd00e550049f4012550049de00e13c049f4","0x480733a01cb98093e8024b380925a01c039f401201c060072d25a0062d5","0xcc8070b45fc061f40125f80499b00e5f8049f40125e4048a800e5e4049f4","0x39800127d0048d5012064038d50127d00485a012654038073e8024bf809","0xef00930601cc19820187d00481130001c968ac00e600049f4012600049e7","0x2f00c3e8024c31833044b456007306024fa009306024f380730c024fa009","0x499200e350cd00c3e8024c9955018650039930127d00499301279c03993","0x38073e80243300934c01cd60660187d0049a90122bc039a90127d0048d4","0x49f40126c40497f00e6c4049f40126b80497e00e6b8049f40126b0049a5","0xfa0093700246a8072e6024fa0092e602411007370024fa00900e168039b7","0xb99c530401ccd0093e8024cd00902c01c2f0093e80242f0093c401cdc009","0x1100700e7d00480701801ce89d23a64b56b1c63866e4969f40186dcdc12d","0xe30093e8024e30093ce01ce70093e8024dc80925a01cdc8093e8024dc809","0xfa00c38c0245880739c024fa00939c02411007386024fa009386024f0807","0x480704e01ce60093e8024e700925a01c039f401201c0600739a0256b807","0x498d00e728049f40127300482200e7b0049f40121d40499800e1d4049f4","0x49cd012630038073e80240380c00e01d6c00900e3e8038780127d0049ec","0x49c701262c039c70127d00480704e01cfa8093e8024e700925a01c039f4","0x39e900e1e0049f40121f00498d00e728049f40127d40482200e1f0049f4","0xc40071b2024fa0091b2024c68071b2024fa0090f0024c48070fe024fa009","0x39f40122080484f00e01cfa00900e03003883012b64410093e80306c809","0x49f40122140482200e360049f401201c5c80710a024fa00939402496807","0x38073e80240380c00e01d6d00900e3e8038880127d0048d801279c039c4","0x38890127d00480730e01ce80093e8024e500925a01c039f401220c0484f","0x38073e8024039ef00e220049f4012224049e700e710049f401274004822","0x48d701251c039c11ae030fa00939e024a280739e024fa0091101fc061e6","0xdf00909c01cdf0093e8024e000909201ce00093e8024e080909001c039f4","0x11007334024fa0093340240b0070bc024fa0090bc024f100711e024fa009","0x478093e8024478093c001ce18093e8024e18093c201ce20093e8024e2009","0x482200e01cfa00900e7bc038073e80240380c00e23ce19c43341780a009","0xf20071ac024fa00900e794039ba0127d0049d30124b4039d30127d0049d3","0x49f4012178049e200e6f4049f40126d8049e300e6d8049f40127446b00c","0x49d2012784039ba0127d0049ba0120880399a0127d00499a0120580385e","0x480701801cde9d23746682f0140126f4049f40126f4049e000e748049f4","0x39f4012778049ea00e01cfa009022024e980700e7d0048073de01c039f4","0xda0093e80240384c00e6f0049f401201cf4807126024fa0092d202496807","0xfa00900e794039b30127d0049b4378030f3007368024fa009368024f3807","0x49e200e6c0049f40126c8049e300e6c8049f40126cc4b80c3c801c4b809","0x38930127d004893012088039680127d004968012058038070127d004807","0xd812d1265a0038140126c0049f40126c0049e000e4b4049f40124b4049e1","0x49d300e01cfa0093ce024f680700e7d0048073de01c039f401201c06007","0x1100735e024fa0093ba0240b007132024fa0093c00249680700e7d004811","0x48073de01c039f401201c0600700eb6c048071f401c4d8093e80244c809","0xfa009022024e980700e7d0049e70127b4038073e8024f080909e01c039f4","0x489d012088039af0127d0048140120580389d0127d0049e80124b403807","0x49aa01279c039aa0127d0048073d801cd68093e8024039e900e26c049f4","0x61e400e690049f401201cf280734e024fa0093546b4061e600e6a8049f4","0x38093e8024038093c401cd10093e8024d18093c601cd18093e8024d39a4","0xfa00925a024f0807136024fa0091360241100735e024fa00935e0240b007","0xfa00900e030039a225a26cd7807028024d10093e8024d10093c001c96809","0x49f401201cf4807340024fa0090400249680700e7d0048230127b403807","0x499e33e030f300733c024fa00933c024f380733c024fa00900e5500399f","0x49e300e66c049f40126745400c3c801c540093e8024039e500e674049f4","0x38140127d004814012058038070127d004807012788039990127d00499b","0x49f4012664049e000e4b4049f40124b4049e100e680049f401268004822","0x38073e8024e28092aa01c039f401201c060073324b4d001400e05004999","0x39940127d00480709801c560093e8024039e900e654049f401207c0492d","0x49f401201cf2807324024fa0093282b0061e600e650049f4012650049e7","0x38093c401cd28093e8024d30093c601cd30093e8024c90af018790038af","0xf080732a024fa00932a02411007044024fa0090440240b00700e024fa009","0x39a525a65411007028024d28093e8024d28093c001c968093e802496809","0x380c00e07c1100c5b80580a00c3e803006009018024038073e802403807","0x481600e064049f4012714049c500e080049f40120580492d00e01cfa009","0x1081b0187d00601901207c038200127d004820012088038140127d004814","0x4821012080038fa0127d0048200124b4038073e80240380c00e08c04add","0x49e700e3e8049f40123e80482200e06c049f401206c0482100e09c049f4","0xfa00900e030039ef012b78f80110187d00601b01207c038270127d004827","0x39f401209c049d300e01cfa0093e0024f580700e7d0048110127b403807","0xf58093e8024039e800e7b4049f401201cf48073dc024fa0091f402496807","0xfa00900e794039ea0127d0049eb3da030f30073d6024fa0093d6024f3807","0x49e200e79c049f40127a0049e300e7a0049f40127a8f480c3c801cf4809","0x39ee0127d0049ee012088038140127d004814012058038070127d004807","0xf392d3dc0500381401279c049f401279c049e000e4b4049f40124b4049e1","0x39e60127d0048fa0124b4038073e8024f78093da01c039f401201c06007","0xf28093e8024f28093bc01cf30093e8024f300904401cf28093e8024039df","0x38073e80240380c00e784f100c5be78cf200c3e8030f29e60284b4ee807","0xef0093e80240398500e77c049f401209c0481900e780049f401278c0492d","0x49dc0122fc038dc3b8030fa0093ba0245e8073ba024fa0093bc024c2007","0x6d0093ce01c6d0093e80246d80903201c6d8093e80246e00930201c039f4","0x49f4012514049e700e5149f80c3e8024ef8da00e4b4560071b4024fa009","0x48c200e124049f40121200497d00e120a380c3e8024a29e401865003945","0x384f0127d00484c0125ec038073e8024270092f801c2604e0187d004849","0xb38093e80240385a00e554049f40125500497f00e550049f401213c0497e","0xfa00927e024f10072ce024fa0092ce0246a8073c0024fa0093c002411007","0xb496825a7d0061552ce4b4f01c530401ca38093e8024a380902c01c9f809","0x968072d0024fa0092d00241100700e7d00480701801cbf97e2f24b570173","0x39730127d00497301279c038d50127d0048073d201c2d0093e8024b4009","0x498201251c03983304030fa009300024a2807300024fa0092e6354061e6","0x2f00909c01c2f0093e8024c300909201cc30093e8024c180909001c039f4","0x1100728e024fa00928e0240b00727e024fa00927e024f1007326024fa009","0xc98093e8024c98093c001cb48093e8024b48093c201c2d0093e80242d009","0x39790127d004979012088038073e80240380c00e64cb485a28e4fc0a009","0x49f40125fc6a00c3c801c6a0093e8024039e500e668049f40125e40492d","0x49470120580393f0127d00493f012788038660127d0049a901278c039a9","0x49e000e5f8049f40125f8049e100e668049f40126680482200e51c049f4","0x138093a601c039f401201c060070cc5f8cd14727e050048660127d004866","0x480709801cd70093e8024039e900e6b0049f40127840492d00e01cfa009","0xf280736e024fa0093626b8061e600e6c4049f40126c4049e700e6c4049f4","0xe18093e8024dc8093c601cdc8093e8024db9b8018790039b80127d004807","0xfa009358024110073c4024fa0093c40240b00700e024fa00900e024f1007","0xf1007028024e18093e8024e18093c001c968093e8024968093c201cd6009","0xfa0090400249680700e7d0048230127b4038073e80240380c00e70c969ac","0xfa0093a4024f38073a4024fa00900e550039d30127d0048073d201ce3009","0xe700c3c801ce70093e8024039e500e744049f4012748e980c3cc01ce9009","0x38070127d004807012788039cc0127d0049cd01278c039cd0127d0049d1","0x49f40124b4049e100e718049f40127180482200e050049f401205004816","0x39f401201c060073984b4e301400e050049cc0127d0049cc0127800392d","0xf60093e8024039e900e1d4049f401207c0492d00e01cfa00938a024aa807","0xfa0093947b0061e600e728049f4012728049e700e728049f401201c26007","0xe38093c601ce38093e80243c1f5018790039f50127d0048073ca01c3c009","0x11007044024fa0090440240b00700e024fa00900e024f10070f8024fa009","0x3e0093e80243e0093c001c968093e8024968093c201c3a8093e80243a809","0xa00c3e803006009018024038073e80240380700e1f09687504401c0a009","0x49c500e080049f40120580492d00e01cfa00900e0300381f04403170816","0x482200e050049f40120500481600e01cfa00900e050038190127d0049c5","0xfa00900e03003823012b881081b0187d00601901207c038200127d004820","0x4827012064038270127d004821012080038fa0127d0048200124b403807","0x482100e7bc049f40123e80482200e7c0049f40120440481b00e044049f4","0x380c00e01d7180900e3e8039ed0127d0049f001208c039ee0127d00481b","0xf500902201cf50093e80240382700e7ac049f40120800492d00e01cfa009","0x118073dc024fa009046024108073de024fa0093d6024110073d2024fa009","0xfa00900e030039e7012b90f40093e8030f68093e001cf68093e8024f4809","0x49f40127980482200e798049f40127bc0492d00e01cfa00900e7bc03807","0x9680700e7d00480701801cf18095ca790f280c3e8030f40140187b8039e6","0xf10093e8024f100904401cf28093e8024f280902c01cf10093e8024f3009","0xf08093da01c039f401201c060073be025731e03c2030fa00c3dc0240f807","0x49e20124b4038073e8024f20093d401c039f4012780049eb00e01cfa009","0x49dc01279c039dc0127d0048073d001cee8093e8024039e900e778049f4","0x61e400e36c049f401201cf28071b8024fa0093b8774061e600e770049f4","0x38093e8024038093c401c9f8093e80246d0093c601c6d0093e80246e0db","0xfa00925a024f08073bc024fa0093bc024110073ca024fa0093ca0240b007","0xfa00900e0300393f25a778f28070280249f8093e80249f8093c001c96809","0x49f401201cef80728a024fa0093c40249680700e7d0049df0127b403807","0xa29e525a774039470127d004947012778039450127d00494501208803947","0xfa0090920249680700e7d00480701801c2604e018b9c248480187d006147","0xfa0092aa024540072aa024fa00900e674039540127d0048072f401c27809","0xb480932a01c039f40125a00499900e5a4b400c3e8024b380933601cb3809","0xf38072f2024fa0092f2024f38072f2024fa0092e60240c8072e6024fa009","0x49e401260c0397f2fc030fa0092a85e40392d15801caa0093e8024aa009","0xc00d50187d00485a2fe5f8968ac00e5fc049f40125fc049e700e168049f4","0xc180932401cc19820187d004980090030ca007300024fa009300024f3807","0xd280700e7d00485e012698039930bc030fa00930c0245780730c024fa009","0xd48093e80246a0092fe01c6a0093e8024cd0092fc01ccd0093e8024c9809","0x49f4012198048d500e13c049f401213c0482200e198049f401201c2d007","0x9684f38a608039820127d004982012058038d50127d0048d501278803866","0x482200e01cfa00900e030039b93706dc96ae83626b8d612d3e8030d4866","0x49e700e01cfa00900e050039c30127d0049ac0124b4039ac0127d0049ac","0x39c30127d0049c3012088039ae0127d0049ae012784039b10127d0049b1","0x49f401270c0492d00e01cfa00900e030039c6012ba4039f40186c4048b1","0xfa0093a6024110073a2024fa0093a4024cc0073a4024fa00900e09c039d3","0x39f401201c0600700eba8048071f401ce68093e8024e880931a01ce7009","0x3a8093e80240382700e730049f401270c0492d00e01cfa00938c024c6007","0xfa0093d8024c680739c024fa009398024110073d8024fa0090ea024c5807","0x4878012634038780127d0049cd012624039ca0127d0048073d201ce6809","0x2780700e7d00480701801ce38095d67d4049f40181e00498800e1e0049f4","0x110070fe024fa00900e2e40387c0127d0049ce0124b4038073e8024fa809","0x600700ebb0048071f401c410093e80243f8093ce01c6c8093e80243e009","0x398700e20c049f40127380492d00e01cfa00938e0242780700e7d004807","0xf7807104024fa00910a024f38071b2024fa0091060241100710a024fa009","0x441c40187d0048d8012514038d80127d004882394030f300700e7d004807","0x49f40127400484900e740049f40122200484800e01cfa009388024a3807","0x4982012058038d50127d0048d5012788039cf0127d00488901213803889","0x49e000e6b8049f40126b8049e100e364049f40123640482200e608049f4","0xdb80904401c039f401201c0600739e6b86c9821aa050049cf0127d0049cf","0x61e400e704049f401201cf28071ae024fa00936e0249680736e024fa009","0x6a8093e80246a8093c401cdf0093e8024e00093c601ce00093e8024dc9c1","0xfa009370024f08071ae024fa0091ae02411007304024fa0093040240b007","0xfa00900e030039be37035cc10d5028024df0093e8024df0093c001cdc009","0x49f401201cf480711e024fa0090980249680700e7d0049e40127a803807","0x48d6374030f30071ac024fa0091ac024f38071ac024fa00900e130039ba","0x49e300e24c049f40126d8de80c3c801cde8093e8024039e500e6d8049f4","0x384e0127d00484e012058038070127d004807012788039bc0127d004893","0x49f40126f0049e000e4b4049f40124b4049e100e23c049f401223c04822","0x38073e8024f70093da01c039f401201c060073784b44784e00e050049bc","0x49f40126d00482200e6cc049f401278c0481600e6d0049f40127980492d","0x484f00e01cfa00900e7bc038073e80240380c00e01d7680900e3e803897","0x481600e6c8049f40127bc0492d00e01cfa0093dc024f680700e7d0049e7","0xaa007360024fa00900e7a4038970127d0049b2012088039b30127d004814","0xd78093e80244c9b0018798038990127d00489901279c038990127d004807","0xfa00913a024f180713a024fa00935e26c061e400e26c049f401201cf2807","0x4b80904401cd98093e8024d980902c01c038093e8024038093c401cd6809","0xa00935a024fa00935a024f000725a024fa00925a024f080712e024fa009","0xf80925a01c039f40127140495500e01cfa00900e030039ad25a25cd9807","0xd20093ce01cd20093e80240384c00e69c049f401201cf4807354024fa009","0xf2007344024fa00900e794039a30127d0049a434e030f3007348024fa009","0x49f401201c049e200e67c049f4012680049e300e680049f401268cd100c","0x492d012784039aa0127d0049aa012088038220127d00482201205803807","0x480700e01ccf92d3540880381401267c049f401267c049e000e4b4049f4","0x39f401201c0600703e088062ee02c050061f40180300480c01201c039f4","0x39f401201c0a007032024fa00938a024e2807040024fa00902c02496807","0xfa00c0320240f807040024fa00904002411007028024fa0090280240b007","0x100071f4024fa0090400249680700e7d00480701801c118095de0840d80c","0xf80093e80240880903601c088093e80241380903201c138093e802410809","0xfa0093e0024118073dc024fa009036024108073de024fa0091f402411007","0xf58093e80241000925a01c039f401201c0600700ebc0048071f401cf6809","0x49f40127ac0482200e7a4049f40127a80481100e7a8049f401201c13807","0x61ed0127c0039ed0127d0049e901208c039ee0127d004823012084039ef","0xf780925a01c039f401201cf780700e7d00480701801cf38095e27a0049f4","0xf21e50187d0061e8028030f70073cc024fa0093cc024110073cc024fa009","0x49e5012058039e20127d0049e60124b4038073e80240380c00e78c04af2","0x4af33c0784061f40187b80481f00e788049f40127880482200e794049f4","0x38073e8024f00093d601c039f4012784049ed00e01cfa00900e030039df","0x39dd0127d0048073d201cef0093e8024f100925a01c039f4012790049ea","0x49f4012770ee80c3cc01cee0093e8024ee0093ce01cee0093e8024039e8","0x48da01278c038da0127d0048dc1b6030f20071b6024fa00900e794038dc","0x482200e794049f40127940481600e01c049f401201c049e200e4fc049f4","0x493f0127d00493f0127800392d0127d00492d012784039de0127d0049de","0x492d00e01cfa0093be024f680700e7d00480701801c9f92d3bc79403814","0xef00728a024fa00928a0241100728e024fa00900e77c039450127d0049e2","0x384c09c0317a049090030fa00c28e514f292d3ba01ca38093e8024a3809","0xce8072a8024fa00900e5e00384f0127d0048490124b4038073e80240380c","0xb49680187d00496701266c039670127d0049550122a0039550127d004807","0x49f40125cc0481900e5cc049f40125a40499500e01cfa0092d0024cc807","0xbc80725a2b0039540127d00495401279c039790127d00497901279c03979","0xbf8093e8024bf8093ce01c2d0093e8024f200930601cbf97e0187d004954","0x619400e600049f4012600049e700e6006a80c3e80242d17f2fc4b456007","0x61f4012618048af00e618049f401260c0499200e60cc100c3e8024c0048","0x499a0125f80399a0127d004993012694038073e80242f00934c01cc985e","0x2780904401c330093e80240385a00e6a4049f40123500497f00e350049f4","0xb0071aa024fa0091aa024f10070cc024fa0090cc0246a80709e024fa009","0xdb92d5ea6c4d71ac25a7d0061a90cc4b4279c530401cc10093e8024c1009","0xfa00935802496807358024fa0093580241100700e7d00480701801cdc9b8","0xfa00935c024f0807362024fa009362024f380700e7d00480702801ce1809","0x600738c0257b0073e8030d880916201ce18093e8024e180904401cd7009","0x499800e748049f401201c138073a6024fa0093860249680700e7d004807","0x39cd0127d0049d1012634039ce0127d0049d3012088039d10127d0049d2","0xe180925a01c039f40127180498c00e01cfa00900e030038075ee024038fa","0x482200e7b0049f40121d40498b00e1d4049f401201c13807398024fa009","0xc4807394024fa00900e7a4039cd0127d0049ec012634039ce0127d0049cc","0xfa8093e80303c00931001c3c0093e80243c00931a01c3c0093e8024e6809","0xfa00939c0249680700e7d0049f501213c038073e80240380c00e71c04af8","0x487f01279c038d90127d00487c0120880387f0127d00480717201c3e009","0x39f401271c0484f00e01cfa00900e030038075f2024038fa00e208049f4","0x49f401220c0482200e214049f401201cc3807106024fa00939c02496807","0xfa009104728061e600e01cfa00900e7bc038820127d00488501279c038d9","0x4400909001c039f40127100494700e220e200c3e80246c00928a01c6c009","0xf100739e024fa00911202427007112024fa0093a0024248073a0024fa009","0x6c8093e80246c80904401cc10093e8024c100902c01c6a8093e80246a809","0xd70d93043540a00939e024fa00939e024f000735c024fa00935c024f0807","0x49f40126dc0492d00e6dc049f40126dc0482200e01cfa00900e030039cf","0x49c001278c039c00127d0049b9382030f2007382024fa00900e794038d7","0x482200e608049f40126080481600e354049f4012354049e200e6f8049f4","0x49be0127d0049be012780039b80127d0049b8012784038d70127d0048d7","0x492d00e01cfa0093c8024f500700e7d00480701801cdf1b81ae6086a814","0x49e700e358049f401201c26007374024fa00900e7a40388f0127d00484c","0x39bd0127d0048073ca01cdb0093e80246b1ba018798038d60127d0048d6","0xfa00900e024f1007378024fa009126024f1807126024fa00936c6f4061e4","0x968093c201c478093e80244780904401c270093e80242700902c01c03809","0x380c00e6f09688f09c01c0a009378024fa009378024f000725a024fa009","0xf180902c01cda0093e8024f300925a01c039f40127b8049ed00e01cfa009","0x480701801c03afa01201c7d00712e024fa00936802411007366024fa009","0x39f40127b8049ed00e01cfa0093ce0242780700e7d0048073de01c039f4","0xfa00936402411007366024fa0090280240b007364024fa0093de02496807","0xfa009132024f3807132024fa00900e550039b00127d0048073d201c4b809","0x4d80c3c801c4d8093e8024039e500e6bc049f4012264d800c3cc01c4c809","0x38070127d004807012788039ad0127d00489d01278c0389d0127d0049af","0x49f40124b4049e100e25c049f401225c0482200e6cc049f40126cc04816","0x39f401201c0600735a4b44b9b300e050049ad0127d0049ad0127800392d","0xd38093e8024039e900e6a8049f401207c0492d00e01cfa00938a024aa807","0xfa00934869c061e600e690049f4012690049e700e690049f401201c26007","0xd00093c601cd00093e8024d19a2018790039a20127d0048073ca01cd1809","0x11007044024fa0090440240b00700e024fa00900e024f100733e024fa009","0xcf8093e8024cf8093c001c968093e8024968093c201cd50093e8024d5009","0xa00c3e803006009018024038073e80240380700e67c969aa04401c0a009","0x49c500e080049f40120580492d00e01cfa00900e0300381f0440317d816","0x482200e050049f40120500481600e01cfa00900e050038190127d0049c5","0xfa00900e03003823012bf01081b0187d00601901207c038200127d004820","0x4827012064038270127d004821012080038fa0127d0048200124b403807","0x482100e7bc049f40123e80482200e7c0049f40120440481b00e044049f4","0x380c00e01d7e80900e3e8039ed0127d0049f001208c039ee0127d00481b","0xf500902201cf50093e80240382700e7ac049f40120800492d00e01cfa009","0x118073dc024fa009046024108073de024fa0093d6024110073d2024fa009","0xfa00900e030039e7012bf8f40093e8030f68093e001cf68093e8024f4809","0x49f40127980482200e798049f40127bc0492d00e01cfa00900e7bc03807","0x9680700e7d00480701801cf18095fe790f280c3e8030f40140187b8039e6","0xf10093e8024f100904401cf28093e8024f280902c01cf10093e8024f3009","0xf08093da01c039f401201c060073be025801e03c2030fa00c3dc0240f807","0x49e20124b4038073e8024f20093d401c039f4012780049eb00e01cfa009","0x49dc01279c039dc0127d0048073d001cee8093e8024039e900e778049f4","0x61e400e36c049f401201cf28071b8024fa0093b8774061e600e770049f4","0x38093e8024038093c401c9f8093e80246d0093c601c6d0093e80246e0db","0xfa00925a024f08073bc024fa0093bc024110073ca024fa0093ca0240b007","0xfa00900e0300393f25a778f28070280249f8093e80249f8093c001c96809","0x49f401201cef80728a024fa0093c40249680700e7d0049df0127b403807","0xa29e525a774039470127d004947012778039450127d00494501208803947","0xfa0090920249680700e7d00480701801c2604e018c04248480187d006147","0x2780c35c01c240093e80242400902c01c278093e80242780904401c27809","0xaa00904401c039f401201c060072e65a4b412d60459caa95425a7d00612d","0xdb8072ce024fa0092ce024d88072f2024fa0092a8024968072a8024fa009","0xbf80938601cc11801aa168bf8143e8024bf00937201cbf0093e8024b3809","0x498201274c038073e8024c00093d401c039f4012168049c600e01cfa009","0x6480730c024fa0091aa60c0617600e60cf200c3e8024f20092ee01c039f4","0xb007334024fa00900e770039930127d0048072f401c2f0093e8024c3009","0x38093e8024038093c401cbc8093e8024bc80904401c240093e802424009","0xfa0093c80246e007326024fa009326024f38072aa024fa0092aa024f0807","0x485e3c864ccd15500e5e42401f2e401c2f0093e80242f0092e801cf2009","0x480701801cdb8096066c4049f40186b8048da00e6b8d60663523500a1f4","0xfa00900e7a4039b80127d0049a90124b4038073e8024d880927e01c039f4","0xe300909001c039f401270c0494700e718e180c3e8024dc80928a01cdc809","0xf10073a2024fa0093a4024270073a4024fa0093a6024248073a6024fa009","0xdc0093e8024dc00904401c6a0093e80246a00902c01c330093e802433009","0xd61b81a81980a0093a2024fa0093a2024f0007358024fa009358024f0807","0x61f40126dc049ce00e738049f40126a40492d00e01cfa00900e030039d1","0x48d4012058038750127d004866012788038073e8024e680939a01ce61cd","0x485e00e1e0049f40126b0049e100e728049f40127380482200e7b0049f4","0x49e40127a8038073e80240380c00e01d8200900e3e8039f50127d0049cc","0x38093c401ce38093e8024b400925a01cb40093e8024b400904401c039f4","0xf0807394024fa00938e024110073d8024fa0090900240b0070ea024fa009","0x387c0127d0048073ca01cfa8093e8024b98090bc01c3c0093e8024b4809","0xfa0090ea024f10071b2024fa0090fe024f18070fe024fa0093ea1f0061e4","0x3c0093c201ce50093e8024e500904401cf60093e8024f600902c01c3a809","0x380c00e3643c1ca3d81d40a0091b2024fa0091b2024f00070f0024fa009","0x48073d201c410093e80242600925a01c039f4012790049ea00e01cfa009","0x4180c3cc01c428093e8024428093ce01c428093e80240384c00e20c049f4","0x38880127d0048d8388030f2007388024fa00900e794038d80127d004885","0x49f40121380481600e01c049f401201c049e200e740049f4012220049e3","0x49d00127800392d0127d00492d012784038820127d0048820120880384e","0xfa0093dc024f680700e7d00480701801ce812d10413803814012740049f4","0x4889012088039cf0127d0049e3012058038890127d0049e60124b403807","0x38073e8024039ef00e01cfa00900e0300380760a024038fa00e35c049f4","0x39c10127d0049ef0124b4038073e8024f70093da01c039f401279c0484f","0xe00093e8024039e900e35c049f40127040482200e73c049f401205004816","0xfa00937c700061e600e6f8049f40126f8049e700e6f8049f401201caa007","0x6b0093c601c6b0093e8024479ba018790039ba0127d0048073ca01c47809","0x1100739e024fa00939e0240b00700e024fa00900e024f100736c024fa009","0xdb0093e8024db0093c001c968093e8024968093c201c6b8093e80246b809","0x9680700e7d0049c5012554038073e80240380c00e6d8968d739e01c0a009","0xf3807378024fa00900e130038930127d0048073d201cde8093e80240f809","0xd98093e8024039e500e6d0049f40126f04980c3cc01cde0093e8024de009","0x4807012788039b20127d00489701278c038970127d0049b4366030f2007","0x49e100e6f4049f40126f40482200e088049f40120880481600e01c049f4","0x38073644b4de82200e050049b20127d0049b20127800392d0127d00492d","0x480701801c0f822018c180b0140187d00600c0120300480700e7d004807","0x480702801c0c8093e8024e280938a01c100093e80240b00925a01c039f4","0xc80903e01c100093e80241000904401c0a0093e80240a00902c01c039f4","0x7d0093e80241000925a01c039f401201c0600704602583821036030fa00c","0xfa0090220240d807022024fa00904e0240c80704e024fa00904202410007","0xf800904601cf70093e80240d80904201cf78093e80247d00904401cf8009","0xfa0090400249680700e7d00480701801c03b0801201c7d0073da024fa009","0x49eb012088039e90127d0049ea012044039ea0127d00480704e01cf5809","0x49f000e7b4049f40127a40482300e7b8049f401208c0482100e7bc049f4","0x9680700e7d0048073de01c039f401201c060073ce025849e80127d0061ed","0x61f40187a00a00c3dc01cf30093e8024f300904401cf30093e8024f7809","0x481600e788049f40127980492d00e01cfa00900e030039e3012c28f21e5","0xf01e10187d0061ee01207c039e20127d0049e2012088039e50127d0049e5","0xfa0093c0024f580700e7d0049e10127b4038073e80240380c00e77c04b0b","0x49f401201cf48073bc024fa0093c40249680700e7d0049e40127a803807","0x49dc3ba030f30073b8024fa0093b8024f38073b8024fa00900e7a0039dd","0x49e300e368049f40123706d80c3c801c6d8093e8024039e500e370049f4","0x39e50127d0049e5012058038070127d0048070127880393f0127d0048da","0x49f40124fc049e000e4b4049f40124b4049e100e778049f401277804822","0x38073e8024ef8093da01c039f401201c0600727e4b4ef1e500e0500493f","0xa28093e8024a280904401ca38093e8024039df00e514049f40127880492d","0x2700c6181242400c3e8030a39453ca4b4ee80728e024fa00928e024ef007","0x49f401213c0482200e13c049f40121240492d00e01cfa00900e0300384c","0x96b0d2ce554aa12d3e80309684f0186b8038480127d0048480120580384f","0x49540124b4039540127d004954012088038073e80240380c00e5ccb4968","0x49b900e5f8049f401259c049b700e59c049f401259c049b100e5e4049f4","0xfa0090b4024e300700e7d00497f01270c039823003542d17f0287d00497e","0x61f40127900497700e01cfa009304024e980700e7d0049800127a803807","0x397a00e178049f40126180497000e618049f4012354c180c2e201cc19e4","0x482200e120049f40121200481600e668049f401201cee007326024fa009","0x39550127d004955012784038070127d004807012788039790127d004979","0x49f40121780497400e790049f4012790048dc00e64c049f401264c049e7","0x6d00735c6b0331a91a8050fa0090bc790c999a2aa01cbc84803e1ac0385e","0x39f40126c40493f00e01cfa00900e030039b7012c38d88093e8030d7009","0x61f40126e40494500e6e4049f401201cf4807370024fa00935202496807","0x49d3012124039d30127d0049c6012120038073e8024e180928e01ce31c3","0x481600e198049f4012198049e200e744049f40127480484e00e748049f4","0x39ac0127d0049ac012784039b80127d0049b8012088038d40127d0048d4","0x9680700e7d00480701801ce89ac37035033014012744049f4012744049e0","0x39f4012734049cd00e730e680c3e8024db80939c01ce70093e8024d4809","0xfa00939c024110073d8024fa0091a80240b0070ea024fa0090cc024f1007","0x48071f401cfa8093e8024e60090bc01c3c0093e8024d60093c201ce5009","0x49f40125a00482200e01cfa0093c8024f500700e7d00480701801c03b0f","0x4848012058038750127d004807012788039c70127d0049680124b403968","0x485e00e1e0049f40125a4049e100e728049f401271c0482200e7b0049f4","0x387f0127d0049f50f8030f20070f8024fa00900e794039f50127d004973","0x49f40127b00481600e1d4049f40121d4049e200e364049f40121fc049e3","0x48d9012780038780127d004878012784039ca0127d0049ca012088039ec","0xfa0093c8024f500700e7d00480701801c6c8783947b03a814012364049f4","0x49f401201c26007106024fa00900e7a4038820127d00484c0124b403807","0x48073ca01c6c0093e802442883018798038850127d00488501279c03885","0xf10073a0024fa009110024f1807110024fa0091b0710061e400e710049f4","0x410093e80244100904401c270093e80242700902c01c038093e802403809","0x9688209c01c0a0093a0024fa0093a0024f000725a024fa00925a024f0807","0x448093e8024f300925a01c039f40127b8049ed00e01cfa00900e030039d0","0x3b1001201c7d0071ae024fa0091120241100739e024fa0093c60240b007","0x49ed00e01cfa0093ce0242780700e7d0048073de01c039f401201c06007","0x1100739e024fa0090280240b007382024fa0093de0249680700e7d0049ee","0xf380737c024fa00900e550039c00127d0048073d201c6b8093e8024e0809","0xdd0093e8024039e500e23c049f40126f8e000c3cc01cdf0093e8024df009","0x4807012788039b60127d0048d601278c038d60127d00488f374030f2007","0x49e100e35c049f401235c0482200e73c049f401273c0481600e01c049f4","0x600736c4b46b9cf00e050049b60127d0049b60127800392d0127d00492d","0x39e900e6f4049f401207c0492d00e01cfa00938a024aa80700e7d004807","0x61e600e6f0049f40126f0049e700e6f0049f401201c26007126024fa009","0x4b8093e8024da1b3018790039b30127d0048073ca01cda0093e8024de093","0xfa0090440240b00700e024fa00900e024f1007364024fa00912e024f1807","0xd90093c001c968093e8024968093c201cde8093e8024de80904401c11009","0x6009018024038073e80240380700e6c8969bd04401c0a009364024fa009","0x49f40120580492d00e01cfa00900e0300381f04403188816028030fa00c","0x49f40120500481600e01cfa00900e050038190127d0049c501271403820","0x3823012c481081b0187d00601901207c038200127d00482001208803814","0x38270127d004821012080038fa0127d0048200124b4038073e80240380c","0x49f40123e80482200e7c0049f40120440481b00e044049f401209c04819","0x18980900e3e8039ed0127d0049f001208c039ee0127d00481b012084039ef","0xf50093e80240382700e7ac049f40120800492d00e01cfa00900e03003807","0xfa009046024108073de024fa0093d6024110073d2024fa0093d402408807","0x39e7012c50f40093e8030f68093e001cf68093e8024f480904601cf7009","0x482200e798049f40127bc0492d00e01cfa00900e7bc038073e80240380c","0x480701801cf180962a790f280c3e8030f40140187b8039e60127d0049e6","0xf100904401cf28093e8024f280902c01cf10093e8024f300925a01c039f4","0x39f401201c060073be0258b1e03c2030fa00c3dc0240f8073c4024fa009","0x38073e8024f20093d401c039f4012780049eb00e01cfa0093c2024f6807","0x39dc0127d0048073d001cee8093e8024039e900e778049f40127880492d","0x49f401201cf28071b8024fa0093b8774061e600e770049f4012770049e7","0x38093c401c9f8093e80246d0093c601c6d0093e80246e0db018790038db","0xf08073bc024fa0093bc024110073ca024fa0093ca0240b00700e024fa009","0x393f25a778f28070280249f8093e80249f8093c001c968093e802496809","0xef80728a024fa0093c40249680700e7d0049df0127b4038073e80240380c","0x39470127d004947012778039450127d004945012088039470127d004807","0x9680700e7d00480701801c2604e018c5c248480187d00614728a794969dd","0x240093e80242400902c01c278093e80242780904401c278093e802424809","0x39f401201c060072e65a4b412d63059caa95425a7d00612d09e030d7007","0xfa0092ce024d88072f2024fa0092a8024968072a8024fa0092a802411007","0xc11801aa168bf8143e8024bf00937201cbf0093e8024b380936e01cb3809","0x38073e8024c00093d401c039f4012168049c600e01cfa0092fe024e1807","0xfa0091aa60c0616d00e60cf200c3e8024f20092ee01c039f4012608049d3","0xfa00900e770039930127d0048072f001c2f0093e8024c30091c001cc3009","0x38093c401cbc8093e8024bc80904401c240093e80242400902c01ccd009","0x6e007326024fa009326024f38072aa024fa0092aa024f080700e024fa009","0xcd15500e5e42401f2e401c2f0093e80242f0092e801cf20093e8024f2009","0xdb8096326c4049f40186b8048da00e6b8d60663523500a1f4012178f2193","0x39b80127d0049a90124b4038073e8024d880927e01c039f401201c06007","0x39f401270c0494700e718e180c3e8024dc80928a01cdc8093e8024039e9","0xfa0093a4024270073a4024fa0093a6024248073a6024fa00938c02424007","0xdc00904401c6a0093e80246a00902c01c330093e8024330093c401ce8809","0xa0093a2024fa0093a2024f0007358024fa009358024f0807370024fa009","0x49ce00e738049f40126a40492d00e01cfa00900e030039d13586e06a066","0x38750127d004866012788038073e8024e680939a01ce61cd0187d0049b7","0x49f40126b0049e100e728049f40127380482200e7b0049f401235004816","0x38073e80240380c00e01d8d00900e3e8039f50127d0049cc01217803878","0xe38093e8024b400925a01cb40093e8024b400904401c039f4012790049ea","0xfa00938e024110073d8024fa0090900240b0070ea024fa00900e024f1007","0x48073ca01cfa8093e8024b98090bc01c3c0093e8024b48093c201ce5009","0xf10071b2024fa0090fe024f18070fe024fa0093ea1f0061e400e1f0049f4","0xe50093e8024e500904401cf60093e8024f600902c01c3a8093e80243a809","0x3c1ca3d81d40a0091b2024fa0091b2024f00070f0024fa0090f0024f0807","0x410093e80242600925a01c039f4012790049ea00e01cfa00900e030038d9","0x428093e8024428093ce01c428093e80240384c00e20c049f401201cf4807","0x48d8388030f2007388024fa00900e794038d80127d004885106030f3007","0x481600e01c049f401201c049e200e740049f4012220049e300e220049f4","0x392d0127d00492d012784038820127d0048820120880384e0127d00484e","0xf680700e7d00480701801ce812d10413803814012740049f4012740049e0","0x39cf0127d0049e3012058038890127d0049e60124b4038073e8024f7009","0x39ef00e01cfa00900e03003807636024038fa00e35c049f401222404822","0x49ef0124b4038073e8024f70093da01c039f401279c0484f00e01cfa009","0x39e900e35c049f40127040482200e73c049f40120500481600e704049f4","0x61e600e6f8049f40126f8049e700e6f8049f401201caa007380024fa009","0x6b0093e8024479ba018790039ba0127d0048073ca01c478093e8024df1c0","0xfa00939e0240b00700e024fa00900e024f100736c024fa0091ac024f1807","0xdb0093c001c968093e8024968093c201c6b8093e80246b80904401ce7809","0x49c5012554038073e80240380c00e6d8968d739e01c0a00936c024fa009","0xfa00900e130038930127d0048073d201cde8093e80240f80925a01c039f4","0x39e500e6d0049f40126f04980c3cc01cde0093e8024de0093ce01cde009","0x39b20127d00489701278c038970127d0049b4366030f2007366024fa009","0x49f40126f40482200e088049f40120880481600e01c049f401201c049e2","0xde82200e050049b20127d0049b20127800392d0127d00492d012784039bd","0xf822018c700b0140187d00600c0120300480700e7d00480700e01cd912d","0xc8093e8024e280938a01c100093e80240b00925a01c039f401201c06007","0x100093e80241000904401c0a0093e80240a00902c01c039f401201c0a007","0x1000925a01c039f401201c060070460258e821036030fa00c0320240f807","0xd807022024fa00904e0240c80704e024fa009042024100071f4024fa009","0xf70093e80240d80904201cf78093e80247d00904401cf80093e802408809","0x9680700e7d00480701801c03b1e01201c7d0073da024fa0093e002411807","0x39e90127d0049ea012044039ea0127d00480704e01cf58093e802410009","0x49f40127a40482300e7b8049f401208c0482100e7bc049f40127ac04822","0x48073de01c039f401201c060073ce0258f9e80127d0061ed0127c0039ed","0xa00c3dc01cf30093e8024f300904401cf30093e8024f780925a01c039f4","0x49f40127980492d00e01cfa00900e030039e3012c80f21e50187d0061e8","0x61ee01207c039e20127d0049e2012088039e50127d0049e5012058039e2","0xf580700e7d0049e10127b4038073e80240380c00e77c04b213c0784061f4","0xf48073bc024fa0093c40249680700e7d0049e40127a8038073e8024f0009","0xf30073b8024fa0093b8024f38073b8024fa00900e7a0039dd0127d004807","0x49f40123706d80c3c801c6d8093e8024039e500e370049f4012770ee80c","0x49e5012058038070127d0048070127880393f0127d0048da01278c038da","0x49e000e4b4049f40124b4049e100e778049f40127780482200e794049f4","0xef8093da01c039f401201c0600727e4b4ef1e500e0500493f0127d00493f","0xa280904401ca38093e8024039df00e514049f40127880492d00e01cfa009","0x2400c3e8030a39453ca4b4ee80728e024fa00928e024ef00728a024fa009","0x482200e13c049f40121240492d00e01cfa00900e0300384c09c03191049","0xaa12d3e80309684f0186b8038480127d0048480120580384f0127d00484f","0x39540127d004954012088038073e80240380c00e5ccb496825ac8cb3955","0x49f401259c049b700e59c049f401259c049b100e5e4049f40125500492d","0xe300700e7d00497f01270c039823003542d17f0287d00497e0126e40397e","0x497700e01cfa009304024e980700e7d0049800127a8038073e80242d009","0x49f4012618048de00e618049f4012354c180c1be01cc19e40187d0049e4","0x49f40121200481600e668049f401201cee007326024fa00900e5e00385e","0x4955012784038070127d004807012788039790127d00497901208803848","0x497400e790049f4012790048dc00e64c049f401264c049e700e554049f4","0x331a91a8050fa0090bc790c999a2aa01cbc84803e1ac0385e0127d00485e","0x493f00e01cfa00900e030039b7012c90d88093e8030d70091b401cd71ac","0x494500e6e4049f401201cf4807370024fa0093520249680700e7d0049b1","0x39d30127d0049c6012120038073e8024e180928e01ce31c30187d0049b9","0x49f4012198049e200e744049f40127480484e00e748049f401274c04849","0x49ac012784039b80127d0049b8012088038d40127d0048d401205803866","0x480701801ce89ac37035033014012744049f4012744049e000e6b0049f4","0x49cd00e730e680c3e8024db80939c01ce70093e8024d480925a01c039f4","0x110073d8024fa0091a80240b0070ea024fa0090cc024f100700e7d0049cd","0xfa8093e8024e60090bc01c3c0093e8024d60093c201ce50093e8024e7009","0x482200e01cfa0093c8024f500700e7d00480701801c03b2501201c7d007","0x38750127d004807012788039c70127d0049680124b4039680127d004968","0x49f40125a4049e100e728049f401271c0482200e7b0049f401212004816","0x49f50f8030f20070f8024fa00900e794039f50127d00497301217803878","0x481600e1d4049f40121d4049e200e364049f40121fc049e300e1fc049f4","0x38780127d004878012784039ca0127d0049ca012088039ec0127d0049ec","0xf500700e7d00480701801c6c8783947b03a814012364049f4012364049e0","0x26007106024fa00900e7a4038820127d00484c0124b4038073e8024f2009","0x6c0093e802442883018798038850127d00488501279c038850127d004807","0xfa009110024f1807110024fa0091b0710061e400e710049f401201cf2807","0x4100904401c270093e80242700902c01c038093e8024038093c401ce8009","0xa0093a0024fa0093a0024f000725a024fa00925a024f0807104024fa009","0xf300925a01c039f40127b8049ed00e01cfa00900e030039d025a20827007","0x7d0071ae024fa0091120241100739e024fa0093c60240b007112024fa009","0xfa0093ce0242780700e7d0048073de01c039f401201c0600700ec9804807","0xfa0090280240b007382024fa0093de0249680700e7d0049ee0127b403807","0xfa00900e550039c00127d0048073d201c6b8093e8024e080904401ce7809","0x39e500e23c049f40126f8e000c3cc01cdf0093e8024df0093ce01cdf009","0x39b60127d0048d601278c038d60127d00488f374030f2007374024fa009","0x49f401235c0482200e73c049f401273c0481600e01c049f401201c049e2","0x6b9cf00e050049b60127d0049b60127800392d0127d00492d012784038d7","0x49f401207c0492d00e01cfa00938a024aa80700e7d00480701801cdb12d","0x49f40126f0049e700e6f0049f401201c26007126024fa00900e7a4039bd","0xda1b3018790039b30127d0048073ca01cda0093e8024de093018798039bc","0xb00700e024fa00900e024f1007364024fa00912e024f180712e024fa009","0x968093e8024968093c201cde8093e8024de80904401c110093e802411009","0x38073e80240380700e6c8969bd04401c0a009364024fa009364024f0007","0x492d00e01cfa00900e0300381f04403193816028030fa00c01802406009","0x38140127d004814012058038190127d0049c5012714038200127d004816","0x380c00e08c04b2804206c061f40180640481f00e080049f401208004822","0x482100e09c049f40120840482000e3e8049f40120800492d00e01cfa009","0x38270127d00482701279c038fa0127d0048fa0120880381b0127d00481b","0x48110127b4038073e80240380c00e7bc04b293e0044061f401806c0481f","0xfa0091f40249680700e7d00482701274c038073e8024f80093d601c039f4","0xfa0093d6024f38073d6024fa00900e7a0039ed0127d0048073d201cf7009","0xf480c3c801cf48093e8024039e500e7a8049f40127acf680c3cc01cf5809","0x38070127d004807012788039e70127d0049e801278c039e80127d0049ea","0x49f40124b4049e100e7b8049f40127b80482200e050049f401205004816","0x39f401201c060073ce4b4f701400e050049e70127d0049e70127800392d","0xf28093e8024039df00e798049f40123e80492d00e01cfa0093de024f6807","0xf29e60284b4ee8073ca024fa0093ca024ef0073cc024fa0093cc02411007","0x49f401278c0492d00e01cfa00900e030039e13c4031951e33c8030fa00c","0xfa0093c80240b0073bc024fa00900e770039df0127d004827012064039e0","0x968093c201c038093e8024038093c401cf00093e8024f000904401cf2009","0x49df3bc4b4039e03c80586e8073be024fa0093be024f380725a024fa009","0x480701801ca28096564fc049f4018368048da00e3686d8dc3b87740a1f4","0xfa00900e7a4039470127d0049dc0124b4038073e80249f80927e01c039f4","0x2700909001c039f40121240494700e1382480c3e80242400928a01c24009","0xf10072a8024fa00909e0242700709e024fa00909802424807098024fa009","0xa38093e8024a380904401cee8093e8024ee80902c01c6e0093e80246e009","0x6d9473ba3700a0092a8024fa0092a8024f00071b6024fa0091b6024f0807","0x49f4012514049e300e554049f40127700492d00e01cfa00900e03003954","0x4955012088039dd0127d0049dd012058038dc0127d0048dc01278803967","0x6e01401259c049f401259c049e000e36c049f401236c049e100e554049f4","0x49e10124b4038073e8024138093a601c039f401201c060072ce36caa9dd","0x497301279c039730127d00480709801cb48093e8024039e900e5a0049f4","0x61e400e5f8049f401201cf28072f2024fa0092e65a4061e600e5cc049f4","0x38093e8024038093c401c2d0093e8024bf8093c601cbf8093e8024bc97e","0xfa00925a024f08072d0024fa0092d0024110073c4024fa0093c40240b007","0xfa00900e0300385a25a5a0f10070280242d0093e80242d0093c001c96809","0x49f401201cf48071aa024fa0090400249680700e7d0048230127b403807","0x4982300030f3007304024fa009304024f3807304024fa00900e55003980","0x49e300e178049f401260cc300c3c801cc30093e8024039e500e60c049f4","0x38140127d004814012058038070127d004807012788039930127d00485e","0x49f401264c049e000e4b4049f40124b4049e100e354049f401235404822","0x38073e8024e28092aa01c039f401201c060073264b46a81400e05004993","0x39a90127d00480709801c6a0093e8024039e900e668049f401207c0492d","0x49f401201cf28070cc024fa009352350061e600e6a4049f40126a4049e7","0x38093c401cd88093e8024d70093c601cd70093e8024331ac018790039ac","0xf0807334024fa00933402411007044024fa0090440240b00700e024fa009","0x39b125a66811007028024d88093e8024d88093c001c968093e802496809","0x380c00e0880b00c658050e280c3e803004807018024038073e802403807","0x481600e080049f40124b4049c500e07c049f40120500492d00e01cfa009","0xd8190187d00602001207c0381f0127d00481f012088039c50127d0049c5","0xfa009036024f580700e7d0048190127b4038073e80240380c00e08404b2d","0x49f401201cf40071f4024fa00900e7a4038230127d00481f0124b403807","0x48073ca01c088093e8024138fa018798038270127d00482701279c03827","0xb0073dc024fa0093de024f18073de024fa0090227c0061e400e7c0049f4","0x60093e8024060093c201c118093e80241180904401ce28093e8024e2809","0xf680700e7d00480701801cf700c046714e28093dc024fa0093dc024f0007","0x110073d6024fa00900e77c039ed0127d00481f0124b4038073e802410809","0xfa00c3d67b4e292d3ba01cf58093e8024f58093bc01cf68093e8024f6809","0x39e60127d0049e90124b4038073e80240380c00e79cf400c65c7a4f500c","0xf180c3e8024f200918401cf20093e8024f28092fa01cf28093e802403966","0xfa0093c2024bf0073c2024fa0093c4024bd80700e7d0049e30125f0039e2","0x49e6012088039de0127d0048070b401cef8093e8024f00092fe01cf0009","0x481600e77c049f401277c0498000e778049f4012778048d500e798049f4","0x6d0db25acbc6e1dc3ba4b4fa00c3be778061e638a608039ea0127d0049ea","0x49f40127740492d00e774049f40127740482200e01cfa00900e0300393f","0x48dc28e030f30071b8024fa0091b8024f380728e024fa00900e7a403945","0x484800e01cfa009092024a380709c124061f40121200494500e120049f4","0x39540127d00484f0121380384f0127d00484c0121240384c0127d00484e","0x49f4012770049e100e514049f40125140482200e7a8049f40127a804816","0x38073e80240380c00e550ee1453d4714049540127d004954012780039dc","0xb38093e8024039e500e554049f401236c0492d00e36c049f401236c04822","0x49ea012058039690127d00496801278c039680127d00493f2ce030f2007","0x49e000e368049f4012368049e100e554049f40125540482200e7a8049f4","0x49e70124b4038073e80240380c00e5a46d1553d4714049690127d004969","0x497e01279c0397e0127d00480709801cbc8093e8024039e900e5cc049f4","0x61e400e168049f401201cf28072fe024fa0092fc5e4061e600e5f8049f4","0xf40093e8024f400902c01cc00093e80246a8093c601c6a8093e8024bf85a","0xfa009300024f0007018024fa009018024f08072e6024fa0092e602411007","0x38073e8024968092aa01c039f401201c06007300030b99e838a024c0009","0x39860127d00480709801cc18093e8024039e900e608049f40120880492d","0x49f401201cf28070bc024fa00930c60c061e600e618049f4012618049e7","0xb00902c01c6a0093e8024cd0093c601ccd0093e80242f19301879003993","0xf0007018024fa009018024f0807304024fa0093040241100702c024fa009","0x380c01201c039f401201c038071a8030c101638a0246a0093e80246a009","0xfa0090280249680700e7d00480701801c11016018cc00a1c50187d006009","0xf80904401ce28093e8024e280902c01c100093e80249680938a01c0f809","0x39f401201c060070420259881b032030fa00c0400240f80703e024fa009","0x118093e80240f80925a01c039f401206c049eb00e01cfa009032024f6807","0x138093e8024138093ce01c138093e8024039e800e3e8049f401201cf4807","0x48113e0030f20073e0024fa00900e794038110127d0048271f4030f3007","0x482200e714049f40127140481600e7b8049f40127bc049e300e7bc049f4","0x49ee0127d0049ee0127800380c0127d00480c012784038230127d004823","0xf80925a01c039f4012084049ed00e01cfa00900e030039ee01808ce29c5","0x49de00e7b4049f40127b40482200e7ac049f401201cef8073da024fa009","0x60073ce7a0063323d27a8061f40187acf69c525a774039eb0127d0049eb","0x497d00e794049f401201cb20073cc024fa0093d20249680700e7d004807","0x38073e8024f18092f801cf11e30187d0049e4012308039e40127d0049e5","0x49f40127800497f00e780049f40127840497e00e784049f40127880497b","0xfa0093bc0246a8073cc024fa0093cc024110073bc024fa00900e168039df","0xf31c530401cf50093e8024f500902c01cef8093e8024ef80930001cef009","0x1100700e7d00480701801c9f8da1b64b5998dc3b8774969f401877cef00c","0x39470127d0048073d201ca28093e8024ee80925a01cee8093e8024ee809","0xfa009090024a2807090024fa0091b851c061e600e370049f4012370049e7","0x2600909201c260093e80242700909001c039f40121240494700e1382480c","0x110073d4024fa0093d40240b0072a8024fa00909e0242700709e024fa009","0xaa0093e8024aa0093c001cee0093e8024ee0093c201ca28093e8024a2809","0x968071b6024fa0091b60241100700e7d00480701801caa1dc28a7a8e2809","0xb40093e80249f967018790039670127d0048073ca01caa8093e80246d809","0xfa0092aa024110073d4024fa0093d40240b0072d2024fa0092d0024f1807","0xaa9ea38a024b48093e8024b48093c001c6d0093e80246d0093c201caa809","0x49f401201cf48072e6024fa0093ce0249680700e7d00480701801cb48da","0x497e2f2030f30072fc024fa0092fc024f38072fc024fa00900e13003979","0x49e300e354049f40125fc2d00c3c801c2d0093e8024039e500e5fc049f4","0x39730127d004973012088039e80127d0049e8012058039800127d0048d5","0x39800185ccf41c5012600049f4012600049e000e030049f4012030049e1","0xf4807304024fa0090440249680700e7d00492d012554038073e80240380c","0xf300730c024fa00930c024f380730c024fa00900e130039830127d004807","0x49f4012178c980c3c801cc98093e8024039e500e178049f4012618c180c","0x4982012088038160127d004816012058038d40127d00499a01278c0399a","0xb1c5012350049f4012350049e000e030049f4012030049e100e608049f4","0xb00c668050e280c3e803004807018024038073e80240380700e35006182","0x49f40124b4049c500e07c049f40120500492d00e01cfa00900e03003822","0x602001207c0381f0127d00481f012088039c50127d0049c501205803820","0xf580700e7d0048190127b4038073e80240380c00e08404b35036064061f4","0xf40071f4024fa00900e7a4038230127d00481f0124b4038073e80240d809","0x88093e8024138fa018798038270127d00482701279c038270127d004807","0xfa0093de024f18073de024fa0090227c0061e400e7c0049f401201cf2807","0x60093c201c118093e80241180904401ce28093e8024e280902c01cf7009","0x480701801cf700c046714e28093dc024fa0093dc024f0007018024fa009","0xfa00900e77c039ed0127d00481f0124b4038073e8024108093da01c039f4","0xe292d3ba01cf58093e8024f58093bc01cf68093e8024f680904401cf5809","0x49e90124b4038073e80240380c00e79cf400c66c7a4f500c3e8030f59ed","0xf20092c201cf20093e8024f28092c401cf28093e80240396300e798049f4","0xbf0073c2024fa0093c4024af80700e7d0049e3012580039e23c6030fa009","0x39de0127d0048070b401cef8093e8024f00092fe01cf00093e8024f0809","0x49f401277c0498000e778049f4012778048d500e798049f401279804822","0x6e1dc3ba4b4fa00c3be778061e638a608039ea0127d0049ea012058039df","0x492d00e774049f40127740482200e01cfa00900e0300393f1b436c96b37","0x39dc0127d0049dc012784038dc0127d0048dc01279c039450127d0049dd","0x60070920259c04828e030fa00c1b87a80615e00e514049f401251404822","0x495c00e130049f401201cf480709c024fa00928a0249680700e7d004807","0xaa80c3e8024aa00928a01caa0093e80242784c0187980384f0127d004848","0xfa0092d0024248072d0024fa0092ce0242400700e7d00495501251c03967","0x2700904401ca38093e8024a380902c01cb98093e8024b480909c01cb4809","0xe28092e6024fa0092e6024f00073b8024fa0093b8024f080709c024fa009","0x48073d201cbc8093e8024a280925a01c039f401201c060072e677027147","0xbf00c3cc01cbf8093e8024bf8093ce01cbf8093e80240395a00e5f8049f4","0x39800127d004979012088038d50127d0048490120580385a0127d00497f","0x3807672024038fa00e60c049f40121680485e00e608049f4012770049e1","0x39860127d0048db0124b4038db0127d0048db012088038073e80240380c","0x49f4012368049e100e600049f40126180482200e354049f40127a804816","0x49830bc030f20070bc024fa00900e794039830127d00493f01217803982","0x482200e354049f40123540481600e668049f401264c049e300e64c049f4","0x499a0127d00499a012780039820127d004982012784039800127d004980","0x39e900e350049f401279c0492d00e01cfa00900e0300399a3046006a9c5","0x61e600e198049f4012198049e700e198049f401201c26007352024fa009","0xd88093e8024d61ae018790039ae0127d0048073ca01cd60093e8024331a9","0xfa0091a8024110073d0024fa0093d00240b00736e024fa009362024f1807","0x6a1e838a024db8093e8024db8093c001c060093e8024060093c201c6a009","0x49f40120880492d00e01cfa00925a024aa80700e7d00480701801cdb80c","0x49f401270c049e700e70c049f401201c26007372024fa00900e7a4039b8","0xe31d3018790039d30127d0048073ca01ce30093e8024e19b9018798039c3","0x1100702c024fa00902c0240b0073a2024fa0093a4024f18073a4024fa009","0xe88093e8024e88093c001c060093e8024060093c201cdc0093e8024dc009","0xa1c50187d00600900e0300480700e7d00480700e01ce880c370058e2809","0x9680938a01c0f8093e80240a00925a01c039f401201c060070440580633a","0xf80703e024fa00903e0241100738a024fa00938a0240b007040024fa009","0xfa009032024f680700e7d00480701801c1080967606c0c80c3e803010009","0x49f401201cf4807046024fa00903e0249680700e7d00481b0127ac03807","0x48271f4030f300704e024fa00904e024f380704e024fa00900e7a0038fa","0x49e300e7bc049f4012044f800c3c801cf80093e8024039e500e044049f4","0x38230127d004823012088039c50127d0049c5012058039ee0127d0049ef","0x39ee01808ce29c50127b8049f40127b8049e000e030049f4012030049e1","0xef8073da024fa00903e0249680700e7d0048210127b4038073e80240380c","0x39eb0127d0049eb012778039ed0127d0049ed012088039eb0127d004807","0x9680700e7d00480701801cf39e8018cf0f49ea0187d0061eb3da714969dd","0x39e40127d0049e5012558039e50127d0048072ae01cf30093e8024f4809","0x49f40127a80481600e01cfa0093c6024758073c478c061f401279004953","0x49e20123b40380c0127d00480c012784039e60127d0049e6012088039ea","0x61de012544039de3be780f09c53e8024f100c3cc7a8e295200e788049f4","0xf48071b8024fa0093c00249680700e7d00480701801cee00967a774049f4","0xa293f0187d0048da012534038da0127d0049dd01253c038db0127d004807","0xfa00928e024a500728e514061f40125140494c00e01cfa00927e02444007","0x270091ea01c270093e80242400929001c039f4012124049ac00e1242400c","0xaa9540187d0049450125280384f0127d00484c1b6030f3007098024fa009","0x49f401259c048f500e59c049f40125540494800e01cfa0092a8024d6007","0x494700e5e4b980c3e8024b480928a01cb48093e8024b404f01879803968","0x270072fe024fa0092fc024248072fc024fa0092f20242400700e7d004973","0x6e0093e80246e00904401cf08093e8024f080902c01c2d0093e8024bf809","0x2d1df1b8784e28090b4024fa0090b4024f00073be024fa0093be024f0807","0xc00093e8024ee0093c601c6a8093e8024f000925a01c039f401201c06007","0xfa0093be024f08071aa024fa0091aa024110073c2024fa0093c20240b007","0x39f401201c0600730077c6a9e138a024c00093e8024c00093c001cef809","0xc30093e80240384c00e60c049f401201cf4807304024fa0093ce02496807","0xfa00900e7940385e0127d004986306030f300730c024fa00930c024f3807","0x481600e350049f4012668049e300e668049f4012178c980c3c801cc9809","0x380c0127d00480c012784039820127d004982012088039e80127d0049e8","0x495500e01cfa00900e030038d4018608f41c5012350049f4012350049e0","0x384c00e198049f401201cf4807352024fa0090440249680700e7d00492d","0x39ae0127d0049ac0cc030f3007358024fa009358024f3807358024fa009","0x49f40126dc049e300e6dc049f40126b8d880c3c801cd88093e8024039e5","0x480c012784039a90127d0049a9012088038160127d004816012058039b8","0xfa00900e01c039b80186a40b1c50126e0049f40126e0049e000e030049f4","0x38073e80240380c00e07c1100c67c0580a00c3e80300600901802403807","0x38073e80240381400e064049f4012714049c500e080049f40120580492d","0x61f40180640481f00e080049f40120800482200e050049f401205004816","0x482000e3e8049f40120800492d00e01cfa00900e03003823012cfc1081b","0x39f00127d00481101206c038110127d004827012064038270127d004821","0x49f40127c00482300e7b8049f401206c0482100e7bc049f40123e804822","0x39eb0127d0048200124b4038073e80240380c00e01da000900e3e8039ed","0xf78093e8024f580904401cf48093e8024f500902201cf50093e802403827","0xfa00c3da024f80073da024fa0093d2024118073dc024fa00904602410807","0x49ef0124b4038073e8024039ef00e01cfa00900e030039e7012d04f4009","0x1a11e43ca030fa00c3d0050061ee00e798049f40127980482200e798049f4","0xfa0093ca0240b0073c4024fa0093cc0249680700e7d00480701801cf1809","0xef809686780f080c3e8030f700903e01cf10093e8024f100904401cf2809","0xf500700e7d0049e00127ac038073e8024f08093da01c039f401201c06007","0xf40073ba024fa00900e7a4039de0127d0049e20124b4038073e8024f2009","0x6e0093e8024ee1dd018798039dc0127d0049dc01279c039dc0127d004807","0xfa0091b4024f18071b4024fa0091b836c061e400e36c049f401201cf2807","0xef00904401cf28093e8024f280902c01c038093e8024038093c401c9f809","0xa00927e024fa00927e024f000725a024fa00925a024f08073bc024fa009","0xf100925a01c039f401277c049ed00e01cfa00900e0300393f25a778f2807","0x49de00e514049f40125140482200e51c049f401201cef80728a024fa009","0x600709813806344092120061f401851ca29e525a774039470127d004947","0x494600e550049f401201c7b80709e024fa0090920249680700e7d004807","0x38073e8024b380929601cb41670187d004955012524039550127d004954","0x49f40125cc048fe00e5cc049f40125a40481900e5a4049f40125a004940","0x484f012088038480127d0048480120580397e0127d0049790123f403979","0x48ff00e4b4049f40124b4049e100e01c049f401201c049e200e13c049f4","0xf217e25a01c2784802c4f8039e40127d0049e40123700397e0127d00497e","0x380c00e61804b45306024fa00c304024a88073046006a85a2fe050fa009","0xc180929e01cc98093e8024039e900e178049f40121680492d00e01cfa009","0xa600700e7d0048d4012220039a91a8030fa009334024a6807334024fa009","0xfa00935c024d600735c6b0061f40121980494a00e198d480c3e8024d4809","0xdb993018798039b70127d0049b10123d4039b10127d0049ac01252003807","0xa400700e7d0049b90126b0039c3372030fa009352024a5007370024fa009","0x49f401274cdc00c3cc01ce98093e8024e30091ea01ce30093e8024e1809","0x49ce012120038073e8024e880928e01ce71d10187d0049d2012514039d2","0x49e200e1d4049f40127300484e00e730049f40127340484900e734049f4","0x385e0127d00485e0120880397f0127d00497f012058038d50127d0048d5","0x3a9800bc5fc6a8140121d4049f40121d4049e000e600049f4012600049e1","0xe50093e8024c30093c601cf60093e80242d00925a01c039f401201c06007","0xfa0093d8024110072fe024fa0092fe0240b0071aa024fa0091aa024f1007","0xbf8d5028024e50093e8024e50093c001cc00093e8024c00093c201cf6009","0xfa0090980249680700e7d0049e40127a8038073e80240380c00e728c01ec","0xfa00938e024f380738e024fa00900e130039f50127d0048073d201c3c009","0x3f80c3c801c3f8093e8024039e500e1f0049f401271cfa80c3cc01ce3809","0x38070127d004807012788038820127d0048d901278c038d90127d00487c","0x49f40124b4049e100e1e0049f40121e00482200e138049f401213804816","0x39f401201c060071044b43c04e00e050048820127d0048820127800392d","0x49f401278c0481600e20c049f40127980492d00e01cfa0093dc024f6807","0x38073e80240380c00e01da300900e3e8038d80127d00488301208803885","0x492d00e01cfa0093dc024f680700e7d0049e701213c038073e8024039ef","0x38d80127d0049c4012088038850127d004814012058039c40127d0049ef","0x39d00127d0049d001279c039d00127d0048072a801c440093e8024039e9","0xfa00911273c061e400e73c049f401201cf2807112024fa0093a0220061e6","0x4280902c01c038093e8024038093c401ce08093e80246b8093c601c6b809","0xf000725a024fa00925a024f08071b0024fa0091b00241100710a024fa009","0x495500e01cfa00900e030039c125a36042807028024e08093e8024e0809","0x384c00e6f8049f401201cf4807380024fa00903e0249680700e7d0049c5","0x39ba0127d00488f37c030f300711e024fa00911e024f380711e024fa009","0x49f40126d8049e300e6d8049f40126e86b00c3c801c6b0093e8024039e5","0x49c0012088038220127d004822012058038070127d004807012788039bd","0x38140126f4049f40126f4049e000e4b4049f40124b4049e100e700049f4","0x634702c050061f40180300480c01201c039f401201c0380737a4b4e0022","0xfa00938a024e2807040024fa00902c0249680700e7d00480701801c0f822","0xfa00904002411007028024fa0090280240b00700e7d00480702801c0c809","0x9680700e7d00480701801c118096900840d80c3e80300c80903e01c10009","0x88093e80241380903201c138093e80241080904001c7d0093e802410009","0xfa009036024108073de024fa0091f4024110073e0024fa0090220240d807","0x39f401201c0600700ed24048071f401cf68093e8024f800904601cf7009","0x49f40127a80481100e7a8049f401201c138073d6024fa00904002496807","0x49e901208c039ee0127d004823012084039ef0127d0049eb012088039e9","0xf780700e7d00480701801cf38096947a0049f40187b4049f000e7b4049f4","0xf70073cc024fa0093cc024110073cc024fa0093de0249680700e7d004807","0x49e60124b4038073e80240380c00e78c04b4b3c8794061f40187a00a00c","0x49e2012088039e50127d0049e5012058038073e80240381400e788049f4","0x38073e80240380c00e77c04b4c3c0784061f40187b80481f00e788049f4","0x49f40127740481900e774049f40127800482000e778049f40127880492d","0x49e1012084038db0127d0049de012088038dc0127d0049dc01206c039dc","0xfa00900e0300380769a024038fa00e4fc049f40123700482300e368049f4","0xfa00928e0240880728e024fa00900e09c039450127d0049e20124b403807","0x2400904601c6d0093e8024ef80904201c6d8093e8024a280904401c24009","0x38073e80240380c00e13804b4e092024fa00c27e024f800727e024fa009","0xfa00c092794061ee00e130049f40121300482200e130049f401236c0492d","0xb0072ce024fa0090980249680700e7d00480701801caa80969e5502780c","0xb400c3e80306d00903e01cb38093e8024b380904401c278093e802427809","0xfa0092d0024f680700e7d0048073de01c039f401201c060072e6025a8169","0x39f4012790049ea00e01cfa0092a8024f500700e7d0049690127ac03807","0xbf8093e8024039e800e5f8049f401201cf48072f2024fa0092ce02496807","0xfa00900e7940385a0127d00497f2fc030f30072fe024fa0092fe024f3807","0x49e200e608049f4012600049e300e600049f40121686a80c3c801c6a809","0x39790127d0049790120880384f0127d00484f012058038070127d004807","0xc112d2f213c03814012608049f4012608049e000e4b4049f40124b4049e1","0x39830127d0049670124b4038073e8024b98093da01c039f401201c06007","0xc30093e8024c30093bc01cc18093e8024c180904401cc30093e8024039df","0x38073e80240380c00e350cd00c6a264c2f00c3e8030c318309e4b4ee807","0x9d8070cc024fa00900e404039a90127d0049930124b4038073e8024039ef","0x39f40126b80493600e6c4d700c3e8024d600927401cd60093e802433009","0xfa0093700247f007370024fa00936e0240c80736e024fa0093620249b807","0x481600e718049f4012550f200c26201ce18093e8024dc80926801cdc809","0x38070127d004807012788039a90127d0049a90120880385e0127d00485e","0x49f40127180490c00e70c049f401270c0493000e4b4049f40124b4049e1","0xe68092a201ce69ce3a2748e98143e8024e31c325a01cd485e02c424039c6","0x39ec0127d0049d20124b4038073e80240380c00e1d404b52398024fa00c","0xfa80c3e80243c00929a01c3c0093e8024e600929e01ce50093e8024039e9","0x487c0125280387c38e030fa00938e024a600700e7d0049f5012220039c7","0x48f500e208049f40121fc0494800e01cfa0091b2024d60071b21fc061f4","0x6c00c3e8024e380929401c428093e8024419ca018798038830127d004882","0xfa0091100247a807110024fa009388024a400700e7d0048d80126b0039c4","0xa38071ae73c061f40122240494500e224049f40127404280c3cc01ce8009","0x39c00127d0049c1012124039c10127d0048d7012120038073e8024e7809","0x49f401274c0481600e744049f4012744049e200e6f8049f40127000484e","0x49be012780039ce0127d0049ce012784039ec0127d0049ec012088039d3","0xfa0093a40249680700e7d00480701801cdf1ce3d874ce88140126f8049f4","0xe980902c01ce88093e8024e88093c401cdd0093e80243a8093c601c47809","0xf000739c024fa00939c024f080711e024fa00911e024110073a6024fa009","0x39ef00e01cfa00900e030039ba39c23ce99d1028024dd0093e8024dd009","0x48d40124b4038073e8024f20093d401c039f4012550049ea00e01cfa009","0x49bd01279c039bd0127d00480709801cdb0093e8024039e900e358049f4","0x61e400e6f0049f401201cf2807126024fa00937a6d8061e600e6f4049f4","0x38093e8024038093c401cd98093e8024da0093c601cda0093e8024499bc","0xfa00925a024f08071ac024fa0091ac02411007334024fa0093340240b007","0xfa00900e030039b325a358cd007028024d98093e8024d98093c001c96809","0x38073e8024f20093d401c039f4012368049ed00e01cfa00900e7bc03807","0x49f401225c0482200e6c8049f40125540481600e25c049f40121300492d","0x484f00e01cfa00900e7bc038073e80240380c00e01da980900e3e8039b0","0x6d80925a01c039f4012790049ea00e01cfa0091b4024f680700e7d00484e","0xf4807360024fa00913202411007364024fa0093ca0240b007132024fa009","0xf3007136024fa009136024f3807136024fa00900e7b0039af0127d004807","0x49f4012274d680c3c801cd68093e8024039e500e274049f401226cd780c","0x49b2012058038070127d004807012788039a70127d0049aa01278c039aa","0x49e000e4b4049f40124b4049e100e6c0049f40126c00482200e6c8049f4","0xf70093da01c039f401201c0600734e4b4d81b200e050049a70127d0049a7","0x482200e68c049f401278c0481600e690049f40127980492d00e01cfa009","0xfa00900e7bc038073e80240380c00e01daa00900e3e8039a20127d0049a4","0x49f40127bc0492d00e01cfa0093dc024f680700e7d0049e701213c03807","0xfa00900e7a4039a20127d0049a0012088039a30127d004814012058039a0","0xcf19f0187980399e0127d00499e01279c0399e0127d0048072a801ccf809","0xf1807336024fa00933a2a0061e400e2a0049f401201cf280733a024fa009","0xd18093e8024d180902c01c038093e8024038093c401ccc8093e8024cd809","0xfa009332024f000725a024fa00925a024f0807344024fa00934402411007","0x39f40127140495500e01cfa00900e0300399925a688d1807028024cc809","0xca0093e80240384c00e2b0049f401201cf480732a024fa00903e02496807","0xfa00900e794039920127d004994158030f3007328024fa009328024f3807","0x49e200e694049f4012698049e300e698049f40126485780c3c801c57809","0x39950127d004995012088038220127d004822012058038070127d004807","0xd292d32a08803814012694049f4012694049e000e4b4049f40124b4049e1","0x600703e0880635502c050061f40180300480c01201c039f401201c03807","0xa007032024fa00938a024e2807040024fa00902c0249680700e7d004807","0xf807040024fa00904002411007028024fa0090280240b00700e7d004807","0xfa0090400249680700e7d00480701801c118096ac0840d80c3e80300c809","0x880903601c088093e80241380903201c138093e80241080904001c7d009","0x118073dc024fa009036024108073de024fa0091f4024110073e0024fa009","0x1000925a01c039f401201c0600700ed5c048071f401cf68093e8024f8009","0x482200e7a4049f40127a80481100e7a8049f401201c138073d6024fa009","0x39ed0127d0049e901208c039ee0127d004823012084039ef0127d0049eb","0x39f401201cf780700e7d00480701801cf38096b07a0049f40187b4049f0","0x61e8028030f70073cc024fa0093cc024110073cc024fa0093de02496807","0x39e20127d0049e60124b4038073e80240380c00e78c04b593c8794061f4","0x39e20127d0049e2012088039e50127d0049e5012058038073e802403814","0x49e20124b4038073e80240380c00e77c04b5a3c0784061f40187b80481f","0x482100e770049f40127780482200e774049f40127800499300e778049f4","0x380c00e01dad80900e3e8038db0127d0049dd012668038dc0127d0049e1","0x9f8091a801c9f8093e80240382700e368049f40127880492d00e01cfa009","0xcd0071b8024fa0093be024108073b8024fa0091b40241100728a024fa009","0xfa00900e03003848012d70a38093e80306d80935201c6d8093e8024a2809","0x484e0120640384e0127d004947012080038490127d0049dc0124b403807","0x606600e124049f40121240482200e130049f4012130049e700e130049f4","0x2480925a01c039f401201c060072d059caa92d6ba5502780c3e8030261e5","0xf8072d2024fa0092d20241100709e024fa00909e0240b0072d2024fa009","0xfa0092d20249680700e7d00480701801cbf0096bc5e4b980c3e80306e009","0xb980904201c6a8093e8024bf80904401c2d0093e8024bc80932601cbf809","0x480701801c03b5f01201c7d007304024fa0090b4024cd007300024fa009","0x4986012350039860127d00480704e01cc18093e8024b480925a01c039f4","0x499a00e600049f40125f80482100e354049f401260c0482200e178049f4","0x39f401201c06007334025b01930127d0061820126a4039820127d00485e","0xfa0093520240c807352024fa009326024100071a8024fa0091aa02496807","0x2780c0cc01c6a0093e80246a00904401c330093e8024330093ce01c33009","0x48d40124b4038073e80240380c00e6e0db9b125ad84d71ac0187d006066","0x481f00e6e4049f40126e40482200e6b0049f40126b00481600e6e4049f4","0x38073e8024039ef00e01cfa00900e030039d3012d88e31c30187d006180","0xf500700e7d0049540126b0038073e8024e30093d601c039f401270c049ed","0xf48073a4024fa0093720249680700e7d0049ae0126b0038073e8024f2009","0xf300739c024fa00939c024f380739c024fa00900e7a0039d10127d004807","0x49f4012734e600c3c801ce60093e8024039e500e734049f4012738e880c","0x49ac012058038070127d004807012788039ec0127d00487501278c03875","0x49e000e4b4049f40124b4049e100e748049f40127480482200e6b0049f4","0xe98093da01c039f401201c060073d84b4e91ac00e050049ec0127d0049ec","0xe500904401c3c0093e8024039df00e728049f40126e40492d00e01cfa009","0xfa80c3e80303c1ca3584b4ee8070f0024fa0090f0024ef007394024fa009","0x482200e364049f401271c0492d00e01cfa00900e0300387f0f8031b19c7","0x4112d3e8030968d90186b8039f50127d0049f5012058038d90127d0048d9","0x482200e01cfa00900e7bc038073e80240380c00e220e20d825ad9042883","0x38850127d0048850126c4039d00127d0048820124b4038820127d004882","0xfa009112024dc80739e024fa00935c550061b800e224049f4012214049b7","0xf500700e7d0049c1012718038073e80246b80938601c479be3807046b814","0x481600e6e8049f401201cee00700e7d00488f01274c038073e8024df009","0x38070127d004807012788039d00127d0049d0012088039f50127d0049f5","0x49f4012790048dc00e700049f4012700048dc00e20c049f401220c049e1","0xfa00939e790e01ba10601ce81f503e4b8039cf0127d0049cf012748039e4","0xfa00900e030039b3012d94da0093e8030de0091b401cde09337a6d86b014","0x49f401201cf480712e024fa00936c0249680700e7d0049b40124fc03807","0x49b0364030f3007360024fa009360024f3807360024fa00900e61c039b2","0x484800e01cfa00935e024a38071366bc061f40122640494500e264049f4","0x39aa0127d0049ad012138039ad0127d00489d0121240389d0127d00489b","0x49f401225c0482200e358049f40123580481600e6f4049f40126f4049e2","0x4b8d637a050049aa0127d0049aa012780038930127d00489301278403897","0xfa009366024e700734e024fa00936c0249680700e7d00480701801cd5093","0x6b00902c01cd10093e8024de8093c401c039f4012690049cd00e68cd200c","0x2f00733c024fa009126024f080733e024fa00934e02411007340024fa009","0x48073de01c039f401201c0600700ed98048071f401cce8093e8024d1809","0xfa00935c024d600700e7d0049e40127a8038073e8024aa00935801c039f4","0x4807012788038a80127d0048d80124b4038d80127d0048d801208803807","0x49e100e67c049f40122a00482200e680049f40127d40481600e688049f4","0xf2007336024fa00900e7940399d0127d0048880121780399e0127d0049c4","0x49f4012688049e200e654049f4012664049e300e664049f4012674cd80c","0x499e0127840399f0127d00499f012088039a00127d0049a0012058039a2","0x480701801cca99e33e680d1014012654049f4012654049e000e678049f4","0x39f4012790049ea00e01cfa0092a8024d600700e7d0048073de01c039f4","0xca0093e8024039e900e2b0049f40121fc0492d00e01cfa00935c024d6007","0xfa009324650061e600e648049f4012648049e700e648049f401201c26007","0xd28093c601cd28093e8024579a6018790039a60127d0048073ca01c57809","0x110070f8024fa0090f80240b00700e024fa00900e024f1007162024fa009","0x588093e8024588093c001c968093e8024968093c201c560093e802456009","0x49ac00e01cfa00900e7bc038073e80240380c00e2c4968ac0f801c0a009","0xaa00935801c039f4012600049ed00e01cfa009370024d600700e7d0049b7","0xd880902c01ccc0093e80246a00925a01c039f4012790049ea00e01cfa009","0x480701801c03b6701201c7d007318024fa0093300241100731a024fa009","0x39f4012600049ed00e01cfa0093340242780700e7d0048073de01c039f4","0xc58093e80246a80925a01c039f4012790049ea00e01cfa0092a8024d6007","0xfa00931a024e6007318024fa0093160241100731a024fa00909e0240b007","0x39f401201c0600700eda0048071f401cc40093e8024c60090ea01cc4809","0xf680700e7d0049680126b0038073e8024b380935801c039f401201cf7807","0xb007172024fa0090920249680700e7d0049e40127a8038073e80246e009","0x600700eda4048071f401cc28093e80245c80904401cc38093e8024aa809","0x48dc0127b4038073e80242400909e01c039f401201cf780700e7d004807","0x49e5012058039840127d0049dc0124b4038073e8024f20093d401c039f4","0x487500e624049f401261c049cc00e614049f40126100482200e61c049f4","0x49e700e2fc049f401201cf600717a024fa00900e7a4039880127d004985","0x397d0127d0048073ca01cc08093e80245f8bd018798038bf0127d0048bf","0xfa00900e024f10072f8024fa009184024f1807184024fa0093025f4061e4","0x968093c201cc40093e8024c400904401cc48093e8024c480902c01c03809","0x380c00e5f09698831201c0a0092f8024fa0092f8024f000725a024fa009","0xf180902c01cbd8093e8024f300925a01c039f40127b8049ed00e01cfa009","0x480701801c03b6a01201c7d0072f0024fa0092f6024110072f4024fa009","0x39f40127b8049ed00e01cfa0093ce0242780700e7d0048073de01c039f4","0xfa0092ee024110072f4024fa0090280240b0072ee024fa0093de02496807","0xfa009192024f3807192024fa00900e550039760127d0048073d201cbc009","0xb900c3c801cb90093e8024039e500e5d0049f4012324bb00c3cc01c64809","0x38070127d004807012788039700127d00497101278c039710127d004974","0x49f40124b4049e100e5e0049f40125e00482200e5e8049f40125e804816","0x39f401201c060072e04b4bc17a00e050049700127d0049700127800392d","0xb68093e8024039e900e1ac049f401207c0492d00e01cfa00938a024aa807","0xfa0091c05b4061e600e380049f4012380049e700e380049f401201c26007","0x6e8093c601c6e8093e80246f8de018790038de0127d0048073ca01c6f809","0x11007044024fa0090440240b00700e024fa00900e024f10072cc024fa009","0xb30093e8024b30093c001c968093e8024968093c201c358093e802435809","0x381f0127d0048070f001c0b0093e8024039ca00e5989686b04401c0a009","0x480c01201c039f401201c0380700e7d0048073ea01c0c8093e802403878","0xfa0090420249680700e7d00480701801c7d023018dac1081b0187d00600c","0xfa0090360240b00700e7d00480702801c088093e8024e280938a01c13809","0xf70096d87bcf800c3e80300880903e01c138093e80241380904401c0d809","0xf58093e8024f780904001cf68093e80241380925a01c039f401201c06007","0xfa0093da024110073d2024fa0093d40240d8073d4024fa0093d60240c807","0x48071f401cf30093e8024f480904601cf38093e8024f800904201cf4009","0x49f401201c138073ca024fa00904e0249680700e7d00480701801c03b6d","0x49ee012084039e80127d0049e5012088039e30127d0049e4012044039e4","0xf10096dc080049f4018798049f000e798049f401278c0482300e79c049f4","0xe38073c2024fa0093d00249680700e7d0048073de01c039f401201c06007","0xfa00c04006c061ee00e784049f40127840482200e080049f40120800c80c","0xa0073ba024fa0093c20249680700e7d00480701801cef0096de77cf000c","0xf8073ba024fa0093ba024110073c0024fa0093c00240b00700e7d004807","0xfa0093ba0249680700e7d00480701801c6d8096e0370ee00c3e8030f3809","0xa280903601ca28093e80249f80903201c9f8093e80246e00904001c6d009","0x11807092024fa0093b802410807090024fa0091b40241100728e024fa009","0xee80925a01c039f401201c0600700edc4048071f401c270093e8024a3809","0x482200e550049f401213c0481100e13c049f401201c13807098024fa009","0x384e0127d00495401208c038490127d0048db012084038480127d00484c","0x39f401201cf780700e7d00480701801caa8096e4088049f4018138049f0","0x4967012088038220127d00482203e030e38072ce024fa00909002496807","0x39f401201c060072e6025b99692d0030fa00c044780061ee00e59c049f4","0xb40093e8024b400902c01c039f401201c0a0072f2024fa0092ce02496807","0x60070b4025ba17f2fc030fa00c0920240f8072f2024fa0092f202411007","0x11007300024fa0092fe024c98071aa024fa0092f20249680700e7d004807","0xc30093e8024c000933401cc18093e8024bf00904201cc10093e80246a809","0x138070bc024fa0092f20249680700e7d00480701801c03b7501201c7d007","0x39820127d00485e0120880399a0127d004993012350039930127d004807","0x49f4018618049a900e618049f40126680499a00e60c049f401216804821","0xfa0093040249680700e7d0048073de01c039f401201c06007352025bb0d4","0xd70093ce01cd70093e8024d600903201cd60093e80246a00904001c33009","0xdb9b10187d0061ae2d0030330070cc024fa0090cc0241100735c024fa009","0x381400e718049f40121980492d00e01cfa00900e030039c33726e096b77","0x481f00e718049f40127180482200e6c4049f40126c40481600e01cfa009","0x49f40127180492d00e01cfa00900e030039d1012de0e91d30187d006183","0x49d3012084039cc0127d0049ce012088039cd0127d0049d201264c039ce","0xfa00900e030038076f2024038fa00e7b0049f40127340499a00e1d4049f4","0xfa0090f00246a0070f0024fa00900e09c039ca0127d0049c60124b403807","0xfa80933401c3a8093e8024e880904201ce60093e8024e500904401cfa809","0x38073e80240380c00e1f004b7a38e024fa00c3d8024d48073d8024fa009","0x49f40123640481900e364049f401271c0482000e1fc049f40127300492d","0x411b10181980387f0127d00487f012088038820127d00488201279c03882","0xfa0090fe0249680700e7d00480701801c441c41b04b5bd885106030fa00c","0x3a80903e01ce80093e8024e800904401c418093e80244180902c01ce8009","0xf680700e7d0048073de01c039f401201c060071ae025be1cf112030fa00c","0x49ea00e01cfa00936e024d600700e7d0049cf0127ac038073e802444809","0x4280935801c039f4012058049c000e01cfa0093be024f500700e7d004969","0x48073d001ce00093e8024039e900e704049f40127400492d00e01cfa009","0xf280711e024fa00937c700061e600e6f8049f40126f8049e700e6f8049f4","0xdb0093e80246b0093c601c6b0093e8024479ba018790039ba0127d004807","0xfa00938202411007106024fa0091060240b00700e024fa00900e024f1007","0x41807028024db0093e8024db0093c001c968093e8024968093c201ce0809","0xfa0093a00249680700e7d0048d70127b4038073e80240380c00e6d8969c1","0x4893012778039bd0127d0049bd012088038930127d0048073be01cde809","0x480701801c4b9b3018df4da1bc0187d00609337a20c969dd00e24c049f4","0xde00902c01cd90093e8024d900904401cd90093e8024da00925a01c039f4","0x600735a2744d92d6fc6bc4c9b025a7d00612d364030d7007378024fa009","0xd800925a01cd80093e8024d800904401c039f401201cf780700e7d004807","0xdc00734e024fa00935e024db80735e024fa00935e024d8807354024fa009","0x49c300e67cd01a23466900a1f401269c049b900e050049f4012214db80c","0xcf8093a601c039f4012680049ea00e01cfa009346024e300700e7d0049a4","0xd500904401cde0093e8024de00902c01ccf0093e8024039dc00e01cfa009","0xbb807132024fa009132024f080700e024fa00900e024f1007354024fa009","0x49f4012688048dc00e674049f4012674048dc00e674ef80c3e8024ef809","0x49d200e2a00a00c3e80240a00929801c0a0093e80240a0160181f0039a2","0xca999336050fa009150688ce99e13201cd51bc03e4a8038a80127d0048a8","0x492d00e01cfa00900e030038af012dfcc90093e8030ca0091b401cca0ac","0x38073e80245880909e01c589a50187d0049920124a0039a60127d004999","0x49f4012654049e200e698049f40126980482200e66c049f401266c04816","0x4969012370039df0127d0049df012370038ac0127d0048ac01278403995","0xa1693be6945619534c66c0f92e00e050049f4012050049d200e5a4049f4","0x380c00e2e404b80310024fa00c3120246d00731262cc618d330050fa009","0x48073d201cc38093e8024c680925a01c039f40126200493f00e01cfa009","0xc280c3cc01cc20093e8024c20093ce01cc20093e80240398700e614049f4","0x38073e80245f80928e01cc08bf0187d0048bd012514038bd0127d004984","0x49f40123080484e00e308049f40125f40484900e5f4049f401260404848","0x4987012088039980127d0049980120580398c0127d00498c0127880397c","0xc60140125f0049f40125f0049e000e62c049f401262c049e100e61c049f4","0x5c80939c01cbd8093e8024c680925a01c039f401201c060072f862cc3998","0xb0072ee024fa009318024f100700e7d00497a012734039782f4030fa009","0xba0093e8024c58093c201c648093e8024bd80904401cbb0093e8024cc009","0x4400700e7d00480701801c03b8101201c7d0072e4024fa0092f00242f007","0x492d00e01cfa0093be024f500700e7d0049690127a8038073e80240a009","0x38073e8024b800939a01c359700187d0048af012738039710127d004999","0x49f40125c40482200e5d8049f401266c0481600e5dc049f4012654049e2","0x1c080900e3e8039720127d00486b012178039740127d0048ac012784038c9","0xf500700e7d0049b70126b0038073e8024039ef00e01cfa00900e03003807","0x49ac00e01cfa00902c024e000700e7d0049df0127a8038073e8024b4809","0xf10072da024fa00913602496807136024fa0091360241100700e7d004885","0x648093e8024b680904401cbb0093e8024de00902c01cbb8093e802403809","0x49f401201cf28072e4024fa00935a0242f0072e8024fa00913a024f0807","0xbb8093c401c6f0093e80246f8093c601c6f8093e8024b90e0018790038e0","0xf0807192024fa009192024110072ec024fa0092ec0240b0072ee024fa009","0x38de2e8324bb1770280246f0093e80246f0093c001cba0093e8024ba009","0xb48093d401c039f40126dc049ac00e01cfa00900e7bc038073e80240380c","0x48850126b0038073e80240b00938001c039f401277c049ea00e01cfa009","0xfa00900e130039660127d0048073d201c6e8093e80244b80925a01c039f4","0x39e500e58c049f4012590b300c3cc01cb20093e8024b20093ce01cb2009","0x39600127d00496101278c039610127d0049632c4030f20072c4024fa009","0x49f40123740482200e6cc049f40126cc0481600e01c049f401201c049e2","0x6e9b300e050049600127d0049600127800392d0127d00492d012784038dd","0x38073e8024e200935801c039f401201cf780700e7d00480701801cb012d","0xf500700e7d0049b70126b0038073e80243a8093da01c039f4012220049ac","0x492d00e01cfa00902c024e000700e7d0049df0127a8038073e8024b4809","0x395c0127d00495f0120880395e0127d0048d80120580395f0127d00487f","0x487c01213c038073e8024039ef00e01cfa00900e03003807704024038fa","0xfa0092d2024f500700e7d0049b70126b0038073e80243a8093da01c039f4","0x49f40127300492d00e01cfa00902c024e000700e7d0049df0127a803807","0x495e0127300395c0127d00495a0120880395e0127d0049b10120580395a","0xfa00900e03003807706024038fa00e558049f40125700487500e55c049f4","0x39f401260c049ed00e01cfa009386024d600700e7d0049b90126b003807","0x38073e8024ef8093d401c039f40125a4049ea00e01cfa00902c024e0007","0x49f401254c0482200e3ac049f40126e00481600e54c049f40121980492d","0x484f00e01cfa00900e7bc038073e80240380c00e01dc200900e3e8038ed","0xb48093d401c039f4012058049c000e01cfa009306024f680700e7d0049a9","0xb400902c01ca90093e8024c100925a01c039f401277c049ea00e01cfa009","0x3a8072ae024fa0091d6024e60071da024fa0092a4024110071d6024fa009","0xf380729e024fa00900e23c039510127d0048073d201cab0093e802476809","0xa60093e8024039e500e534049f401253ca880c3cc01ca78093e8024a7809","0x4807012788039480127d00494a01278c0394a0127d00494d298030f2007","0x49e100e558049f40125580482200e55c049f401255c0481600e01c049f4","0x60072904b4ab15700e050049480127d0049480127800392d0127d00492d","0xef8093d401c039f4012058049c000e01cfa009092024f680700e7d004807","0x482200e3dc049f40125cc0481600e3d4049f401259c0492d00e01cfa009","0xfa00900e7bc038073e80240380c00e01dc280900e3e8039460127d0048f5","0x39f4012058049c000e01cfa009092024f680700e7d00495501213c03807","0xa48093e80242400925a01c039f401207c048d700e01cfa0093be024f5007","0x49f401201cf480728c024fa009292024110071ee024fa0093c00240b007","0x4940296030f3007280024fa009280024f3807280024fa00900e7b00394b","0x49e300e3fc049f40123f87e80c3c801c7e8093e8024039e500e3f8049f4","0x38f70127d0048f7012058038070127d0048070127880393e0127d0048ff","0x49f40124f8049e000e4b4049f40124b4049e100e518049f401251804822","0x38073e80240f8091ae01c039f401201c0600727c4b4a30f700e0500493e","0x39010127d0049e10124b4038073e8024f38093da01c039f4012058049c0","0x380770c024038fa00e4e8049f40124040482200e4ec049f401277804816","0xf8091ae01c039f40127880484f00e01cfa00900e7bc038073e80240380c","0x481901235c038073e8024f38093da01c039f4012058049c000e01cfa009","0x9b00904401c9d8093e80240d80902c01c9b0093e8024f400925a01c039f4","0x9a0093ce01c9a0093e80240395400e4dc049f401201cf4807274024fa009","0xf2007260024fa00900e794039310127d00493426e030f3007268024fa009","0x49f401201c049e200e424049f4012430049e300e430049f40124c49800c","0x492d0127840393a0127d00493a0120880393b0127d00493b01205803807","0x480701801c8492d2744ec03814012424049f4012424049e000e4b4049f4","0xfa00902c024e000700e7d00481f01235c038073e8024e28092aa01c039f4","0x49f401201cf480725c024fa0091f40249680700e7d00481901235c03807","0x4928254030f3007250024fa009250024f3807250024fa00900e1300392a","0x49e300e460049f40124988e80c3c801c8e8093e8024039e500e498049f4","0x38230127d004823012058038070127d004807012788038000127d004918","0x49f4012000049e000e4b4049f40124b4049e100e4b8049f40124b804822","0x61f40180300480c01201c039f401201c038070004b49702300e05004800","0xe2807040024fa00902c0249680700e7d00480701801c0f822018e1c0b014","0x11007028024fa0090280240b00700e7d00480702801c0c8093e8024e2809","0x480701801c118097100840d80c3e80300c80903e01c100093e802410009","0x1380903201c138093e80241080904001c7d0093e80241000925a01c039f4","0x108073de024fa0091f4024110073e0024fa0090220240d807022024fa009","0x600700ee24048071f401cf68093e8024f800904601cf70093e80240d809","0x481100e7a8049f401201c138073d6024fa0090400249680700e7d004807","0x39ee0127d004823012084039ef0127d0049eb012088039e90127d0049ea","0x480701801cf38097147a0049f40187b4049f000e7b4049f40127a404823","0xfa0093cc024110073cc024fa0093de0249680700e7d0048073de01c039f4","0x38073e80240380c00e78c04b8b3c8794061f40187a00a00c3dc01cf3009","0x39e50127d0049e5012058038073e80240381400e788049f40127980492d","0x380c00e77c04b8c3c0784061f40187b80481f00e788049f401278804822","0x482200e774049f40127800499300e778049f40127880492d00e01cfa009","0x38db0127d0049dd012668038dc0127d0049e1012084039dc0127d0049de","0x382700e368049f40127880492d00e01cfa00900e0300380771a024038fa","0x108073b8024fa0091b40241100728a024fa00927e0246a00727e024fa009","0xa38093e80306d80935201c6d8093e8024a280933401c6e0093e8024ef809","0x4947012080038490127d0049dc0124b4038073e80240380c00e12004b8e","0x482200e130049f4012130049e700e130049f40121380481900e138049f4","0x60072d059caa92d71e5502780c3e8030261e5018198038490127d004849","0x1100709e024fa00909e0240b0072d2024fa0090920249680700e7d004807","0x480701801cbf0097205e4b980c3e80306e00903e01cb48093e8024b4809","0xbf80904401c2d0093e8024bc80932601cbf8093e8024b480925a01c039f4","0x7d007304024fa0090b4024cd007300024fa0092e6024108071aa024fa009","0x480704e01cc18093e8024b480925a01c039f401201c0600700ee4404807","0x482100e354049f401260c0482200e178049f4012618048d400e618049f4","0x1c91930127d0061820126a4039820127d00485e012668039800127d00497e","0xfa009326024100071a8024fa0091aa0249680700e7d00480701801ccd009","0x6a00904401c330093e8024330093ce01c330093e8024d480903201cd4809","0x380c00e6e0db9b125ae4cd71ac0187d00606609e030330071a8024fa009","0x482200e6b0049f40126b00481600e6e4049f40123500492d00e01cfa009","0xfa00900e030039d3012e50e31c30187d00618001207c039b90127d0049b9","0x38073e8024e30093d601c039f401270c049ed00e01cfa00900e7bc03807","0x9680700e7d0049ae0126b0038073e8024f20093d401c039f4012550049ac","0xf380739c024fa00900e7a0039d10127d0048073d201ce90093e8024dc809","0xe60093e8024039e500e734049f4012738e880c3cc01ce70093e8024e7009","0x4807012788039ec0127d00487501278c038750127d0049cd398030f2007","0x49e100e748049f40127480482200e6b0049f40126b00481600e01c049f4","0x60073d84b4e91ac00e050049ec0127d0049ec0127800392d0127d00492d","0x39df00e728049f40126e40492d00e01cfa0093a6024f680700e7d004807","0xee8070f0024fa0090f0024ef007394024fa009394024110070f0024fa009","0x492d00e01cfa00900e0300387f0f8031ca9c73ea030fa00c0f0728d612d","0x39f50127d0049f5012058038d90127d0048d9012088038d90127d0049c7","0x38073e80240380c00e220e20d825ae58428831044b4fa00c25a364061ae","0x39d00127d0048820124b4038820127d004882012088038073e8024039ef","0xfa00935c550061b800e224049f4012214049b700e214049f4012214049b1","0x38073e80246b80938601c479be3807046b8143e80244480937201ce7809","0xee00700e7d00488f01274c038073e8024df0093d401c039f4012704049c6","0x39d00127d0049d0012088039f50127d0049f5012058039ba0127d004807","0x49f4012700048dc00e20c049f401220c049e100e01c049f401201c049e2","0xe81f503e498039cf0127d0049cf012748039e40127d0049e4012370039c0","0xda0093e8030de0091b401cde09337a6d86b0143e8024e79e43806e841807","0xfa00936c0249680700e7d0049b40124fc038073e80240380c00e6cc04b97","0xfa009360024f3807360024fa00900e61c039b20127d0048073d201c4b809","0xa38071366bc061f40122640494500e264049f40126c0d900c3cc01cd8009","0x39ad0127d00489d0121240389d0127d00489b012120038073e8024d7809","0x49f40123580481600e6f4049f40126f4049e200e6a8049f40126b40484e","0x49aa012780038930127d004893012784038970127d004897012088038d6","0xfa00936c0249680700e7d00480701801cd509312e358de8140126a8049f4","0xde8093c401c039f4012690049cd00e68cd200c3e8024d980939c01cd3809","0xf080733e024fa00934e02411007340024fa0091ac0240b007344024fa009","0x600700ee60048071f401cce8093e8024d18090bc01ccf0093e802449809","0x49e40127a8038073e8024aa00935801c039f401201cf780700e7d004807","0x48d80124b4038d80127d0048d8012088038073e8024d700935801c039f4","0x482200e680049f40127d40481600e688049f401201c049e200e2a0049f4","0x399d0127d0048880121780399e0127d0049c40127840399f0127d0048a8","0x49f4012664049e300e664049f4012674cd80c3c801ccd8093e8024039e5","0x499f012088039a00127d0049a0012058039a20127d0049a201278803995","0xd1014012654049f4012654049e000e678049f4012678049e100e67c049f4","0xfa0092a8024d600700e7d0048073de01c039f401201c0600732a678cf9a0","0x49f40121fc0492d00e01cfa00935c024d600700e7d0049e40127a803807","0x49f4012648049e700e648049f401201c26007328024fa00900e7a4038ac","0x579a6018790039a60127d0048073ca01c578093e8024c919401879803992","0xb00700e024fa00900e024f1007162024fa00934a024f180734a024fa009","0x968093e8024968093c201c560093e80245600904401c3e0093e80243e009","0x38073e80240380c00e2c4968ac0f801c0a009162024fa009162024f0007","0x49ed00e01cfa009370024d600700e7d0049b70126b0038073e8024039ef","0x6a00925a01c039f4012790049ea00e01cfa0092a8024d600700e7d004980","0x7d007318024fa0093300241100731a024fa0093620240b007330024fa009","0xfa0093340242780700e7d0048073de01c039f401201c0600700ee6404807","0x39f4012790049ea00e01cfa0092a8024d600700e7d0049800127b403807","0xfa0093160241100731a024fa00909e0240b007316024fa0091aa02496807","0x48071f401cc40093e8024c60090ea01cc48093e8024c680939801cc6009","0x38073e8024b380935801c039f401201cf780700e7d00480701801c03b9a","0x9680700e7d0049e40127a8038073e80246e0093da01c039f40125a0049ac","0xc28093e80245c80904401cc38093e8024aa80902c01c5c8093e802424809","0x2400909e01c039f401201cf780700e7d00480701801c03b9b01201c7d007","0x49dc0124b4038073e8024f20093d401c039f4012370049ed00e01cfa009","0x49cc00e614049f40126100482200e61c049f40127940481600e610049f4","0xf600717a024fa00900e7a4039880127d0049850121d4039890127d004987","0xc08093e80245f8bd018798038bf0127d0048bf01279c038bf0127d004807","0xfa009184024f1807184024fa0093025f4061e400e5f4049f401201cf2807","0xc400904401cc48093e8024c480902c01c038093e8024038093c401cbe009","0xa0092f8024fa0092f8024f000725a024fa00925a024f0807310024fa009","0xf300925a01c039f40127b8049ed00e01cfa00900e0300397c25a620c4807","0x7d0072f0024fa0092f6024110072f4024fa0093c60240b0072f6024fa009","0xfa0093ce0242780700e7d0048073de01c039f401201c0600700ee7004807","0xfa0090280240b0072ee024fa0093de0249680700e7d0049ee0127b403807","0xfa00900e550039760127d0048073d201cbc0093e8024bb80904401cbd009","0x39e500e5d0049f4012324bb00c3cc01c648093e8024648093ce01c64809","0x39700127d00497101278c039710127d0049742e4030f20072e4024fa009","0x49f40125e00482200e5e8049f40125e80481600e01c049f401201c049e2","0xbc17a00e050049700127d0049700127800392d0127d00492d01278403978","0x49f401207c0492d00e01cfa00938a024aa80700e7d00480701801cb812d","0x49f4012380049e700e380049f401201c260072da024fa00900e7a40386b","0x6f8de018790038de0127d0048073ca01c6f8093e80247016d018798038e0","0xb00700e024fa00900e024f10072cc024fa0091ba024f18071ba024fa009","0x968093e8024968093c201c358093e80243580904401c110093e802411009","0x38073e80240380700e5989686b04401c0a0092cc024fa0092cc024f0007","0x492d00e01cfa00900e0300381f044031ce816028030fa00c01802406009","0x481600e01cfa00900e050038190127d0049c5012714038200127d004816","0x1081b0187d00601901207c038200127d004820012088038140127d004814","0x4821012080038fa0127d0048200124b4038073e80240380c00e08c04b9e","0x482200e7c0049f40120440481b00e044049f401209c0481900e09c049f4","0x39ed0127d0049f001208c039ee0127d00481b012084039ef0127d0048fa","0x382700e7ac049f40120800492d00e01cfa00900e0300380773e024038fa","0x108073de024fa0093d6024110073d2024fa0093d4024088073d4024fa009","0xf40093e8030f68093e001cf68093e8024f480904601cf70093e802411809","0x49f40127bc0492d00e01cfa00900e7bc038073e80240380c00e79c04ba0","0xf1809742790f280c3e8030f40140187b8039e60127d0049e6012088039e6","0xb00700e7d00480702801cf10093e8024f300925a01c039f401201c06007","0xf080c3e8030f700903e01cf10093e8024f100904401cf28093e8024f2809","0xf000932601cef0093e8024f100925a01c039f401201c060073be025d11e0","0xcd0071b8024fa0093c2024108073b8024fa0093bc024110073ba024fa009","0xf100925a01c039f401201c0600700ee8c048071f401c6d8093e8024ee809","0x482200e514049f40124fc048d400e4fc049f401201c138071b4024fa009","0x38db0127d004945012668038dc0127d0049df012084039dc0127d0048da","0xfa0093b80249680700e7d00480701801c2400974851c049f401836c049a9","0x260093ce01c260093e80242700903201c270093e8024a380904001c24809","0xaa04f0187d00604c3ca03033007092024fa00909202411007098024fa009","0x481600e5a4049f40121240492d00e01cfa00900e030039682ce55496ba5","0xbc9730187d0060dc01207c039690127d0049690120880384f0127d00484f","0x497901264c0397f0127d0049690124b4038073e80240380c00e5f804ba6","0x499a00e600049f40125cc0482100e354049f40125fc0482200e168049f4","0x49690124b4038073e80240380c00e01dd380900e3e8039820127d00485a","0xc180904401c2f0093e8024c30091a801cc30093e80240382700e60c049f4","0xd4807304024fa0090bc024cd007300024fa0092fc024108071aa024fa009","0x49f40123540492d00e01cfa00900e0300399a012ea0c98093e8030c1009","0x486601279c038660127d0049a9012064039a90127d004993012080038d4","0x1d49ae358030fa00c0cc13c0606600e350049f40123500482200e198049f4","0xd600902c01cdc8093e80246a00925a01c039f401201c060073706dcd892d","0x1d51c6386030fa00c3000240f807372024fa00937202411007358024fa009","0x38073e8024e18093da01c039f401201cf780700e7d00480701801ce9809","0xd600700e7d0049e40127a8038073e8024aa00935801c039f4012718049eb","0xf40073a2024fa00900e7a4039d20127d0049b90124b4038073e8024d7009","0xe68093e8024e71d1018798039ce0127d0049ce01279c039ce0127d004807","0xfa0090ea024f18070ea024fa00939a730061e400e730049f401201cf2807","0xe900904401cd60093e8024d600902c01c038093e8024038093c401cf6009","0xa0093d8024fa0093d8024f000725a024fa00925a024f08073a4024fa009","0xdc80925a01c039f401274c049ed00e01cfa00900e030039ec25a748d6007","0x49de00e728049f40127280482200e1e0049f401201cef807394024fa009","0x60070fe1f0063ab38e7d4061f40181e0e51ac25a774038780127d004878","0x38820127d0049ae2a8030dc0071b2024fa00938e0249680700e7d004807","0x6c8093e80246c80904401cfa8093e8024fa80902c01c418093e8024039dc","0xfa0093c80246e00725a024fa00925a024f080700e024fa00900e024f1007","0xfa0091047904192d00e364fa82223a01c410093e8024410093a401cf2009","0xfa00900e030039cf012eb0448093e8030e800923001ce808838836042814","0xfa00911202400007382024fa00900e7a4038d70127d0048d80124b403807","0xfa0091ae0241100700e7d00480702801c039f4012700049aa00e6f8e000c","0x484f00e01cfa00900e030039ba012eb4478093e8030df00931001c6b809","0x482200e6d8049f401201c5c8071ac024fa0091ae0249680700e7d00488f","0x380c00e01dd700900e3e8038930127d0049b601279c039bd0127d0048d6","0x480730e01cde0093e80246b80925a01c039f40126e80484f00e01cfa009","0x39ef00e24c049f40126d0049e700e6f4049f40126f00482200e6d0049f4","0x39b212e030fa009366024a2807366024fa009126704061e600e01cfa009","0x4c8093e8024d800909201cd80093e8024d900909001c039f401225c04947","0xfa00910a0240b007388024fa009388024f100735e024fa00913202427007","0xd78093c001c440093e8024440093c201cde8093e8024de80904401c42809","0x48d80124b4038073e80240380c00e6bc441bd10a7100a00935e024fa009","0x481600e710049f4012710049e200e274049f401273c049e300e26c049f4","0x38880127d0048880127840389b0127d00489b012088038850127d004885","0xf780700e7d00480701801c4e888136214e2014012274049f4012274049e0","0xd700935801c039f4012790049ea00e01cfa0092a8024d600700e7d004807","0x480709801cd50093e8024039e900e6b4049f40121fc0492d00e01cfa009","0xf2807348024fa00934e6a8061e600e69c049f401269c049e700e69c049f4","0xd00093e8024d10093c601cd10093e8024d21a3018790039a30127d004807","0xfa00935a024110070f8024fa0090f80240b00700e024fa00900e024f1007","0x3e007028024d00093e8024d00093c001c968093e8024968093c201cd6809","0x39f40126dc049ac00e01cfa00900e7bc038073e80240380c00e680969ad","0x38073e8024aa00935801c039f4012600049ed00e01cfa009370024d6007","0xcf0093e8024d880902c01ccf8093e80246a00925a01c039f4012790049ea","0xf780700e7d00480701801c03baf01201c7d00733a024fa00933e02411007","0xaa00935801c039f4012600049ed00e01cfa0093340242780700e7d004807","0x2780902c01c540093e80246a80925a01c039f4012790049ea00e01cfa009","0x3a807336024fa00933c024e600733a024fa0091500241100733c024fa009","0x48073de01c039f401201c0600700eec0048071f401ccc8093e8024ce809","0xfa0091b8024f680700e7d0049680126b0038073e8024b380935801c039f4","0xfa0092aa0240b00732a024fa0090920249680700e7d0049e40127a803807","0x39f401201c0600700eec4048071f401cca0093e8024ca80904401c56009","0xf500700e7d0048dc0127b4038073e80242400909e01c039f401201cf7807","0x38ac0127d0049e5012058039920127d0049dc0124b4038073e8024f2009","0x49f40126500487500e66c049f40122b0049cc00e650049f401264804822","0x49f4012698049e700e698049f401201cf600715e024fa00900e7a403999","0xd28b1018790038b10127d0048073ca01cd28093e8024d30af018798039a6","0xb00700e024fa00900e024f100731a024fa009330024f1807330024fa009","0x968093e8024968093c201ccc8093e8024cc80904401ccd8093e8024cd809","0x38073e80240380c00e6349699933601c0a00931a024fa00931a024f0007","0xc58093e8024f180902c01cc60093e8024f300925a01c039f40127b8049ed","0xf780700e7d00480701801c03bb201201c7d007312024fa00931802411007","0xf780925a01c039f40127b8049ed00e01cfa0093ce0242780700e7d004807","0xf4807312024fa00931002411007316024fa0090280240b007310024fa009","0xf300730e024fa00930e024f380730e024fa00900e550038b90127d004807","0x49f4012614c200c3c801cc20093e8024039e500e614049f401261c5c80c","0x498b012058038070127d004807012788038bf0127d0048bd01278c038bd","0x49e000e4b4049f40124b4049e100e624049f40126240482200e62c049f4","0xe28092aa01c039f401201c0600717e4b4c498b00e050048bf0127d0048bf","0x480709801cbe8093e8024039e900e604049f401207c0492d00e01cfa009","0xf28072f8024fa0091845f4061e600e308049f4012308049e700e308049f4","0xbc0093e8024bd0093c601cbd0093e8024be17b0187900397b0127d004807","0xfa00930202411007044024fa0090440240b00700e024fa00900e024f1007","0x11007028024bc0093e8024bc0093c001c968093e8024968093c201cc0809","0x1100c7660580a00c3e803006009018024038073e80240380700e5e096981","0x49f4012714049c500e080049f40120580492d00e01cfa00900e0300381f","0x49f40120800482200e050049f40120500481600e01cfa00900e05003819","0x492d00e01cfa00900e03003823012ed01081b0187d00601901207c03820","0x38110127d004827012064038270127d004821012080038fa0127d004820","0x49f401206c0482100e7bc049f40123e80482200e7c0049f40120440481b","0x38073e80240380c00e01dda80900e3e8039ed0127d0049f001208c039ee","0xf48093e8024f500902201cf50093e80240382700e7ac049f40120800492d","0xfa0093d2024118073dc024fa009046024108073de024fa0093d602411007","0x39ef00e01cfa00900e030039e7012ed8f40093e8030f68093e001cf6809","0x61ee00e798049f40127980482200e798049f40127bc0492d00e01cfa009","0xfa0093cc0249680700e7d00480701801cf180976e790f280c3e8030f4014","0xfa0093c4024110073ca024fa0093ca0240b00700e7d00480702801cf1009","0x9680700e7d00480701801cef809770780f080c3e8030f700903e01cf1009","0xee0093e8024ef00904401cee8093e8024f000932601cef0093e8024f1009","0x3bb901201c7d0071b6024fa0093ba024cd0071b8024fa0093c202410807","0x393f0127d00480704e01c6d0093e8024f100925a01c039f401201c06007","0x49f401277c0482100e770049f40123680482200e514049f40124fc048d4","0x6007090025dd1470127d0060db0126a4038db0127d004945012668038dc","0xc80709c024fa00928e02410007092024fa0093b80249680700e7d004807","0x248093e80242480904401c260093e8024260093ce01c260093e802427009","0x38073e80240380c00e5a0b395525aeecaa04f0187d00604c3ca03033007","0x49f40125a40482200e13c049f401213c0481600e5a4049f40121240492d","0x492d00e01cfa00900e0300397e012ef0bc9730187d0060dc01207c03969","0x38d50127d00497f0120880385a0127d00497901264c0397f0127d004969","0x380777a024038fa00e608049f40121680499a00e600049f40125cc04821","0x6a00730c024fa00900e09c039830127d0049690124b4038073e80240380c","0xc00093e8024bf00904201c6a8093e8024c180904401c2f0093e8024c3009","0x380c00e66804bbe326024fa00c304024d4807304024fa0090bc024cd007","0x481900e6a4049f401264c0482000e350049f40123540492d00e01cfa009","0x38d40127d0048d4012088038660127d00486601279c038660127d0049a9","0x9680700e7d00480701801cdc1b73624b5df9ae358030fa00c0cc13c06066","0xdc8093e8024dc80904401cd60093e8024d600902c01cdc8093e80246a009","0x48073de01c039f401201c060073a6025e01c6386030fa00c3000240f807","0xfa0092a8024d600700e7d0049c60127ac038073e8024e18093da01c039f4","0x49f40126e40492d00e01cfa00935c024d600700e7d0049e40127a803807","0x49f4012738049e700e738049f401201cf40073a2024fa00900e7a4039d2","0xe69cc018790039cc0127d0048073ca01ce68093e8024e71d1018798039ce","0xb00700e024fa00900e024f10073d8024fa0090ea024f18070ea024fa009","0x968093e8024968093c201ce90093e8024e900904401cd60093e8024d6009","0x38073e80240380c00e7b0969d235801c0a0093d8024fa0093d8024f0007","0x38780127d0048073be01ce50093e8024dc80925a01c039f401274c049ed","0x60783946b0969dd00e1e0049f40121e0049de00e728049f401272804822","0x6c8093e8024e380925a01c039f401201c060070fe1f0063c138e7d4061f4","0xfa0093ea0240b007106024fa00900e770038820127d0049ae2a8030dc007","0x968093c201c038093e8024038093c401c6c8093e80246c80904401cfa809","0x118007104024fa009104024e90073c8024fa0093c80246e00725a024fa009","0xfa00c3a00248c0073a0220e20d810a050fa0091047904192d00e364fa822","0x39e900e35c049f40123600492d00e01cfa00900e030039cf012f0844809","0xa00700e7d0049c00126a8039be380030fa00911202400007382024fa009","0x4bc311e024fa00c37c024c40071ae024fa0091ae0241100700e7d004807","0x6b0093e80246b80925a01c039f401223c0484f00e01cfa00900e030039ba","0x49f40126d8049e700e6f4049f40123580482200e6d8049f401201c5c807","0x9680700e7d0049ba01213c038073e80240380c00e01de200900e3e803893","0x39bd0127d0049bc012088039b40127d00480730e01cde0093e80246b809","0xd98093e8024499c1018798038073e8024039ef00e24c049f40126d0049e7","0xfa0093640242400700e7d00489701251c039b212e030fa009366024a2807","0xe20093c401cd78093e80244c80909c01c4c8093e8024d800909201cd8009","0xf080737a024fa00937a0241100710a024fa00910a0240b007388024fa009","0x39af1106f4429c4028024d78093e8024d78093c001c440093e802444009","0x389d0127d0049cf01278c0389b0127d0048d80124b4038073e80240380c","0x49f401226c0482200e214049f40122140481600e710049f4012710049e2","0x4d8853880500489d0127d00489d012780038880127d0048880127840389b","0x38073e8024aa00935801c039f401201cf780700e7d00480701801c4e888","0x39ad0127d00487f0124b4038073e8024d700935801c039f4012790049ea","0x39a70127d0049a701279c039a70127d00480709801cd50093e8024039e9","0xfa00934868c061e400e68c049f401201cf2807348024fa00934e6a8061e6","0x3e00902c01c038093e8024038093c401cd00093e8024d10093c601cd1009","0xf000725a024fa00925a024f080735a024fa00935a024110070f8024fa009","0x39ef00e01cfa00900e030039a025a6b43e007028024d00093e8024d0009","0x49800127b4038073e8024dc00935801c039f40126dc049ac00e01cfa009","0xfa0091a80249680700e7d0049e40127a8038073e8024aa00935801c039f4","0x48071f401cce8093e8024cf80904401ccf0093e8024d880902c01ccf809","0x38073e8024cd00909e01c039f401201cf780700e7d00480701801c03bc5","0x9680700e7d0049e40127a8038073e8024aa00935801c039f4012600049ed","0xce8093e80245400904401ccf0093e80242780902c01c540093e80246a809","0x3bc601201c7d007332024fa00933a0243a807336024fa00933c024e6007","0x49ac00e01cfa0092ce024d600700e7d0048073de01c039f401201c06007","0x2480925a01c039f4012790049ea00e01cfa0091b8024f680700e7d004968","0x7d007328024fa00932a02411007158024fa0092aa0240b00732a024fa009","0xfa0090900242780700e7d0048073de01c039f401201c0600700ef1c04807","0x49f40127700492d00e01cfa0093c8024f500700e7d0048dc0127b403807","0x48ac012730039940127d004992012088038ac0127d0049e501205803992","0x48073d801c578093e8024039e900e664049f40126500487500e66c049f4","0xf280734a024fa00934c2bc061e600e698049f4012698049e700e698049f4","0xc68093e8024cc0093c601ccc0093e8024d28b1018790038b10127d004807","0xfa00933202411007336024fa0093360240b00700e024fa00900e024f1007","0xcd807028024c68093e8024c68093c001c968093e8024968093c201ccc809","0xfa0093cc0249680700e7d0049ee0127b4038073e80240380c00e63496999","0x48071f401cc48093e8024c600904401cc58093e8024f180902c01cc6009","0x38073e8024f380909e01c039f401201cf780700e7d00480701801c03bc8","0xc58093e80240a00902c01cc40093e8024f780925a01c039f40127b8049ed","0xc38093e80240395400e2e4049f401201cf4807312024fa00931002411007","0xfa00900e794039850127d004987172030f300730e024fa00930e024f3807","0x49e200e2fc049f40122f4049e300e2f4049f4012614c200c3c801cc2009","0x39890127d0049890120880398b0127d00498b012058038070127d004807","0x5f92d31262c038140122fc049f40122fc049e000e4b4049f40124b4049e1","0x39810127d00481f0124b4038073e8024e28092aa01c039f401201c06007","0x38c20127d0048c201279c038c20127d00480709801cbe8093e8024039e9","0xfa0092f85ec061e400e5ec049f401201cf28072f8024fa0091845f4061e6","0x1100902c01c038093e8024038093c401cbc0093e8024bd0093c601cbd009","0xf000725a024fa00925a024f0807302024fa00930202411007044024fa009","0x600900e01cfa00900e01c0397825a60411007028024bc0093e8024bc009","0x48140124b4038073e80240380c00e0880b00c792050e280c3e803004807","0x482200e714049f40127140481600e080049f40124b4049c500e07c049f4","0xfa00900e03003821012f280d8190187d00602001207c0381f0127d00481f","0x49f401207c0492d00e01cfa009036024f580700e7d0048190127b403807","0x49f401209c049e700e09c049f401201cf40071f4024fa00900e7a403823","0x89f0018790039f00127d0048073ca01c088093e8024138fa01879803827","0x1100738a024fa00938a0240b0073dc024fa0093de024f18073de024fa009","0xf70093e8024f70093c001c060093e8024060093c201c118093e802411809","0x492d00e01cfa009042024f680700e7d00480701801cf700c046714e2809","0xef0073da024fa0093da024110073d6024fa00900e77c039ed0127d00481f","0x39e73d0031e59e93d4030fa00c3d67b4e292d3ba01cf58093e8024f5809","0xab0073ca024fa00900e55c039e60127d0049e90124b4038073e80240380c","0x39f401278c048eb00e788f180c3e8024f20092a601cf20093e8024f2809","0xfa009018024f08073cc024fa0093cc024110073d4024fa0093d40240b007","0xf01e138a7d0049e2018798f51c52a401cf10093e8024f10091da01c06009","0x492d00e01cfa00900e030039dc012f30ee8093e8030ef0092a201cef1df","0xa68071b4024fa0093ba024a78071b6024fa00900e7a4038dc0127d0049e0","0xa280c3e8024a280929801c039f40124fc0488800e5149f80c3e80246d009","0x4848012520038073e80242480935801c248480187d00494701252803947","0xa500709e024fa00909836c061e600e130049f4012138048f500e138049f4","0xb38093e8024aa80929001c039f4012550049ac00e554aa00c3e8024a2809","0x4969012514039690127d00496809e030f30072d0024fa0092ce0247a807","0x484900e5f8049f40125e40484800e01cfa0092e6024a38072f25cc061f4","0x39e10127d0049e10120580385a0127d00497f0121380397f0127d00497e","0x49f4012168049e000e77c049f401277c049e100e370049f401237004822","0x38d50127d0049e00124b4038073e80240380c00e168ef8dc3c27140485a","0x49f40123540482200e784049f40127840481600e600049f4012770049e3","0xef8d53c2714049800127d004980012780039df0127d0049df012784038d5","0xc18093e8024039e900e608049f401279c0492d00e01cfa00900e03003980","0xfa00930c60c061e600e618049f4012618049e700e618049f401201c26007","0xcd0093c601ccd0093e80242f193018790039930127d0048073ca01c2f009","0xf0807304024fa009304024110073d0024fa0093d00240b0071a8024fa009","0x60071a8030c11e838a0246a0093e80246a0093c001c060093e802406009","0x39e900e6a4049f40120880492d00e01cfa00925a024aa80700e7d004807","0x61e600e6b0049f40126b0049e700e6b0049f401201c260070cc024fa009","0xdb8093e8024d71b1018790039b10127d0048073ca01cd70093e8024d6066","0xfa0093520241100702c024fa00902c0240b007370024fa00936e024f1807","0xd481638a024dc0093e8024dc0093c001c060093e8024060093c201cd4809","0xf822018f340b0140187d00600c0120300480700e7d00480700e01cdc00c","0xc8093e8024e280938a01c100093e80240b00925a01c039f401201c06007","0x100093e80241000904401c0a0093e80240a00902c01c039f401201c0a007","0x1000925a01c039f401201c06007046025e7021036030fa00c0320240f807","0xd807022024fa00904e0240c80704e024fa009042024100071f4024fa009","0xf70093e80240d80904201cf78093e80247d00904401cf80093e802408809","0x9680700e7d00480701801c03bcf01201c7d0073da024fa0093e002411807","0x39e90127d0049ea012044039ea0127d00480704e01cf58093e802410009","0x49f40127a40482300e7b8049f401208c0482100e7bc049f40127ac04822","0x48073de01c039f401201c060073ce025e81e80127d0061ed0127c0039ed","0xa00c3dc01cf30093e8024f300904401cf30093e8024f780925a01c039f4","0x49f40127980492d00e01cfa00900e030039e3012f44f21e50187d0061e8","0x61ee01207c039e20127d0049e2012088039e50127d0049e5012058039e2","0xf580700e7d0049e10127b4038073e80240380c00e77c04bd23c0784061f4","0xf48073bc024fa0093c40249680700e7d0049e40127a8038073e8024f0009","0xf30073b8024fa0093b8024f38073b8024fa00900e7a0039dd0127d004807","0x49f40123706d80c3c801c6d8093e8024039e500e370049f4012770ee80c","0x49e5012058038070127d0048070127880393f0127d0048da01278c038da","0x49e000e4b4049f40124b4049e100e778049f40127780482200e794049f4","0xef8093da01c039f401201c0600727e4b4ef1e500e0500493f0127d00493f","0xa280904401ca38093e8024039df00e514049f40127880492d00e01cfa009","0x2400c3e8030a39453ca4b4ee80728e024fa00928e024ef00728a024fa009","0x38f700e13c049f40121240492d00e01cfa00900e0300384c09c031e9849","0x39682ce030fa0092aa024a48072aa024fa0092a8024a30072a8024fa009","0xb98093e8024b480903201cb48093e8024b400928001c039f401259c0494b","0xfa0090900240b0072fc024fa0092f20247e8072f2024fa0092e60247f007","0x968093c201c038093e8024038093c401c278093e80242780904401c24009","0x9f0073c8024fa0093c80246e0072fc024fa0092fc0247f80725a024fa009","0x49f40186080495100e608c00d50b45fc0a1f4012790bf12d00e13c24016","0x48073d201c2f0093e80242d00925a01c039f401201c0600730c025ea183","0x44007352350061f40126680494d00e668049f401260c0494f00e64c049f4","0xd600c3e80243300929401c331a90187d0049a9012530038073e80246a009","0xfa0093620247a807362024fa009358024a400700e7d0049ae0126b0039ae","0xd60073866e4061f40126a40494a00e6e0049f40126dcc980c3cc01cdb809","0x39d30127d0049c60123d4039c60127d0049c3012520038073e8024dc809","0x49d101251c039ce3a2030fa0093a4024a28073a4024fa0093a66e0061e6","0xe600909c01ce60093e8024e680909201ce68093e8024e700909001c039f4","0x110072fe024fa0092fe0240b0071aa024fa0091aa024f10070ea024fa009","0x3a8093e80243a8093c001cc00093e8024c00093c201c2f0093e80242f009","0x39ec0127d00485a0124b4038073e80240380c00e1d4c005e2fe3540a009","0x49f40125fc0481600e354049f4012354049e200e728049f4012618049e3","0x49ca012780039800127d004980012784039ec0127d0049ec0120880397f","0xfa0093c8024f500700e7d00480701801ce51803d85fc6a814012728049f4","0x49f401201c260073ea024fa00900e7a4038780127d00484c0124b403807","0x48073ca01c3e0093e8024e39f5018798039c70127d0049c701279c039c7","0xf1007104024fa0091b2024f18071b2024fa0090f81fc061e400e1fc049f4","0x3c0093e80243c00904401c270093e80242700902c01c038093e802403809","0x9687809c01c0a009104024fa009104024f000725a024fa00925a024f0807","0x418093e8024f300925a01c039f40127b8049ed00e01cfa00900e03003882","0x3bd501201c7d0071b0024fa0091060241100710a024fa0093c60240b007","0x49ed00e01cfa0093ce0242780700e7d0048073de01c039f401201c06007","0x1100710a024fa0090280240b007388024fa0093de0249680700e7d0049ee","0xf38073a0024fa00900e550038880127d0048073d201c6c0093e8024e2009","0xe78093e8024039e500e224049f40127404400c3cc01ce80093e8024e8009","0x4807012788039c10127d0048d701278c038d70127d00488939e030f2007","0x49e100e360049f40123600482200e214049f40122140481600e01c049f4","0x60073824b46c08500e050049c10127d0049c10127800392d0127d00492d","0x39e900e700049f401207c0492d00e01cfa00938a024aa80700e7d004807","0x61e600e23c049f401223c049e700e23c049f401201c2600737c024fa009","0xdb0093e8024dd0d6018790038d60127d0048073ca01cdd0093e8024479be","0xfa0090440240b00700e024fa00900e024f100737a024fa00936c024f1807","0xde8093c001c968093e8024968093c201ce00093e8024e000904401c11009","0x48070f001c0b0093e8024039ca00e6f4969c004401c0a00937a024fa009","0x39f401201c0380700e7d0048073ea01c0c8093e80240387800e07c049f4","0x9680700e7d00480701801c7d023018f581081b0187d00600c01203004807","0xb00700e7d00480702801c088093e8024e280938a01c138093e802410809","0xf800c3e80300880903e01c138093e80241380904401c0d8093e80240d809","0xf780904001cf68093e80241380925a01c039f401201c060073dc025eb9ef","0x110073d2024fa0093d40240d8073d4024fa0093d60240c8073d6024fa009","0xf30093e8024f480904601cf38093e8024f800904201cf40093e8024f6809","0x138073ca024fa00904e0249680700e7d00480701801c03bd801201c7d007","0x39e80127d0049e5012088039e30127d0049e4012044039e40127d004807","0x49f4018798049f000e798049f401278c0482300e79c049f40127b804821","0xfa0093d00249680700e7d0048073de01c039f401201c060073c4025ec820","0x61ee00e784049f40127840482200e080049f40120800c80c38e01cf0809","0xfa0093c20249680700e7d00480701801cef0097b477cf000c3e80301001b","0xfa0093ba024110073c0024fa0093c00240b00700e7d00480702801cee809","0x9680700e7d00480701801c6d8097b6370ee00c3e8030f380903e01cee809","0xa28093e80249f80903201c9f8093e80246e00904001c6d0093e8024ee809","0xfa0093b802410807090024fa0091b40241100728e024fa00928a0240d807","0x39f401201c0600700ef70048071f401c270093e8024a380904601c24809","0x49f401213c0481100e13c049f401201c13807098024fa0093ba02496807","0x495401208c038490127d0048db012084038480127d00484c01208803954","0xf780700e7d00480701801caa8097ba088049f4018138049f000e138049f4","0x38220127d00482203e030e38072ce024fa0090900249680700e7d004807","0x60072e6025ef1692d0030fa00c044780061ee00e59c049f401259c04822","0xb400902c01c039f401201c0a0072f2024fa0092ce0249680700e7d004807","0x1ef97f2fc030fa00c0920240f8072f2024fa0092f2024110072d0024fa009","0xfa0092fe024c98071aa024fa0092f20249680700e7d00480701801c2d009","0xc000933401cc18093e8024bf00904201cc10093e80246a80904401cc0009","0xfa0092f20249680700e7d00480701801c03be001201c7d00730c024fa009","0x485e0120880399a0127d004993012350039930127d00480704e01c2f009","0x49a900e618049f40126680499a00e60c049f40121680482100e608049f4","0x9680700e7d0048073de01c039f401201c06007352025f08d40127d006186","0xd70093e8024d600903201cd60093e80246a00904001c330093e8024c1009","0x61ae2d0030330070cc024fa0090cc0241100735c024fa00935c024f3807","0x49f40121980492d00e01cfa00900e030039c33726e096be236e6c4061f4","0x49f40127180482200e6c4049f40126c40481600e01cfa00900e050039c6","0x492d00e01cfa00900e030039d1012f8ce91d30187d00618301207c039c6","0x39cc0127d0049ce012088039cd0127d0049d201264c039ce0127d0049c6","0x38077c8024038fa00e7b0049f40127340499a00e1d4049f401274c04821","0x6a0070f0024fa00900e09c039ca0127d0049c60124b4038073e80240380c","0x3a8093e8024e880904201ce60093e8024e500904401cfa8093e80243c009","0x380c00e1f004be538e024fa00c3d8024d48073d8024fa0093ea024cd007","0x481900e364049f401271c0482000e1fc049f40127300492d00e01cfa009","0x387f0127d00487f012088038820127d00488201279c038820127d0048d9","0x9680700e7d00480701801c441c41b04b5f3085106030fa00c1046c406066","0xe80093e8024e800904401c418093e80244180902c01ce80093e80243f809","0x48073de01c039f401201c060071ae025f39cf112030fa00c0ea0240f807","0xfa00936e024d600700e7d0049cf0127ac038073e8024448093da01c039f4","0x39f4012058049c000e01cfa0093be024f500700e7d0049690127a803807","0xe00093e8024039e900e704049f40127400492d00e01cfa00910a024d6007","0xfa00937c700061e600e6f8049f40126f8049e700e6f8049f401201cf4007","0x6b0093c601c6b0093e8024479ba018790039ba0127d0048073ca01c47809","0x11007106024fa0091060240b00700e024fa00900e024f100736c024fa009","0xdb0093e8024db0093c001c968093e8024968093c201ce08093e8024e0809","0x9680700e7d0048d70127b4038073e80240380c00e6d8969c110601c0a009","0x39bd0127d0049bd012088038930127d0048073be01cde8093e8024e8009","0x4b9b3018fa0da1bc0187d00609337a20c969dd00e24c049f401224c049de","0xd90093e8024d900904401cd90093e8024da00925a01c039f401201c06007","0x4d92d7d26bc4c9b025a7d00612d364030d7007378024fa0093780240b007","0xd80093e8024d800904401c039f401201cf780700e7d00480701801cd689d","0xfa00935e024db80735e024fa00935e024d8807354024fa00936002496807","0xd01a23466900a1f401269c049b900e050049f4012214db80c37001cd3809","0x39f4012680049ea00e01cfa009346024e300700e7d0049a401270c0399f","0xde0093e8024de00902c01ccf0093e8024039dc00e01cfa00933e024e9807","0xfa009132024f080700e024fa00900e024f1007354024fa00935402411007","0x48dc00e674049f4012674048dc00e674ef80c3e8024ef8092ee01c4c809","0xa00c3e80240a00929801c0a0093e80240a0160181f0039a20127d0049a2","0xfa009150688ce99e13201cd51bc03e4a8038a80127d0048a8012748038a8","0xfa00900e030038af012fa8c90093e8030ca0091b401cca0ac32a664cd814","0x5880909e01c589a50187d0049920124a0039a60127d0049990124b403807","0x49e200e698049f40126980482200e66c049f401266c0481600e01cfa009","0x39df0127d0049df012370038ac0127d0048ac012784039950127d004995","0x5619534c66c0f92e00e050049f4012050049d200e5a4049f40125a4048dc","0x4beb310024fa00c3120246d00731262cc618d330050fa0090285a4ef9a5","0xc38093e8024c680925a01c039f40126200493f00e01cfa00900e030038b9","0xc20093e8024c20093ce01cc20093e80240398700e614049f401201cf4807","0x5f80928e01cc08bf0187d0048bd012514038bd0127d00498430a030f3007","0x484e00e308049f40125f40484900e5f4049f40126040484800e01cfa009","0x39980127d0049980120580398c0127d00498c0127880397c0127d0048c2","0x49f40125f0049e000e62c049f401262c049e100e61c049f401261c04822","0xbd8093e8024c680925a01c039f401201c060072f862cc39983180500497c","0xfa009318024f100700e7d00497a012734039782f4030fa009172024e7007","0xc58093c201c648093e8024bd80904401cbb0093e8024cc00902c01cbb809","0x480701801c03bec01201c7d0072e4024fa0092f00242f0072e8024fa009","0xfa0093be024f500700e7d0049690127a8038073e80240a00911001c039f4","0xb800939a01c359700187d0048af012738039710127d0049990124b403807","0x482200e5d8049f401266c0481600e5dc049f4012654049e200e01cfa009","0x39720127d00486b012178039740127d0048ac012784038c90127d004971","0x49b70126b0038073e8024039ef00e01cfa00900e030038077d8024038fa","0xfa00902c024e000700e7d0049df0127a8038073e8024b48093d401c039f4","0xfa00913602496807136024fa0091360241100700e7d0048850126b003807","0xb680904401cbb0093e8024de00902c01cbb8093e8024038093c401cb6809","0xf28072e4024fa00935a0242f0072e8024fa00913a024f0807192024fa009","0x6f0093e80246f8093c601c6f8093e8024b90e0018790038e00127d004807","0xfa009192024110072ec024fa0092ec0240b0072ee024fa0092ee024f1007","0xbb1770280246f0093e80246f0093c001cba0093e8024ba0093c201c64809","0x39f40126dc049ac00e01cfa00900e7bc038073e80240380c00e378ba0c9","0x38073e80240b00938001c039f401277c049ea00e01cfa0092d2024f5007","0x39660127d0048073d201c6e8093e80244b80925a01c039f4012214049ac","0x49f4012590b300c3cc01cb20093e8024b20093ce01cb20093e80240384c","0x496101278c039610127d0049632c4030f20072c4024fa00900e79403963","0x482200e6cc049f40126cc0481600e01c049f401201c049e200e580049f4","0x49600127d0049600127800392d0127d00492d012784038dd0127d0048dd","0xe200935801c039f401201cf780700e7d00480701801cb012d1ba6cc03814","0x49b70126b0038073e80243a8093da01c039f4012220049ac00e01cfa009","0xfa00902c024e000700e7d0049df0127a8038073e8024b48093d401c039f4","0x495f0120880395e0127d0048d80120580395f0127d00487f0124b403807","0x38073e8024039ef00e01cfa00900e030038077da024038fa00e570049f4","0xf500700e7d0049b70126b0038073e80243a8093da01c039f40121f00484f","0x492d00e01cfa00902c024e000700e7d0049df0127a8038073e8024b4809","0x395c0127d00495a0120880395e0127d0049b10120580395a0127d0049cc","0x38077dc024038fa00e558049f40125700487500e55c049f4012578049cc","0x49ed00e01cfa009386024d600700e7d0049b90126b0038073e80240380c","0xef8093d401c039f40125a4049ea00e01cfa00902c024e000700e7d004983","0x482200e3ac049f40126e00481600e54c049f40121980492d00e01cfa009","0xfa00900e7bc038073e80240380c00e01df780900e3e8038ed0127d004953","0x39f4012058049c000e01cfa009306024f680700e7d0049a901213c03807","0xa90093e8024c100925a01c039f401277c049ea00e01cfa0092d2024f5007","0xfa0091d6024e60071da024fa0092a4024110071d6024fa0092d00240b007","0xfa00900e23c039510127d0048073d201cab0093e8024768090ea01cab809","0x39e500e534049f401253ca880c3cc01ca78093e8024a78093ce01ca7809","0x39480127d00494a01278c0394a0127d00494d298030f2007298024fa009","0x49f40125580482200e55c049f401255c0481600e01c049f401201c049e2","0xab15700e050049480127d0049480127800392d0127d00492d01278403956","0x39f4012058049c000e01cfa009092024f680700e7d00480701801ca412d","0x49f40125cc0481600e3d4049f401259c0492d00e01cfa0093be024f5007","0x38073e80240380c00e01df800900e3e8039460127d0048f5012088038f7","0x49c000e01cfa009092024f680700e7d00495501213c038073e8024039ef","0x2400925a01c039f401207c048d700e01cfa0093be024f500700e7d004816","0xf480728c024fa009292024110071ee024fa0093c00240b007292024fa009","0xf3007280024fa009280024f3807280024fa00900e7b00394b0127d004807","0x49f40123f87e80c3c801c7e8093e8024039e500e3f8049f4012500a580c","0x48f7012058038070127d0048070127880393e0127d0048ff01278c038ff","0x49e000e4b4049f40124b4049e100e518049f40125180482200e3dc049f4","0xf8091ae01c039f401201c0600727c4b4a30f700e0500493e0127d00493e","0x49e10124b4038073e8024f38093da01c039f4012058049c000e01cfa009","0x38fa00e4e8049f40124040482200e4ec049f40127780481600e404049f4","0x39f40127880484f00e01cfa00900e7bc038073e80240380c00e01df8809","0x38073e8024f38093da01c039f4012058049c000e01cfa00903e0246b807","0x9d8093e80240d80902c01c9b0093e8024f400925a01c039f4012064048d7","0x9a0093e80240395400e4dc049f401201cf4807274024fa00926c02411007","0xfa00900e794039310127d00493426e030f3007268024fa009268024f3807","0x49e200e424049f4012430049e300e430049f40124c49800c3c801c98009","0x393a0127d00493a0120880393b0127d00493b012058038070127d004807","0x8492d2744ec03814012424049f4012424049e000e4b4049f40124b4049e1","0xe000700e7d00481f01235c038073e8024e28092aa01c039f401201c06007","0xf480725c024fa0091f40249680700e7d00481901235c038073e80240b009","0xf3007250024fa009250024f3807250024fa00900e1300392a0127d004807","0x49f40124988e80c3c801c8e8093e8024039e500e498049f40124a09500c","0x4823012058038070127d004807012788038000127d00491801278c03918","0x49e000e4b4049f40124b4049e100e4b8049f40124b80482200e08c049f4","0x480c01201c039f401201c038070004b49702300e050048000127d004800","0xfa00902c0249680700e7d00480701801c0f822018fc80b0140187d00600c","0xfa0090280240b00700e7d00480702801c0c8093e8024e280938a01c10009","0x118097e60840d80c3e80300c80903e01c100093e80241000904401c0a009","0x138093e80241080904001c7d0093e80241000925a01c039f401201c06007","0xfa0091f4024110073e0024fa0090220240d807022024fa00904e0240c807","0x48071f401cf68093e8024f800904601cf70093e80240d80904201cf7809","0x49f401201c138073d6024fa0090400249680700e7d00480701801c03bf4","0x4823012084039ef0127d0049eb012088039e90127d0049ea012044039ea","0xf38097ea7a0049f40187b4049f000e7b4049f40127a40482300e7b8049f4","0x110073cc024fa0093de0249680700e7d0048073de01c039f401201c06007","0x380c00e78c04bf63c8794061f40187a00a00c3dc01cf30093e8024f3009","0x49e5012058038073e80240381400e788049f40127980492d00e01cfa009","0x4bf73c0784061f40187b80481f00e788049f40127880482200e794049f4","0x49f40127800499300e778049f40127880492d00e01cfa00900e030039df","0x49dd012668038dc0127d0049e1012084039dc0127d0049de012088039dd","0x49f40127880492d00e01cfa00900e030038077f0024038fa00e36c049f4","0xfa0091b40241100728a024fa00927e0246a00727e024fa00900e09c038da","0x6d80935201c6d8093e8024a280933401c6e0093e8024ef80904201cee009","0x38490127d0049dc0124b4038073e80240380c00e12004bf928e024fa00c","0x49f4012130049e700e130049f40121380481900e138049f401251c04820","0xaa92d7f45502780c3e8030261e5018198038490127d0048490120880384c","0xfa00909e0240b0072d2024fa0090920249680700e7d00480701801cb4167","0xbf0097f65e4b980c3e80306e00903e01cb48093e8024b480904401c27809","0x2d0093e8024bc80932601cbf8093e8024b480925a01c039f401201c06007","0xfa0090b4024cd007300024fa0092e6024108071aa024fa0092fe02411007","0xc18093e8024b480925a01c039f401201c0600700eff0048071f401cc1009","0x49f401260c0482200e178049f4012618048d400e618049f401201c13807","0x61820126a4039820127d00485e012668039800127d00497e012084038d5","0x100071a8024fa0091aa0249680700e7d00480701801ccd0097fa64c049f4","0x330093e8024330093ce01c330093e8024d480903201cd48093e8024c9809","0xdb9b125aff8d71ac0187d00606609e030330071a8024fa0091a802411007","0x49f40126b00481600e6e4049f40123500492d00e01cfa00900e030039b8","0x39d3012ffce31c30187d00618001207c039b90127d0049b9012088039ac","0xe30093d601c039f401270c049ed00e01cfa00900e7bc038073e80240380c","0x49ae0126b0038073e8024f20093d401c039f4012550049ac00e01cfa009","0xfa00900e7a0039d10127d0048073d201ce90093e8024dc80925a01c039f4","0x39e500e734049f4012738e880c3cc01ce70093e8024e70093ce01ce7009","0x39ec0127d00487501278c038750127d0049cd398030f2007398024fa009","0x49f40127480482200e6b0049f40126b00481600e01c049f401201c049e2","0xe91ac00e050049ec0127d0049ec0127800392d0127d00492d012784039d2","0x49f40126e40492d00e01cfa0093a6024f680700e7d00480701801cf612d","0xfa0090f0024ef007394024fa009394024110070f0024fa00900e77c039ca","0xfa00900e0300387f0f8032001c73ea030fa00c0f0728d612d3ba01c3c009","0x48073b801c410093e8024d71540186e0038d90127d0049c70124b403807","0x49e200e364049f40123640482200e7d4049f40127d40481600e20c049f4","0x39e40127d0049e40123700392d0127d00492d012784038070127d004807","0x6c0850287d0048823c820c968071b27d41111d00e208049f4012208049d2","0x9680700e7d00480701801ce7809802224049f40187400491800e740441c4","0xdf1c00187d004889012000039c10127d0048073d201c6b8093e80246c009","0x38d70127d0048d7012088038073e80240381400e01cfa009380024d5007","0xfa00911e0242780700e7d00480701801cdd00980423c049f40186f804988","0xfa0091ac0241100736c024fa00900e2e4038d60127d0048d70124b403807","0x39f401201c0600700f00c048071f401c498093e8024db0093ce01cde809","0xda0093e80240398700e6f0049f401235c0492d00e01cfa00937402427807","0x39f401201cf7807126024fa009368024f380737a024fa00937802411007","0x4b80928e01cd90970187d0049b3012514039b30127d004893382030f3007","0x484e00e264049f40126c00484900e6c0049f40126c80484800e01cfa009","0x38850127d004885012058039c40127d0049c4012788039af0127d004899","0x49f40126bc049e000e220049f4012220049e100e6f4049f40126f404822","0x4d8093e80246c00925a01c039f401201c0600735e220de885388050049af","0xfa00910a0240b007388024fa009388024f100713a024fa00939e024f1807","0x4e8093c001c440093e8024440093c201c4d8093e80244d80904401c42809","0xfa00900e7bc038073e80240380c00e2744409b10a7100a00913a024fa009","0x39f40126b8049ac00e01cfa0093c8024f500700e7d0049540126b003807","0xd38093e80240384c00e6a8049f401201cf480735a024fa0090fe02496807","0xfa00900e794039a40127d0049a7354030f300734e024fa00934e024f3807","0x49e200e680049f4012688049e300e688049f4012690d180c3c801cd1809","0x39ad0127d0049ad0120880387c0127d00487c012058038070127d004807","0xd012d35a1f003814012680049f4012680049e000e4b4049f40124b4049e1","0x49ac00e01cfa00936e024d600700e7d0048073de01c039f401201c06007","0xf20093d401c039f4012550049ac00e01cfa009300024f680700e7d0049b8","0x482200e678049f40126c40481600e67c049f40123500492d00e01cfa009","0xfa00900e7bc038073e80240380c00e01e0200900e3e80399d0127d00499f","0x39f4012550049ac00e01cfa009300024f680700e7d00499a01213c03807","0x49f401213c0481600e2a0049f40123540492d00e01cfa0093c8024f5007","0x499d0121d40399b0127d00499e0127300399d0127d0048a80120880399e","0x38073e8024039ef00e01cfa00900e0300380780a024038fa00e664049f4","0xf500700e7d0048dc0127b4038073e8024b400935801c039f401259c049ac","0x38ac0127d004955012058039950127d0048490124b4038073e8024f2009","0x39ef00e01cfa00900e0300380780c024038fa00e650049f401265404822","0x49e40127a8038073e80246e0093da01c039f40121200484f00e01cfa009","0xc900904401c560093e8024f280902c01cc90093e8024ee00925a01c039f4","0xf4807332024fa0093280243a807336024fa009158024e6007328024fa009","0xf300734c024fa00934c024f380734c024fa00900e7b0038af0127d004807","0x49f40126945880c3c801c588093e8024039e500e694049f40126985780c","0x499b012058038070127d0048070127880398d0127d00499801278c03998","0x49e000e4b4049f40124b4049e100e664049f40126640482200e66c049f4","0xf70093da01c039f401201c0600731a4b4cc99b00e0500498d0127d00498d","0x482200e62c049f401278c0481600e630049f40127980492d00e01cfa009","0xfa00900e7bc038073e80240380c00e01e0380900e3e8039890127d00498c","0x49f40127bc0492d00e01cfa0093dc024f680700e7d0049e701213c03807","0xfa00900e7a4039890127d0049880120880398b0127d00481401205803988","0xc38b9018798039870127d00498701279c039870127d0048072a801c5c809","0xf180717a024fa00930a610061e400e610049f401201cf280730a024fa009","0xc58093e8024c580902c01c038093e8024038093c401c5f8093e80245e809","0xfa00917e024f000725a024fa00925a024f0807312024fa00931202411007","0x39f40127140495500e01cfa00900e030038bf25a624c58070280245f809","0x610093e80240384c00e5f4049f401201cf4807302024fa00903e02496807","0xfa00900e7940397c0127d0048c22fa030f3007184024fa009184024f3807","0x49e200e5e0049f40125e8049e300e5e8049f40125f0bd80c3c801cbd809","0x39810127d004981012088038220127d004822012058038070127d004807","0xbc12d302088038140125e0049f40125e0049e000e4b4049f40124b4049e1","0x600703e0880640802c050061f40180300480c01201c039f401201c03807","0xa007032024fa00938a024e2807040024fa00902c0249680700e7d004807","0xf807040024fa00904002411007028024fa0090280240b00700e7d004807","0xfa0090400249680700e7d00480701801c118098120840d80c3e80300c809","0x880903601c088093e80241380903201c138093e80241080904001c7d009","0x118073dc024fa009036024108073de024fa0091f4024110073e0024fa009","0x1000925a01c039f401201c0600700f028048071f401cf68093e8024f8009","0x482200e7a4049f40127a80481100e7a8049f401201c138073d6024fa009","0x39ed0127d0049e901208c039ee0127d004823012084039ef0127d0049eb","0x39f401201cf780700e7d00480701801cf38098167a0049f40187b4049f0","0x61e8028030f70073cc024fa0093cc024110073cc024fa0093de02496807","0x39e20127d0049e60124b4038073e80240380c00e78c04c0c3c8794061f4","0x39e20127d0049e2012088039e50127d0049e5012058038073e802403814","0x49e20124b4038073e80240380c00e77c04c0d3c0784061f40187b80481f","0x482100e770049f40127780482200e774049f40127800499300e778049f4","0x380c00e01e0700900e3e8038db0127d0049dd012668038dc0127d0049e1","0x9f8091a801c9f8093e80240382700e368049f40127880492d00e01cfa009","0xcd0071b8024fa0093be024108073b8024fa0091b40241100728a024fa009","0xfa00900e0300384801303ca38093e80306d80935201c6d8093e8024a2809","0x484e0120640384e0127d004947012080038490127d0049dc0124b403807","0x606600e124049f40121240482200e130049f4012130049e700e130049f4","0x2480925a01c039f401201c060072d059caa92d8205502780c3e8030261e5","0xf8072d2024fa0092d20241100709e024fa00909e0240b0072d2024fa009","0xfa0092d20249680700e7d00480701801cbf0098225e4b980c3e80306e009","0xb980904201c6a8093e8024bf80904401c2d0093e8024bc80932601cbf809","0x480701801c03c1201201c7d007304024fa0090b4024cd007300024fa009","0x4986012350039860127d00480704e01cc18093e8024b480925a01c039f4","0x499a00e600049f40125f80482100e354049f401260c0482200e178049f4","0x39f401201c06007334026099930127d0061820126a4039820127d00485e","0xfa0093520240c807352024fa009326024100071a8024fa0091aa02496807","0x2780c0cc01c6a0093e80246a00904401c330093e8024330093ce01c33009","0x48d40124b4038073e80240380c00e6e0db9b125b050d71ac0187d006066","0x481f00e6e4049f40126e40482200e6b0049f40126b00481600e6e4049f4","0x38073e8024039ef00e01cfa00900e030039d3013054e31c30187d006180","0xf500700e7d0049540126b0038073e8024e30093d601c039f401270c049ed","0xf48073a4024fa0093720249680700e7d0049ae0126b0038073e8024f2009","0xf300739c024fa00939c024f380739c024fa00900e7a0039d10127d004807","0x49f4012734e600c3c801ce60093e8024039e500e734049f4012738e880c","0x49ac012058038070127d004807012788039ec0127d00487501278c03875","0x49e000e4b4049f40124b4049e100e748049f40127480482200e6b0049f4","0xe98093da01c039f401201c060073d84b4e91ac00e050049ec0127d0049ec","0xe500904401c3c0093e8024039df00e728049f40126e40492d00e01cfa009","0xfa80c3e80303c1ca3584b4ee8070f0024fa0090f0024ef007394024fa009","0x61b800e364049f401271c0492d00e01cfa00900e0300387f0f80320b1c7","0x39f50127d0049f5012058038830127d0048073b801c410093e8024d7154","0x49f40124b4049e100e01c049f401201c049e200e364049f401236404822","0x6c9f50448c0038820127d004882012748039e40127d0049e40123700392d","0x20b8890127d0061d0012460039d01107106c0850287d0048823c820c96807","0x49f401201cf48071ae024fa0091b00249680700e7d00480701801ce7809","0xfa00900e050038073e8024e000935401cdf1c00187d004889012000039c1","0x60073740260c08f0127d0061be012620038d70127d0048d701208803807","0x38b900e358049f401235c0492d00e01cfa00911e0242780700e7d004807","0x7d007126024fa00936c024f380737a024fa0091ac0241100736c024fa009","0x48d70124b4038073e8024dd00909e01c039f401201c0600700f06404807","0xda0093ce01cde8093e8024de00904401cda0093e80240398700e6f0049f4","0x494500e6cc049f401224ce080c3cc01c039f401201cf7807126024fa009","0x39b00127d0049b2012120038073e80244b80928e01cd90970187d0049b3","0x49f4012710049e200e6bc049f40122640484e00e264049f40126c004849","0x4888012784039bd0127d0049bd012088038850127d004885012058039c4","0x480701801cd788837a214e20140126bc049f40126bc049e000e220049f4","0xe20093c401c4e8093e8024e78093c601c4d8093e80246c00925a01c039f4","0xf0807136024fa0091360241100710a024fa00910a0240b007388024fa009","0x389d11026c429c40280244e8093e80244e8093c001c440093e802444009","0xf20093d401c039f4012550049ac00e01cfa00900e7bc038073e80240380c","0x48073d201cd68093e80243f80925a01c039f40126b8049ac00e01cfa009","0xd500c3cc01cd38093e8024d38093ce01cd38093e80240384c00e6a8049f4","0x39a20127d0049a4346030f2007346024fa00900e794039a40127d0049a7","0x49f40121f00481600e01c049f401201c049e200e680049f4012688049e3","0x49a00127800392d0127d00492d012784039ad0127d0049ad0120880387c","0x39f401201cf780700e7d00480701801cd012d35a1f003814012680049f4","0x38073e8024c00093da01c039f40126e0049ac00e01cfa00936e024d6007","0x399f0127d0048d40124b4038073e8024f20093d401c039f4012550049ac","0x3807834024038fa00e674049f401267c0482200e678049f40126c404816","0xc00093da01c039f40126680484f00e01cfa00900e7bc038073e80240380c","0x48d50124b4038073e8024f20093d401c039f4012550049ac00e01cfa009","0x49cc00e674049f40122a00482200e678049f401213c0481600e2a0049f4","0x380c00e01e0d80900e3e8039990127d00499d0121d40399b0127d00499e","0xfa0092d0024d600700e7d0049670126b0038073e8024039ef00e01cfa009","0x49f40121240492d00e01cfa0093c8024f500700e7d0048dc0127b403807","0x20e00900e3e8039940127d004995012088038ac0127d00495501205803995","0xf680700e7d00484801213c038073e8024039ef00e01cfa00900e03003807","0xb007324024fa0093b80249680700e7d0049e40127a8038073e80246e009","0xcd8093e80245600939801cca0093e8024c900904401c560093e8024f2809","0xd30093e8024039ec00e2bc049f401201cf4807332024fa0093280243a807","0xfa00900e794039a50127d0049a615e030f300734c024fa00934c024f3807","0x49e200e634049f4012660049e300e660049f40126945880c3c801c58809","0x39990127d0049990120880399b0127d00499b012058038070127d004807","0xc692d33266c03814012634049f4012634049e000e4b4049f40124b4049e1","0x398c0127d0049e60124b4038073e8024f70093da01c039f401201c06007","0x380783a024038fa00e624049f40126300482200e62c049f401278c04816","0xf70093da01c039f401279c0484f00e01cfa00900e7bc038073e80240380c","0x482200e62c049f40120500481600e620049f40127bc0492d00e01cfa009","0x49e700e61c049f401201caa007172024fa00900e7a4039890127d004988","0x39840127d0048073ca01cc28093e8024c38b9018798039870127d004987","0xfa00900e024f100717e024fa00917a024f180717a024fa00930a610061e4","0x968093c201cc48093e8024c480904401cc58093e8024c580902c01c03809","0x380c00e2fc9698931601c0a00917e024fa00917e024f000725a024fa009","0x48073d201cc08093e80240f80925a01c039f40127140495500e01cfa009","0xbe80c3cc01c610093e8024610093ce01c610093e80240384c00e5f4049f4","0x397a0127d00497c2f6030f20072f6024fa00900e7940397c0127d0048c2","0x49f40120880481600e01c049f401201c049e200e5e0049f40125e8049e3","0x49780127800392d0127d00492d012784039810127d00498101208803822","0x600c0120300480700e7d00480700e01cbc12d302088038140125e0049f4","0x100093e80240b00925a01c039f401201c0600703e0880641e02c050061f4","0xfa00904002411007028024fa0090280240b007032024fa00938a024e2807","0x9680700e7d00480701801c1180983e0840d80c3e80300c80903e01c10009","0xd8093e80240d80904201c138093e80241080904001c7d0093e802410009","0xfa00c0360240f80704e024fa00904e024f38071f4024fa0091f402411007","0x100073dc024fa0091f40249680700e7d00480701801cf78098407c00880c","0xf50093e8024f680903201cf58093e80241380903201cf68093e8024f8009","0xf70093e8024f700904401c088093e80240880904201c039f401201c0a007","0x60073ce026109e83d2030fa00c0220240f8073d4024fa0093d4024f3807","0x110073ca024fa0093d0024c98073cc024fa0093dc0249680700e7d004807","0xf10093e8024f280933401cf18093e8024f480904201cf20093e8024f3009","0x138073c2024fa0093dc0249680700e7d00480701801c03c2201201c7d007","0x39e40127d0049e1012088039df0127d0049e0012350039e00127d004807","0x49f4018788049a900e788049f401277c0499a00e78c049f401279c04821","0xef00904001cee0093e8024f200925a01c039f401201c060073ba026119de","0x110071b6024fa0091b6024f38071b6024fa0091b80240c8071b8024fa009","0x380c00e51404c2427e368061f401836c0a00c2bc01cee0093e8024ee009","0x482200e368049f40123680481600e51c049f40127700492d00e01cfa009","0xfa00900e0300384e013094248480187d0061e301207c039470127d004947","0x484c0120880384f0127d00484901264c0384c0127d0049470124b403807","0x38fa00e59c049f401213c0499a00e554049f40121200482100e550049f4","0xfa00900e09c039680127d0049470124b4038073e80240380c00e01e13009","0x2700904201caa0093e8024b400904401cb98093e8024b48091a801cb4809","0x4c272f2024fa00c2ce024d48072ce024fa0092e6024cd0072aa024fa009","0x49f40125e40482000e5fc049f40125500492d00e01cfa00900e0300397e","0x497f012088038d50127d0048d501279c038d50127d00485a0120640385a","0x480701801c2f1863064b614182300030fa00c1aa3680606600e5fc049f4","0xc980904401cc00093e8024c000902c01cc98093e8024bf80925a01c039f4","0x39f401201c06007352026148d4334030fa00c2aa0240f807326024fa009","0xfa0090cc02411007358024fa0091a8024c98070cc024fa00932602496807","0x48071f401cdb8093e8024d600933401cd88093e8024cd00904201cd7009","0x49f401201c13807370024fa0093260249680700e7d00480701801c03c2a","0x49a9012084039ae0127d0049b8012088039c30127d0049b9012350039b9","0xe9809856718049f40186dc049a900e6dc049f401270c0499a00e6c4049f4","0xe88093e8024e300904001ce90093e8024d700925a01c039f401201c06007","0xfa0093a40241100739c024fa00939c024f380739c024fa0093a20240c807","0xfa00900e030039ca3d81d496c2c398734061f4018738c000c0cc01ce9009","0xe680902c01cfa8093e8024e61820186e0038780127d0049d20124b403807","0xf8073ea024fa0093ea024e90070f0024fa0090f00241100739a024fa009","0xfa0090f00249680700e7d00480701801c3f80985a1f0e380c3e8030d8809","0x4180903601c418093e80244100903201c410093e80243e00904001c6c809","0x11807388024fa00938e024108071b0024fa0091b20241100710a024fa009","0x3c00925a01c039f401201c0600700f0b8048071f401c440093e802442809","0x482200e73c049f40122240481100e224049f401201c138073a0024fa009","0x38880127d0049cf01208c039c40127d00487f012084038d80127d0049d0","0xfa0091b00249680700e7d00480701801ce080985e35c049f4018220049f0","0x4c3011e6f8061f401835ce680c3dc01ce00093e8024e000904401ce0009","0x49f40126f80481600e358049f40127000492d00e01cfa00900e030039ba","0x38930130c4de9b60187d0061c401207c038d60127d0048d6012088039be","0x39b40127d0049bd012080039bc0127d0048d60124b4038073e80240380c","0x49f40126f00482200e25c049f40126cc0481b00e6cc049f40126d004819","0x21900900e3e8038990127d00489701208c039b00127d0049b6012084039b2","0x4d8093e80240382700e6bc049f40123580492d00e01cfa00900e03003807","0xfa00912602410807364024fa00935e0241100713a024fa00913602408807","0x39aa0130ccd68093e80304c8093e001c4c8093e80244e80904601cd8009","0x39a70127d0049a7012088039a70127d0049b20124b4038073e80240380c","0xd380925a01c039f401201c060073440261a1a3348030fa00c35a6f8061ee","0xf807340024fa00934002411007348024fa0093480240b007340024fa009","0xfa0093400249680700e7d00480701801cce80986a678cf80c3e8030d8009","0xcc80903601ccc8093e8024cd80903201ccd8093e8024cf00904001c54009","0x11807328024fa00933e02410807158024fa0091500241100732a024fa009","0xd000925a01c039f401201c0600700f0d8048071f401cc90093e8024ca809","0x482200e694049f40126980481100e698049f401201c1380715e024fa009","0x39920127d0049a501208c039940127d00499d012084038ac0127d0048af","0xfa0091580249680700e7d00480701801ccc00986e2c4049f4018648049f0","0x4c38316630061f40182c4d200c3dc01cc68093e8024c680904401cc6809","0x49f40126300481600e620049f40126340492d00e01cfa00900e03003989","0x39850130e4c38b90187d00619401207c039880127d0049880120880398c","0x38bd0127d00498701264c039840127d0049880124b4038073e80240380c","0x49f40122f40499a00e604049f40122e40482100e2fc049f401261004822","0x38c20127d0049880124b4038073e80240380c00e01e1d00900e3e80397d","0x5f8093e80246100904401cbd8093e8024be0091a801cbe0093e802403827","0xfa00c2fa024d48072fa024fa0092f6024cd007302024fa00930a02410807","0x482000e5dc049f40122fc0492d00e01cfa00900e030039780130ecbd009","0x38c90127d0048c901279c038c90127d004976012064039760127d00497a","0x60072e20261e1722e8030fa00c1926300607f00e5dc049f40125dc04822","0x110072e8024fa0092e80240b0072e0024fa0092ee0249680700e7d004807","0x480701801c7000987a5b43580c3e8030c080903e01cb80093e8024b8009","0x39f40125b4049eb00e01cfa0090d6024f680700e7d0048073de01c039f4","0x38073e8024d18093d401c039f401262c049ea00e01cfa0092e4024e2007","0xe980700e7d00493f0128c4038073e8024fa80911001c039f401223c049ea","0xf48071be024fa0092e00249680700e7d0049eb01274c038073e8024f5009","0xf30071ba024fa0091ba024f38071ba024fa00900e7a0038de0127d004807","0x49f4012598b200c3c801cb20093e8024039e500e598049f40123746f00c","0x4974012058038070127d004807012788039620127d00496301278c03963","0x49e000e4b4049f40124b4049e100e37c049f401237c0482200e5d0049f4","0x700093da01c039f401201c060072c44b46f97400e050049620127d004962","0xb080904401cb00093e8024039df00e584049f40125c00492d00e01cfa009","0xaf80c3e8030b01612e84b4ee8072c0024fa0092c0024ef0072c2024fa009","0x495e0124b4038073e8024039ef00e01cfa00900e0300395a2b80321f15e","0xab80904401caf8093e8024af80902c01cab0093e8024039dc00e55c049f4","0xf380725a024fa00925a024f080700e024fa00900e024f10072ae024fa009","0x9f8093e80249f80946401cf50093e8024f50093ce01cf58093e8024f5809","0xfa0093460246e00711e024fa00911e0246e0073ea024fa0093ea024e9007","0xaf82346601cb90093e8024b90093a001cc58093e8024c58091b801cd1809","0x6d0072a2548768eb2a6050fa0092e462cd188f3ea4fcf51eb2ac4b403957","0x39f401253c0493f00e01cfa00900e0300394d0130fca78093e8030a8809","0x61f40125280494500e528049f401201cf4807298024fa0091d602496807","0x48f7012124038f70127d0048f5012120038073e8024a400928e01c7a948","0x481600e3b4049f40123b4049e200e524049f40125180484e00e518049f4","0x39520127d0049520127840394c0127d00494c012088039530127d004953","0x9680700e7d00480701801ca495229854c76814012524049f4012524049e0","0x768093e8024768093c401ca00093e8024a68093c601ca58093e802475809","0xfa0092a4024f0807296024fa009296024110072a6024fa0092a60240b007","0xfa00900e030039402a452ca98ed028024a00093e8024a00093c001ca9009","0x38073e8024c58093d401c039f40125c8049c400e01cfa00900e7bc03807","0x11880700e7d0049f5012220038073e8024478093d401c039f401268c049ea","0x492d00e01cfa0093d6024e980700e7d0049ea01274c038073e80249f809","0x49e700e3fc049f401201c260071fa024fa00900e7a4038fe0127d00495a","0x39010127d0048073ca01c9f0093e80247f8fd018798038ff0127d0048ff","0xfa00900e024f1007274024fa009276024f1807276024fa00927c404061e4","0x968093c201c7f0093e80247f00904401cae0093e8024ae00902c01c03809","0x380c00e4e8968fe2b801c0a009274024fa009274024f000725a024fa009","0xfa0093d6024e980700e7d0049810127b4038073e8024039ef00e01cfa009","0x39f401223c049ea00e01cfa009346024f500700e7d00498b0127a803807","0x38073e8024f50093a601c039f40124fc04a3100e01cfa0093ea02444007","0x49f40124d80482200e4dc049f40125c40481600e4d8049f40125dc0492d","0x484f00e01cfa00900e7bc038073e80240380c00e01e2000900e3e803934","0xc58093d401c039f40127ac049d300e01cfa009302024f680700e7d004978","0x49f5012220038073e8024478093d401c039f401268c049ea00e01cfa009","0xfa00917e0249680700e7d0049ea01274c038073e80249f80946201c039f4","0x48073d201c9a0093e80249880904401c9b8093e8024c600902c01c98809","0x9800c3cc01c860093e8024860093ce01c860093e802403a3400e4c0049f4","0x392a0127d00490925c030f200725c024fa00900e794039090127d00490c","0x49f40124dc0481600e01c049f401201c049e200e4a0049f40124a8049e3","0x49280127800392d0127d00492d012784039340127d00493401208803937","0x39f401201cf780700e7d00480701801c9412d2684dc038140124a0049f4","0x38073e8024f50093a601c039f40127ac049d300e01cfa009328024f6807","0x11880700e7d0049f5012220038073e8024478093d401c039f401268c049ea","0x391d0127d004989012058039260127d00498d0124b4038073e80249f809","0x39ef00e01cfa00900e03003807882024038fa00e460049f401249804822","0x49eb01274c038073e8024ca0093da01c039f40126600484f00e01cfa009","0xfa00911e024f500700e7d0049a30127a8038073e8024f50093a601c039f4","0x49f40122b00492d00e01cfa00927e0251880700e7d0049f501222003807","0xfa00900e7a4039180127d0048000120880391d0127d0049a401205803800","0x118a3001879803a310127d004a3101279c03a310127d00480746a01d18009","0xf1807468024fa0094648cc061e400e8cc049f401201cf2807464024fa009","0x8e8093e80248e80902c01c038093e8024038093c401d1a8093e80251a009","0xfa00946a024f000725a024fa00925a024f0807230024fa00923002411007","0x38073e8024039ef00e01cfa00900e03003a3525a4608e8070280251a809","0x11880700e7d0049ea01274c038073e8024f58093a601c039f40126c0049ed","0x492d00e01cfa0093ea0244400700e7d00488f0127a8038073e80249f809","0x3a390127d004a3601208803a380127d0049a201205803a360127d0049a7","0x49aa01213c038073e8024039ef00e01cfa00900e03003807884024038fa","0xfa0093d4024e980700e7d0049eb01274c038073e8024d80093da01c039f4","0x39f40127d40488800e01cfa00911e024f500700e7d00493f0128c403807","0xfa0093f002411007470024fa00937c0240b0073f0024fa00936402496807","0xfa009478024f3807478024fa00900e73c03a3b0127d0048073d201d1c809","0x11f80c3c801d1f8093e8024039e500e8f4049f40128f11d80c3cc01d1e009","0x38070127d00480701278803a410127d004a4001278c03a400127d004a3d","0x49f40124b4049e100e8e4049f40128e40482200e8e0049f40128e004816","0x39f401201c060074824b51ca3800e05004a410127d004a410127800392d","0xe980700e7d0049eb01274c038073e8024e20093da01c039f401201cf7807","0x492d00e01cfa0093ea0244400700e7d00493f0128c4038073e8024f5009","0x3a430127d0049f901208803a420127d0049ba012058039f90127d0049c0","0x49c101213c038073e8024039ef00e01cfa00900e03003807886024038fa","0xfa0093d4024e980700e7d0049eb01274c038073e8024e20093da01c039f4","0x49f40123600492d00e01cfa0093ea0244400700e7d00493f0128c403807","0xfa00900e7a403a430127d004a4401208803a420127d0049cd01205803a44","0x12324501879803a460127d004a4601279c03a460127d00480738201d22809","0xf18073ee024fa00948e924061e400e924049f401201cf280748e024fa009","0x1210093e80252100902c01c038093e8024038093c401d250093e8024fb809","0xfa009494024f000725a024fa00925a024f0807486024fa00948602411007","0x38073e8024039ef00e01cfa00900e03003a4a25a90d2100702802525009","0xe980700e7d0049820126b0038073e8024e500935801c039f40127b0049ac","0x49ed00e01cfa00927e0251880700e7d0049ea01274c038073e8024f5809","0x11007498024fa0090ea0240b007496024fa0093a40249680700e7d0049b1","0x48073de01c039f401201c0600700f110048071f401d268093e802525809","0xfa0093d6024e980700e7d0049820126b0038073e8024e980909e01c039f4","0x39f40126c4049ed00e01cfa00927e0251880700e7d0049ea01274c03807","0xfa00949c02411007498024fa0093000240b00749c024fa00935c02496807","0x48071f401d280093e8025268090ea01d278093e80252600939801d26809","0x38073e8024c300935801c039f401201cf780700e7d00480701801c03c45","0xe980700e7d0049eb01274c038073e8024aa8093da01c039f4012178049ac","0xb0074a2024fa0092fe0249680700e7d00493f0128c4038073e8024f5009","0x600700f118048071f401d2a0093e80252880904401d298093e8024c1809","0x49550127b4038073e8024bf00909e01c039f401201cf780700e7d004807","0xfa00927e0251880700e7d0049ea01274c038073e8024f58093a601c039f4","0x4a5501208803a530127d0048da01205803a550127d0049540124b403807","0x39e900e940049f40129500487500e93c049f401294c049cc00e950049f4","0x61e600e95c049f401295c049e700e95c049f401201cdf0074ac024fa009","0x12c8093e8024fb25801879003a580127d0048073ca01cfb0093e80252ba56","0xfa00949e0240b00700e024fa00900e024f10074b4024fa0094b2024f1807","0x12d0093c001c968093e8024968093c201d280093e80252800904401d27809","0xfa00900e7bc038073e80240380c00e96896a5049e01c0a0094b4024fa009","0x39f40127a8049d300e01cfa0093d6024e980700e7d0049e30127b403807","0xfa0094b6024110074b8024fa00928a0240b0074b6024fa0093b802496807","0x2780700e7d0048073de01c039f401201c0600700f11c048071f401d2e809","0x49d300e01cfa0093d6024e980700e7d0049e30127b4038073e8024ee809","0x110074b8024fa0090280240b0074bc024fa0093c80249680700e7d0049ea","0xf3807890024fa00900e23c03a5f0127d0048073d201d2e8093e80252f009","0x2250093e8024039e500f124049f40131212f80c3cc01e240093e802624009","0x480701278803c4c0127d004c4b01278c03c4b0127d004c49894030f2007","0x49e100e974049f40129740482200e970049f40129700481600e01c049f4","0x60078984b52ea5c00e05004c4c0127d004c4c0127800392d0127d00492d","0x7d00925a01c039f401209c049d300e01cfa0093de024f680700e7d004807","0x2278093ce01e278093e8024039ec00f138049f401201cf480789a024fa009","0xf20078a2024fa00900e79403c500127d004c4f89c030f300789e024fa009","0x49f401201c049e200f14c049f4013148049e300f148049f40131422880c","0x492d01278403c4d0127d004c4d012088038140127d00481401205803807","0x480701801e2992d89a0500381401314c049f401314c049e000e4b4049f4","0xfa00900e7a403c540127d0048200124b4038073e8024118093da01c039f4","0x22b45501879803c560127d004c5601279c03c560127d0048072a801e2a809","0xf18078b2024fa0098af160061e400f160049f401201cf28078ae024fa009","0xa0093e80240a00902c01c038093e8024038093c401e2d0093e80262c809","0xfa0098b4024f000725a024fa00925a024f08078a8024fa0098a802411007","0x39f40127140495500e01cfa00900e03003c5a25b1500a0070280262d009","0x22e8093e80240384c00f170049f401201cf48078b6024fa00903e02496807","0xfa00900e79403c5e0127d004c5d8b8030f30078ba024fa0098ba024f3807","0x49e200f180049f40127ec049e300e7ec049f401317a2f80c3c801e2f809","0x3c5b0127d004c5b012088038220127d004822012058038070127d004807","0x23012d8b608803814013180049f4013180049e000e4b4049f40124b4049e1","0x4809012088038070127d0048070120580382202c030fa00938a024d6807","0xa23600e4b4049f40124b4049e100e030049f4012030049e200e024049f4","0x2308230127d0060210128e0038210360641001f0287d00482225a03004807","0x49f40120800492d00e01cfa0090460251c80700e7d00480701801c7d009","0xfa0093e00251d8073e0024fa009022024fc007022024fa00900e59c03827","0xf68092fc01cf68093e8024f700947a01c039f40127bc04a3c00e7b8f780c","0x482200e7a4049f401201c2d0073d4024fa0093d6024bf8073d6024fa009","0x39ea0127d0049ea012600039e90127d0049e9012354038270127d004827","0xfa00900e030039e33c879496c623cc79cf412d3e8030f51e903609ce2982","0x49e601279c039e20127d0049e80124b4039e80127d0049e801208803807","0x61ee00e788049f40127880482200e79c049f401279c049e100e798049f4","0xfa0093c40249680700e7d00480701801cef8098c6780f080c3e8030f301f","0xef00904401cf08093e8024f080902c01cee8093e8024f000930601cef009","0x9680700e7d00480701801cee0098c801cfa00c3ba024588073bc024fa009","0x49f401236c0498300e36c0a00c3e80240a0092ee01c6e0093e8024ef009","0x380c00e4fc04c6500e7d0060da0122c4038dc0127d0048dc012088038da","0x48dc0124b4038073e80240a0093d401c039f4012058049aa00e01cfa009","0x484801279c038480127d00480747e01ca38093e8024039e900e514049f4","0x61e400e138049f401201cf2807092024fa00909051c061e600e120049f4","0xf08093e8024f080902c01c278093e80242600948001c260093e80242484e","0xfa0093ce024f0807032024fa009032024f100728a024fa00928a02411007","0xfa00900e0300384f3ce064a29e1028024278093e80242780948201cf3809","0x49f401201cb38072a8024fa0091b80249680700e7d00493f01263003807","0xfa00900e168039680127d0049550125fc039670127d00481401260c03955","0xb400930001cb48093e8024b48091aa01caa0093e8024aa00904401cb4809","0x2d17f2fc4b6331792e6030fa00c2ce5a0b49e72a8050fc8072d0024fa009","0x6a8093e8024b980925a01cb98093e8024b980904401c039f401201c06007","0xfa00930402521807304024fa0093000580624200e600049f401201c13807","0xc8093c401c6a8093e80246a80904401cf08093e8024f080902c01cc1809","0xa009306024fa009306025208072f2024fa0092f2024f0807032024fa009","0xbf00904401c039f4012058049aa00e01cfa00900e030039832f20646a9e1","0x61e400e178049f401201cf280730c024fa0092fc024968072fc024fa009","0xf08093e8024f080902c01ccd0093e8024c980948001cc98093e80242d05e","0xfa0092fe024f0807032024fa009032024f100730c024fa00930c02411007","0xfa00900e0300399a2fe064c31e1028024cd0093e8024cd00948201cbf809","0x39f4012058049aa00e01cfa009028024f500700e7d0049dc01263003807","0x330093e802403a4400e6a4049f401201cf48071a8024fa0093bc02496807","0xfa00900e794039ac0127d004866352030f30070cc024fa0090cc024f3807","0x481600e6dc049f40126c404a4000e6c4049f40126b0d700c3c801cd7009","0x38190127d004819012788038d40127d0048d4012088039e10127d0049e1","0xdb9e7032350f08140126dc049f40126dc04a4100e79c049f401279c049e1","0x9680700e7d0048160126a8038073e80240a0093d401c039f401201c06007","0xf3807386024fa00900e618039b90127d0048073d201cdc0093e8024f1009","0x49f401277c0481600e718049f401270cdc80c3cc01ce18093e8024e1809","0x49c6012178039d10127d0049e7012784039d20127d0049b8012088039d3","0x39f4012058049aa00e01cfa00900e030038078ce024038fa00e738049f4","0x49f40127940492d00e794049f40127940482200e01cfa009028024f5007","0x49e4012784039d20127d0049cd012088039d30127d00481f012058039cd","0xe600c3c801ce60093e8024039e500e738049f401278c0485e00e744049f4","0x39d30127d0049d3012058039ec0127d004875012900038750127d0049ce","0x49f4012744049e100e064049f4012064049e200e748049f401274804822","0x39f401201c060073d87440c9d23a6050049ec0127d0049ec012904039d1","0xe50093e80241000925a01c039f4012050049ea00e01cfa00902c024d5007","0xfa0093940241100703e024fa00903e0240b0070f0024fa0091f402520007","0x3c00948201c0d8093e80240d8093c201c0c8093e80240c8093c401ce5009","0x48073ea01c100093e80240387800e1e00d81939407c0a0090f0024fa009","0x49f4012064049f800e064049f401201cb380700e7d0048073de01c039f4","0x48230128f4038073e80241080947801c118210187d00481b0128ec0381b","0x385a00e044049f401209c0497f00e09c049f40123e80497e00e3e8049f4","0xc1007022024fa009022024c00073e0024fa0093e00246a8073e0024fa009","0x39f401201c060073d47acf692d8d007cf71ef25a7d0060113e04b4049c5","0x481f040030e38073d2024fa0093de024968073de024fa0093de02411007","0x61ee00e7a4049f40127a40482200e7b8049f40127b8049e100e07c049f4","0xfa0093d20249680700e7d00480701801cf30098d279cf400c3e80300f807","0x481600e78c049f40127900498300e790f380c3e8024f38092ee01cf2809","0x4c6a00e7d0061e30122c4039e50127d0049e5012088039e80127d0049e8","0x38073e80240b0093d401c039f401279c049ea00e01cfa00900e030039e2","0x9680700e7d0049c50126a8038073e80240a0093d401c039f401208804888","0xf38073be024fa00900e914039e00127d0048073d201cf08093e8024f2809","0xee8093e8024039e500e778049f401277cf000c3cc01cef8093e8024ef809","0x49e8012058038dc0127d0049dc012900039dc0127d0049de3ba030f2007","0x49e100e030049f4012030049e200e784049f40127840482200e7a0049f4","0x60071b87b8061e13d0050048dc0127d0048dc012904039ee0127d0049ee","0x481600e36c049f40127940492d00e01cfa0093c4024c600700e7d004807","0x380c0127d00480c012788038db0127d0048db012088039e80127d0049e8","0xfa0091b40246e0071b4050061f40120500497700e7b8049f40127b8049e1","0x494c00e4fc049f40124fc048dc00e4fcf380c3e8024f38092ee01c6d009","0xe29ee01836cf401f48c01ca28093e8024a28093a401ca28220187d004822","0xaa0098d613c049f4018130048da00e1302704909051c0a1f40125149f8da","0x39670127d0048073d201caa8093e80242400925a01c039f401201c06007","0xfa00902c024c18072d2024fa0092d059c061e600e5a0049f401205004983","0x440072fe5f8061f40120880494d00e5e4049f40125ccb480c3cc01cb9809","0x6a80c3e80242d00929401c2d17f0187d00497f012530038073e8024bf009","0xfa0093040247a807304024fa0091aa024a400700e7d0049800126b003980","0xd6007326178061f40125fc0494a00e618049f401260cbc80c3cc01cc1809","0x38d40127d00499a0123d40399a0127d004993012520038073e80242f009","0x61f40126a40494500e198049f401201d23807352024fa0091a8618061e6","0x4955012088039b10127d0049ae012120038073e8024d600928e01cd71ac","0xa24900e6c4049f40126c4048d900e198049f4012198049e700e554049f4","0x39f401201c060073a6718e192d8d86e4dc1b725a7d0061b10cc79c27155","0x49f40126dc0492d00e6dc049f40126dc0482200e01cfa009372024aa807","0xfa00900e09c038073e8024e700909e01ce71d10187d00484f0124a0039d2","0x481600e1d4049f401273004a4300e730049f4012734e880c48401ce6809","0x38490127d004849012788039d20127d0049d2012088039470127d004947","0x3a9b8092748a38140121d4049f40121d404a4100e6e0049f40126e0049e1","0x39c30127d0049c3012088038073e80242780927e01c039f401201c06007","0x49f401274ce500c3c801ce50093e8024039e500e7b0049f401270c0492d","0x49ec012088039470127d004947012058039f50127d00487801290003878","0x4a4100e718049f4012718049e100e124049f4012124049e200e7b0049f4","0xa0093d401c039f401201c060073ea718249ec28e050049f50127d0049f5","0x48160127a8038073e80241100911001c039f401279c049ea00e01cfa009","0xa380902c01c3e0093e8024aa00948001ce38093e80242400925a01c039f4","0xf0807092024fa009092024f100738e024fa00938e0241100728e024fa009","0x387c09c124e39470280243e0093e80243e00948201c270093e802427009","0x49ea00e01cfa009028024f500700e7d0049c50126a8038073e80240380c","0x39e900e1fc049f40127a40492d00e01cfa0090440244400700e7d004816","0x61e600e208049f4012208049e700e208049f401201cc30071b2024fa009","0x6c0093e80243f80904401c428093e8024f300902c01c418093e8024410d9","0x3c6d01201c7d007110024fa0091060242f007388024fa0093dc024f0807","0xf500700e7d0049c50126a8038073e80241100911001c039f401201c06007","0x482200e01cfa0090400246b80700e7d0048160127a8038073e80240a009","0x38850127d004807012058039d00127d0049ed0124b4039ed0127d0049ed","0x49f40127a80485e00e710049f40127ac049e100e360049f401274004822","0x49cf012900039cf0127d004888112030f2007112024fa00900e79403888","0x49e200e360049f40123600482200e214049f40122140481600e35c049f4","0x48d70127d0048d7012904039c40127d0049c40127840380c0127d00480c","0xb0140187d00600900e0300480700e7d0048073de01c6b9c401836042814","0xe28093ee01c100093e80240b00925a01c039f401201c0600703e0880646e","0x38200127d004820012088038140127d0048140120580381938a030fa009","0x39f4012714049d300e01cfa00900e0300381b0131bc039f4018064048b1","0x482301803125807046024fa00925a02525007042024fa00904002496807","0x482200e050049f40120500481600e09c049f40123e804a4c00e3e8049f4","0x480701801c138210284b4048270127d004827012934038210127d004821","0x480c012714038110127d0048200124b4038073e80240d80931801c039f4","0x61f001207c038110127d004811012088038073e80240381400e7c0049f4","0x39eb0127d0048110124b4038073e80240380c00e7b404c703dc7bc061f4","0x49f40127a40481b00e7a4049f40127a80481900e7a8049f40127b804820","0x49e801208c039e60127d0049ef012084039e70127d0049eb012088039e8","0x49f40120440492d00e01cfa00900e030038078e2024038fa00e794049f4","0xfa0093c8024110073c4024fa0093c6024088073c6024fa00900e09c039e4","0xf300909001cf28093e8024f100904601cf30093e8024f680904201cf3809","0x38073e80240380c00e77c04c723c0024fa00c3ca024f80073c2024fa009","0xee8093e8024f012d018798039de0127d0049e70124b4038073e8024039ef","0xfa0090280240b0071b8024fa0093b87140624e00e770049f401201cc3807","0xee8090bc01cf08093e8024f08091b201cef0093e8024ef00904401c0a009","0xfa0091b8774f09de028050410071b8024fa0091b8024f38073ba024fa009","0x38073e8024039ef00e01cfa00900e0300393f1b436c9680927e3686d92d","0x39450127d0049e70124b4038073e80249680928e01c039f4012714049d3","0xfa00909002526007090024fa00928e7840624b00e51c049f401277c04a4f","0x2480949a01ca28093e8024a280904401c0a0093e80240a00902c01c24809","0x39f4012714049d300e01cfa00900e0300384928a05096809092024fa009","0x270093e80240f80925a01c039f40120300495500e01cfa00925a024a3807","0x278093e8024278093ce01c278093e80240384c00e130049f401201cf4807","0x49542aa030f20072aa024fa00900e794039540127d00484f098030f3007","0x482200e088049f40120880481600e5a0049f401259c04a5000e59c049f4","0x48074a201cb404e0444b4049680127d0049680129340384e0127d00484e","0xfa00900e1e0038110127d0048074a801c7d0093e802403a5300e084049f4","0x969f40184b40480c35c01c039f401201cf780700e7d0048073ea01cf7809","0xf70093e8024f700904401c039f401201c060073d07a4f512d8e67acf69ee","0xfa0093d6024db8073d6024fa0093d6024d88073ce024fa0093dc02496807","0x38073e8024f200938c01cf09e23c6790f28143e8024f300937201cf3009","0x12a80700e7d0049e101274c038073e8024f10093d401c039f401278c049ea","0xef92d3e8024f00094ae01cf00093e8024f28094ac01cf28093e8024f2809","0xfa009040024fb00700e7d0049dd0127a8038073e8024ef80938801cee9de","0x482200e7b4049f40127b4049e100e778049f4012778049d000e7701000c","0x600727e368064741b6370061f4018778ee00725a960039e70127d0049e7","0x3a5900e514049f401279c0492d00e01cfa0091b6024e200700e7d004807","0x384e092030fa0090900252d807090024fa00928e0252d00728e024fa009","0x278093e8024260092fc01c260093e8024270094ba01c039f401212404a5c","0x49f40125140482200e554049f401201c2d0072a8024fa00909e024bf807","0x48dc012058039540127d004954012600039550127d00495501235403945","0x39732d25a096c753e009cb392d3e8030aa1553da514e298200e370049f4","0x39790127d0049670124b4039670127d004967012088038073e80240380c","0x49f4012030049e200e5e4049f40125e40482200e370049f401237004816","0x1100929801cbf0093e8024bf0091b801cbf0160187d0048160125dc0380c","0x381f0127d00481f01279c0397f0127d00497f0127480397f044030fa009","0x49f03de030e380704e024fa00904e0440625e00e080049f4012080049d0","0x2240073046006a85a38a7d00482003e5fcbf00c2f23701125f00e7c0049f4","0x49f40123540492d00e01cfa00900e030039860131d8c18093e8030c1009","0x49f4012668049e700e668049f401201e24807326024fa00900e7a40385e","0x497700e6a4049f40127c06a00c3cc01c6a0093e8024cd1930187980399a","0x49f40126b0d480c3cc01cd60093e80243300930601c330140187d004814","0xdb80928a01cdb8093e8024d89ae018798039b10127d004983013128039ae","0x225807372024fa0093720241080700e7d0049b801251c039b9370030fa009","0xe30093e80240385a00e08c049f401270c04c4c00e70cdc80c3e8024dc809","0xe30091aa01ce98230187d004823013138038230127d0048231f403226807","0xe900c3e8030e99c60b44b6278070bc024fa0090bc0241100738c024fa009","0x118098a001c039f401274404c5000e01cfa00900e030039cd39c0323b9d1","0x4822012220038073e8024108098a201c039f40120640494700e01cfa009","0xfa00938a024d500700e7d0048140127a8038073e80240b0093d401c039f4","0x49f401201cf4807398024fa0090bc0249680700e7d0049b90127b403807","0x49ec0ea030f30073d8024fa0093d8024f38073d8024fa00900f14803875","0x49e200e7d4049f40127300482200e1e0049f40127480481600e728049f4","0x380c00e01e3c00900e3e80387c0127d0049ca012178039c70127d004980","0x480717201c3f8093e80242f00925a01c039f401273404c5000e01cfa009","0x482200e738049f40127380481600e208049f40126e40484800e364049f4","0x38820127d004882012364039800127d0049800127880387f0127d00487f","0xe20d810a20ce29f4012364411800fe7380a45300e364049f4012364049e7","0x48850124b4038073e80240380c00e74004c79110024fa00c3880262a007","0x39c038235c969f401222004c5600e73c049f401208c04c5500e224049f4","0x61f401273ce08d825a2b0038073e8024e000909e01c039f401235c04955","0x48d6013164038d60127d0049ba013160039ba0127d0048078ae01c479be","0x481900e24c049f40126f404c5b00e01cfa00936c0262d00737a6d8061f4","0xda08f0187d00488f0127dc0388f0127d00488f01279c039bc0127d004893","0x49e700e25cd980c3e8024da1bc37c4b456007378024fa009378024f3807","0x49f40126c004c5c00e6c0d900c3e80244b883018650038970127d004897","0x489b01317c038073e8024d78098bc01c4d9af0187d00489901317403899","0x385a00e6a8049f40126b40497f00e6b4049f40122740497e00e274049f4","0xf100734e024fa00934e0246a807112024fa0091120241100734e024fa009","0x61aa34e09c449c530401cd90093e8024d900902c01cd98093e8024d9809","0xfa0093480241100700e7d00480701801ccf19f3404b63d1a2346690969f4","0xfa009344024f380700e7d00480702801cce8093e8024d200925a01cd2009","0xd100916201cce8093e8024ce80904401cd18093e8024d18093c201cd1009","0x13807336024fa00933a0249680700e7d00480701801c540098f601cfa00c","0x38ac0127d00499b012088039950127d004999012660039990127d004807","0x498c00e01cfa00900e030038078f8024038fa00e650049f40126540498d","0x498b00e2bc049f401201c13807324024fa00933a0249680700e7d0048a8","0x39940127d0049a6012634038ac0127d004992012088039a60127d0048af","0xfa009162026300073302c4061f4012694049fb00e694049f401265004989","0xfa009330024c6807318024fa00931a024c580731a024fa00900e09c03807","0x39890131f4c58093e8030cc00931001cc60093e8024c600931a01ccc009","0xc4807310024fa0091580249680700e7d00498b01213c038073e80240380c","0xc28093e80245c80931a01cc38093e8024c400904401c5c8093e8024c6009","0x492d00e01cfa0093120242780700e7d00480701801c03c7e01201c7d007","0x39850127d00498c012634039870127d004984012088039840127d0048ac","0x39f401201cf780700e7d00480701801c5f8098fe2f4049f401861404988","0x38073e80240b0093d401c039f40120880488800e01cfa00917a02427807","0xe980700e7d00481901251c038073e8024e280935401c039f4012050049ea","0xf4807302024fa00930e0249680700e7d004821013144038073e802447809","0xf3007184024fa009184024f3807184024fa00900f2000397d0127d004807","0x49f40125f0bd80c3c801cbd8093e8024039e500e5f0049f4012308be80c","0x4981012088039b20127d0049b2012058039780127d00497a0129000397a","0x4a4100e68c049f401268c049e100e6cc049f40126cc049e200e604049f4","0x5f80909e01c039f401201c060072f068cd9981364050049780127d004978","0xbb0098b001cbb0093e802403c5700e5dc049f401261c0492d00e01cfa009","0x22d80700e7d004974013168039722e8030fa0091920262c807192024fa009","0x4780c3e8024478093ee01cb80093e8024b880903201cb88093e8024b9009","0xf38072da06c061f40121acb81b325a2b0039700127d00497001279c0386b","0x49f401201c138071be380061f40125b4d900c32801cb68093e8024b6809","0x48df0125fc039660127d0048dd013204038dd0127d0048de012660038de","0xb18091aa01cbb8093e8024bb80904401cb18093e80240385a00e590049f4","0x381b0127d00481b042032410072cc024fa0092cc024f38072c6024fa009","0x96c832c2588061f4018598b21633465dc0a1f900e380049f401238004816","0x49620124b4039620127d004962012088038073e80240380c00e578af960","0xb0072ae024fa0092b4026420072b4050061f40120500497700e570049f4","0xb08093e8024b08093c201cae0093e8024ae00904401c700093e802470009","0xfa0090320242f00711e024fa00911e024f38072ae024fa0092ae02642807","0x480702801c768eb2a6558e29f4012064479572c2570700163f801c0c809","0x492d00e01cfa00900e03003951013218a90093e80307680989001c039f4","0xfb807298024fa00900f21c0394d0127d0049520131280394f0127d004953","0xfa009290024f3807290024fa0092985280624e00e528a680c3e8024a6809","0x60071ea026440073e8030a400916201ca78093e8024a780904401ca4009","0x482200e3dc049f401253c0492d00e01cfa00929a024e980700e7d004807","0x48f5012630038073e80240380c00e01e4480900e3e8039460127d0048f7","0xa594d0189380394b0127d00480730e01ca48093e8024a780925a01c039f4","0x58807292024fa00929202411007280024fa009280024f3807280024fa009","0x7e8093e8024a480925a01c039f401201c060071fc026450073e8030a0009","0xab0093e8024ab00902c01c039f401201cf780728c024fa0091fa02411007","0xfa0091d6024f0807036024fa009036024f100728c024fa00928c02411007","0x110093a401c0b0093e80240b0091b801c0a0093e80240a0091b801c75809","0x9d90127c3fc0a1f40120880b01438a3ac0d9462ac07ce8807044024fa009","0x38073e80247f00931801c039f401201c060072744ec8093e1fe0500493a","0xd500700e7d0048140127a8038073e80240b0093d401c039f401208804888","0x24580726e024fa00900e7a4039360127d0049490124b4038073e8024e2809","0x988093e80249a137018798039340127d00493401279c039340127d004807","0x3c8c01201c7d007218024fa0092620242f007260024fa00926c02411007","0xf500700e7d0048160127a8038073e80241100911001c039f401201c06007","0xe7007212024fa0092a60249680700e7d0049c50126a8038073e80240a009","0x980093e80248480904401c039f40124b8049cd00e4a89700c3e8024a8809","0x39280127d0048073ca01c039f401201cf7807218024fa0092540242f007","0xfa0092ac0240b00723a024fa00924c0252000724c024fa0092184a0061e4","0x758093c201c0d8093e80240d8093c401c980093e80249800904401cab009","0x380c00e4747581b2605580a00923a024fa00923a025208071d6024fa009","0xfa00902c024f500700e7d004822012220038073e8024039ef00e01cfa009","0x39f40120640494700e01cfa00938a024d500700e7d0048140127a803807","0x49f40125800492d00e580049f40125800482200e01cfa00911e024e9807","0x4a3001290003a300127d00495e000030f2007000024fa00900e79403918","0x49e200e460049f40124600482200e380049f40123800481600e8c4049f4","0x4a310127d004a310129040395f0127d00495f0127840381b0127d00481b","0x4c5100e01cfa00911e024e980700e7d00480701801d1895f03646070014","0xa0093d401c039f4012058049ea00e01cfa0090440244400700e7d004821","0x49a0012088038073e80240c80928e01c039f4012714049aa00e01cfa009","0x11980c3c801d198093e8024039e500e8c8049f40126800492d00e680049f4","0x39b20127d0049b201205803a350127d004a3401290003a340127d00499e","0x49f401267c049e100e6cc049f40126cc049e200e8c8049f40128c804822","0x39f401201c0600746a67cd9a3236405004a350127d004a350129040399f","0x38073e80241100911001c039f401208404c5100e01cfa00904602628007","0xa380700e7d0049c50126a8038073e80240a0093d401c039f4012058049ea","0x11ca380187d0049d001273803a360127d0048850124b4038073e80240c809","0x49f40128d80482200e1e0049f401220c0481600e01cfa009470024e6807","0x23c00900e3e80387c0127d004a39012178039c70127d0048d8012788039f5","0x38073e80240c80928e01c039f40127c0049d300e01cfa00900e03003807","0xf500700e7d0048160127a8038073e80241100911001c039f401208404c51","0x492d00e01cfa0091f40264680700e7d0049c50126a8038073e80240a009","0x38073e80251d80939a01d1e23b0187d004986012738039f80127d0048d5","0x49f4012600049e200e7d4049f40127e00482200e1e0049f401216804816","0x487c47a030f200747a024fa00900e7940387c0127d004a3c012178039c7","0x482200e1e0049f40121e00481600e900049f40128fc04a4000e8fc049f4","0x38270127d004827012784039c70127d0049c7012788039f50127d0049f5","0x24680700e7d00480701801d2002738e7d43c014012900049f401290004a41","0x4c5100e01cfa009032024a380700e7d0049c50126a8038073e80247d009","0xa0093d401c039f4012058049ea00e01cfa0090440244400700e7d004821","0x4811013238038073e80240f8093a601c039f4012080049c400e01cfa009","0x49680124b4039680127d004968012088038073e8024f78091ae01c039f4","0x4a4000e908049f40125ccfc80c3c801cfc8093e8024039e500e904049f4","0x3a410127d004a41012088038dc0127d0048dc01205803a430127d004a42","0x49f401290c04a4100e5a4049f40125a4049e100e030049f4012030049e2","0x38073e80249f80938801c039f401201c060074865a4062411b805004a43","0x22880700e7d00481901251c038073e8024e280935401c039f40123e804c8d","0x49ea00e01cfa00902c024f500700e7d004822012220038073e802410809","0x880991c01c039f401207c049d300e01cfa009040024e200700e7d004814","0x48073d201d220093e8024f380925a01c039f40127bc048d700e01cfa009","0x12280c3cc01d230093e8025230093ce01d230093e802403c8f00e914049f4","0x39f70127d004a47492030f2007492024fa00900e79403a470127d004a46","0x49f40129100482200e368049f40123680481600e928049f40127dc04a40","0x4a4a012904039ed0127d0049ed0127840380c0127d00480c01278803a44","0xfa0091f40264680700e7d00480701801d251ed0189106d014012928049f4","0x39f401208404c5100e01cfa009032024a380700e7d0049c50126a803807","0x38073e80240a0093d401c039f4012058049ea00e01cfa00904402444007","0x6b80700e7d004811013238038073e80240f8093a601c039f4012080049c4","0x3a4b0127d0049ea0124b4039ea0127d0049ea012088038073e8024f7809","0x49f401293404a4000e934049f40127a12600c3c801d260093e8024039e5","0x480c01278803a4b0127d004a4b012088038070127d00480701205803a4e","0x3814012938049f401293804a4100e7a4049f40127a4049e100e030049f4","0x24802003e088969f40184b40480c35c01c039f401201cf780749c7a40624b","0x1100925a01c110093e80241100904401c039f401201c0600704206c0c92d","0x2488071f4024fa009040024db807040024fa009040024d8807046024fa009","0xf79f00187d0048110128ec038110127d0048270127e0038270127d004807","0x49f40127b80497e00e7b8049f40127bc04a3d00e01cfa0093e00251e007","0xfa009046024110073d4024fa00900e168039eb0127d0049ed0125fc039ed","0x7d00992401cf58093e8024f580930001cf50093e8024f50091aa01c11809","0xf21e53cc4b6499e73d07a4969f40187acf501f046714c10071f4024fa009","0xf18093e8024f480925a01cf48093e8024f480904401c039f401201c06007","0xfa0093c6024110073d0024fa0093d0024f08073ce024fa0093ce024f3807","0x38073e80240380c00e78004c943c2788061f401879c0380c3dc01cf1809","0x49c300e36c6e1dc3ba7780a1f40123e8049b900e77c049f401278c0492d","0x6d8093a601c039f4012370049ea00e01cfa0093ba024e300700e7d0049de","0x624e00e4fc049f40127840498300e368049f40127700498300e01cfa009","0xf10093e8024f100902c01ca28093e8024a28093ce01ca28093e80249f8da","0x480701801ca380992a01cfa00c28a024588073be024fa0093be02411007","0x2400904401cf10093e8024f100902c01c240093e8024ef80925a01c039f4","0x6e0073d0024fa0093d0024f0807018024fa009018024f1007090024fa009","0xe29e8018120f102292c01c0b0093e80240b0093a401c0a0093e80240a009","0xfa00900e0300395409e13027049028024aa04f098138248143e80240b014","0x39f4012050049ea00e01cfa00902c0244400700e7d00494701263003807","0xb38093e8024039e900e554049f401277c0492d00e01cfa00938a024d5007","0xfa0092d059c061e600e5a0049f40125a0049e700e5a0049f401201e4b807","0xbc80948001cbc8093e8024b4973018790039730127d0048073ca01cb4809","0xf10072aa024fa0092aa024110073c4024fa0093c40240b0072fc024fa009","0xbf0093e8024bf00948201cf40093e8024f40093c201c060093e802406009","0xf500700e7d004816012220038073e80240380c00e5f8f400c2aa7880a009","0x492d00e01cfa0091f40264c00700e7d0049c50126a8038073e80240a009","0x49e700e354049f401201cc30070b4024fa00900e7a40397f0127d0049e3","0xc10093e8024f000902c01cc00093e80246a85a018798038d50127d0048d5","0xfa0093000242f00730c024fa0093d0024f0807306024fa0092fe02411007","0x38073e80240b00911001c039f401201c0600700f264048071f401c2f009","0x1100700e7d0048fa013260038073e8024e280935401c039f4012050049ea","0xc10093e80240380902c01cc98093e8024f300925a01cf30093e8024f3009","0xfa0093c80242f00730c024fa0093ca024f0807306024fa00932602411007","0x6a00948001c6a0093e80242f19a0187900399a0127d0048073ca01c2f009","0xf1007306024fa00930602411007304024fa0093040240b007352024fa009","0xd48093e8024d480948201cc30093e8024c30093c201c060093e802406009","0xf500700e7d004816012220038073e80240380c00e6a4c300c3066080a009","0x96807032024fa0090320241100700e7d0049c50126a8038073e80240a009","0xd70093e8024109ac018790039ac0127d0048073ca01c330093e80240c809","0xfa0090cc0241100700e024fa00900e0240b007362024fa00935c02520007","0xd880948201c0d8093e80240d8093c201c060093e8024060093c401c33009","0x968090186b8038073e8024039ef00e6c40d80c0cc01c0a009362024fa009","0x4822012088038073e80240380c00e0840d81925b2681001f0444b4fa00c","0x49b700e080049f4012080049b100e08c049f40120880492d00e088049f4","0x11d807022024fa00904e024fc00704e024fa00900f244038fa0127d004820","0xf70093e8024f780947a01c039f40127c004a3c00e7bcf800c3e802408809","0x49f401201c2d0073d6024fa0093da024bf8073da024fa0093dc024bf007","0x49eb012600039ea0127d0049ea012354038230127d004823012088039ea","0xf492d3e8030f59ea03e08ce298200e3e8049f40123e804c9200e7ac049f4","0x39e90127d0049e9012088038073e80240380c00e790f29e625b26cf39e8","0x49f40127a0049e100e79c049f401279c049e700e78c049f40127a40492d","0xf0009938784f100c3e8030f38070187b8039e30127d0049e3012088039e8","0xef0143e80247d00937201cef8093e8024f180925a01c039f401201c06007","0x6e0093d401c039f4012774049c600e01cfa0093bc024e18071b6370ee1dd","0xf080930601c6d0093e8024ee00930601c039f401236c049d300e01cfa009","0x39450127d00494501279c039450127d00493f1b40312700727e024fa009","0x39f4018514048b100e77c049f401277c0482200e788049f401278804816","0x49e2012058038480127d0049df0124b4038073e80240380c00e51c04c9d","0x49e100e030049f4012030049e200e120049f40121200482200e788049f4","0x38160127d004816012748038140127d004814012370039e80127d0049e8","0x2604e0920500495409e130270490287d004816028714f400c0907881149e","0x39f40120580488800e01cfa00928e024c600700e7d00480701801caa04f","0xaa8093e8024ef80925a01c039f4012714049aa00e01cfa009028024f5007","0xb40093e8024b40093ce01cb40093e802403c9700e59c049f401201cf4807","0x49692e6030f20072e6024fa00900e794039690127d0049682ce030f3007","0x482200e788049f40127880481600e5f8049f40125e404a4000e5e4049f4","0x39e80127d0049e80127840380c0127d00480c012788039550127d004955","0x4400700e7d00480701801cbf1e8018554f10140125f8049f40125f804a41","0x4c9800e01cfa00938a024d500700e7d0048140127a8038073e80240b009","0x398600e168049f401201cf48072fe024fa0093c60249680700e7d0048fa","0x39800127d0048d50b4030f30071aa024fa0091aa024f38071aa024fa009","0x49f40127a0049e100e60c049f40125fc0482200e608049f401278004816","0x38073e80240380c00e01e4f80900e3e80385e0127d00498001217803986","0x24c00700e7d0049c50126a8038073e80240a0093d401c039f401205804888","0x39930127d0049e60124b4039e60127d0049e6012088038073e80247d009","0x49f4012794049e100e60c049f401264c0482200e608049f401201c04816","0x485e334030f2007334024fa00900e7940385e0127d0049e401217803986","0x482200e608049f40126080481600e6a4049f401235004a4000e350049f4","0x39860127d0049860127840380c0127d00480c012788039830127d004983","0x4400700e7d00480701801cd498601860cc10140126a4049f40126a404a41","0x482200e01cfa00938a024d500700e7d0048140127a8038073e80240b009","0xf2007358024fa00900e794038660127d0048190124b4038190127d004819","0x49f401201c0481600e6c4049f40126b804a4000e6b8049f4012084d600c","0x481b0127840380c0127d00480c012788038660127d00486601208803807","0x480938a01cd881b018198038140126c4049f40126c404a4100e06c049f4","0x39f401201c06007028026501c525a030fa00c0180240f807018024fa009","0xfa0090440240d807044024fa00902c0240c80702c024fa00938a02410007","0x48071f401c0c8093e80240f80904601c100093e80249680904201c0f809","0x49f401206c0481100e06c049f401201c1380700e7d00480701801c03ca1","0x4820012120038190127d00482101208c038200127d00481401208403821","0x25180700e7d00480701801c138099443e8049f4018064049f000e08c049f4","0x4811012058038073e80240380c00e7bc04ca43e0044061f40183e80380c","0x39ed3dc030fa009046044064a500e08c049f401208c048d900e044049f4","0xfa0093d60265400700e7d00480701801cf500994e7ac049f40187b404ca6","0xe280700e7d00480701801cf300995479c049f40187a004ca900e7a0f480c","0x480701801cf100995678cf200c3e8030f280903e01cf28093e8024f4809","0xf080933401cf00093e8024f200904201cf08093e8024f180932601c039f4","0x49f401201c1380700e7d00480701801c03cac01201c7d0073be024fa009","0x49dd012668039e00127d0049e2012084039dd0127d0049de012350039de","0x6d80995a370049f401877c049a900e770049f40127800484800e77c049f4","0x9f8093e80246d00903201c6d0093e80246e00904001c039f401201c06007","0x480701801ca280995c01cfa00c27e0245880727e024fa00927e024f3807","0x4848012634038480127d004947012660039470127d00480704e01c039f4","0x39f40125140498c00e01cfa00900e0300380795e024038fa00e124049f4","0x49f40121300498d00e130049f40121380498b00e138049f401201c13807","0x4cb100e550049f401213cf39f025b2c00384f0127d00484901262403849","0xb40093e8024b380996401cb38093e8024aa9dc0187fc039550127d004954","0x60072d07b8060092d0024fa0092d0026598073dc024fa0093dc0240b007","0xf380996a01c039f40127c004cb400e01cfa0091b60242780700e7d004807","0xee00c3fe01cb98093e8024b480996c01cb48093e80240382700e01cfa009","0x39ee0127d0049ee0120580397e0127d0049790132c8039790127d004973","0x49f00132d0038073e80240380c00e5f8f700c0125f8049f40125f804cb3","0x4cb200e168049f40125fcf480c3fe01cbf8093e8024f300996c01c039f4","0x48d50127d0048d50132cc039ee0127d0049ee012058038d50127d00485a","0xfa0093d40265b80700e7d0049f00132d0038073e80240380c00e354f700c","0xc01ee018024c00093e8024c000996601cf70093e8024f700902c01cc0009","0x600700f2e0048071f401cc10093e8024f780902c01c039f401201c06007","0x382700e608049f401201c0481600e01cfa00904e0242780700e7d004807","0x385e0127d004986046030ff80730c024fa0093060265b007306024fa009","0x39ef00e64cc100c01264c049f401264c04cb300e64c049f401217804cb2","0x4816012800038220127d0048073d201c039f4012050049aa00e01cfa009","0x482200e01c049f401201c0481600e01cfa00903e0244d80704007c061f4","0x38220127d004822012178038200127d00482001269c038090127d004809","0x4cbb046024fa00c0420265d00704206c0c92d3e80241102001201ce2cb9","0x88093e8024039df00e09c049f401206c0492d00e01cfa00900e030038fa","0xfa0093e0024a280700e7d0049ef01213c039ef3e0030fa0090460265e007","0xfa00900e2e4039eb0127d00480717201c039f40127b80494700e7b4f700c","0x484800e7a0049f40127a4f51eb25b2f4039e90127d00480717201cf5009","0x38270127d004827012088038190127d004819012058039e70127d0049ed","0x49f40127a004cbe00e044049f4012044049de00e4b4049f40124b40489d","0xf31c53e8024f39e80224b41381902d2fc039e70127d0049e7012364039e8","0x9680700e7d00480701801cf0809982788049f401878c04cc000e78cf21e5","0x39f401277c0495500e778ef80c3e8024f100998401cf00093e8024f2809","0x61f401277004cc500e770049f401277404cc400e774049f401201e61807","0x48da012064038da0127d0048db01331c038073e80246e00998c01c6d8dc","0xa39450187d0049de27e030968ac00e4fc049f40124fc049e700e4fc049f4","0x2480937a01c248480187d0049473cc030ca00728e024fa00928e024f3807","0xda00700e7d00484c0126f00384f098030fa00909c0244980709c024fa009","0xb38093e8024aa8092fe01caa8093e8024aa0092fc01caa0093e802427809","0x49f40125a0048d500e780049f40127800482200e5a0049f401201c2d007","0xe29e038a608038480127d004848012058039450127d00494501278803968","0x482200e01cfa00900e0300385a2fe5f896cc82f25ccb492d3e8030b3968","0x39790127d00497901279c038d50127d0049690124b4039690127d004969","0xfa00c2f21200607f00e354049f40123540482200e5cc049f40125cc049e1","0x26500730c024fa0091aa0249680700e7d00480701801cc1809992608c000c","0xc00093e8024c000902c01cc98093e80242f00999601c2f0093e8024c1009","0xfa0093c80244e80728a024fa00928a024f100730c024fa00930c02411007","0xc318002c024c98093e8024c980999801cb98093e8024b98093c201cf2009","0x48073d201ccd0093e80246a80925a01c039f401201c060073265ccf2145","0x6a00c3cc01cd48093e8024d48093ce01cd48093e80240389700e350049f4","0x39ae0127d004866358030f2007358024fa00900e794038660127d0049a9","0x49f40126680482200e60c049f401260c0481600e6c4049f40126b804ccd","0x4973012784039e40127d0049e4012274039450127d0049450127880399a","0x380c00e6c4b99e428a668c18160126c4049f40126c404ccc00e5cc049f4","0x39e500e6dc049f40125f80492d00e5f8049f40125f80482200e01cfa009","0x39c30127d0049b9013334039b90127d00485a370030f2007370024fa009","0x49f4012514049e200e6dc049f40126dc0482200e120049f401212004816","0x49c30133300397f0127d00497f012784039e40127d0049e401227403945","0x49e50124b4038073e80240380c00e70cbf9e428a6dc2401601270c049f4","0x489d00e748049f40127180482200e74c049f40127980481600e718049f4","0x380c00e01e6780900e3e8039ce0127d0049e1013338039d10127d0049e4","0x482200e74c049f40120640481600e734049f401206c0492d00e01cfa009","0x39ce0127d0048fa013338039d10127d00492d012274039d20127d0049cd","0x49f40127480482200e74c049f401274c0481600e730049f401273804ccd","0x49c5012784039d10127d0049d10122740380c0127d00480c012788039d2","0x3a5400e730e29d1018748e9816012730049f401273004ccc00e714049f4","0x480740601c108093e802403a5100e064049f401201e6800703e024fa009","0x61f4012050049ad00e01cfa00900e7bc038073e8024039f500e3e8049f4","0x60093c401c048093e80240480904401c038093e80240380902c01c08827","0xfa0090227140600900e0511b00738a024fa00938a024f0807018024fa009","0xfa00900e030039e9013344f50093e8030f580947001cf59ed3dc7bcf8014","0xfa0093d0024110073d0024fa0093de0249680700e7d0049ea0128e403807","0x480701801cf11e33c84b6691e53cc79c969f40187b4f400c35c01cf4009","0xf280936201cf08093e8024f380925a01cf38093e8024f380904401c039f4","0xee9de3be050fa0093c0024dc8073c0024fa0093ca024db8073ca024fa009","0xfa0093b8024f500700e7d0049dd0127a8038073e8024ef00938c01c6e1dc","0xfa0093be0252b0073be024fa0093be0252a80700e7d0048dc01274c03807","0x493f01224c0393f0127d0048da0126f4038da0127d00480736c01c6d809","0x497e00e120049f401251c049b400e01cfa00928a024de00728e514061f4","0xa007098024fa00900e1680384e0127d0048490125fc038490127d004848","0xc0007098024fa0090980246a8073c2024fa0093c20241100700e7d004807","0x604e098798f09c530401c6d8093e80246d8099a601c270093e802427009","0xfa00909e0241100700e7d00480701801cb49682ce4b66a1552a813c969f4","0xaa0093c201caa8093e8024aa8093ce01cb98093e80242780925a01c27809","0xbf1790187d0061553e00303f8072e6024fa0092e6024110072a8024fa009","0x48db01295c0385a0127d0049730124b4038073e80240380c00e5fc04cd5","0x482200e01cfa009304024f500700e7d0048d501271003982300354969f4","0x6007326178064d730c60c061f40185f8c017925b3580385a0127d00485a","0x49f600e350049f401201e6c007334024fa0090b40249680700e7d004807","0xcd0093e8024cd00904401c6a0093e80246a0093a001cd49860187d004986","0x38073e80240380c00e6b8d600c9b208c3300c3e80306a1a93064b66b007","0x38660127d004866012058039b10127d00499a0124b4038073e8024039ef","0x49f40124b40489d00e7b8049f40127b8049e200e6c4049f40126c404822","0xdb80934e01cdb8160187d004816013368039540127d0049540127840392d","0x38230127d0048231f40326d80730c024fa00930c024e800736e024fa009","0x48da00e748e99c63866e4dc0163e8024c31b704e550969ee3621980fcdc","0xe68093e8024dc80925a01c039f401201c0600739c0266e9d10127d0061d2","0xfa0093700240b00700e7d00487501213c03875398030fa0093a202494007","0xe300913a01ce18093e8024e18093c401ce68093e8024e680904401cdc009","0x39ec02c030fa00902c0266d0073a6024fa0093a6024f080738c024fa009","0xe31c339a6e00fa0400e08c049f401208c049d000e7b0049f40127b0049a7","0xd8093e80240d821019208039f50440800d878394058fa0090467b0e61d3","0xfa8091b401c110093e80241101f018978038200127d0048200320326f007","0x387f0127d0048780124b4038073e80240380c00e1f004cdf38e024fa00c","0x38830127d004816013380038820127d0048073d201c6c8093e8024039e9","0xfa0091b002671807388360061f401221404ce200e214049f401220c04ce1","0x49c40125d00387f0127d00487f012088039ca0127d0049ca01205803807","0xa4e400e208049f40122080485e00e364049f40123640485e00e710049f4","0x6b8099cc73c049f401822404ce500e224e808825a7d0048821b27103f9ca","0xe012d3e8024e78099ce01ce08093e8024e800925a01c039f401201c06007","0xdd00928e01c6b1ba0187d0049c0012514038073e80244780909e01c479be","0x484800e01cfa00936c024a380737a6d8061f40126f80494500e01cfa009","0x39c10127d0049c1012088039bc0127d0049bd012120038930127d0048d6","0x39f401201c060073606c84b92d9d26ccda00c3e8030de093044704e2ce8","0xfa00938e02494007132024fa00936802496807368024fa00936802411007","0x4e9af0189080389d0127d00480704e01c039f401226c0484f00e26cd780c","0x11007110024fa0091100240b007354024fa00935a0252180735a024fa009","0x100093e80241000913a01c0d8093e80240d8093c401c4c8093e80244c809","0x1001b1322200b009354024fa00935402520807366024fa009366024f0807","0x49f401225c0482200e01cfa00938e0249f80700e7d00480701801cd51b3","0x49b0348030f2007348024fa00900e794039a70127d0048970124b403897","0x482200e220049f40122200481600e688049f401268c04a4000e68c049f4","0x38200127d0048200122740381b0127d00481b012788039a70127d0049a7","0xd902003669c44016012688049f401268804a4100e6c8049f40126c8049e1","0xd00093e8024e800925a01c039f401271c0493f00e01cfa00900e030039a2","0xfa00934002411007110024fa0091100240b00733e024fa0091ae02520007","0x110093c201c100093e80241000913a01c0d8093e80240d8093c401cd0009","0x600733e0881001b3402200b00933e024fa00933e02520807044024fa009","0x4a4000e678049f40121e00492d00e01cfa00902c0244d80700e7d004807","0x399e0127d00499e012088039ca0127d0049ca0120580399d0127d00487c","0x49f4012088049e100e080049f40120800489d00e06c049f401206c049e2","0xfa00900e0300399d0440800d99e3940580499d0127d00499d01290403822","0x39f401206404cea00e01cfa0090420262880700e7d00481601226c03807","0x540093e8024dc80925a01c039f401208c049c400e01cfa00903e02647007","0xfa00915002411007370024fa0093700240b007336024fa00939c02520007","0xe98093c201ce30093e8024e300913a01ce18093e8024e18093c401c54009","0x600733674ce31c31506e00b009336024fa009336025208073a6024fa009","0x481601226c038073e8024d700938801c039f401201cf780700e7d004807","0xfa00903e0264700700e7d0048190133a8038073e8024108098a201c039f4","0x39f40123e804ceb00e01cfa00904e024d500700e7d00498601271003807","0x560093e802403cec00e654049f401201cf4807332024fa00933402496807","0xfa00900e794039940127d0048ac32a030f3007158024fa009158024f3807","0x481600e698049f40122bc04a4000e2bc049f4012650c900c3c801cc9009","0x39ee0127d0049ee012788039990127d004999012088039ac0127d0049ac","0x49f401269804a4100e550049f4012550049e100e4b4049f40124b40489d","0x38073e8024039ef00e01cfa00900e030039a62a84b4f7199358058049a6","0x27500700e7d004821013144038073e80240b00913601c039f401264c049c4","0x49aa00e01cfa0091f40267580700e7d00481f013238038073e80240c809","0x3cec00e2c4049f401201cf480734a024fa0090b40249680700e7d004827","0x398d0127d004998162030f3007330024fa009330024f3807330024fa009","0x49f401262c04a4000e62c049f4012634c600c3c801cc60093e8024039e5","0x49ee012788039a50127d0049a50120880385e0127d00485e01205803989","0x4a4100e550049f4012550049e100e4b4049f40124b40489d00e7b8049f4","0x489b00e01cfa00900e030039892a84b4f71a50bc058049890127d004989","0xf80991c01c039f401206404cea00e01cfa0090420262880700e7d004816","0x48270126a8038073e80247d0099d601c039f401236c04ced00e01cfa009","0xfa00900e25c038b90127d0048073d201cc40093e8024b980925a01c039f4","0x481600e614049f401261c5c80c3cc01cc38093e8024c38093ce01cc3809","0x38bf0127d004954012784038bd0127d004988012088039840127d00497f","0x489b00e01cfa00900e030038079dc024038fa00e604049f40126140485e","0xf80991c01c039f401206404cea00e01cfa0090420262880700e7d004816","0x48270126a8038073e80247d0099d601c039f401236c04ced00e01cfa009","0xf800902c01cbe8093e8024b380925a01cb38093e8024b380904401c039f4","0x2f00717e024fa0092d0024f080717a024fa0092fa02411007308024fa009","0x61e400e308049f401201cf280700e7d0048073de01cc08093e8024b4809","0xc20093e8024c200902c01cbd8093e8024be00948001cbe0093e8024c08c2","0xfa00925a0244e8073dc024fa0093dc024f100717a024fa00917a02411007","0x5e98402c024bd8093e8024bd80948201c5f8093e80245f8093c201c96809","0x4821013144038073e80240b00913601c039f401201c060072f62fc969ee","0xfa0091f40267580700e7d00481f013238038073e80240c8099d401c039f4","0xfa0093c8024968073c8024fa0093c80241100700e7d0048270126a803807","0xbb80948001cbb8093e8024f1178018790039780127d0048073ca01cbd009","0xf10072f4024fa0092f4024110073e0024fa0093e00240b0072ec024fa009","0xf18093e8024f18093c201c968093e80249680913a01cf70093e8024f7009","0x39f401201c060072ec78c969ee2f47c00b0092ec024fa0092ec02520807","0x38073e80240c8099d401c039f401208404c5100e01cfa00902c0244d807","0x9680700e7d0048270126a8038073e80247d0099d601c039f401207c04c8e","0xf80093e8024f800902c01cba0093e8024f480948001c648093e8024f7809","0xfa00925a0244e8073dc024fa0093dc024f1007192024fa00919202411007","0x649f002c024ba0093e8024ba00948201cf68093e8024f68093c201c96809","0x48074a201c0c8093e802403cd000e07c049f401201d2a0072e87b4969ee","0x61f4012050049ad00e01cfa00900e7bc038073e8024039f500e084049f4","0x60093c401c048093e80240480904401c038093e80240380902c01c7d023","0xfa0091f47140600900e0511b00738a024fa00938a024f0807018024fa009","0xfa00900e030039eb0133bcf68093e8030f700947001cf71ef3e004413814","0xfa009046024d68073d4024fa0090220249680700e7d0049ed0128e403807","0x49e200e7a8049f40127a80482200e09c049f401209c0481600e7a0f480c","0x39ef0127d0049ef0127840392d0127d00492d012274039f00127d0049f0","0xf81ea04e088d20073ce024fa0093ce024d38073ce058061f401205804cda","0x2781e00127d0061e101268c039e13c478cf21e53cc058fa0093ce7a0f792d","0xfa0093c0024d10073bc024fa0093ca0249680700e7d00480701801cef809","0x60073b8026790073e8030ee8099e201cef0093e8024ef00904401cee809","0xc8099d401c039f401208404c5100e01cfa00902c0244d80700e7d004807","0x480704e01c6e0093e8024ef00925a01c039f401207c04c8e00e01cfa009","0xb00727e024fa0091b4025218071b4024fa0091b67a40624200e36c049f4","0xf20093e8024f20093c401c6e0093e80246e00904401cf30093e8024f3009","0xfa00927e025208073c4024fa0093c4024f08073c6024fa0093c60244e807","0xfa0093b80267980700e7d00480701801c9f9e23c67906e1e602c0249f809","0xfa0093cc0240b00728e024fa00900f3d0039450127d0049de0124b403807","0xf180913a01cf20093e8024f20093c401ca28093e8024a280904401cf3009","0x384802c030fa00902c0266d0073c4024fa0093c4024f08073c6024fa009","0xf19e428a7980fcdc00e51c049f401251c049d000e120049f4012120049a7","0x27a9670127d006155012368039552a813c2604e092058fa00928e120f49e2","0xfa0092ce024940072d2024fa00909c0249680700e7d00480701801cb4009","0x48490120580397e0127d0048079e801c039f40125e40484f00e5e4b980c","0x489d00e130049f4012130049e200e5a4049f40125a40482200e124049f4","0xbf8160187d004816013368039540127d0049540127840384f0127d00484f","0x2616909207d020072fc024fa0092fc024e80072fe024fa0092fe024d3807","0x49f401206c1080c90401cc002204006c6a85a02c7d00497e2fe5ccaa04f","0x48da00e088049f40120880f80c4bc01c100093e8024100190193780381b","0xc30093e80246a80925a01c039f401201c060073060267b1820127d006180","0xcd0093e80240b0099ee01cc98093e8024039e900e178049f401201cf4807","0x49a901338c03866352030fa0091a8026710071a8024fa0093340267c007","0x330092e801cc30093e8024c300904401c2d0093e80242d00902c01c039f4","0x272007326024fa0093260242f0070bc024fa0090bc0242f0070cc024fa009","0x4cf936e024fa00c362026728073626b8d612d3e8024c985e0cc6182d014","0x969f40126dc04ce700e6e4049f40126b80492d00e01cfa00900e030039b8","0x494700e744e900c3e8024e180928a01c039f401274c0484f00e74ce31c3","0x2400700e7d0049ce01251c039cd39c030fa00938c024a280700e7d0049d2","0xdc8093e8024dc80904401c3a8093e8024e680909001ce60093e8024e8809","0xfa00900e030039c73ea1e096cfa3947b0061f40181d4e602237271674007","0x49820124a00387c0127d0049ec0124b4039ec0127d0049ec01208803807","0x3f80c48401c410093e80240382700e01cfa0091b2024278071b21fc061f4","0x39ac0127d0049ac012058038850127d00488301290c038830127d004882","0x49f40120800489d00e06c049f401206c049e200e1f0049f40121f004822","0xd87c358058048850127d004885012904039ca0127d0049ca01278403820","0xfa0090f00241100700e7d0049820124fc038073e80240380c00e214e5020","0xe39c4018790039c40127d0048073ca01c6c0093e80243c00925a01c3c009","0x11007358024fa0093580240b0073a0024fa00911002520007110024fa009","0x100093e80241000913a01c0d8093e80240d8093c401c6c0093e80246c009","0x1001b1b06b00b0093a0024fa0093a0025208073ea024fa0093ea024f0807","0x49f40126b80492d00e01cfa0093040249f80700e7d00480701801ce81f5","0x4889012088039ac0127d0049ac012058039cf0127d0049b801290003889","0x49e100e080049f40120800489d00e06c049f401206c049e200e224049f4","0x39cf0440800d889358058049cf0127d0049cf012904038220127d004822","0x1200071ae024fa0091aa0249680700e7d00481601226c038073e80240380c","0x6b8093e80246b80904401c2d0093e80242d00902c01ce08093e8024c1809","0xfa009044024f0807040024fa0090400244e807036024fa009036024f1007","0x480701801ce082204006c6b85a02c024e08093e8024e080948201c11009","0xfa0090320267500700e7d004821013144038073e80240b00913601c039f4","0xfa0092d002520007380024fa00909c0249680700e7d00481f01323803807","0x260093c401ce00093e8024e000904401c248093e80242480902c01cdf009","0x1208072a8024fa0092a8024f080709e024fa00909e0244e807098024fa009","0xd500700e7d00480701801cdf15409e130e004902c024df0093e8024df009","0x4cea00e01cfa0090420262880700e7d00481601226c038073e8024f4809","0x4a4000e23c049f40127940492d00e01cfa00903e0264700700e7d004819","0x388f0127d00488f012088039e60127d0049e6012058039ba0127d0049df","0x49f4012788049e100e78c049f401278c0489d00e790049f4012790049e2","0xfa00900e030039ba3c478cf208f3cc058049ba0127d0049ba012904039e2","0x39f401208404c5100e01cfa00902c0244d80700e7d00481f01323803807","0x6b0093e80240880925a01c039f401208c049aa00e01cfa00903202675007","0xfa0091ac0241100704e024fa00904e0240b00736c024fa0093d602520007","0xf78093c201c968093e80249680913a01cf80093e8024f80093c401c6b009","0x12a00736c7bc969f01ac09c0b00936c024fa00936c025208073de024fa009","0x3a5400e084049f401201e68007032024fa00900e9440381f0127d004807","0x48079f801cf78093e802403cfb00e044049f401201d2a0071f4024fa009","0x61f4012050049ad00e01cfa00900e7bc038073e8024039f500e7b4049f4","0x60093c401c048093e80240480904401c038093e80240380902c01cf51eb","0xfa0093d47140600900e0511b00738a024fa00938a024f0807018024fa009","0xfa00900e030039e30133f4f20093e8030f280947001cf29e63ce7a0f4814","0x49f401201e7f0073c4024fa0093d00249680700e7d0049e40128e403807","0xef80934c01cef1df0187d0049e00122bc039e00127d0049e1012648039e1","0x497f00e770049f40127740497e00e774049f4012778049a500e01cfa009","0x6a8073c4024fa0093c4024110071b6024fa00900e168038dc0127d0049dc","0x60dc1b6798f11c530401c6e0093e80246e00930001c6d8093e80246d809","0xfa0091b40241100700e7d00480701801c2484828e4b67f94527e368969f4","0xfa00928a024f380700e7d00480702801c270093e80246d00925a01c6d009","0xa280916201c270093e80242700904401c9f8093e80249f8093c201ca2809","0x1380709e024fa00909c0249680700e7d00480701801c26009a0001cfa00c","0x39670127d00484f012088039550127d004954012660039540127d004807","0x498c00e01cfa00900e03003807a02024038fa00e5a0049f40125540498d","0x498b00e5cc049f401201c138072d2024fa00909c0249680700e7d00484c","0x39680127d004979012634039670127d004969012088039790127d004973","0x49f40185f80498800e5f8049f40125f80498d00e5f8049f40125a004989","0x49670124b4038073e8024bf80909e01c039f401201c060070b40268117f","0xc19823004b4fa00c27e354061ae00e354049f40123540482200e354049f4","0x4980012088038073e8024039ef00e01cfa00900e030039930bc61896d03","0x49b700e60c049f401260c049b100e668049f40126000492d00e600049f4","0x4866012718039b135c6b0331a90287d0048d40126e4038d40127d004983","0xfa009362024e980700e7d0049ae0127a8038073e8024d60093d401c039f4","0x49eb0126b4039ee0127d0049a9012958039a90127d0049a901295403807","0xf1007334024fa009334024110073d2024fa0093d20240b0073706dc061f4","0xc10093e8024c10093c201c968093e80249680913a01cf38093e8024f3809","0xf71ed019410039b90127d0049b901269c039b902c030fa00902c0266d007","0xe89d23a6718e18163e8024dc9b83044b4f399a3d2088d20073dc024fa009","0xe300925a01c039f401201c0600739a026829f00127d0061ce01268c039ce","0x39c30127d0049c3012058039ec0ea030fa00936e024d6807398024fa009","0x49f40127480489d00e74c049f401274c049e200e730049f401273004822","0xe500934e01ce50160187d004816013368039d10127d0049d1012784039d2","0xf61d13a474ce61c304541c039f00127d0049f03de03283007394024fa009","0x64de00e080049f40120800c80c90401ce3827036080fa87802c7d0049ca","0x49f401871c049a300e09c049f401209c0880c4bc01c0d8093e80240d821","0xf800934401c6c8093e8024fa80925a01c039f401201c060070fe0268407c","0x38d90127d0048d901208803883104030fa009104024fb007104024fa009","0x39f40120580489b00e01cfa00900e03003885013424039f401820c04cf1","0x38073e80240f80991c01c039f40121d4049aa00e01cfa0091f402647007","0x9680700e7d004882012710038073e8024f70099da01c039f40121f004d0a","0xf3807110024fa00900f42c039c40127d0048073d201c6c0093e80246c809","0x448093e8024039e500e740049f4012220e200c3cc01c440093e802444009","0x4878012058038d70127d0049cf012900039cf0127d0049d0112030f2007","0x489d00e080049f4012080049e200e360049f40123600482200e1e0049f4","0x48d70127d0048d7012904038270127d0048270127840381b0127d00481b","0x9680700e7d0048850133cc038073e80240380c00e35c1381b0403603c016","0xfa009380024e200711e6f8e012d3e8024f70094ae01ce08093e80246c809","0x49c1012088039ba37c030fa00937c024fb00700e7d00488f0127a803807","0x480701801c499bd019430db0d60187d0060823741e096a5800e704049f4","0x487c012688039bc0127d0049c10124b4038073e8024db00938801c039f4","0x4b9b30187d0061be36835896a5800e6f0049f40126f00482200e6d0049f4","0x49bc0124b4038073e80244b80938801c039f401201c060073606c80650d","0x48160133680389b0127d0048073d201cd78093e8024039e900e264049f4","0x271007354024fa00935a0268780735a024fa00913a0268700713a058061f4","0xd98093e8024d980902c01c039f401269c04ce300e690d380c3e8024d5009","0xfa00935e0242f007348024fa009348024ba007132024fa00913202411007","0xd192d3e80244d9af348264d98149c801c4d8093e80244d8090bc01cd7809","0x380c00e67804d1033e024fa00c3400267280700e7d00480702801cd01a2","0x39993362a0969f401267c04ce700e674049f40126880492d00e01cfa009","0x39f40126540494700e2b0ca80c3e80245400928a01c039f40126640484f","0xfa0091580242400700e7d00499401251c03992328030fa009336024a2807","0xce9c59d001cce8093e8024ce80904401cd30093e8024c900909001c57809","0x482200e01cfa00900e0300398c31a66096d11162694061f401869857827","0xc48160187d0048160133680398b0127d0049a50124b4039a50127d0049a5","0xc580904401c588093e8024588093c201cc38b93104b4fa00931202689007","0x38073e80240380c00e61004d1330a024fa00c30e024c4007316024fa009","0x492d00e01cfa0091f40264700700e7d00498501213c038073e8024039ef","0x39810127d0048bd012088038bf0127d0049a3012058038bd0127d00498b","0x484f00e01cfa00900e03003807a28024038fa00e088049f40122c4049e1","0x382700e308049f401201e7f0072fa024fa0093160249680700e7d004984","0xbf8072f4024fa0092f6026408072f6024fa0092f8024cc0072f8024fa009","0x397d0127d00497d012088039770127d0048070b401cbc0093e802461009","0x49f40125e8049e700e5e0049f40125e00498000e5dc049f40125dc048d5","0x380c00e5c8ba0c925b454119760187d00617a2f05dc5897d0287e40397a","0x39e900e5c4049f40125d80492d00e5d8049f40125d80482200e01cfa009","0x28b8072da620061f401262004d1600e1ac049f401201cf48072e0024fa009","0x6f00c3e80246f8099c401c6f8093e802470009a3001c700093e8024b6809","0xfa0092e202411007346024fa0093460240b00700e7d0048de01338c038dd","0x358090bc01cb80093e8024b80090bc01c6e8093e80246e8092e801cb8809","0x486b2e0374b89a3029390038230127d0048231f40312f0070d6024fa009","0xb0809a32588049f401858c04ce500e01cfa00900e050039632c8598969f4","0xaf92d3e8024b10099ce01cb00093e8024b200925a01c039f401201c06007","0xad00928e01cab95a0187d00495f012514038073e8024ae00909e01cae15e","0x484800e01cfa0092ac024a38072a6558061f40125780494500e01cfa009","0x39600127d004960012088038ed0127d004953012120038eb0127d004957","0x39f401201c06007298534a792da34544a900c3e8030768eb046580e2ce8","0xa50093e8024a900925a01ca90093e8024a900904401c039f401201cf7807","0xfa0092a2024f0807302024fa0092940241100717e024fa0092cc0240b007","0x7a809a38520049f40182e404d1b00e088049f40120880f80c4bc01c11009","0x39460127d0048073d201c7b8093e8024c080925a01c039f401201c06007","0x494001271403940296030fa0092960268e807296524061f401252004a07","0x49e700e3fc049f40123f404c5500e3f4049f40123f804c4c00e3f8049f4","0x5f8093e80245f80902c01c9f0093e80247f946018798038ff0127d0048ff","0xfa00927c0242f007296024fa0092960246c8071ee024fa0091ee02411007","0x49f40184e804cba00e4e89d90125a7d00493e2963dc5f9c5a3c01c9f009","0x9b00997801c9a0093e80249d80925a01c039f401201c0600726e0268f936","0x494500e430049f401201e9000700e7d00493001213c03930262030fa009","0x392a0127d00492e012120038073e80248480928e01c971090187d004931","0x390c0127d00490c01279c039340127d004934012088038073e802403814","0x480701801d180002304b69111d24c4a0969f40184a8861490444d00a521","0x8e809a4601d188093e80249400925a01c940093e80249400904401c039f4","0x292007468024fa00924c024f0807466024fa00946202411007464024fa009","0x8c00904401c039f401201c0600700f494048071f401d1a8093e802519009","0x11007470024fa0094600269300746c024fa00923002496807230024fa009","0x11a8093e80251c009a4801d1a0093e8024000093c201d198093e80251b009","0xfa00c3f00269480700e7d004a390134a0039f8472030fa00946a02693807","0x4a3b012554038073e8024039ef00e01cfa00900e03003a3c0134a91d809","0x11e80904401d1f8093e80248080902c01d1e8093e80251980925a01c039f4","0x480701801c03d2b01201c7d007482024fa009468024f0807480024fa009","0x39f40120580489b00e01cfa009478024f680700e7d0048073de01c039f4","0xfc8093e80251980925a01c039f401262004cb400e01cfa0090ea024d5007","0x1218093e8025218093ce01d218093e802403d2c00e908049f401201cf4807","0x4a4448a030f200748a024fa00900e79403a440127d004a43484030f3007","0x482200e404049f40124040481600e91c049f401291804a4000e918049f4","0x381b0127d00481b012274038200127d004820012788039f90127d0049f9","0x11a01b0407e48081601291c049f401291c04a4100e8d0049f40128d0049e1","0x38073e80243a80935401c039f40120580489b00e01cfa00900e03003a47","0x3a490127d00493b0124b4038073e8024a480996801c039f401262004cb4","0x49f40129240482200e404049f40124040481600e7dc049f40124dc04a40","0x48220127840381b0127d00481b012274038200127d00482001278803a49","0x380c00e7dc1101b040924808160127dc049f40127dc04a4100e088049f4","0x5f80902c01d250093e8024c080925a01c039f40123d40484f00e01cfa009","0xa007482024fa009044024f0807480024fa0094940241100747e024fa009","0x600749e9392692da5c9312580c3e8030c42414804b69680700e7d004807","0x138074a0024fa00949602496807496024fa0094960241100700e7d004807","0x3a540127d004a5001208803a530127d004a510134bc03a510127d004807","0x3807a62024038fa00e958049f401294c04d3000e954049f4012930049e1","0x3a570127d004a4d0124b403a4d0127d004a4d012088038073e80240380c","0x49f4012938049e100e950049f401295c0482200e7d8049f401293c04d32","0x12c009a6801d2ca580187d004a560134cc03a560127d0049f60134c003a55","0xf780700e7d00480701801d2d809a6c968049f401896404d3500e01cfa009","0x3cf400e970049f40129500492d00e01cfa0094b40242780700e7d004807","0xf10074b8024fa0094b80241100747e024fa00947e0240b0074ba024fa009","0x12a8093e80252a8093c201c0d8093e80240d80913a01c100093e802410009","0x4a5d01274003a5e0127d004a5e01269c03a5e02c030fa00902c0266d007","0x225c4a8931212f8163e80252ea5e0ea9540d8204b88fc0fcdc00e974049f4","0x22400925a01c039f401201c0600789c0269bc4d0127d00644c01236803c4c","0x27a00700e7d004c5101213c03c518a0030fa00989a0249400789e024fa009","0x3c4f0127d004c4f01208803a5f0127d004a5f01205803c520127d004807","0x49f401312c049e100f128049f40131280489d00f124049f4013124049e2","0x227a5f03e81003c520127d004c52012740038160127d00481601269c03c4b","0x22bc568ab152298160131622bc568ab152298163e8026290168a112e25449","0x22c8093e80262400925a01c039f40120580489b00e01cfa00900e03003c58","0xfa0098b2024110074be024fa0094be0240b0078b4024fa00989c02520007","0x2258093c201e250093e80262500913a01e248093e8026248093c401e2c809","0x60078b512e254498b297c0b0098b4024fa0098b402520807896024fa009","0x481601226c038073e80252d8093da01c039f401201cf780700e7d004807","0xfa00900e7a403c5b0127d004a540124b4038073e80243a80935401c039f4","0x22ec5c01879803c5d0127d004c5d01279c03c5d0127d004807a7001e2e009","0x1200073f6024fa0098bd17c061e400f17c049f401201cf28078bc024fa009","0x22d8093e80262d80904401d1f8093e80251f80902c01e300093e8024fd809","0xfa0094aa024f0807036024fa0090360244e807040024fa009040024f1007","0x480701801e302550360822da3f02c026300093e80263000948201d2a809","0xfa0090ea024d500700e7d0048b90132d4038073e80240b00913601c039f4","0x49f401253c0482200e01cfa00903e0264700700e7d0049880132d003807","0x494d01278403c810127d004c8001208803c800127d00494f0124b40394f","0xfa00900e03003807a72024038fa00f210049f40125300485e00f208049f4","0x39f40121d4049aa00e01cfa0091720265a80700e7d00481601226c03807","0x2428093e8024b200925a01c039f401207c04c8e00e01cfa0093100265a007","0xfa00990a0241100700e7d0049fc01273403c873f8030fa0092c2024e7007","0x48073de01e420093e8026438090bc01e410093e8024118093c201e40809","0x24680948001e468093e80264248b01879003c8b0127d0048073ca01c039f4","0xf1007902024fa009902024110072cc024fa0092cc0240b00791c024fa009","0x2410093e8026410093c201c0d8093e80240d80913a01c100093e802410009","0x39f401201c0600791d2080d8209025980b00991c024fa00991c02520807","0xd500700e7d0048b90132d4038073e80240b00913601c039f401201cf7807","0x4c8e00e01cfa00903e0264700700e7d0049880132d0038073e80243a809","0xf280791e024fa00919202496807192024fa0091920241100700e7d0048fa","0x24b0093e80264900948001e490093e8024b949101879003c910127d004807","0xfa009040024f100791e024fa00991e02411007346024fa0093460240b007","0x24b00948201cba0093e8024ba0093c201c0d8093e80240d80913a01c10009","0xb00913601c039f401201c0600792c5d00d82091e68c0b00992c024fa009","0x481f013238038073e80243a80935401c039f40123e804c8e00e01cfa009","0x24b80904401e4b8093e8024cc00925a01ccc0093e8024cc00904401c039f4","0x7d007946024fa0093180242f00793c024fa00931a024f0807930024fa009","0x48fa013238038073e80240b00913601c039f401201c0600700f4e804807","0xfa0093440249680700e7d00481f013238038073e80243a80935401c039f4","0x25280904401c039f4013298049cd00f2a25300c3e8024cf00939c01e52809","0xf7807946024fa0099500242f00793c024fa00904e024f0807930024fa009","0x120007960024fa0099472a4061e400f2a4049f401201cf280700e7d004807","0x24c0093e80264c00904401cd18093e8024d180902c01e588093e802658009","0xfa00993c024f0807036024fa0090360244e807040024fa009040024f1007","0x480701801e58c9e0360824c1a302c026588093e80265880948201e4f009","0xfa0091f40264700700e7d00481601226c038073e8024d800938801c039f4","0x49f40126f00492d00e01cfa00903e0264700700e7d0048750126a803807","0x49f40132cc049e700f2cc049f401201e9d807964024fa00900e7a4039ff","0x25a4b501879003cb50127d0048073ca01e5a0093e802659cb201879803cb3","0x11007364024fa0093640240b00796e024fa00996c0252000796c024fa009","0xd8093e80240d80913a01c100093e8024100093c401cff8093e8024ff809","0xd8203fe6c80b00996e024fa00996e0252080704e024fa00904e024f0807","0x39f40120580489b00e01cfa009126024e200700e7d00480701801e5b827","0x38073e80240f80991c01c039f40121d4049aa00e01cfa0091f402647007","0x3a000127d0049c10124b4038073e8024df00938801c039f40121f004d0a","0x3cba0127d004cba01279c03cba0127d004807a7801e5c8093e8024039e9","0xfa0099792f4061e400f2f4049f401201cf2807978024fa0099752e4061e6","0x10000904401cde8093e8024de80902c01e5f8093e80265f00948001e5f009","0xf0807036024fa0090360244e807040024fa009040024f1007400024fa009","0x25f827036081001bd02c0265f8093e80265f80948201c138093e802413809","0x24700700e7d00481601226c038073e8024f8009a1401c039f401201c06007","0x4ced00e01cfa00903e0264700700e7d0048750126a8038073e80247d009","0xb007984024fa0090fe02520007980024fa0093ea0249680700e7d0049ee","0x100093e8024100093c401e600093e80266000904401c3c0093e80243c009","0xfa0099840252080704e024fa00904e024f0807036024fa0090360244e807","0xfa0091f40264700700e7d00480701801e610270360826007802c02661009","0x39f40120580489b00e01cfa0093dc0267680700e7d00481f01323803807","0x38073e80240880991c01c039f401208404cea00e01cfa00903202628807","0x3cc30127d0049c60124b4038073e8024f7809a7a01c039f40126dc049aa","0x49f401330c0482200e70c049f401270c0481600f310049f401273404a40","0x49d1012784039d20127d0049d2012274039d30127d0049d301278803cc3","0x380c00f310e89d23a730ce1816013310049f401331004a4100e744049f4","0xfa00903e0264700700e7d0048fa013238038073e8024039ef00e01cfa009","0x39f40120580489b00e01cfa0093de0269e80700e7d0049eb0126a803807","0x38073e80240880991c01c039f401208404cea00e01cfa00903202628807","0x2628093e8024c300925a01cc30093e8024c300904401c039f40127b404d3e","0xfa00998e0252000798e024fa009327318061e400f318049f401201cf2807","0xf38093c401e628093e80266280904401cf48093e8024f480902c01e65009","0x1208070bc024fa0090bc024f080725a024fa00925a0244e8073ce024fa009","0xf780700e7d00480701801e6505e25a79e629e902c026650093e802665009","0xf80991c01c039f40123e804c8e00e01cfa0090b40242780700e7d004807","0x481601226c038073e8024f7809a7a01c039f40127ac049aa00e01cfa009","0xfa0090220264700700e7d0048210133a8038073e80240c8098a201c039f4","0x49f401201cf4807996024fa0092ce0249680700e7d0049ed0134f803807","0x4ccd998030f300799a024fa00999a024f380799a024fa00900f4fc03ccc","0x4a4000e80c049f401333a6800c3c801e680093e8024039e500f338049f4","0x3ccb0127d004ccb012088039e90127d0049e901205803cd30127d004a03","0x49f40124fc049e100e4b4049f40124b40489d00e79c049f401279c049e2","0xfa00900e03003cd327e4b4f3ccb3d205804cd30127d004cd30129040393f","0x39f40127ac049aa00e01cfa00903e0264700700e7d0048fa01323803807","0x38073e80240c8098a201c039f40120580489b00e01cfa0093de0269e807","0x1100700e7d0049ed0134f8038073e80240880991c01c039f401208404cea","0x3cd80127d0048073ca01e6b0093e8024a380925a01ca38093e8024a3809","0xfa0093d20240b0079b6024fa0099b4025200079b4024fa009093360061e4","0x9680913a01cf38093e8024f38093c401e6b0093e80266b00904401cf4809","0xb0099b6024fa0099b602520807090024fa009090024f080725a024fa009","0x4c8e00e01cfa0091f40264700700e7d00480701801e6d84825a79e6b1e9","0xb00913601c039f40127bc04d3d00e01cfa0093d6024d500700e7d00481f","0x4811013238038073e8024108099d401c039f401206404c5100e01cfa009","0x49e301290003cdc0127d0049e80124b4038073e8024f6809a7c01c039f4","0x49e200f370049f40133700482200e7a4049f40127a40481600e810049f4","0x39e60127d0049e60127840392d0127d00492d012274039e70127d0049e7","0x100093e802403a5400e810f312d3cf370f4816012810049f401281004a41","0x399d00e01cfa00900e7bc038073e8024039f500e06c049f401201d28807","0x38271f4030fa009046024cd807046024fa00904202454007042024fa009","0xf80093e80240880903201c088093e80241380932a01c039f40123e804999","0xf800c25a2b0039f00127d0049f001279c039ef028030fa009028024fb807","0x49f40127ac0498300e7ac0b00c3e80240b0092ee01cf69ee0187d0049ef","0xf38073d07a4061f40127a8f69ee25a2b0039ed0127d0049ed01279c039ea","0xfa0093cc024c90073cc79c061f40127a00380c32801cf40093e8024f4009","0xf180934a01c039f4012790049a600e78cf200c3e8024f280915e01cf2809","0x2d0073c0024fa0093c2024bf8073c2024fa0093c4024bf0073c4024fa009","0x39e90127d0049e9012788039df0127d0049df012354039df0127d004807","0x96d403b8774ef12d3e8030f01df25a024e298200e79c049f401279c04816","0x49de0124b4039de0127d0049de012088038073e80240380c00e3686d8dc","0x49dd012784039dc0127d0049dc01279c038073e80240381400e4fc049f4","0x3945013504039f4018770048b100e4fc049f40124fc0482200e774049f4","0xcc007090024fa00900e09c039470127d00493f0124b4038073e80240380c","0x260093e80242480931a01c270093e8024a380904401c248093e802424009","0x492d00e01cfa00928a024c600700e7d00480701801c03d4201201c7d007","0x110072aa024fa0092a8024c58072a8024fa00900e09c0384f0127d00493f","0xb38093e80242600931201c260093e8024aa80931a01c270093e802427809","0x380c00e5a404d432d0024fa00c2ce024c40072ce024fa0092ce024c6807","0xb0092ee01cb98093e80242700925a01c039f40125a00484f00e01cfa009","0x39730127d0049730120880397e0127d00497901260c0397902c030fa009","0x38073e8024039ef00e01cfa00900e0300397f013510039f40185f8048b1","0xf500700e7d004820013238038073e80240d8098a201c039f401208804ce3","0x492d00e01cfa00938a024d500700e7d00481401274c038073e80240b009","0x49e700e600049f401201ea28071aa024fa00900e7a40385a0127d004973","0x39830127d0048073ca01cc10093e8024c00d5018798039800127d004980","0xfa0093ce0240b0070bc024fa00930c0252000730c024fa00930460c061e4","0xee8093c201cf48093e8024f48093c401c2d0093e80242d00904401cf3809","0x380c00e178ee9e90b479c0a0090bc024fa0090bc025208073ba024fa009","0xfa0092e60249680700e7d00497f012630038073e8024039ef00e01cfa009","0x48d40122f4038d40127d00499a0126100399a0127d00480730a01cc9809","0x481900e6b0049f40121980498100e01cfa0093520245f8070cc6a4061f4","0xd70093e8024d70093ce01cd88140187d0048140127dc039ae0127d0049ac","0x619400e6e0049f40126e0049e700e6e0db80c3e8024d89ae3d24b456007","0x61f4012718048c200e718049f401270c0497d00e70cdc80c3e8024dc1e7","0x49d10125f8039d10127d0049d20125ec038073e8024e98092f801ce91d3","0xc980904401ce60093e80240385a00e734049f40127380497f00e738049f4","0xb00736e024fa00936e024f1007398024fa0093980246a807326024fa009","0x3c12da8c728f607525a7d0061cd398774c99c530401cdc8093e8024dc809","0xfa0090ea024968070ea024fa0090ea0241100700e7d00480701801ce39f5","0x482200e6e4049f40126e40481600e3643f80c3e8024e280935a01c3e009","0x39ec0127d0049ec012784039b70127d0049b70127880387c0127d00487c","0x42883104050fa009394364f61b70f86e40b54700e728049f4012728049e7","0x4a3900e01cfa00900e030039d0013520440093e8030e200947001ce20d8","0x11007104024fa0091040240b007112024fa0091060249680700e7d004888","0x6c0093e80246c0093c201c428093e8024428093c401c448093e802444809","0x4288910408aa480702c024fa00902c0246e007028024fa009028024f3807","0x38190127d0048190360324100738207c0c8d739e050fa00902c0503f8d8","0x380c00e6f804d4a380024fa00c3820246d00703e024fa00903e0800625e","0x48073d201cdd0093e8024039e900e23c049f401235c0492d00e01cfa009","0x481600e01cfa00936c0267180737a6d8061f401208804ce200e358049f4","0x39bd0127d0049bd0125d00388f0127d00488f012088039cf0127d0049cf","0xdd1bd11e73c0a4e400e358049f40123580485e00e6e8049f40126e80485e","0x480701801c4b809a966cc049f40186d004ce500e6d0de09325a7d0048d6","0x2780735e264d812d3e8024d98099ce01cd90093e8024de00925a01c039f4","0x38073e80244d80928e01c4e89b0187d0049b0012514038073e8024d7809","0x49f40122740484800e01cfa00935a024a38073546b4061f401226404945","0xf9b238b3a0039b20127d0049b2012088039a40127d0049aa012120039a7","0xd180904401c039f401201c0600733c67cd012da98688d180c3e8030d21a7","0x399b150030fa0093800249400733a024fa00934602496807346024fa009","0xca8093e8024cc8a8018908039990127d00480704e01c039f401266c0484f","0xfa00933a02411007126024fa0091260240b007158024fa00932a02521807","0x5600948201cd10093e8024d10093c201c0c8093e80240c8093c401cce809","0x49c00124fc038073e80240380c00e2b0d101933a24c0a009158024fa009","0x48073ca01cca0093e8024d000925a01cd00093e8024d000904401c039f4","0xb00734c024fa00915e0252000715e024fa00933c648061e400e648049f4","0xc8093e80240c8093c401cca0093e8024ca00904401c498093e802449809","0xcf81932824c0a00934c024fa00934c0252080733e024fa00933e024f0807","0xd28093e8024de00925a01c039f40127000493f00e01cfa00900e030039a6","0xfa00934a02411007126024fa0091260240b007162024fa00912e02520007","0x5880948201c0f8093e80240f8093c201c0c8093e80240c8093c401cd2809","0x482201338c038073e80240380c00e2c40f81934a24c0a009162024fa009","0x49cd00e630c680c3e8024df00939c01ccc0093e80246b80925a01c039f4","0xf1007312024fa00933002411007316024fa00939e0240b00700e7d00498d","0xc38093e8024c60090bc01c5c8093e80240f8093c201cc40093e80240c809","0x4c5100e01cfa0090440267180700e7d00480701801c03d4d01201c7d007","0xa0093a601c039f4012058049ea00e01cfa0090400264700700e7d00481b","0xe800939c01cc28093e80244180925a01c039f40121fc049aa00e01cfa009","0x11007316024fa0091040240b00700e7d004984012734038bd308030fa009","0x5c8093e80246c0093c201cc40093e8024428093c401cc48093e8024c2809","0x27180700e7d00480701801c03d4d01201c7d00730e024fa00917a0242f007","0x49ea00e01cfa0090400264700700e7d00481b013144038073e802411009","0x3c00904401c039f4012714049aa00e01cfa009028024e980700e7d004816","0x11007316024fa0093720240b00717e024fa0090f0024968070f0024fa009","0x5c8093e8024fa8093c201cc40093e8024db8093c401cc48093e80245f809","0xfa00930e604061e400e604049f401201cf280730e024fa00938e0242f007","0xc480904401cc58093e8024c580902c01c610093e8024be80948001cbe809","0x120807172024fa009172024f0807310024fa009310024f1007312024fa009","0x39ef00e01cfa00900e030038c2172620c498b028024610093e802461009","0x481b013144038073e8024110099c601c039f40125a40484f00e01cfa009","0xfa009028024e980700e7d0048160127a8038073e80241000991c01c039f4","0x497b38a031210072f6024fa00900e09c0397c0127d00484e0124b403807","0x482200e79c049f401279c0481600e5e0049f40125e804a4300e5e8049f4","0x39dd0127d0049dd012784039e90127d0049e90127880397c0127d00497c","0xe980700e7d00480701801cbc1dd3d25f0f38140125e0049f40125e004a41","0x4c5100e01cfa0090440267180700e7d0049c50126a8038073e80240a009","0x6e00904401c039f4012058049ea00e01cfa0090400264700700e7d00481b","0x61e400e5d8049f401201cf28072ee024fa0091b8024968071b8024fa009","0xf38093e8024f380902c01cba0093e80246480948001c648093e80246d176","0xfa0091b6024f08073d2024fa0093d2024f10072ee024fa0092ee02411007","0xfa00900e950039741b67a4bb9e7028024ba0093e8024ba00948201c6d809","0x38073e8024039ef00e01cfa00900e7d40381b0127d0048074a201c10009","0x7d00c3e80241180933601c118093e80241080915001c108093e80240399d","0xfa0090220240c807022024fa00904e024ca80700e7d0048fa01266403827","0x968ac00e7c0049f40127c0049e700e7bc0a00c3e80240a0093ee01cf8009","0x49eb01260c039eb02c030fa00902c024bb8073da7b8061f40127bcf800c","0xf41e90187d0049ea3da7b8968ac00e7b4049f40127b4049e700e7a8049f4","0xf300932401cf31e70187d0049e800e030ca0073d0024fa0093d0024f3807","0xd280700e7d0049e4012698039e33c8030fa0093ca024578073ca024fa009","0xf00093e8024f08092fe01cf08093e8024f10092fc01cf10093e8024f1809","0x49f40127a4049e200e77c049f401277c048d500e77c049f401201c2d007","0xee1dd3bc4b4fa00c3c077c9680938a608039e70127d0049e7012058039e9","0x492d00e778049f40127780482200e01cfa00900e030038da1b637096d4e","0x49e100e770049f4012770049e700e01cfa00900e0500393f0127d0049de","0x4d4f00e7d0061dc0122c40393f0127d00493f012088039dd0127d0049dd","0x240093e80240382700e51c049f40124fc0492d00e01cfa00900e03003945","0xfa009092024c680709c024fa00928e02411007092024fa009090024cc007","0x38073e8024a280931801c039f401201c0600700f540048071f401c26009","0xaa8093e8024aa00931601caa0093e80240382700e13c049f40124fc0492d","0xfa009098024c4807098024fa0092aa024c680709c024fa00909e02411007","0x3969013544b40093e8030b380931001cb38093e8024b380931a01cb3809","0x110099c601c039f40125a00484f00e01cfa00900e7bc038073e80240380c","0x48160127a8038073e80241000991c01c039f401206c04c5100e01cfa009","0xfa00900e09c039730127d00484e0124b4038073e80240a0093a601c039f4","0x481600e5fc049f40125f804a4300e5f8049f40125e4e280c48401cbc809","0x39e90127d0049e9012788039730127d004973012088039e70127d0049e7","0xbf9dd3d25ccf38140125fc049f40125fc04a4100e774049f4012774049e1","0x492d00e01cfa0092d20242780700e7d0048073de01c039f401201c06007","0x5e807300024fa0091aa024c20071aa024fa00900e6140385a0127d00484e","0xc30093e8024c180930201c039f4012608048bf00e60cc100c3e8024c0009","0x485e01279c03993028030fa009028024fb8070bc024fa00930c0240c807","0x6a0093e80246a0093ce01c6a19a0187d0049930bc7a4968ac00e178049f4","0xd600918401cd60093e8024330092fa01c331a90187d0048d43ce030ca007","0xbf00736e024fa009362024bd80700e7d0049ae0125f0039b135c030fa009","0x39c30127d0048070b401cdc8093e8024dc0092fe01cdc0093e8024db809","0x49f4012668049e200e70c049f401270c048d500e168049f401216804822","0xe91d338c4b4fa00c37270cee85a38a608039a90127d0049a90120580399a","0x492d00e718049f40127180482200e01cfa00900e030039cd39c74496d52","0xd48093e8024d480902c01cf60750187d0049c50126b4039cc0127d0049c6","0xfa0093a6024f0807334024fa009334024f1007398024fa00939802411007","0xa1f4012748f61d3334730d4816a8e01ce90093e8024e90093ce01ce9809","0x39f401201c060071b2026a987f0127d00607c0128e00387c38e7d43c1ca","0x49f40127280481600e208049f40121e00492d00e01cfa0090fe0251c807","0x49c7012784039f50127d0049f5012788038820127d004882012088039ca","0x1155400e058049f4012058048dc00e050049f4012050049e700e71c049f4","0xfa00903206c0648200e3600f81910a20c0a1f40120580a07538e7d4411ca","0x44009aaa710049f4018360048da00e07c049f401207c1000c4bc01c0c809","0x38890127d0048073d201ce80093e80244280925a01c039f401201c06007","0x39f401235c04ce300e7046b80c3e8024110099c401ce78093e8024039e9","0xfa009382024ba0073a0024fa0093a002411007106024fa0091060240b007","0x418149c801ce78093e8024e78090bc01c448093e8024448090bc01ce0809","0x38d6013558dd0093e8030478099ca01c479be3804b4fa00939e224e09d0","0x499bd25a7d0049ba01339c039b60127d0049be0124b4038073e80240380c","0x49b401251c039b3368030fa00937a024a280700e7d0049bc01213c039bc","0xd980909001c039f401225c0494700e6c84b80c3e80244980928a01c039f4","0x27400736c024fa00936c02411007132024fa00936402424007360024fa009","0x38073e80240380c00e6a8d689d25b55c4d9af0187d00609936007cdb1c5","0x61f40127100492800e69c049f40126bc0492d00e6bc049f40126bc04822","0x49a234803121007344024fa00900e09c038073e8024d180909e01cd19a4","0x482200e700049f40127000481600e67c049f401268004a4300e680049f4","0x389b0127d00489b012784038190127d004819012788039a70127d0049a7","0x9f80700e7d00480701801ccf89b03269ce001401267c049f401267c04a41","0x399e0127d00489d0124b40389d0127d00489d012088038073e8024e2009","0x49f40122a004a4000e2a0049f40126a8ce80c3c801cce8093e8024039e5","0x48190127880399e0127d00499e012088039c00127d0049c00120580399b","0xe001401266c049f401266c04a4100e6b4049f40126b4049e100e064049f4","0x49be0124b4038073e8024e200927e01c039f401201c060073366b40c99e","0x482200e700049f40127000481600e654049f401235804a4000e664049f4","0x381f0127d00481f012784038190127d004819012788039990127d004999","0x27180700e7d00480701801cca81f032664e0014012654049f401265404a41","0xc91940187d004888012738038ac0127d0048850124b4038073e802411009","0x49f40122b00482200e2bc049f401220c0481600e01cfa009328024e6807","0x4992012178038b10127d00481f012784039a50127d004819012788039a6","0x39f401208804ce300e01cfa00900e03003807ab0024038fa00e660049f4","0x38073e80240b0093d401c039f401208004c8e00e01cfa00903602628807","0x398d0127d0048780124b4038073e80243a80935401c039f4012050049d3","0x49f40127280481600e01cfa009318024e6807316630061f4012364049ce","0x49c7012784039a50127d0049f5012788039a60127d00498d012088038af","0xfa00900e03003807ab0024038fa00e660049f401262c0485e00e2c4049f4","0x39f401208004c8e00e01cfa0090360262880700e7d00482201338c03807","0x38073e8024e280935401c039f4012050049d300e01cfa00902c024f5007","0x49f40126a40481600e624049f40127440492d00e744049f401274404822","0x49ce012784039a50127d00499a012788039a60127d004989012088038af","0xc400c3c801cc40093e8024039e500e660049f40127340485e00e2c4049f4","0x38af0127d0048af012058039870127d0048b9012900038b90127d004998","0x49f40122c4049e100e694049f4012694049e200e698049f401269804822","0x39f401201c0600730e2c4d29a615e050049870127d004987012904038b1","0x38073e80240a0093a601c039f4012714049aa00e01cfa00902c024f5007","0x1100700e7d004820013238038073e80240d8098a201c039f401208804ce3","0x39840127d0048073ca01cc28093e80246e00925a01c6e0093e80246e009","0xfa0093ce0240b00717e024fa00917a0252000717a024fa0091b4610061e4","0x6d8093c201cf48093e8024f48093c401cc28093e8024c280904401cf3809","0x39ef00e2fc6d9e930a79c0a00917e024fa00917e025208071b6024fa009","0x624e00e0880a00c3e80240a0093ee01c0b0093e80240397a00e01cfa009","0x2ac8073e80300f80916201c0f8093e80240f8093ce01c0f8093e80240b022","0x39f4012714049aa00e01cfa009028024e980700e7d00480701801c10009","0x108093e802403d5a00e06c049f401201cf4807032024fa00901202496807","0xfa00900e794038230127d004821036030f3007042024fa009042024f3807","0x481600e044049f401209c04a4000e09c049f401208c7d00c3c801c7d009","0x380c0127d00480c012788038190127d004819012088038070127d004807","0x892d01806403814012044049f401204404a4100e4b4049f40124b4049e1","0x39f00127d0048090124b4038073e80241000931801c039f401201c06007","0xf51eb25b56cf69ee3de4b4fa00c25a7c0061ae00e7c0049f40127c004822","0x49f40127bc0492d00e7bc049f40127bc0482200e01cfa00900e030039e9","0x49e8012088039e70127d0049ed0126dc039ed0127d0049ed0126c4039e8","0xf21e53cc4b4fa00c3dc7a0061ae00e79c049f401279c04c9200e7a0049f4","0x492d00e798049f40127980482200e01cfa00900e030039e13c478c96d5c","0x39df0127d0049e40126dc039e40127d0049e40126c4039e00127d0049e6","0xee80938c01c039f4012778049c300e36c6e1dc3ba7780a1f401277c049b9","0x49dc01260c038073e80246d8093a601c039f4012370049ea00e01cfa009","0x39f40124fc049c300e1242414728a4fc0a1f401279c049b900e368049f4","0x38073e8024248093a601c039f4012120049ea00e01cfa00928a024e3007","0xfa0091b4024f3807098024fa00909c024c180709c51c061f401251c04977","0x49e100e13c049f401213c049e700e13c049f40121306d00c49c01c6d009","0x4d5d00e7d00604f0122c4039e00127d0049e0012088039e50127d0049e5","0x49f401201c0481600e554049f40127800492d00e01cfa00900e03003954","0x49e50127840380c0127d00480c012788039550127d00495501208803807","0x1155400e51c049f401251c048dc00e050049f4012050049e700e794049f4","0xbc9732d25a0b38140125e4b99692d059c0a1f401251c0a1c53ca030aa807","0xe980700e7d0049470127a8038073e8024aa00931801c039f401201c06007","0xf48072fc024fa0093c00249680700e7d0049c50126a8038073e80240a009","0xf30070b4024fa0090b4024f38070b4024fa00900f5780397f0127d004807","0x49f4012354c000c3c801cc00093e8024039e500e354049f4012168bf80c","0x497e012088038070127d004807012058039830127d00498201290003982","0x4a4100e794049f4012794049e100e030049f4012030049e200e5f8049f4","0xf380993001c039f401201c060073067940617e00e050049830127d004983","0x49e3012088038073e8024e280935401c039f4012050049d300e01cfa009","0x2f00c3c801c2f0093e8024039e500e618049f401278c0492d00e78c049f4","0x38070127d0048070120580399a0127d004993012900039930127d0049e1","0x49f4012788049e100e030049f4012030049e200e618049f401261804822","0x39f401201c060073347880618600e0500499a0127d00499a012904039e2","0xf58093e8024f580904401c039f4012714049aa00e01cfa009028024e9807","0xfa0093d26a4061e400e6a4049f401201cf28071a8024fa0093d602496807","0x6a00904401c038093e80240380902c01cd60093e80243300948001c33009","0x1208073d4024fa0093d4024f0807018024fa009018024f10071a8024fa009","0x39c50127d00492d01357c039ac3d40306a007028024d60093e8024d6009","0x48220135800382202c030fa00902801c0619400e050049f401271404819","0x4d6300e01cfa009040026b1007032080061f401207c04d6100e07c049f4","0x118210187d004821013590038210127d00481b0125f80381b0127d004819","0x61f401209c04c4e00e09c049f401201c2d0071f4024fa009046024bf807","0x49c530401c0b0093e80240b00902c01c088093e8024088091aa01c08827","0x1100700e7d00480701801cf51eb3da4b6b29ee3de7c0969f40183e80880c","0xf70093e8024f70093ce01cf48093e8024f800925a01cf80093e8024f8009","0x61ee02c030330073d2024fa0093d2024110073de024fa0093de024f0807","0x49f40127a40492d00e01cfa00900e030039e43ca79896d663ce7a0061f4","0x49e3012088039e10127d0049e2042032b40073c4024fa00900f59c039e3","0x481600e784049f40127840498000e09c049f401209c048d500e78c049f4","0xee1dd25b5a4ef1df3c04b4fa00c3c209cf79e338a608039e80127d0049e8","0x49f40127800492d00e780049f40127800482200e01cfa00900e030038dc","0x48db012088039df0127d0049df012784039de0127d0049de01279c038db","0x480701801c2414728a4b6b513f1b4030fa00c3bc7a00606600e36c049f4","0x4d6b00e138049f40124fcf380c37001c248093e80246d80925a01c039f4","0x38da0127d0048da0120580384f0127d00484c0135b00384c0127d00484e","0x49f401213c04d6d00e77c049f401277c049e100e124049f401212404822","0xd600700e7d0049470126b0038073e80240380c00e13cef8491b47140484f","0xf48072a8024fa0091b60249680700e7d0049e70126b0038073e802424009","0xf30072ce024fa0092ce024f38072ce024fa00900f5b8039550127d004807","0x49f40125500482200e5a4049f40125140481600e5a0049f401259caa80c","0x2b780900e3e80397e0127d004968012178039790127d0049df01278403973","0xee8093e8024ee80904401c039f401279c049ac00e01cfa00900e03003807","0xfa0092fe024110070b4024fa0093d00240b0072fe024fa0093ba02496807","0x48071f401cc10093e80246e0090bc01cc00093e8024ee0093c201c6a809","0x39f4012790049ac00e01cfa0093ca024d600700e7d00480701801c03d70","0xc18093e8024f480925a01c039f401209c04c5000e01cfa009042026b8807","0x2f0093e80242f0093ce01c2f0093e802403d6e00e618049f401201cf4807","0x4983012088039690127d0049e6012058039930127d00485e30c030f3007","0x39e500e5f8049f401264c0485e00e5e4049f40127bc049e100e5cc049f4","0x39a90127d0048d40135c8038d40127d00497e334030f2007334024fa009","0x49f40125e4049e100e5cc049f40125cc0482200e5a4049f40125a404816","0x38073e80240380c00e6a4bc9732d2714049a90127d0049a90135b403979","0x39ed0127d0049ed012088038073e802410809ae201c039f401209c04c50","0x49f40121980482200e168049f40120580481600e198049f40127b40492d","0xfa00900e794039820127d0049ea012178039800127d0049eb012784038d5","0x481600e6c4049f40126b804d7200e6b8049f4012608d600c3c801cd6009","0x39800127d004980012784038d50127d0048d50120880385a0127d00485a","0x38160127d00481401260c039b13003542d1c50126c4049f40126c404d6d","0x481603e030968ac00e07c049f401208804d7400e088049f401271404d73","0x1081b0187d00481900e030ca007032024fa009032024f3807032080061f4","0x48fa013588038271f4030fa009046026b0807046024fa009042026b0007","0xf8009ac801cf80093e8024088092fc01c088093e802413809ac601c039f4","0x2270073da024fa00900e168039ee0127d0049ef0125fc039ef3e0030fa009","0x49f4012080049e200e7ac049f40127ac048d500e7acf680c3e8024f6809","0xf41e93d44b4fa00c3dc7ac9680938a6080381b0127d00481b01205803820","0x492d00e7a8049f40127a80482200e01cfa00900e030039e53cc79c96d75","0x39e90127d0049e9012784039e80127d0049e801279c039e40127d0049ea","0xef9e03c24b6bb1e23c6030fa00c3d006c0606600e790049f401279004822","0x39dd0127d004807ace01cef0093e8024f200925a01c039f401201c06007","0xfa0093da0246a8073bc024fa0093bc024110073b8024fa0093ba7c006568","0xef1c530401cf18093e8024f180902c01cee0093e8024ee00930001cf6809","0x1100700e7d00480701801ca394527e4b6bb8da1b6370969f4018770f69e9","0x6d0093e80246d0093ce01c240093e80246e00925a01c6e0093e80246e009","0x60da3c603033007090024fa009090024110071b6024fa0091b6024f0807","0x49f40121200492d00e01cfa00900e0300395409e13096d7809c124061f4","0xb4009ad801cb40093e8024b3809ad601cb38093e8024271e20186e003955","0xf10072aa024fa0092aa02411007092024fa0090920240b0072d2024fa009","0xb48093e8024b4809ada01c6d8093e80246d8093c201c100093e802410009","0xd600700e7d00484f0126b0038073e80240380c00e5a46d8202aa1240a009","0xf48072e6024fa0090900249680700e7d0049e20126b0038073e8024aa009","0xf30072fc024fa0092fc024f38072fc024fa00900f5b8039790127d004807","0x49f40125cc0482200e168049f40121300481600e5fc049f40125f8bc80c","0x2bc80900e3e8039820127d00497f012178039800127d0048db012784038d5","0x9f8093e80249f80904401c039f4012788049ac00e01cfa00900e03003807","0xfa0093060241100730c024fa0093c60240b007306024fa00927e02496807","0x48071f401ccd0093e8024a38090bc01cc98093e8024a28093c201c2f009","0x39f401277c049ac00e01cfa0093c0024d600700e7d00480701801c03d7a","0x6a0093e8024f200925a01c039f40127b404c5000e01cfa0093e0026b8807","0x330093e8024330093ce01c330093e802403d6e00e6a4049f401201cf4807","0x48d40120880385a0127d0049e1012058039ac0127d004866352030f3007","0x39e500e608049f40126b00485e00e600049f40127a4049e100e354049f4","0x39b70127d0049b10135c8039b10127d00498235c030f200735c024fa009","0x49f4012080049e200e354049f40123540482200e168049f401216804816","0x100d50b4050049b70127d0049b70135b4039800127d00498001278403820","0x39f40127c004d7100e01cfa0093da0262800700e7d00480701801cdb980","0xfa0090360240b007370024fa0093ce024968073ce024fa0093ce02411007","0xf28090bc01cc98093e8024f30093c201c2f0093e8024dc00904401cc3009","0x2b9007386024fa0093346e4061e400e6e4049f401201cf2807334024fa009","0x2f0093e80242f00904401cc30093e8024c300902c01ce30093e8024e1809","0xfa00938c026b6807326024fa009326024f0807040024fa009040024f1007","0xb00930601c110160187d0048140135ec039c63260802f186028024e3009","0x56007032024fa009040026ba007040024fa00938a026be00703e024fa009","0x482101279c038230127d00482201260c03821036030fa00903e0640612d","0x138093e8024138093ce01c138fa0187d00482304206c968ac00e084049f4","0xf7809ac201cf78093e8024f8009ac001cf80110187d00482700e030ca007","0xbf0073d6024fa0093da026b180700e7d0049ee013588039ed3dc030fa009","0x49f40127a40497f00e7a4f500c3e8024f5009ac801cf50093e8024f5809","0x49e6012354039e63ce030fa0093ce026270073ce024fa00900e168039e8","0xe298200e044049f40120440481600e3e8049f40123e8049e200e798049f4","0x38073e80240380c00e780f09e225b5f4f19e43ca4b4fa00c3d079896809","0x49f401278c049e700e77c049f40127940492d00e794049f401279404822","0xf1811018198039df0127d0049df012088039e40127d0049e4012784039e3","0xfa0093be0249680700e7d00480701801c6d8dc3b84b6bf1dd3bc030fa00c","0x6d00904401ca28093e80249f9ea0195a00393f0127d004807ace01c6d009","0xb00728a024fa00928a024c00073ce024fa0093ce0246a8071b4024fa009","0x2712dafe1242414725a7d0061453ce7906d1c530401cef0093e8024ef009","0xfa00928e0249680728e024fa00928e0241100700e7d00480701801c2784c","0xaa00904401c240093e8024240093c201c248093e8024248093ce01caa009","0x380c00e5ccb496825b600b39550187d0060493bc030330072a8024fa009","0x2b58072fc024fa0092ce774061b800e5e4049f40125500492d00e01cfa009","0xaa8093e8024aa80902c01c2d0093e8024bf809ad801cbf8093e8024bf009","0xfa009090024f08071f4024fa0091f4024f10072f2024fa0092f202411007","0xfa00900e0300385a0903e8bc9550280242d0093e80242d009ada01c24009","0x39f4012774049ac00e01cfa0092e6024d600700e7d0049690126b003807","0xc10093e802403d6e00e600049f401201cf48071aa024fa0092a802496807","0x4968012058039830127d004982300030f3007304024fa009304024f3807","0x485e00e64c049f4012120049e100e178049f40123540482200e618049f4","0x49dd0126b0038073e80240380c00e01ec080900e3e80399a0127d004983","0xef00902c01c6a0093e80242700925a01c270093e80242700904401c039f4","0x2f007358024fa009098024f08070cc024fa0091a802411007352024fa009","0x6e00935801c039f401201c0600700f608048071f401cd70093e802427809","0x49e7013140038073e8024f5009ae201c039f401236c049ac00e01cfa009","0xfa00900f5b8039b70127d0048073d201cd88093e8024ef80925a01c039f4","0x481600e6e4049f40126e0db80c3cc01cdc0093e8024dc0093ce01cdc009","0x39930127d0049e40127840385e0127d0049b1012088039860127d0049dc","0x49f4012668e180c3c801ce18093e8024039e500e668049f40126e40485e","0x485e012088039860127d004986012058039d30127d0049c60135c8039c6","0x4d6d00e64c049f401264c049e100e3e8049f40123e8049e200e178049f4","0xf38098a001c039f401201c060073a664c7d05e30c050049d30127d0049d3","0xf100925a01cf10093e8024f100904401c039f40127a804d7100e01cfa009","0xf08070cc024fa0093a402411007352024fa0090220240b0073a4024fa009","0x39d10127d0048073ca01cd70093e8024f00090bc01cd60093e8024f0809","0xfa0093520240b00739a024fa00939c026b900739c024fa00935c744061e4","0xd60093c201c7d0093e80247d0093c401c330093e80243300904401cd4809","0x3a5400e734d60fa0cc6a40a00939a024fa00939a026b6807358024fa009","0xfa00900e7bc038073e8024039f500e06c049f401201d28807040024fa009","0x1180916201c118093e80241080930601c108140187d0048140125dc03807","0x488800e01cfa0090400264700700e7d00480701801c7d009b0601cfa00c","0xb0093d401c039f4012050049ea00e01cfa00938a024d500700e7d004822","0x48073d201c138093e80240480925a01c039f401206c04c5100e01cfa009","0x880c3cc01cf80093e8024f80093ce01cf80093e802403a0a00e044049f4","0x39ed0127d0049ef3dc030f20073dc024fa00900e794039ef0127d0049f0","0x49f401209c0482200e01c049f401201c0481600e7ac049f40127b404a40","0x49eb0129040392d0127d00492d0127840380c0127d00480c01278803827","0xfa0091f4024c600700e7d00480701801cf592d01809c038140127ac049f4","0xf480930601cf48160187d0048160125dc039ea0127d0048090124b403807","0xf3809b0801cfa00c3d0024588073d4024fa0093d4024110073d0024fa009","0xf500700e7d0049c50126a8038073e80241100911001c039f401201c06007","0x4c8e00e01cfa0090360262880700e7d0048160127a8038073e80240a009","0x3d8500e794049f401201cf48073cc024fa0093d40249680700e7d004820","0x39e30127d0049e43ca030f30073c8024fa0093c8024f38073c8024fa009","0x49f401278404a4000e784049f401278cf100c3c801cf10093e8024039e5","0x480c012788039e60127d0049e6012088038070127d004807012058039e0","0x3814012780049f401278004a4100e4b4049f40124b4049e100e030049f4","0x49ea0124b4038073e8024f380931801c039f401201c060073c04b4061e6","0x7b8073ba024fa0093bc024c18073bc050061f40120500497700e77c049f4","0x6d0db0187d0048dc01361c038dc0127d0049dc013618039dc0127d004807","0x49f40124fc0481900e4fc049f401236804d8900e01cfa0091b6026c4007","0xf380709051c061f4012774a280c25a2b0039450127d00494501279c03945","0xfa00909c026c500709c124061f40121200380c32801c240093e802424009","0xaa009b1a01c039f401213c04d8c00e5502780c3e802426009b1601c26009","0x39682ce030fa0092ce026b20072ce024fa0092aa024bf0072aa024fa009","0x22700700e7d00480702801cb98093e80240385a00e5a4049f40125a00497f","0x49f40125e4048d500e77c049f401277c0482200e5e4b980c3e8024b9809","0x969df38a608038490127d004849012058039470127d00494701278803979","0x482200e01cfa00900e0300398230035496d8e0b45fcbf12d3e8030b4979","0x385a0127d00485a01279c039830127d00497e0124b40397e0127d00497e","0xfa00c0b41240606600e60c049f401260c0482200e5fc049f40125fc049e1","0xd48093e8024c180925a01c039f401201c060071a8668c992db1e178c300c","0xfa00935202411007358024fa0090cc59c0656800e198049f401201eb3807","0xc300902c01cd60093e8024d600930001cb98093e8024b98091aa01cd4809","0xe19b93704b6c81b73626b8969f40186b0b997f352714c100730c024fa009","0xe30093e8024d700925a01cd70093e8024d700904401c039f401201c06007","0xfa00938c02411007362024fa009362024f080736e024fa00936e024f3807","0xfa00900e030039cd39c74496d913a474c061f40186dcc300c0cc01ce3009","0xfa0090ea026c30070ea024fa00900e3dc039cc0127d0049c60124b403807","0x110073ea1e0061f40127280494a00e7281100c3e80241100929801cf6009","0x38d90fe032c907c38e030fa00c3ea748e992d41201ce60093e8024e6009","0xc5807106024fa00900e09c038820127d0049cc0124b4038073e80240380c","0xe20093e80244100904401c6c0093e8024e380902c01c428093e802441809","0x3d9401201c7d0073a0024fa00910a024c6807110024fa0090f8026c9807","0x39cf0127d00480704e01c448093e8024e600925a01c039f401201c06007","0x49f40122240482200e360049f40121fc0481600e35c049f401273c04998","0x2f0d825a824039d00127d0048d7012634038880127d0048d901364c039c4","0xfa0093880249680700e7d00480701801c479be019654e01c10187d006078","0xe0009b2601cdb0093e8024dd00904401c6b0093e8024e080902c01cdd009","0x480701801c03d9601201c7d007126024fa009110026c980737a024fa009","0x49b401364c039b40127d004807b2e01cde0093e8024e200925a01c039f4","0x4b9b30187d0061b41106f896a0900e6f0049f40126f00482200e6d0049f4","0xd980902c01c4c8093e8024de00925a01c039f401201c060073606c806598","0x2c980737a024fa00911e026c980736c024fa009132024110071ac024fa009","0xfa00900e0300389b013664d78093e8030e800931001c498093e80244b809","0xfa009028024bb80713a024fa00936c0249680700e7d0049af01213c03807","0x2c400734869c061f40127b004d8700e6a8049f40126b40498300e6b40a00c","0x39a20127d0049a3012064039a30127d0049a4013624038073e8024d3809","0xcf8093ce01ccf9a00187d0049aa34451c968ac00e688049f4012688049e7","0x540093e8024de8091ea01cce99e0187d00499f1ac030ca00733e024fa009","0xfa00900e168039990127d00499b0125fc0399b33a030fa00933a026b2007","0x48d500e274049f40122740482200e2b0ca80c3e8024ca80989c01cca809","0x399e0127d00499e012058039a00127d0049a0012788038ac0127d0048ac","0xfa00900e030039a534c2bc96d9a324650061f40182a0cc8ac3622740a1f9","0x48930123d4038b10127d0049940124b4039940127d00499401208803807","0x482200e630049f4012634ce80cad001cc68093e802403d6700e660049f4","0x398c0127d00498c012600039950127d004995012354038b10127d0048b1","0xfa00900e0300398717262096d9b31262c061f4018660c61953242c40a1f9","0x48160125dc039850127d00498b0124b40398b0127d00498b01208803807","0x4d8600e2fc049f401201c7b80717a024fa009308024c1807308058061f4","0x38073e8024be809b1001c6117d0187d00498101361c039810127d0048bf","0x49f40125ec049e700e5ec049f40125f00481900e5f0049f401230804d89","0xca0072f0024fa0092f0024f38072f05e8061f40122f4bd9a025a2b00397b","0xfa009192026c5807192024fa0092ec026c50072ec5dc061f40125e0cf00c","0xb88092fc01cb88093e8024b9009b1a01c039f40125d004d8c00e5c8ba00c","0x396d0127d00486b0125fc0386b2e0030fa0092e0026b20072e0024fa009","0x49f40126140482200e37c7000c3e80247000989c01c700093e80240385a","0x49770120580397a0127d00497a012788038df0127d0048df01235403985","0x39622c659096d9c2cc3746f12d3e8030b68df312614e298200e5dc049f4","0x39610127d0048de0124b4038de0127d0048de012088038073e80240380c","0x49f40125840482200e374049f4012374049e100e598049f4012598049e7","0x39f401201c060072b4570af12db3a57cb000c3e8030b317701819803961","0xfa0092ac5c00656800e558049f401201eb38072ae024fa0092c202496807","0xa980930001c700093e8024700091aa01cab8093e8024ab80904401ca9809","0x969f401854c700dd2ae714c10072c0024fa0092c00240b0072a6024fa009","0x758093e80247580904401c039f401201c0600729a53ca892db3c548768eb","0xfa0091da024f08072a4024fa0092a4024f3807298024fa0091d602496807","0x96d9f290528061f4018548b000c0cc01ca60093e8024a600904401c76809","0xfa00900e3dc039490127d00494c0124b4038073e80240380c00e5187b8f5","0x494a00e3f81100c3e80241100929801ca00093e8024a5809b0c01ca5809","0xfa00c1fe520a512db4001ca48093e8024a480904401c7f8fd0187d0048fe","0x39360127d0049490124b4038073e80240380c00e4e89d80cb424049f00c","0x988093e80249f00902c01c9a0093e80249b80931601c9b8093e802403827","0xfa009268024c6807218024fa009202026c9807260024fa00926c02411007","0x970093e8024a480925a01c039f401201c0600700f688048071f401c84809","0x49f40124ec0481600e4a0049f40124a80499800e4a8049f401201c13807","0x49280126340390c0127d00493a01364c039300127d00492e01208803931","0x480701801c0011801968c8e9260187d0060fd2be4c496da000e424049f4","0x11800904401d188093e80249300902c01d180093e80249800925a01c039f4","0x7d007468024fa009218026c9807466024fa00923a026c9807464024fa009","0x4807b2e01d1a8093e80249800925a01c039f401201c0600700f69004807","0x96da000e8d4049f40128d40482200e8d8049f40128d804d9300e8d8049f4","0x11a80925a01c039f401201c060074767e0065a54728e0061f40188d886118","0x2c9807464024fa00947802411007462024fa0094700240b007478024fa009","0x11e8093e80308480931001d1a0093e80251c809b2601d198093e802400009","0xfa0094640249680700e7d004a3d01213c038073e80240380c00e8fc04da6","0x4d8700e7e4049f40129040498300e9040b00c3e80240b0092ee01d20009","0x3a440127d004a43013624038073e802521009b1001d21a420187d004940","0x49f948a5e8968ac00e914049f4012914049e700e914049f401291004819","0x124a470187d004a46462030ca00748c024fa00948c024f380748c064061f4","0x4a4a0125fc03a4a492030fa009492026b20073ee024fa0094660247a807","0x482200e9352600c3e80252600989c01d260093e80240385a00e92c049f4","0xc8093e80240c81b01920803a4d0127d004a4d01235403a400127d004a40","0x2d3a4f49c030fa00c3ee92d268ed480050fc80748e024fa00948e0240b007","0x12700925a01d270093e80252700904401c039f401201c060074a69452812d","0x656800e958049f401201eb38074aa024fa0094680247a8074a8024fa009","0x1260093e8025260091aa01d2a0093e80252a00904401d2b8093e80252b249","0x2d401f3ec030fa00c4aa95d2624f4a8050fc8074ae024fa0094ae024c0007","0xfa0093ec0241100700e7d0048073de01c039f401201c060074b49652c12d","0xfa00900e7a403a5c0127d0048073d201d2d8093e8024fb00925a01cfb009","0x2710074be024fa0094bc026d50074bc024fa0090440580a12db5201d2e809","0x1238093e80252380902c01c039f401312004ce300f1262400c3e80252f809","0xfa0094b80242f007892024fa009892024ba0074b6024fa0094b602411007","0xa4e400e07c049f401207c1000c4bc01d2e8093e80252e8090bc01d2e009","0x227009b57134049f401913004ce500f13225c4a25a7d004a5d4b91252da47","0x22812d3e8026268099ce01e278093e80262580925a01c039f401201c06007","0x22980928e01e2a4530187d004c50012514038073e80262900909e01e29451","0x484800e01cfa0098aa024a38078ad154061f40131440494500e01cfa009","0x3c4f0127d004c4f01208803c580127d004c5601212003c570127d004c54","0x39f401201c060078bb1722d92db5916a2c80c3e80322c45703f13ce2ce8","0x49f401201c138078bc024fa0098b2024968078b2024fa0098b202411007","0x22500902c01e300093e8024fd80948601cfd8093e80262f9c501890803c5f","0xf0807032024fa009032024f10078bc024fa0098bc02411007894024fa009","0x3c608b40662f44a028026300093e80263000948201e2d0093e80262d009","0x968078b6024fa0098b60241100700e7d0049c50126a8038073e80240380c","0x2410093e80262ec8101879003c810127d0048073ca01e400093e80262d809","0xfa00990002411007894024fa0098940240b007908024fa00990402520007","0x24200948201e2e0093e80262e0093c201c0c8093e80240c8093c401e40009","0x49c50126a8038073e80240380c00f2122e0199011280a009908024fa009","0x22500902c01cfe0093e80262700948001e428093e80262580925a01c039f4","0xf0807032024fa009032024f100790a024fa00990a02411007894024fa009","0x39fc03e06642c4a028024fe0093e8024fe00948201c0f8093e80240f809","0x49ea00e01cfa00938a024d500700e7d004822012220038073e80240380c","0x12c00904401c039f401208004c8e00e01cfa00902c024f500700e7d004814","0xf0807916024fa00990e0241100790e024fa0094b0024968074b0024fa009","0x600700f6b4048071f401e470093e80252d0090bc01e468093e80252c809","0xa0093d401c039f4012714049aa00e01cfa0090440244400700e7d004807","0x4a490135c4038073e80241000991c01c039f4012058049ea00e01cfa009","0xfa0094a00241100700e7d004a4c013140038073e80251a00935801c039f4","0x1288093c201e458093e80264780904401e478093e80252800925a01d28009","0x48073ca01c039f401201cf780791c024fa0094a60242f00791a024fa009","0xb00792c024fa00992402520007924024fa00991d244061e400f244049f4","0xc8093e80240c8093c401e458093e80264580904401d238093e802523809","0x24681991691c0a00992c024fa00992c0252080791a024fa00991a024f0807","0x38073e80241100911001c039f40128fc0484f00e01cfa00900e03003c96","0xd600700e7d0048160127a8038073e80240a0093d401c039f4012714049aa","0x4c5100e01cfa009468024d600700e7d004820013238038073e802519809","0x481600f25c049f40128c80492d00e01cfa009280026c400700e7d00481b","0x380c00e01ed700900e3e803c9e0127d004c9701208803c980127d004a31","0x49c50126a8038073e80241100911001c039f40128ec049ac00e01cfa009","0xfa009000024d600700e7d0048160127a8038073e80240a0093d401c039f4","0x39f401206c04c5100e01cfa0092120263000700e7d00482001323803807","0x49f40127e00481600f28c049f40128d40492d00e01cfa009280026c4007","0x2528093e8024039e900e01cfa00900e7bc03c9e0127d004ca301208803c98","0xfa00994d294061e600f298049f4013298049e700f298049f401201ed7807","0x25800948001e580093e8026544a901879003ca90127d0048073ca01e54009","0xf100793c024fa00993c02411007930024fa0099300240b007962024fa009","0x2588093e80265880948201c768093e8024768093c201cbd0093e8024bd009","0xd600700e7d0048f70126b0038073e80240380c00f2c47697a93d2600a009","0x49ea00e01cfa00938a024d500700e7d004822012220038073e8024a3009","0x1000991c01c039f401206c04c5100e01cfa00902c024f500700e7d004814","0x48073d201cff8093e8024a600925a01c039f401257c049ac00e01cfa009","0x25900c3cc01e598093e8026598093ce01e598093e802403d6e00f2c8049f4","0x3cb60127d0049ff01208803cb50127d0048f501205803cb40127d004cb3","0x3807b60024038fa00e800049f40132d00485e00f2dc049f40123b4049e1","0x49ea00e01cfa00938a024d500700e7d004822012220038073e80240380c","0x1000991c01c039f401206c04c5100e01cfa00902c024f500700e7d004814","0xa880925a01ca88093e8024a880904401c039f401257c049ac00e01cfa009","0xf0807978024fa00997202411007974024fa0092c00240b007972024fa009","0x600700f6c4048071f401e5f0093e8024a68090bc01e5e8093e8024a7809","0x1100911001c039f4012568049ac00e01cfa0092b8024d600700e7d004807","0x48160127a8038073e80240a0093d401c039f4012714049aa00e01cfa009","0xfa0092e0026b880700e7d004820013238038073e80240d8098a201c039f4","0x49f401201cf480797e024fa0092c20249680700e7d0048e001314003807","0x4cc2980030f3007984024fa009984024f3807984024fa00900f5b803cc0","0x49e100f2d8049f40132fc0482200f2d4049f40125780481600f30c049f4","0x3cc40127d004cb501273003a000127d004cc301217803cb70127d0048dd","0x49f401280004db300f318049f40132dc04db200f314049f40132d804875","0xd500700e7d004822012220038073e80240380c00e01eda00900e3e803cc7","0x4c5100e01cfa00902c024f500700e7d0048140127a8038073e8024e2809","0xb8009ae201c039f401238004c5000e01cfa0090400264700700e7d00481b","0x481600f328049f40125900492d00e590049f40125900482200e01cfa009","0x3cbd0127d00496301278403cbc0127d004cca01208803cba0127d004977","0x49f40132f00487500f310049f40132e8049cc00f2f8049f40125880485e","0xfa00900e7bc03cc70127d004cbe0136cc03cc60127d004cbd0136c803cc5","0x4ccc01290003ccc0127d004cc7996030f2007996024fa00900e79403807","0x49e200f314049f40133140482200f310049f40133100481600f334049f4","0x4ccd0127d004ccd01290403cc60127d004cc60127840397a0127d00497a","0x49aa00e01cfa0090440244400700e7d00480701801e66cc62f531662014","0xd8098a201c039f4012058049ea00e01cfa009028024f500700e7d0049c5","0xc400925a01cc40093e8024c400904401c039f401208004c8e00e01cfa009","0x2f007406024fa009172024f08079a0024fa00999c0241100799c024fa009","0x1100911001c039f401201c0600700f6d4048071f401e698093e8024c3809","0x48160127a8038073e80240a0093d401c039f4012714049aa00e01cfa009","0xfa00933a026b880700e7d004820013238038073e80240d8098a201c039f4","0x49f40122bc0482200e01cfa00932a0262800700e7d0048930126b003807","0x49a601278403cd00127d004cd601208803cd60127d0048af0124b4038af","0xfa00900e794038073e8024039ef00f34c049f40126940485e00e80c049f4","0x481600f36c049f401336804a4000f368049f401334e6c00c3c801e6c009","0x39a00127d0049a001278803cd00127d004cd00120880399e0127d00499e","0x26da03341340cf01401336c049f401336c04a4100e80c049f401280c049e1","0xd500700e7d004822012220038073e80244d80909e01c039f401201c06007","0x4c5100e01cfa00902c024f500700e7d0048140127a8038073e8024e2809","0x4980935801c039f40126f4049ac00e01cfa0090400264700700e7d00481b","0x6b00902c01e6e0093e8024db00925a01c039f40127b004d8800e01cfa009","0x480701801c03db601201c7d0079bc024fa0099b802411007408024fa009","0xfa00938a024d500700e7d004822012220038073e8024d800935801c039f4","0x39f401206c04c5100e01cfa00902c024f500700e7d0048140127a803807","0x38073e8024e80098c001c039f401223c049ac00e01cfa00904002647007","0x1020093e8024d900902c01e700093e8024de00925a01c039f40127b004d88","0x3ce10127d0048073d201c039f401201cf78079bc024fa0099c002411007","0x49f401338a7080c3cc01e710093e8026710093ce01e710093e802403db7","0x4ce501290003ce50127d004ce39c8030f20079c8024fa00900e79403ce3","0x49e200f378049f40133780482200e810049f40128100481600f39c049f4","0x4ce70127d004ce7012904039b10127d0049b1012784039470127d004947","0x49ac00e01cfa00939c024d600700e7d00480701801e739b128f37902014","0xa0093d401c039f4012714049aa00e01cfa0090440244400700e7d0049cd","0x4820013238038073e80240d8098a201c039f4012058049ea00e01cfa009","0xfa00900e7a403ce80127d0049c60124b4038073e80242f00935801c039f4","0x275cea01879803ceb0127d004ceb01279c03ceb0127d004807adc01e75009","0xf08079e2024fa0099d0024110079da024fa0093a20240b0079d8024fa009","0x600700f6e0048071f401e7a0093e8026760090bc01e798093e8024d8809","0xa0093d401c039f4012714049aa00e01cfa0090440244400700e7d004807","0x4820013238038073e80240d8098a201c039f4012058049ea00e01cfa009","0x49b80124b4039b80127d0049b8012088038073e80242f00935801c039f4","0x49e100f3ec049f40133dc0482200f3e0049f40126180481600f3dc049f4","0x380c00e01edc80900e3e803cfe0127d0049c301217803cfc0127d0049b9","0x4822012220038073e80246a00935801c039f4012668049ac00e01cfa009","0xfa00902c024f500700e7d0048140127a8038073e8024e280935401c039f4","0x39f401259c04d7100e01cfa0090400264700700e7d00481b01314403807","0x2830093e8024039e900f410049f401260c0492d00e01cfa0092e602628007","0xfa009a0f418061e600f41c049f401341c049e700f41c049f401201eb7007","0xbf8093c201e788093e80268200904401e768093e8024c980902c01e85009","0x3a807a16024fa0099da024e60079e8024fa009a140242f0079e6024fa009","0x2890093e80267a009b6601e878093e802679809b6401e870093e802678809","0x49aa00e01cfa0090440244400700e7d00480701801c03dba01201c7d007","0xd8098a201c039f4012058049ea00e01cfa009028024f500700e7d0049c5","0x49670135c4038073e8024b98098a001c039f401208004c8e00e01cfa009","0x2480902c01e8b0093e80246a80925a01c6a8093e80246a80904401c039f4","0x2f0079f8024fa009300024f08079f6024fa009a2c024110079f0024fa009","0x2870093e80267d8090ea01e858093e80267c00939801e7f0093e8024c1009","0x39f401201cf7807a24024fa0099fc026d9807a1e024fa0099f8026d9007","0xfa009a3002520007a30024fa009a2545c061e400f45c049f401201cf2807","0xa38093c401e870093e80268700904401e858093e80268580902c01e8d809","0xa009a36024fa009a3602520807a1e024fa009a1e024f080728e024fa009","0xc180703e050061f40120500497700e01cfa00900e7bc03d1ba1e51e8750b","0x381b0127d0048190136ec038190127d00480720201c100093e80240f809","0x49f401208c04dbd00e01cfa00904202505807046084061f401206c04dbc","0x1380c25a2b0038270127d00482701279c038270127d0048fa012064038fa","0x49f40127bc0498300e7bc0b00c3e80240b0092ee01cf80110187d004820","0xf38073d67b4061f40127b8f801125a2b0039f00127d0049f001279c039ee","0xfa0093d2026c50073d27a8061f40127ac0380c32801cf58093e8024f5809","0xf3009b1a01c039f401279c04d8c00e798f380c3e8024f4009b1601cf4009","0x39e33c8030fa0093c8026b20073c8024fa0093ca024bf0073ca024fa009","0x22700700e7d00480702801cf08093e80240385a00e788049f401278c0497f","0x49f40127b4049e200e780049f4012780048d500e780f080c3e8024f0809","0xee9de3be4b4fa00c3c47809680938a608039ea0127d0049ea012058039ed","0x492d00e77c049f401277c0482200e01cfa00900e030038db1b877096dbe","0x39de0127d0049de012784039dd0127d0049dd01279c038da0127d0049df","0x2484828e4b6df94527e030fa00c3ba7a80606600e368049f401236804822","0x384c0127d004807ace01c270093e80246d00925a01c039f401201c06007","0xfa0093c20246a80709c024fa00909c0241100709e024fa00909879006568","0x271c530401c9f8093e80249f80902c01c278093e80242780930001cf0809","0x1100700e7d00480701801cb99692d04b6e01672aa550969f401813cf09de","0xb38093e8024b38093ce01cbc8093e8024aa00925a01caa0093e8024aa009","0x616727e030330072f2024fa0092f2024110072aa024fa0092aa024f0807","0x49f40125e40492d00e01cfa00900e030039801aa16896dc12fe5f8061f4","0x3dc200e178c300c3e8024c180929a01cc18093e8024bf9450186e003982","0xe900700e7d00499a012220038d4334030fa009326024a6807326024fa009","0x61f40126a40494a00e6a42f00c3e80242f00929801c2f0093e80242f009","0xd700929401cd70d40187d0048d4012530038073e8024d600935801cd6066","0xa4007370024fa0090cc024a400700e7d0049b70126b0039b7362030fa009","0xc10093e8024c100904401cbf0093e8024bf00902c01cdc8093e8024d8809","0x480701801c03dc400e7d0061b9370032e180730c024fa00930c024e9007","0xfa0093040249680700e7d0048d4012220038073e80242f00911001c039f4","0x39f401201c0600700f714048071f401ce30093e8024e180904401ce1809","0x49d20126b0039d13a4030fa0090bc024a50073a6024fa00930402496807","0xe880929001c039f4012738049ac00e734e700c3e80246a00929401c039f4","0x2e18073a6024fa0093a6024110070ea024fa00939a024a4007398024fa009","0xf60093e8024e980925a01c039f401201c0600700f718039f40181d4e600c","0x482201252803878394030fa00930c024a500738c024fa0093d802411007","0x380c00e2086c80cb8e1fc3e00c3e8030e38782fc4b50480738e7d4061f4","0x4280931601c428093e80240382700e20c049f40127180492d00e01cfa009","0x2c9807110024fa00910602411007388024fa0090f80240b0071b0024fa009","0x600700f720048071f401c448093e80246c00931a01ce80093e80243f809","0x499800e35c049f401201c1380739e024fa00938c0249680700e7d004807","0x38880127d0049cf012088039c40127d0048d9012058039c10127d0048d7","0x61f539471096a0900e224049f40127040498d00e740049f401220804d93","0x6b0093e80244400925a01c039f401201c0600737423c065c937c700061f4","0xfa00937c026c980737a024fa0091ac0241100736c024fa0093800240b007","0x39f401201c0600700f728048071f401cde0093e8024e8009b2601c49809","0x49f40126cc04d9300e6cc049f401201ecb807368024fa00911002496807","0x65cb36425c061f40186cce808f25a824039b40127d0049b4012088039b3","0xfa00912e0240b00735e024fa0093680249680700e7d00480701801c4c9b0","0xd9009b2601c498093e8024dd009b2601cde8093e8024d780904401cdb009","0x38073e80240380c00e27404dcc136024fa00c112024c4007378024fa009","0xdc00735a024fa00937a0249680700e7d00489b01213c038073e8024039ef","0x49f40126b40482200e6d8049f40126d80481600e6a8049f40126f04980c","0x4814012370039550127d004955012784039ed0127d0049ed012788039ad","0xf92600e6a8049f40126a8049d200e058049f4012058048dc00e050049f4","0xd11a334869c0a009340688d19a434e050fa0093540580a1c52aa7b4d69b6","0x38073e80240b0093d401c039f40122740484f00e01cfa00900e030039a0","0xd600700e7d0048930126b0038073e8024e280935401c039f4012050049ea","0x399e0127d0049b60120580399f0127d0049bd0124b4038073e8024de009","0x49ac00e01cfa00900e03003807b9a024038fa00e674049f401267c04822","0xe280935401c039f4012050049ea00e01cfa00902c024f500700e7d004899","0x49b40124b4038073e8024448098c001c039f40126e8049ac00e01cfa009","0x39ef00e674049f40122a00482200e678049f40126c00481600e2a0049f4","0x499901279c039990127d004807b6e01ccd8093e8024039e900e01cfa009","0x61e400e2b0049f401201cf280732a024fa00933266c061e600e664049f4","0xcf0093e8024cf00902c01cc90093e8024ca00948001cca0093e8024ca8ac","0xfa0092aa024f08073da024fa0093da024f100733a024fa00933a02411007","0xfa00900e030039922aa7b4ce99e028024c90093e8024c900948201caa809","0x38073e80240a0093d401c039f4012058049ea00e01cfa00900e7bc03807","0x38af0127d0049d30124b4038073e80241100911001c039f401261804888","0x49f401269404a4300e694049f4012698e280c48401cd30093e802403827","0x49ed012788038af0127d0048af0120880397e0127d00497e012058038b1","0xbf0140122c4049f40122c404a4100e554049f4012554049e100e7b4049f4","0x49800126b0038073e80246a80935801c039f401201c06007162554f68af","0xfa00938a024d500700e7d0048140127a8038073e80240b0093d401c039f4","0x49f40125e40492d00e01cfa0090440244400700e7d0049450126b003807","0x49f4012630049e700e630049f401201eb700731a024fa00900e7a403998","0xcc00904401cc48093e80242d00902c01cc58093e8024c618d0187980398c","0x7d00730e024fa0093160242f007172024fa0092aa024f0807310024fa009","0x48140127a8038073e80240b0093d401c039f401201c0600700f73804807","0xfa00928a024d600700e7d004822012220038073e8024e280935401c039f4","0x493f012058039850127d0049680124b4039680127d00496801208803807","0x485e00e2fc049f40125a4049e100e2f4049f40126140482200e610049f4","0x48480126b0038073e80240380c00e01ee780900e3e8039810127d004973","0xfa009028024f500700e7d0048160127a8038073e80242480935801c039f4","0x39f401279004d7100e01cfa0090440244400700e7d0049c50126a803807","0x610093e8024039e900e5f4049f40123680492d00e01cfa0093c202628007","0xfa0092f8308061e600e5f0049f40125f0049e700e5f0049f401201eb7007","0xef0093c201cc40093e8024be80904401cc48093e8024a380902c01cbd809","0x3a8072f4024fa009312024e600730e024fa0092f60242f007172024fa009","0xbb0093e8024c3809b6601cbb8093e80245c809b6401cbc0093e8024c4009","0x49ea00e01cfa00902c024f500700e7d00480701801c03dd001201c7d007","0xf08098a001c039f40120880488800e01cfa00938a024d500700e7d004814","0xee00925a01cee0093e8024ee00904401c039f401279004d7100e01cfa009","0xf080717a024fa00919202411007308024fa0093d40240b007192024fa009","0xbd0093e8024c200939801cc08093e80246d8090bc01c5f8093e80246e009","0xfa009302026d98072ee024fa00917e026d90072f0024fa00917a0243a807","0xfa0092ec5d0061e400e5d0049f401201cf280700e7d0048073de01cbb009","0xbc00904401cbd0093e8024bd00902c01cb88093e8024b900948001cb9009","0x1208072ee024fa0092ee024f08073da024fa0093da024f10072f0024fa009","0x128807040024fa00900e950039712ee7b4bc17a028024b88093e8024b8809","0x48140125dc038073e8024039ef00e01cfa00900e7d40381b0127d004807","0x7d009ba201cfa00c04602458807046024fa009042024c1807042050061f4","0xd500700e7d004822012220038073e80240d8098a201c039f401201c06007","0x4c8e00e01cfa00902c024f500700e7d0048140127a8038073e8024e2809","0x3dd200e044049f401201cf480704e024fa0090120249680700e7d004820","0x39ef0127d0049f0022030f30073e0024fa0093e0024f38073e0024fa009","0x49f40127b404a4000e7b4049f40127bcf700c3c801cf70093e8024039e5","0x480c012788038270127d004827012088038070127d004807012058039eb","0x38140127ac049f40127ac04a4100e4b4049f40124b4049e100e030049f4","0x48090124b4038073e80247d00931801c039f401201c060073d64b406027","0x110073d0024fa0093d2024c18073d2058061f40120580497700e7a8049f4","0x39f401201c060073ce026e98073e8030f400916201cf50093e8024f5009","0x38073e80240a0093d401c039f4012714049aa00e01cfa00904402444007","0x9680700e7d00481b013144038073e80241000991c01c039f4012058049ea","0xf38073c8024fa00900f750039e50127d0048073d201cf30093e8024f5009","0xf10093e8024039e500e78c049f4012790f280c3cc01cf20093e8024f2009","0x4807012058039e00127d0049e1012900039e10127d0049e33c4030f2007","0x49e100e030049f4012030049e200e798049f40127980482200e01c049f4","0x60073c04b4061e600e050049e00127d0049e00129040392d0127d00492d","0x497700e77c049f40127a80492d00e01cfa0093ce024c600700e7d004807","0x39dc0127d00480720201cee8093e8024ef00930601cef0140187d004814","0xfa0091b6025058071b436c061f401237004dbc00e370049f401277004dbb","0x494501279c039450127d00493f0120640393f0127d0048da0136f403807","0xb00c3e80240b0092ee01c241470187d0049dd28a030968ac00e514049f4","0x2414725a2b0038480127d00484801279c0384e0127d00484901260c03849","0x61f40121300380c32801c260093e8024260093ce01c260190187d00484e","0x7a8072d059c061f40125540494a00e5541100c3e80241100929801caa04f","0x49f40125cc0497f00e5ccaa00c3e8024aa009ac801cb48093e8024b3809","0xbf00c3e8024bf00989c01c039f401201c0a0072fc024fa00900e16803979","0xc81b0192080397f0127d00497f012354039df0127d0049df0120880397f","0xfa00c2d25e4bf92d3be050fc80709e024fa00909e0240b007032024fa009","0x2d0093e80242d00904401c039f401201c06007306608c012dbaa3542d00c","0x49f401201eb38070bc024fa0092d00247a80730c024fa0090b402496807","0xbf0091aa01cc30093e8024c300904401ccd0093e8024c99540195a003993","0xfa00c0bc668bf0d530c050fc807334024fa009334024c00072fc024fa009","0x1100700e7d0048073de01c039f401201c06007358198d492dbac07c6a00c","0x39b10127d0048073d201cd70093e80246a00925a01c6a0093e80246a009","0xfa009370026ec007370024fa0090440580a12dbae01cdb8093e8024039e9","0x2780902c01c039f401270c04ce300e718e180c3e8024dc8099c401cdc809","0x2f00738c024fa00938c024ba00735c024fa00935c0241100709e024fa009","0x49f401207c1000c4bc01cdb8093e8024db8090bc01cd88093e8024d8809","0x49f401874404ce500e744e91d325a7d0049b7362718d704f0293900381f","0xe70099ce01ce60093e8024e900925a01c039f401201c0600739a026ec9ce","0xfa8780187d004875012514038073e8024e500909e01ce51ec0ea4b4fa009","0xfa00938e024a38070f871c061f40127b00494500e01cfa0090f0024a3807","0x49cc012088038d90127d00487c0121200387f0127d0049f501212003807","0x60073883604292dbb420c4100c3e80306c87f03e730e2ce800e730049f4","0x13807110024fa00910402496807104024fa0091040241100700e7d004807","0xe78093e80244480948601c448093e8024e81c5018908039d00127d004807","0xfa009032024f1007110024fa009110024110073a6024fa0093a60240b007","0x441d3028024e78093e8024e780948201c418093e8024418093c201c0c809","0xfa00910a0241100700e7d0049c50126a8038073e80240380c00e73c41819","0xe21c1018790039c10127d0048073ca01c6b8093e80244280925a01c42809","0x110073a6024fa0093a60240b00737c024fa00938002520007380024fa009","0x6c0093e80246c0093c201c0c8093e80240c8093c401c6b8093e80246b809","0x38073e80240380c00e6f86c0191ae74c0a00937c024fa00937c02520807","0xdd0093e8024e680948001c478093e8024e900925a01c039f4012714049aa","0xfa009032024f100711e024fa00911e024110073a6024fa0093a60240b007","0x479d3028024dd0093e8024dd00948201c0f8093e80240f8093c201c0c809","0xfa00938a024d500700e7d004822012220038073e80240380c00e6e80f819","0x39f401208004c8e00e01cfa00902c024f500700e7d0048140127a803807","0xfa0091ac024110071ac024fa00935202496807352024fa00935202411007","0x48071f401c498093e8024d60090bc01cde8093e8024330093c201cdb009","0x39f4012714049aa00e01cfa0090440244400700e7d00480701801c03ddb","0x38073e80241000991c01c039f4012058049ea00e01cfa009028024f5007","0x1100700e7d00497e013140038073e8024b400935801c039f401255004d71","0xdb0093e8024de00904401cde0093e8024c000925a01cc00093e8024c0009","0x39f401201cf7807126024fa0093060242f00737a024fa009304024f0807","0xfa00936602520007366024fa0091266d0061e400e6d0049f401201cf2807","0xc8093c401cdb0093e8024db00904401c278093e80242780902c01c4b809","0xa00912e024fa00912e0252080737a024fa00937a024f0807032024fa009","0x1001f0444b4fa00c25a024061ae00e01cfa00900e7bc0389737a064db04f","0x492d00e088049f40120880482200e01cfa00900e0300382103606496ddc","0x38fa0127d0048200126dc038200127d0048200126c4038230127d004822","0x880938c01c039f401209c049c300e7b8f79f002209c0a1f40123e8049b9","0x49f0012370038073e8024f70093a601c039f40127bc049ea00e01cfa009","0x808073d6024fa0093da024c18073da7c0061f40127c00497700e7c0049f4","0xf39e80187d0049e90136f0039e90127d0049ea0136ec039ea0127d004807","0x49f40127980481900e798049f401279c04dbd00e01cfa0093d002505807","0xbb8073c6790061f40127acf280c25a2b0039e50127d0049e501279c039e5","0x49f401278c049e700e784049f40127880498300e7880a00c3e80240a009","0xca0073be024fa0093be024f38073be780061f4012784f19e425a2b0039e3","0xfa0093b8026c58073b8024fa0093ba026c50073ba778061f401277c0380c","0x6d0092fc01c6d0093e80246d809b1a01c039f401237004d8c00e36c6e00c","0x39470127d0049450125fc0394527e030fa00927e026b200727e024fa009","0x3849090030fa0090900262700700e7d00480702801c240093e80240385a","0x49f4012780049e200e124049f4012124048d500e08c049f401208c04822","0x2784c09c4b4fa00c28e1240f82338a608039de0127d0049de012058039e0","0x492d00e138049f40121380482200e01cfa00900e030039672aa55096ddd","0x384c0127d00484c0127840384f0127d00484f01279c039680127d00484e","0xbf97e2f24b6ef1732d2030fa00c09e7780606600e5a0049f40125a004822","0x38d50127d004807ace01c2d0093e8024b400925a01c039f401201c06007","0xfa0090900246a8070b4024fa0090b402411007300024fa0091aa4fc06568","0x2d1c530401cb48093e8024b480902c01cc00093e8024c000930001c24009","0x1100700e7d00480701801ccd1930bc4b6ef986306608969f40186002404c","0xc30093e8024c30093ce01c6a0093e8024c100925a01cc10093e8024c1009","0x61862d2030330071a8024fa0091a802411007306024fa009306024f0807","0x49f40123500492d00e01cfa00900e030039b135c6b096de00cc6a4061f4","0xd492db4001cdb8093e8024db80904401cdc9b80187d004816012528039b7","0x49b70124b4038073e80240380c00e748e980cbc2718e180c3e8030dc866","0xe180902c01ce68093e8024e700931601ce70093e80240382700e744049f4","0xc68073d8024fa00938c026c98070ea024fa0093a202411007398024fa009","0xdb80925a01c039f401201c0600700f788048071f401ce50093e8024e6809","0x481600e71c049f40127d40499800e7d4049f401201c138070f0024fa009","0x39ec0127d0049d201364c038750127d004878012088039cc0127d0049d3","0x410d901978c3f87c0187d0061b82e673096da000e728049f401271c0498d","0x428093e80243e00902c01c418093e80243a80925a01c039f401201c06007","0xfa0093d8026c9807388024fa0090fe026c98071b0024fa00910602411007","0xe80093e80243a80925a01c039f401201c0600700f790048071f401c44009","0x49f40127400482200e224049f401222404d9300e224049f401201ecb807","0x39f401201c06007380704065e51ae73c061f4018224f60d925b680039d0","0xfa00937c0241100710a024fa00939e0240b00737c024fa0093a002496807","0xe500931001c440093e80246b809b2601ce20093e802441009b2601c6c009","0x484f00e01cfa00900e7bc038073e80240380c00e6e804de611e024fa00c","0x39b60127d004888388030dc0071ac024fa0091b00249680700e7d00488f","0x49f4012780049e200e358049f40123580482200e214049f401221404816","0x4814012370039f00127d0049f0012370039830127d004983012784039e0","0xdb0143e0714c19e01ac2140f92600e6d8049f40126d8049d200e050049f4","0x380c00e6c804de712e024fa00c3660246d0073666d0de09337a050fa009","0x2780735e264061f401225c0492800e6c0049f401224c0492d00e01cfa009","0x2f400713a024fa009136024cc007136024fa00900e09c038073e8024d7809","0x49f40126f40481600e6a8049f40126b404a0800e6b4049f40122744c80c","0x49b4012784039bc0127d0049bc012788039b00127d0049b0012088039bd","0x480701801cd51b43786c0de8140126a8049f40126a804de900e6d0049f4","0xde80902c01cd20093e8024d9009bd401cd38093e80244980925a01c039f4","0xf0807378024fa009378024f100734e024fa00934e0241100737a024fa009","0x39a43686f0d39bd028024d20093e8024d2009bd201cda0093e8024da009","0x49ea00e01cfa009028024f500700e7d0049ba01213c038073e80240380c","0x4400935801c039f4012710049ac00e01cfa00938a024d500700e7d0049f0","0x482200e688049f40122140481600e68c049f40123600492d00e01cfa009","0x49c00126b0038073e80240380c00e01ef580900e3e8039a00127d0049a3","0xfa00938a024d500700e7d0049f00127a8038073e80240a0093d401c039f4","0x49f40127400492d00e01cfa0093940263000700e7d0048820126b003807","0xfa00900e7bc039a00127d00499f012088039a20127d0049c10120580399f","0x49f4012674049e700e674049f401201ed780733c024fa00900e7a403807","0x5419b0187900399b0127d0048073ca01c540093e8024ce99e0187980399d","0x11007344024fa0093440240b00732a024fa009332026f5007332024fa009","0xc18093e8024c18093c201cf00093e8024f00093c401cd00093e8024d0009","0x38073e80240380c00e654c19e03406880a00932a024fa00932a026f4807","0xf500700e7d0048140127a8038073e8024d880935801c039f40126b8049ac","0x49ac00e01cfa00902c0244400700e7d0049c50126a8038073e8024f8009","0x3d6e00e650049f401201cf4807158024fa0091a80249680700e7d004973","0x38af0127d004992328030f3007324024fa009324024f3807324024fa009","0x49f401260c049e100e694049f40122b00482200e698049f40126b004816","0x38073e80240380c00e01ef600900e3e8039980127d0048af012178038b1","0xd600700e7d0049c50126a8038073e8024f80093d401c039f4012050049ea","0x968070bc024fa0090bc0241100700e7d004816012220038073e8024b9809","0xc58093e8024c680904401cc60093e8024b480902c01cc68093e80242f009","0x3ded01201c7d007310024fa0093340242f007312024fa009326024f0807","0xf500700e7d00497f0126b0038073e8024bf00935801c039f401201c06007","0x488800e01cfa00938a024d500700e7d0049f00127a8038073e80240a009","0xb400925a01c039f401212004c5000e01cfa00927e026b880700e7d004816","0xc28093ce01cc28093e802403d6e00e61c049f401201cf4807172024fa009","0x39a60127d004979012058039840127d00498530e030f300730a024fa009","0x49f40126100485e00e2c4049f4012130049e100e694049f40122e404822","0x48b10136c8038bf0127d0049a50121d4038bd0127d0049a601273003998","0xfa00900e03003807bdc024038fa00e5f4049f401266004db300e604049f4","0x39f4012714049aa00e01cfa0093e0024f500700e7d0048140127a803807","0x38073e80249f809ae201c039f40120580488800e01cfa00909002628007","0x49f40127780481600e308049f40125500492d00e550049f401255004822","0x4967012178039890127d0049550127840398b0127d0048c20120880398c","0x4db200e2fc049f401262c0487500e2f4049f4012630049cc00e620049f4","0x39e500e01cfa00900e7bc0397d0127d0049880136cc039810127d004989","0x397a0127d00497b0137a80397b0127d00497d2f8030f20072f8024fa009","0x49f4012780049e200e2fc049f40122fc0482200e2f4049f40122f404816","0xf00bf17a0500497a0127d00497a0137a4039810127d004981012784039e0","0x39f4012050049ea00e01cfa00902c0244400700e7d00480701801cbd181","0x49f40120640492d00e064049f40120640482200e01cfa00938a024d5007","0x49760137a8039760127d0048212ee030f20072ee024fa00900e79403978","0x49e200e5e0049f40125e00482200e01c049f401201c0481600e324049f4","0x48c90127d0048c90137a40381b0127d00481b0127840380c0127d00480c","0xf82225a7d00612d012030d700700e7d0048073de01c6481b0185e003814","0x96807044024fa0090440241100700e7d00480701801c1081b0324b6f7820","0x7d0093e80241000936e01c100093e80241000936201c118093e802411009","0x49c600e01cfa00904e024e18073dc7bcf801104e050fa0091f4024dc807","0xf80091b801c039f40127b8049d300e01cfa0093de024f500700e7d004811","0x39eb0127d0049ed01260c039ed3e0030fa0093e0024bb8073e0024fa009","0xf400c3e8024f4809b7801cf48093e8024f5009b7601cf50093e802403901","0xfa0093cc0240c8073cc024fa0093ce026de80700e7d0049e801282c039e7","0x39e33c8030fa0093d67940612d15801cf28093e8024f28093ce01cf2809","0xfa0093c6024f38073c2024fa0093c4024c18073c4050061f401205004977","0x39df0127d0049df01279c039df3c0030fa0093c278cf212d15801cf1809","0x49dc01362c039dc0127d0049dd013628039dd3bc030fa0093be01c06194","0x497e00e368049f401236c04d8d00e01cfa0091b8026c60071b6370061f4","0xa38093e8024a28092fe01ca293f0187d00493f0135900393f0127d0048da","0x248480187d004848013138038073e80240381400e120049f401201c2d007","0xfa0093c0024f1007092024fa0090920246a807046024fa00904602411007","0x2604e25a7d00614709207c119c530401cef0093e8024ef00902c01cf0009","0x9680709c024fa00909c0241100700e7d00480701801cb39552a84b6f804f","0x260093e8024260093c201c278093e8024278093ce01cb40093e802427009","0xbf17925b7c4b99690187d00604f3bc030330072d0024fa0092d002411007","0x6a8093e802403d6700e168049f40125a00492d00e01cfa00900e0300397f","0x48480123540385a0127d00485a012088039800127d0048d527e032b4007","0xe298200e5a4049f40125a40481600e600049f40126000498000e120049f4","0x38073e80240380c00e668c985e25b7c8c31833044b4fa00c3001202605a","0x49f4012618049e700e350049f40126080492d00e608049f401260804822","0xc3169018198038d40127d0048d4012088039830127d00498301278403986","0xfa0091a80249680700e7d00480701801cd89ae3584b6f9866352030fa00c","0x96a0900e6dc049f40126dc0482200e6e4dc00c3e80240b00929401cdb809","0xdb80925a01c039f401201c060073a474c065f438c70c061f40186e4331a9","0x481600e734049f40127380498b00e738049f401201c138073a2024fa009","0x39ec0127d0049c601364c038750127d0049d1012088039cc0127d0049c3","0x492d00e01cfa00900e03003807bea024038fa00e728049f40127340498d","0xb00738e024fa0093ea024cc0073ea024fa00900e09c038780127d0049b7","0xf60093e8024e9009b2601c3a8093e80243c00904401ce60093e8024e9809","0x6c80cbec1fc3e00c3e8030dc1733984b504807394024fa00938e024c6807","0x49f40121f00481600e20c049f40121d40492d00e01cfa00900e03003882","0x49ec01364c039c40127d00487f01364c038d80127d00488301208803885","0x49f40121d40492d00e01cfa00900e03003807bee024038fa00e220049f4","0xfa0093a002411007112024fa009112026c9807112024fa00900f65c039d0","0xfa00900e030039c0382032fc0d739e030fa00c1127b06c92d41201ce8009","0x49be012088038850127d0049cf012058039be0127d0049d00124b403807","0x498800e220049f401235c04d9300e710049f401220804d9300e360049f4","0x2780700e7d0048073de01c039f401201c06007374026fc88f0127d0061ca","0xdb0093e8024441c40186e0038d60127d0048d80124b4038073e802447809","0xfa0093c0024f10071ac024fa0091ac0241100710a024fa00910a0240b007","0xa0091b801cf80093e8024f80091b801cc18093e8024c18093c201cf0009","0xa1f038a60cf00d610a07c9300736c024fa00936c024e9007028024fa009","0x6007364026fd0970127d0061b3012368039b33686f0499bd0287d0049b6","0x39af132030fa00912e02494007360024fa0091260249680700e7d004807","0x389d0127d00489b0126600389b0127d00480704e01c039f40126bc0484f","0xfa00937a0240b007354024fa00935a0250400735a024fa00913a264065e8","0xda0093c201cde0093e8024de0093c401cd80093e8024d800904401cde809","0x380c00e6a8da1bc3606f40a009354024fa009354026f4807368024fa009","0x481600e690049f40126c804dea00e69c049f401224c0492d00e01cfa009","0x39bc0127d0049bc012788039a70127d0049a7012088039bd0127d0049bd","0xd21b437869cde814012690049f401269004de900e6d0049f40126d0049e1","0xf500700e7d0048140127a8038073e8024dd00909e01c039f401201c06007","0x49ac00e01cfa009388024d600700e7d0049c50126a8038073e8024f8009","0x11007344024fa00910a0240b007346024fa0091b00249680700e7d004888","0xe000935801c039f401201c0600700f7ec048071f401cd00093e8024d1809","0x49c50126a8038073e8024f80093d401c039f4012050049ea00e01cfa009","0xfa0093a00249680700e7d0049ca013180038073e80244100935801c039f4","0x48073de01cd00093e8024cf80904401cd10093e8024e080902c01ccf809","0xfa00933a024f380733a024fa00900f6dc0399e0127d0048073d201c039f4","0xcd80c3c801ccd8093e8024039e500e2a0049f4012674cf00c3cc01cce809","0x39a20127d0049a2012058039950127d0049990137a8039990127d0048a8","0x49f401260c049e100e780049f4012780049e200e680049f401268004822","0x39f401201c0600732a60cf01a0344050049950127d0049950137a403983","0x38073e80240a0093d401c039f40126c4049ac00e01cfa00935c024d6007","0xd600700e7d004816012220038073e8024e280935401c039f40127c0049ea","0x2b7007328024fa00900e7a4038ac0127d0048d40124b4038073e8024b9809","0x578093e8024c9194018798039920127d00499201279c039920127d004807","0xfa009306024f080734a024fa0091580241100734c024fa0093580240b007","0x39f401201c0600700f7f0048071f401ccc0093e8024578090bc01c58809","0x38073e8024e280935401c039f40127c0049ea00e01cfa009028024f5007","0x385e0127d00485e012088038073e80240b00911001c039f40125cc049ac","0x49f40126340482200e630049f40125a40481600e634049f40121780492d","0x2fe80900e3e8039880127d00499a012178039890127d0049930127840398b","0x38073e8024bf80935801c039f40125f8049ac00e01cfa00900e03003807","0x4400700e7d0049c50126a8038073e8024f80093d401c039f4012050049ea","0x492d00e01cfa0090900262800700e7d00493f0135c4038073e80240b009","0x49e700e614049f401201eb700730e024fa00900e7a4038b90127d004968","0xd30093e8024bc80902c01cc20093e8024c2987018798039850127d004985","0xfa0093080242f007162024fa009098024f080734a024fa00917202411007","0x58809b6401c5f8093e8024d28090ea01c5e8093e8024d300939801ccc009","0x480701801c03dfe01201c7d0072fa024fa009330026d9807302024fa009","0xfa00938a024d500700e7d0049f00127a8038073e80240a0093d401c039f4","0x39f40124fc04d7100e01cfa00902c0244400700e7d00484801314003807","0xfa0093bc0240b007184024fa0092a8024968072a8024fa0092a802411007","0xb38090bc01cc48093e8024aa8093c201cc58093e80246100904401cc6009","0x2d900717e024fa0093160243a80717a024fa009318024e6007310024fa009","0xf280700e7d0048073de01cbe8093e8024c4009b6601cc08093e8024c4809","0xbd0093e8024bd809bd401cbd8093e8024be97c0187900397c0127d004807","0xfa0093c0024f100717e024fa00917e0241100717a024fa00917a0240b007","0x5f8bd028024bd0093e8024bd009bd201cc08093e8024c08093c201cf0009","0xfa009028024f500700e7d004816012220038073e80240380c00e5e8c09e0","0xfa00903202496807032024fa0090320241100700e7d0049c50126a803807","0xbb009bd401cbb0093e802410977018790039770127d0048073ca01cbc009","0xf10072f0024fa0092f00241100700e024fa00900e0240b007192024fa009","0x648093e802464809bd201c0d8093e80240d8093c201c060093e802406009","0xbf807046024fa00900e598038073e8024039ef00e3240d80c2f001c0a009","0x38270127d004827012354038270127d0048070b401c7d0093e802411809","0x96dff3e0044061f40180507d02725a0240a1f900e3e8049f40123e804980","0x48110124b4038110127d004811012088038073e80240380c00e7b4f71ef","0x48070b401cf48093e8024f50092fe01cf50093e80240396400e7ac049f4","0x498000e7a0049f40127a0048d500e7ac049f40127ac0482200e7a0049f4","0xf21e525b800f31e70187d0060163d27a0f81eb0287e4039e90127d0049e9","0x49f401279c0492d00e79c049f401279c0482200e01cfa00900e030039e3","0xfa0093c2024bf8073c0024fa009044024ae0073c2024fa00900e58c039e2","0x49de012354039e20127d0049e2012088039de0127d0048070b401cef809","0x61f4018780ef9de3cc7880a1f900e77c049f401277c0498000e778049f4","0x39dd0127d0049dd012088038073e80240380c00e3686d8dc25b804ee1dd","0x49f40124fc0482200e01c049f401201c0481600e4fc049f40127740492d","0x4820012370039dc0127d0049dc0127840380c0127d00480c0127880393f","0x481f040714ee00c27e01c1149600e07c049f401207c049d200e080049f4","0x480701801c27809c04130049f4018138048da00e1382484828e5140a1f4","0x498300e5540c80c3e80240c8092ee01caa0093e8024a380925a01c039f4","0x4e0300e7d0061670122c4039540127d004954012088039670127d004955","0x38073e80240d8093d401c039f4012084049c400e01cfa00900e03003968","0x39690127d0049540124b4038073e80240c8093d401c039f40121300493f","0x39790127d00497901279c039790127d004807c0801cb98093e8024039e9","0xfa0092fc5fc061e400e5fc049f401201cf28072fc024fa0092f25cc061e6","0xb480904401ca28093e8024a280902c01c6a8093e80242d00948001c2d009","0x120807092024fa009092024f0807090024fa009090024f10072d2024fa009","0x498c00e01cfa00900e030038d5092120b49450280246a8093e80246a809","0x498300e608049f401201e48807300024fa0092a80249680700e7d004968","0x110070bc024fa00900e168039860127d0049820125fc039830127d004819","0xc30093e8024c300930001c2f0093e80242f0091aa01cc00093e8024c0009","0x480701801c331a91a84b70299a326030fa00c3066182f049300050fc807","0x2600925001cd60093e8024c980925a01cc98093e8024c980904401c039f4","0x1100728a024fa00928a0240b00700e7d0049b101213c039b135c030fa009","0xcd0093e8024cd0093c201c240093e8024240093c401cd60093e8024d6009","0xdc1b70287d00481b35c668241ac28a05b03007036024fa0090360246e007","0x9680700e7d00480701801ce9009c0e74c049f4018718048da00e718e19b9","0x39cd0127d0048210126cc039ce0127d00480736c01ce88093e8024dc009","0xe88093e8024e880904401c3a8093e80240385a00e730049f40127380497f","0x3a9c33a2050fc807398024fa009398024c00070ea024fa0090ea0246a807","0xf600904401c039f401201c0600738e7d43c12dc10728f600c3e8030e69cc","0x1100736e024fa00936e0240b0070f8024fa0093d8024968073d8024fa009","0xe50093e8024e50093c201cdc8093e8024dc8093c401c3e0093e80243e009","0x49f401821404c4800e214418821b21fc0a1f4012728dc87c36e71704807","0x48074b201c440093e80246c80925a01c039f401201c06007388027050d8","0x385a00e73c049f401236004c4a00e224049f40127400497f00e740049f4","0xc00071ae024fa0091ae0246a807110024fa009110024110071ae024fa009","0xdf12dc16700e080c3e8030e78891ae20c440143f201c448093e802444809","0xfa00938202496807382024fa0093820241100700e7d00480701801cdd08f","0x480704e01c039f40126f40484f00e6f4db00c3e8024e980925001c6b009","0xb007368024fa00937802521807378024fa0091266d80624200e24c049f4","0x410093e8024410093c401c6b0093e80246b00904401c3f8093e80243f809","0xe00821ac1fc0a009368024fa00936802520807380024fa009380024f0807","0xdf0093e8024df00904401c039f401274c0493f00e01cfa00900e030039b4","0xfa00937425c061e400e25c049f401201cf2807366024fa00937c02496807","0xd980904401c3f8093e80243f80902c01cd80093e8024d900948001cd9009","0x12080711e024fa00911e024f0807104024fa009104024f1007366024fa009","0x493f00e01cfa00900e030039b011e208d987f028024d80093e8024d8009","0xb00735e024fa00938802520007132024fa0091b20249680700e7d0049d3","0x410093e8024410093c401c4c8093e80244c80904401c3f8093e80243f809","0x418821321fc0a00935e024fa00935e02520807106024fa009106024f0807","0x3c0093e80243c00904401c039f401274c0493f00e01cfa00900e030039af","0xfa00938e274061e400e274049f401201cf2807136024fa0090f002496807","0x4d80904401cdb8093e8024db80902c01cd50093e8024d680948001cd6809","0x1208073ea024fa0093ea024f0807372024fa009372024f1007136024fa009","0x49c400e01cfa00900e030039aa3ea6e44d9b7028024d50093e8024d5009","0xb007348024fa0093a40252000734e024fa0093700249680700e7d004821","0xdc8093e8024dc8093c401cd38093e8024d380904401cdb8093e8024db809","0xe19b934e6dc0a009348024fa00934802520807386024fa009386024f0807","0x38073e80240d8093d401c039f4012084049c400e01cfa00900e030039a4","0xd18093e80246a00925a01c6a0093e80246a00904401c039f40121300493f","0xfa00934002520007340024fa0090cc688061e400e688049f401201cf2807","0x240093c401cd18093e8024d180904401ca28093e8024a280902c01ccf809","0xa00933e024fa00933e02520807352024fa009352024f0807090024fa009","0x1080938801c039f4012064049ea00e01cfa00900e0300399f352120d1945","0x2780948001ccf0093e8024a380925a01c039f401206c049ea00e01cfa009","0xf100733c024fa00933c0241100728a024fa00928a0240b00733a024fa009","0xce8093e8024ce80948201c248093e8024248093c201c240093e802424009","0xe200700e7d0048190127a8038073e80240380c00e6742484833c5140a009","0x49ea00e01cfa00903e0244400700e7d00481b0127a8038073e802410809","0x492d00e370049f40123700482200e01cfa00938a024d500700e7d004820","0x39990127d0048db0127840399b0127d0048a8012088038a80127d0048dc","0x49ea00e01cfa00900e03003807c18024038fa00e654049f40123680485e","0xf80911001c039f401206c049ea00e01cfa009042024e200700e7d004819","0x48220128c4038073e8024e280935401c039f4012080049ea00e01cfa009","0x5600904401c560093e8024f280925a01cf28093e8024f280904401c039f4","0x7d00732a024fa0093c60242f007332024fa0093c8024f0807336024fa009","0x4821012710038073e80240c8093d401c039f401201c0600700f83004807","0xfa009040024f500700e7d00481f012220038073e80240d8093d401c039f4","0x39f4012058049d300e01cfa0090440251880700e7d0049c50126a803807","0xfa00932802411007328024fa0093de024968073de024fa0093de02411007","0x48073ca01cca8093e8024f68090bc01ccc8093e8024f70093c201ccd809","0xb00734c024fa00915e0252000715e024fa00932a648061e400e648049f4","0x60093e8024060093c401ccd8093e8024cd80904401c038093e802403809","0xcc80c33601c0a00934c024fa00934c02520807332024fa009332024f0807","0xf92dc1a0880b01425a7d00612d012030d700700e7d0049c50126a8039a6","0xfa00902802496807028024fa0090280241100700e7d00480701801c0c820","0x48072f001c108093e80241100936e01c110093e80241100936201c0d809","0x1380933601c138093e80247d00915001c7d0093e80240399d00e08c049f4","0xc8073de024fa0093e0024ca80700e7d004811012664039f0022030fa009","0x118093e8024118093ce01cf70093e8024f70093ce01cf70093e8024f7809","0xf39e83d27a80a1f4012084049b900e7acf680c3e8024119ee0184b456007","0x39f401279c049ea00e01cfa0093d2024e300700e7d0049ea01270c039e6","0x49f40127ac049e700e794049f40127a00498300e01cfa0093cc024e9807","0xf38073c6790061f4012794f59ed25a2b0039e50127d0049e501279c039eb","0xfa0093c2024c90073c2788061f401278c0380c32801cf18093e8024f1809","0xef00934a01c039f401277c049a600e778ef80c3e8024f000915e01cf0009","0x2d0071b8024fa0093b8024bf8073b8024fa0093ba024bf0073ba024fa009","0x38db0127d0048db0123540381b0127d00481b012088038db0127d004807","0x6e0db02c06ce298200e788049f40127880481600e790049f4012790049e2","0x48da012088038073e80240380c00e1242414725b838a293f1b44b4fa00c","0x49e100e514049f4012514049e700e138049f40123680492d00e368049f4","0x4e0f00e7d0061450122c40384e0127d00484e0120880393f0127d00493f","0xaa0093e80240382700e13c049f40121380492d00e01cfa00900e0300384c","0xfa0092aa024c68072ce024fa00909e024110072aa024fa0092a8024cc007","0x38073e80242600931801c039f401201c0600700f840048071f401cb4009","0xbc8093e8024b980931601cb98093e80240382700e5a4049f40121380492d","0xfa0092d0024c48072d0024fa0092f2024c68072ce024fa0092d202411007","0x385a013844bf8093e8030bf00931001cbf0093e8024bf00931a01cbf009","0xf48071aa024fa0092ce0249680700e7d00497f01213c038073e80240380c","0xf3007304024fa009304024f3807304024fa00900f848039800127d004807","0x49f401260cc300c3c801cc30093e8024039e500e60c049f4012608c000c","0x48d5012088039e20127d0049e2012058039930127d00485e01384c0385e","0x4e1400e4fc049f40124fc049e100e790049f4012790049e200e354049f4","0x2d00909e01c039f401201c060073264fcf20d53c4050049930127d004993","0x6a009c2a01c6a0093e80240382700e668049f401259c0492d00e01cfa009","0x110073c4024fa0093c40240b0070cc024fa0093520270b007352024fa009","0x9f8093e80249f8093c201cf20093e8024f20093c401ccd0093e8024cd009","0x38073e80240380c00e1989f9e43347880a0090cc024fa0090cc0270a007","0xd70093e8024039e500e6b0049f401251c0492d00e51c049f401251c04822","0x49e2012058039b70127d0049b101384c039b10127d00484935c030f2007","0x49e100e790049f4012790049e200e6b0049f40126b00482200e788049f4","0x600736e120f21ac3c4050049b70127d0049b7013850038480127d004848","0xf2807370024fa00903e0249680703e024fa00903e0241100700e7d004807","0xe30093e8024e1809c2601ce18093e80240c9b9018790039b90127d004807","0xfa009018024f1007370024fa0093700241100700e024fa00900e0240b007","0xdc007028024e30093e8024e3009c2801c100093e8024100093c201c06009","0xf80930601c0f8140187d0048140125dc038073e8024039ef00e7181000c","0x4dbc00e06c049f401206404dbb00e064049f401201c80807040024fa009","0x38fa0127d0048230136f4038073e80241080941601c118210187d00481b","0x482004e030968ac00e09c049f401209c049e700e09c049f40123e804819","0x39ee0127d0049ef01260c039ef02c030fa00902c024bb8073e0044061f4","0xf58093ce01cf59ed0187d0049ee3e0044968ac00e7c0049f40127c0049e7","0xf40093e8024f4809b1401cf49ea0187d0049eb00e030ca0073d6024fa009","0xfa0093cc026c680700e7d0049e7013630039e63ce030fa0093d0026c5807","0x497f00e78cf200c3e8024f2009ac801cf20093e8024f28092fc01cf2809","0xf080989c01c039f401201c0a0073c2024fa00900e168039e20127d0049e3","0x39ed0127d0049ed012788039e00127d0049e0012354039e03c2030fa009","0x96e173ba778ef92d3e8030f11e025a024e298200e7a8049f40127a804816","0x49df0124b4039df0127d0049df012088038073e80240380c00e36c6e1dc","0x482200e778049f4012778049e100e774049f4012774049e700e368049f4","0x6007092120a392dc305149f80c3e8030ee9ea018198038da0127d0048da","0x656800e130049f401201eb380709c024fa0091b40249680700e7d004807","0xf08093e8024f08091aa01c270093e80242700904401c278093e8024261e4","0xf09de09c714c100727e024fa00927e0240b00709e024fa00909e024c0007","0xaa00904401c039f401201c060072e65a4b412dc3259caa95425a7d00604f","0xf08072ce024fa0092ce024f38072f2024fa0092a8024968072a8024fa009","0x61f401859c9f80c0cc01cbc8093e8024bc80904401caa8093e8024aa809","0x39820127d0049790124b4038073e80240380c00e6006a85a25b868bf97e","0x61f40120880494c00e178c300c3e8024c180929401cc18093e802403dc2","0x482200e178049f401217804d9300e350cd00c3e8024c980929401cc9822","0x600735c6b00661b0cc6a4061f40183502f17e25a824039820127d004982","0x498b00e6dc049f401201c13807362024fa0093040249680700e7d004807","0x39c30127d0049b1012088039b90127d0049a9012058039b80127d0049b7","0x3807c38024038fa00e74c049f40126e00498d00e718049f401219804d93","0xcc0073a2024fa00900e09c039d20127d0049820124b4038073e80240380c","0xe18093e8024e900904401cdc8093e8024d600902c01ce70093e8024e8809","0xfa00930c026c98073a6024fa00939c024c680738c024fa00935c026c9807","0xfa00900e030039ec0ea0330e9cc39a030fa00c334618dc92d41201cc3009","0x49ca012088038780127d0049cd012058039ca0127d0049c30124b403807","0x38fa00e1f0049f401271804d9300e71c049f401273004d9300e7d4049f4","0xfa00900f65c0387f0127d0049c30124b4038073e80240380c00e01f0f009","0x3a92d41201c3f8093e80243f80904401c6c8093e80246c809b2601c6c809","0x487f0124b4038073e80240380c00e3604280cc3e20c4100c3e80306c9c6","0x4d9300e7d4049f40127100482200e1e0049f40122080481600e710049f4","0x3100880127d0061d30126200387c0127d00488301364c039c70127d0049ec","0x49f40127d40492d00e01cfa0091100242780700e7d00480701801ce8009","0x482200e35cbf80c3e8024bf809c4201ce787c0187d00487c01388403889","0x600711e6f806622380704061f401835ce787825a824038890127d004889","0x4e2100e6e8049f40122240492d00e01cfa009380024d600700e7d004807","0xdd0093e8024dd00904401ce08093e8024e080902c01c6b17f0187d00497f","0xfa00938e024d600700e7d00480701801c03e2300e7d0060d60f8032e1807","0x49b6012088039bd0127d0049c1012058039b60127d0049ba0124b403807","0x49f40126e80492d00e01cfa00900e03003807c48024038fa00e24c049f4","0xe092d41201cde0093e8024de00904401cda1450187d004945013884039bc","0x48970126b0038073e80240380c00e6c0d900cc4a25cd980c3e8030da1c7","0x4c80904401cde8093e8024d980902c01c4c8093e8024de00925a01c039f4","0x61f401826cbf9bd25b6800389b35e030fa009044024a5007126024fa009","0x13807348024fa0091260249680700e7d00480701801cd39aa019898d689d","0x39a00127d00489d012058039a20127d0049a301262c039a30127d004807","0x49f40126880498d00e678049f40126b404d9300e67c049f401269004822","0x38a80127d0048930124b4038073e80240380c00e01f1380900e3e80399d","0xd00093e8024d500902c01ccc8093e8024cd80933001ccd8093e802403827","0xfa009332024c680733c024fa00934e026c980733e024fa00915002411007","0xfa00900e03003992328033140ac32a030fa00c35e514d012db4001cce809","0x48af012088039a60127d004995012058038af0127d00499f0124b403807","0x38fa00e660049f401267804d9300e2c4049f40122b004d9300e694049f4","0xfa00900f65c0398d0127d00499f0124b4038073e80240380c00e01f14809","0xca12db4001cc68093e8024c680904401cc60093e8024c6009b2601cc6009","0x498d0124b4038073e80240380c00e2e4c400cc54624c580c3e8030c619e","0x4d9300e694049f401261c0482200e698049f401262c0481600e61c049f4","0x3159850127d00619d012620039980127d00498901364c038b10127d004992","0x38073e8024c280909e01c039f401201cf780700e7d00480701801cc2009","0xfa00934c0240b00717e024fa0093302c4061b800e2f4049f40126940492d","0xaa8093c201cf68093e8024f68093c401c5e8093e80245e80904401cd3009","0xe900702c024fa00902c0246e007028024fa0090280246e0072aa024fa009","0xbe9810287d0048bf02c050e29553da2f4d301f24c01c5f8093e80245f809","0xfa0093080242780700e7d00480701801cbd97c1845f4c08140125ecbe0c2","0x39f4012714049aa00e01cfa009028024f500700e7d0048160127a803807","0xbd0093e8024d280925a01c039f4012660049ac00e01cfa009162024d6007","0x3e2c01201c7d0072ee024fa0092f4024110072f0024fa00934c0240b007","0xf500700e7d0048160127a8038073e80245c80935801c039f401201c06007","0x4c6000e01cfa009324024d600700e7d0049c50126a8038073e80240a009","0x110072f0024fa0093100240b0072ec024fa00931a0249680700e7d00499d","0x3daf00e324049f401201cf480700e7d0048073de01cbb8093e8024bb009","0x39720127d004974192030f30072e8024fa0092e8024f38072e8024fa009","0x49f40125c004a4000e5c0049f40125c8b880c3c801cb88093e8024039e5","0x49ed012788039770127d004977012088039780127d0049780120580386b","0xbc0140121ac049f40121ac04a4100e554049f4012554049e100e7b4049f4","0x48160127a8038073e8024d800935801c039f401201c060070d6554f6977","0xfa00928a024d600700e7d004822012220038073e80240a0093d401c039f4","0xfa0093640240b0072da024fa0093780249680700e7d00497f0126b003807","0x39f401201c0600700f8b4048071f401c6f8093e8024b680904401c70009","0x38073e80240a0093d401c039f4012058049ea00e01cfa00911e024d6007","0xd600700e7d00497f0126b0038073e8024a280935801c039f401208804888","0xb0071bc024fa0091120249680700e7d0049c70126b0038073e80243e009","0x1380700e7d0048073de01c6f8093e80246f00904401c700093e8024df009","0xb20093e8024b300948601cb30093e80246e9c5018908038dd0127d004807","0xfa0092c8025208072aa024fa0092aa024f08073da024fa0093da024f1007","0x39f40127400484f00e01cfa00900e030039642aa7b46f8e0028024b2009","0x38073e8024e280935401c039f4012050049ea00e01cfa00902c024f5007","0xd600700e7d00497f0126b0038073e8024a280935801c039f401208804888","0xb0072c6024fa0093ea0249680700e7d0049c70126b0038073e80243e009","0x600700f8b8048071f401cb08093e8024b180904401cb10093e80243c009","0xa0093d401c039f4012058049ea00e01cfa0091b0024d600700e7d004807","0x49450126b0038073e80241100911001c039f4012714049aa00e01cfa009","0xfa0093d8024d600700e7d0049d3013180038073e8024bf80935801c039f4","0x4960012088039620127d004885012058039600127d00487f0124b403807","0x49f401201edb8072be024fa00900e7a4038073e8024039ef00e584049f4","0x48073ca01cae0093e8024af15f0187980395e0127d00495e01279c0395e","0xb0072ac024fa0092ae025200072ae024fa0092b8568061e400e568049f4","0xf68093e8024f68093c401cb08093e8024b080904401cb10093e8024b1009","0xaa9ed2c25880a0092ac024fa0092ac025208072aa024fa0092aa024f0807","0x38073e8024c000935801c039f4012354049ac00e01cfa00900e03003956","0x4400700e7d0049c50126a8038073e80240a0093d401c039f4012058049ea","0xf48072a6024fa0092f20249680700e7d0049450126b0038073e802411009","0xf30071da024fa0091da024f38071da024fa00900f5b8038eb0127d004807","0x49f401254c0482200e544049f40121680481600e548049f40123b47580c","0x31780900e3e80394c0127d0049520121780394d0127d0049550127840394f","0x38073e80240a0093d401c039f4012058049ea00e01cfa00900e03003807","0x1100700e7d004822012220038073e8024a280935801c039f4012714049aa","0xa40093e80249f80902c01ca50093e8024b400925a01cb40093e8024b4009","0xfa0092e60242f0071ee024fa0092d2024f08071ea024fa00929402411007","0x38073e80242400935801c039f401201c0600700f8c0048071f401ca3009","0xd500700e7d0048140127a8038073e80240b0093d401c039f4012124049ac","0x4c5000e01cfa0093c8026b880700e7d004822012220038073e8024e2809","0x3d6e00e52c049f401201cf4807292024fa0091b40249680700e7d0049e1","0x38fe0127d004940296030f3007280024fa009280024f3807280024fa009","0x49f4012778049e100e53c049f40125240482200e544049f401251c04816","0x494f0121d4038fd0127d0049510127300394c0127d0048fe0121780394d","0x38fa00e404049f401253004db300e4f8049f401253404db200e3fc049f4","0xfa009028024f500700e7d0048160127a8038073e80240380c00e01f18809","0x39f40120880488800e01cfa0093c20262800700e7d0049c50126a803807","0x49f40127700492d00e770049f40127700482200e01cfa0093c8026b8807","0x48dc012784038f50127d00493b012088039480127d0049ea0120580393b","0x487500e3f4049f4012520049cc00e518049f401236c0485e00e3dc049f4","0x39010127d0049460136cc0393e0127d0048f70136c8038ff0127d0048f5","0x39360127d004901274030f2007274024fa00900e794038073e8024039ef","0x49f40123fc0482200e3f4049f40123f40481600e4dc049f40124d804a40","0x49370129040393e0127d00493e012784039ed0127d0049ed012788038ff","0xfa00900e7d40381f0127d0048074a601c9b93e3da3fc7e8140124dc049f4","0x38190127d004807c6401c100093e8024039e900e01cfa00900e7bc03807","0xfa00925a024c1807036024fa009032080061e600e064049f4012064049e7","0xd600704e3e8061f40127140494a00e08c049f40120840d80c3cc01c10809","0xf80093e802408823018798038110127d0048fa0123d4038073e802413809","0xf71ef018798039ee0127d0048160126cc039ef0127d0048143e0030f3007","0x1080700e7d0049eb01251c039ea3d6030fa0093da024a28073da024fa009","0x49f40127a404c4c00e7a4f500c3e8024f500989601cf50093e8024f5009","0x4822013138038220127d00482203e032268073d0024fa00900e16803822","0xf300c3e8030f39e800e4b6278073d0024fa0093d00246a8073ce088061f4","0x110098a001c039f401279404c5000e01cfa00900e030039e33c8033199e5","0x48073d201cf10093e80240480925a01c039f40127a8049ed00e01cfa009","0xf080c3cc01cf00093e8024f00093ce01cf00093e802403c5200e784049f4","0x39dd0127d0049df3bc030f20073bc024fa00900e794039df0127d0049e0","0x49f40127880482200e798049f40127980481600e770049f401277404e34","0x61e23cc714049dc0127d0049dc0138d40380c0127d00480c012788039e2","0x6e0093e80240480925a01c039f401278c04c5000e01cfa00900e030039dc","0x49f40127900481600e368049f401201c5c8071b6024fa0093d402424007","0x48db0123640380c0127d00480c012788038dc0127d0048dc012088039e4","0xe29f40123686d80c1b87900a45300e368049f4012368049e700e36c049f4","0x38073e80240380c00e13804e36092024fa00c0900262a00709051ca293f","0x969f401212404c5600e13c049f401208804c5500e130049f40125140492d","0xaa94725a2b0038073e8024b380909e01c039f40125500495500e59caa954","0xbc8093e8024b9809c7001cb98093e8024b4809c6e01cb49680187d00484f","0xfa0092d0024f1007098024fa0090980241100727e024fa00927e0240b007","0x39f401201c060072f25a02613f38a024bc8093e8024bc809c6a01cb4009","0x49f401213804e3400e5f8049f40125140492d00e01cfa00904402628007","0x49470127880397e0127d00497e0120880393f0127d00493f0120580397f","0xfa00900e7bc0397f28e5f89f9c50125fc049f40125fc04e3500e51c049f4","0x38073e80240380c00e07c1100cc720580a00c3e80300480701802403807","0x38073e80240381400e064049f40124b4049c500e080049f40120580492d","0x61f40180640481f00e080049f40120800482200e050049f401205004816","0x499300e3e8049f40120800492d00e01cfa00900e030038230138e81081b","0x39f00127d00481b012084038110127d0048fa012088038270127d004821","0x492d00e01cfa00900e03003807c76024038fa00e7bc049f401209c0499a","0x110073d6024fa0093da0246a0073da024fa00900e09c039ee0127d004820","0xf78093e8024f580933401cf80093e80241180904201c088093e8024f7009","0x380c00e7a004e3c3d2024fa00c3de024d48073d4024fa0093e002424007","0x49e9012080039e70127d0048110124b4038073e8024039ef00e01cfa009","0x968ac00e794049f4012794049e700e794049f40127980481900e798049f4","0xfa0093ce02411007028024fa0090280240b0073c6790061f4012794e280c","0xf18093ce01cf50093e8024f50091b201cf20093e8024f20093c401cf3809","0xf11c501277cf01e13c4714fa0093c67a8f21e7028052298073c6024fa009","0x39f40127a00484f00e01cfa00900e7bc038073e80240380c00e77cf01e1","0x49dd38a7a896e3d00e774049f401201c138073bc024fa00902202496807","0x482200e050049f40120500481600e370049f401277004e3e00e770049f4","0x48dc0127d0048dc0128180380c0127d00480c012788039de0127d0049de","0xe28093a601c039f40124b40495500e01cfa00900e030038dc0187780a1c5","0x480709801c6d0093e8024039e900e36c049f401207c0492d00e01cfa009","0xf280728a024fa00927e368061e600e4fc049f40124fc049e700e4fc049f4","0x248093e802424009c7e01c240093e8024a2947018790039470127d004807","0xfa009018024f10071b6024fa0091b602411007044024fa0090440240b007","0x39f401201cf78070920306d82238a024248093e80242480940c01c06009","0xfa009028024a2807044024fa00938a058061e600e058049f401201cf4807","0x4c4c00e0641000c3e80241000989601c039f401207c0494700e0800f80c","0x38210127d00482101279c038210127d00481b0131540381b0127d004819","0xfa00900e0240b0071f4024fa00904002424007046024fa009042088061e6","0x118090bc01c7d0093e80247d0091b201c048093e80240480904401c03809","0x61f00132e8039f002209c969f401208c7d00900e7168f007046024fa009","0x25e0073da024fa0090220249680700e7d00480701801cf7009c807bc049f4","0xf48093e802496809c8201c039f40127a80484f00e7a8f580c3e8024f7809","0xfa0093ce024a38073cc79c061f40127ac0494500e7a0049f401201f21007","0x49e801279c039ed0127d0049ed012088039e50127d0049e601212003807","0xef9e03c24b7219e23c6790969f4018794f41e90187b40a24900e7a0049f4","0xef0093e8024f200925a01cf20093e8024f200904401c039f401201c06007","0xfa0093c6024f08073ba024fa0093ba024108073ba024fa0093c4024e2807","0x6d809c88370ee00c3e8030ee80903e01cef0093e8024ef00904401cf1809","0x38da0127d0049de0124b4038073e8024ee0093da01c039f401201c06007","0x49f401251404e3700e514049f40124fc0481900e4fc049f401237004820","0x48da012088038270127d004827012058038480127d0049470138e003947","0x139c5012120049f401212004e3500e78c049f401278c049e100e368049f4","0xfa0093bc0249680700e7d0048db0127b4038073e80240380c00e120f18da","0xfa009098024f3807098024fa00900f9140384e0127d0048073d201c24809","0xaa00c3c801caa0093e8024039e500e13c049f40121302700c3cc01c26009","0x38270127d004827012058039670127d0049550138d0039550127d00484f","0x49f401259c04e3500e78c049f401278c049e100e124049f401212404822","0x39e10127d0049e1012088038073e80240380c00e59cf184904e71404967","0x49f401277cb480c3c801cb48093e8024039e500e5a0049f40127840492d","0x4968012088038270127d004827012058039790127d0049730138d003973","0x139c50125e4049f40125e404e3500e780049f4012780049e100e5a0049f4","0xfa0090220249680700e7d00492d013918038073e80240380c00e5e4f0168","0xbf00904401c138093e80241380902c01cbf8093e8024f7009c6801cbf009","0xe28092fe024fa0092fe0271a807018024fa009018024f08072fc024fa009","0x48073ea01c0c8093e802403a5100e07c049f401201d2a0072fe030bf027","0x481b01260c0381b028030fa009028024bb80700e7d0048073de01c039f4","0x4c5100e01cfa00900e0300382301391c039f4018084048b100e084049f4","0xa0093d401c039f40120580488800e01cfa00938a024d500700e7d004819","0x48073d201c7d0093e80240480925a01c039f401207c04c8e00e01cfa009","0x1380c3cc01c088093e8024088093ce01c088093e802403e4800e09c049f4","0x39ee0127d0049f03de030f20073de024fa00900e794039f00127d004811","0x49f40123e80482200e01c049f401201c0481600e7b4049f40127b804a40","0x49ed0129040392d0127d00492d0127840380c0127d00480c012788038fa","0xfa009046024c600700e7d00480701801cf692d0183e8038140127b4049f4","0xfa0093d4027248073d4024fa00900e55c039eb0127d0048090124b403807","0x380902c01c039f40127a004e4b00e79cf400c3e8024f4809c9401cf4809","0x32600725a024fa00925a024f08073d6024fa0093d60241100700e024fa009","0xa88073c6790f29e638a7d0049e725a7ac039c540a01cf38093e8024f3809","0x49f40127940492d00e01cfa00900e030039e1013934f10093e8030f1809","0xb00929801cee9de0187d0049df012528039df0127d0049e201253c039e0","0x1100700e7d00480702801c6d8dc0187d0049dc012528039dc02c030fa009","0x394728a0332713f1b4030fa00c1b6774f312db4001cf00093e8024f0009","0xc5807092024fa00900e09c038480127d0049e00124b4038073e80240380c","0x278093e80242400904401c260093e80246d00902c01c270093e802424809","0x3e4f01201c7d0072aa024fa00909c024c68072a8024fa00927e026c9807","0x39680127d00480704e01cb38093e8024f000925a01c039f401201c06007","0x49f401259c0482200e130049f40125140481600e5a4049f40125a004998","0xef04c25b680039550127d004969012634039540127d00494701364c0384f","0xfa00909e0249680700e7d00480701801cbf97e019940bc9730187d0060dc","0xbc809b2601cc00093e80242d00904401c6a8093e8024b980902c01c2d009","0x480701801c03e5101201c7d007306024fa0092a8026c9807304024fa009","0x485e01364c0385e0127d004807b2e01cc30093e80242780925a01c039f4","0xcd1930187d00605e2a85f896da000e618049f40126180482200e178049f4","0xc980902c01c330093e8024c300925a01c039f401201c0600735235006652","0x2c9807304024fa0092fe026c9807300024fa0090cc024110071aa024fa009","0xfa00900e030039ae01394cd60093e8030aa80931001cc18093e8024cd009","0x49f401201f2a007362024fa0093000249680700e7d0049ac01213c03807","0xdc8092fe01cdc9b70187d0049b7013590039b80127d0049820123d4039b7","0x110073a6718061f401271804c4e00e718049f401201c2d007386024fa009","0xe18093e8024e180930001ce98093e8024e98091aa01cd88093e8024d8809","0x480701801ce61cd39c4b72a9d13a4030fa00c37070ce99e4362050fc807","0xc18091ea01c3a8093e8024e900925a01ce90093e8024e900904401c039f4","0x656800e6dc049f40126dc04e5600e728049f401201eb38073d8024fa009","0xe30093e8024e30091aa01c3a8093e80243a80904401c3c0093e8024e51b7","0x32b9c73ea030fa00c3d81e0e31d10ea050fc8070f0024fa0090f0024c0007","0xfa80925a01cfa8093e8024fa80904401c039f401201c060071b21fc3e12d","0x38850127d00488301260c03883028030fa009028024bb807104024fa009","0x4400c3e8024e2009b0e01ce20093e80246c009b0c01c6c0093e8024038f7","0xfa0091120240c807112024fa0093a0026c480700e7d004888013620039d0","0x39c11ae030fa00910a73c0612d15801ce78093e8024e78093ce01ce7809","0x49be013628039be380030fa0093823540619400e704049f4012704049e7","0x4d8d00e01cfa009374026c60071ac6e8061f401223c04d8b00e23c049f4","0x499bd0187d0049bd013590039bd0127d0049b60125f8039b60127d0048d6","0x61f40126d004c4e00e6d0049f401201c2d007378024fa009126024bf807","0x6b8093c401cd98093e8024d98091aa01c410093e80244100904401cd99b4","0x969f40186f0d99c7104714c1007380024fa0093800240b0071ae024fa009","0x4b8093e80244b80904401c039f401201c060071366bc4c92dcb06c0d9097","0xfa009364024f0807360024fa009360024f380713a024fa00912e02496807","0x96e593546b4061f40186c0e000c0cc01c4e8093e80244e80904401cd9009","0xfa00900f59c039a20127d00489d0124b4038073e80240380c00e68cd21a7","0x48d500e688049f40126880482200e67c049f4012680de80cad001cd0009","0x39ad0127d0049ad0120580399f0127d00499f012600039b40127d0049b4","0xfa00900e0300399533266c96e5a150674cf12d3e8030cf9b4364688e2982","0x48a801279c038ac0127d00499e0124b40399e0127d00499e01208803807","0x606600e2b0049f40122b00482200e674049f4012674049e100e2a0049f4","0x5600925a01c039f401201c0600734a6985792dcb6648ca00c3e8030541ad","0x494c00e634049f401266004d8600e660049f401201c7b807162024fa009","0x49f40122c40482200e624c580c3e8024c600929401cc60160187d004816","0x39f401201c0600730a61c0665c172620061f4018624c919425b680038b1","0x49f40122f40498b00e2f4049f401201c13807308024fa00916202496807","0x48b901364c0397d0127d004984012088039810127d004988012058038bf","0xfa00900e03003807cba024038fa00e5f0049f40122fc0498d00e308049f4","0xfa0092f4024cc0072f4024fa00900e09c0397b0127d0048b10124b403807","0xc2809b2601cbe8093e8024bd80904401cc08093e8024c380902c01cbc009","0xbb80c3e8030c59aa3024b6d00072f8024fa0092f0024c6807184024fa009","0x481600e5c8049f40125f40492d00e01cfa00900e030039741920332f176","0x386b0127d00497601364c039700127d004972012088039710127d004977","0x492d00e01cfa00900e03003807cbe024038fa00e5b4049f401230804d93","0x110071be024fa0091be026c98071be024fa00900f65c038e00127d00497d","0x39642cc033300dd1bc030fa00c1be3086492db4001c700093e802470009","0x39710127d0048de012058039630127d0048e00124b4038073e80240380c","0x49f401237404d9300e1ac049f40125d004d9300e5c0049f401258c04822","0xb100909e01c039f401201c060072c2027309620127d00617c0126200396d","0xc18072be050061f40120500497700e580049f40125c00492d00e01cfa009","0x39f401257004d8800e568ae00c3e8024c6809b0e01caf0093e8024af809","0xfa0092ac024f38072ac024fa0092ae0240c8072ae024fa0092b4026c4807","0x39530127d00495301279c03953040030fa0092bc5586b92d15801cab009","0x48ed013590039520127d00486b0123d4038ed1d6030fa0092a65c406194","0x4c4e00e534049f401201c2d00729e024fa0092a2024bf8072a23b4061f4","0xa60093e8024a60091aa01cb00093e8024b000904401ca614d0187d00494d","0xce9600287e4038eb0127d0048eb012058038200127d00482003203241007","0x482200e01cfa00900e030039461ee3d496e62290528061f4018548a794c","0x394b0127d00496d0123d4039490127d00494a0124b40394a0127d00494a","0x49f40125240482200e3f8049f40125007680cad001ca00093e802403d67","0xa41490287e4038fe0127d0048fe0126000394d0127d00494d01235403949","0x39ef00e01cfa00900e0300390127c3fc96e630443f4061f401852c7f14d","0x3e6400e4ec049f40123f40492d00e3f4049f40123f40482200e01cfa009","0x9d12db5201c9b8093e8024039e900e4d8049f401201cf4807274024fa009","0x9800c3e8024988099c401c988093e80249a009b5401c9a0093e80240b014","0xfa009276024110071d6024fa0091d60240b00700e7d00493001338c0390c","0x9b8090bc01c9b0093e80249b0090bc01c860093e8024860092e801c9d809","0x493726c4309d8eb029390038220127d00482203e0312f00726e024fa009","0x39f401201c0600724c027329280127d00612a0133940392a25c424969f4","0x11800909e01d180002304b4fa0092500267380723a024fa00925c02496807","0x494500e01cfa009462024a38074648c4061f40124600494500e01cfa009","0x3a350127d004a32012120038073e80251980928e01d1a2330187d004800","0x11b235044474e2ce800e474049f40124740482200e8d8049f40128d004848","0xfa0094700241100700e7d00480701801d1e23b3f04b733239470030fa00c","0x11f9c501890803a3f0127d00480704e01d1e8093e80251c00925a01d1c009","0x11007212024fa0092120240b007482024fa00948002521807480024fa009","0x11c8093e80251c8093c201c100093e8024100093c401d1e8093e80251e809","0x38073e80240380c00e9051c82047a4240a009482024fa00948202520807","0xfc8093e8024fc00925a01cfc0093e8024fc00904401c039f4012714049aa","0xfa00948602520007486024fa009478908061e400e908049f401201cf2807","0x100093c401cfc8093e8024fc80904401c848093e80248480902c01d22009","0xa009488024fa00948802520807476024fa009476024f0807040024fa009","0x9700925a01c039f4012714049aa00e01cfa00900e03003a44476080fc909","0x11007212024fa0092120240b00748c024fa00924c0252000748a024fa009","0x110093e8024110093c201c100093e8024100093c401d228093e802522809","0x38073e80240380c00e9181102048a4240a00948c024fa00948c02520807","0x24700700e7d0048140127a8038073e80240b00911001c039f4012714049aa","0x3a470127d0048ff0124b4038ff0127d0048ff012088038073e80240f809","0x49f40124040485e00e7dc049f40124f8049e100e924049f401291c04822","0x4400700e7d0049c50126a8038073e80240380c00e01f3380900e3e803a4a","0x4d7100e01cfa00903e0264700700e7d0048140127a8038073e80240b009","0x7a80904401c039f401253404c5000e01cfa0092da024d600700e7d0048ed","0xf0807492024fa00949602411007496024fa0091ea024968071ea024fa009","0xf280700e7d0048073de01d250093e8024a30090bc01cfb8093e80247b809","0x1270093e80252680948001d268093e80252524c01879003a4c0127d004807","0xfa009040024f1007492024fa009492024110071d6024fa0091d60240b007","0x1248eb028025270093e80252700948201cfb8093e8024fb8093c201c10009","0xfa0090d6024d600700e7d00496101213c038073e80240380c00e938fb820","0x39f4012050049ea00e01cfa00902c0244400700e7d0049c50126a803807","0x38073e80240c8098a201c039f40125b4049ac00e01cfa00903e02647007","0x1280093e8024b880902c01d278093e8024b800925a01c039f401263404d88","0xd600700e7d00480701801c03e6801201c7d0074a2024fa00949e02411007","0x488800e01cfa00938a024d500700e7d0049740126b0038073e8024b2009","0xbe0098c001c039f401207c04c8e00e01cfa009028024f500700e7d004816","0x48e00124b4038073e8024c6809b1001c039f401206404c5100e01cfa009","0x39ef00e944049f401294c0482200e940049f40125980481600e94c049f4","0x4a5501279c03a550127d004807b5e01d2a0093e8024039e900e01cfa009","0x61e400e95c049f401201cf28074ac024fa0094aa950061e600e954049f4","0x1280093e80252800902c01d2c0093e8024fb00948001cfb0093e80252b257","0xfa00933a024f08071ae024fa0091ae024f10074a2024fa0094a202411007","0xfa00900e03003a5833a35d28a500280252c0093e80252c00948201cce809","0x39f401206404c5100e01cfa00934a024d600700e7d0049a60126b003807","0x38073e80240a0093d401c039f40120580488800e01cfa00938a024d5007","0x3a590127d0048ac0124b4038073e8024d500935801c039f401207c04c8e","0x3a5b0127d004a5b01279c03a5b0127d004807adc01d2d0093e8024039e9","0xfa0094b2024110074ba024fa00915e0240b0074b8024fa0094b6968061e6","0x48071f401e240093e80252e0090bc01d2f8093e8024ce8093c201d2f009","0x39f4012714049aa00e01cfa0090320262880700e7d00480701801c03e69","0x38073e80240f80991c01c039f4012050049ea00e01cfa00902c02444007","0x2248093e8024cd80925a01ccd8093e8024cd80904401c039f40126a8049ac","0xfa009332024f0807896024fa00989202411007894024fa00935a0240b007","0x39f401201c0600700f9a8048071f401e268093e8024ca8090bc01e26009","0x38073e80240c8098a201c039f401268c049ac00e01cfa009348024d6007","0x24700700e7d0048140127a8038073e80240b00911001c039f4012714049aa","0x492d00e01cfa0093680262800700e7d0049bd0135c4038073e80240f809","0x49e700f140049f401201eb700789e024fa00900e7a403c4e0127d00489d","0x12e8093e8024d380902c01e288093e80262844f01879803c500127d004c50","0xfa0098a20242f0074be024fa009364024f08074bc024fa00989c02411007","0x12f809b6401e298093e80252f0090ea01e290093e80252e80939801e24009","0x480701801c03e6b01201c7d0078aa024fa009890026d98078a8024fa009","0xfa00902c0244400700e7d0049c50126a8038073e80240c8098a201c039f4","0x39f40126d004c5000e01cfa00903e0264700700e7d0048140127a803807","0x49f40122640492d00e264049f40122640482200e01cfa00937a026b8807","0x49af01278403c4b0127d004c5601208803c4a0127d0049c001205803c56","0x487500f148049f4013128049cc00f134049f401226c0485e00f130049f4","0x3c550127d004c4d0136cc03c540127d004c4c0136c803c530127d004c4b","0x3c580127d004c558ae030f20078ae024fa00900e794038073e8024039ef","0x49f401314c0482200f148049f40131480481600f164049f401316004a40","0x4c5901290403c540127d004c54012784038d70127d0048d701278803c53","0xfa0090320262880700e7d00480701801e2cc541af14e29014013164049f4","0x39f4012050049ea00e01cfa00902c0244400700e7d0049c50126a803807","0x49f40121f00492d00e1f0049f40121f00482200e01cfa00903e02647007","0x48d901217803c5c0127d00487f01278403c5b0127d004c5a01208803c5a","0x39f401206404c5100e01cfa00900e03003807cd8024038fa00f174049f4","0x38073e80240a0093d401c039f40120580488800e01cfa00938a024d5007","0x22800700e7d0049830126b0038073e8024db809ae201c039f401207c04c8e","0x3c5e0127d0049ce0124b4039ce0127d0049ce012088038073e8024e3009","0x49f40127300485e00f170049f4012734049e100f16c049f401317804822","0x49f40131762f80c3c801e2f8093e8024039e500e01cfa00900e7bc03c5d","0x4c5b012088038d50127d0048d501205803c600127d0049fb012900039fb","0x4a4100f170049f4013170049e100e030049f4012030049e200f16c049f4","0xd700909e01c039f401201c060078c11700645b1aa05004c600127d004c60","0x4816012220038073e8024e280935401c039f401206404c5100e01cfa009","0xfa009304024d600700e7d00481f013238038073e80240a0093d401c039f4","0xfa0091aa0240b007900024fa0093000249680700e7d0049830126b003807","0x39f401201c0600700f9b4048071f401e410093e80264000904401e40809","0x38073e8024e280935401c039f401206404c5100e01cfa009352024d6007","0xd600700e7d00481f013238038073e80240a0093d401c039f401205804888","0xb007908024fa00930c0249680700e7d004955013180038073e8024bf809","0xf480700e7d0048073de01e410093e80264200904401e408093e80246a009","0xf30073f8024fa0093f8024f38073f8024fa00900f6bc03c850127d004807","0x49f401321e4580c3c801e458093e8024039e500f21c049f40127f24280c","0x4c8201208803c810127d004c8101205803c8e0127d004c8d01290003c8d","0x4a4100e790049f4012790049e100e030049f4012030049e200f208049f4","0xc8098a201c039f401201c0600791c7900648290205004c8e0127d004c8e","0x48140127a8038073e80240b00911001c039f4012714049aa00e01cfa009","0x49e101290003c8f0127d0049e50124b4038073e80240f80991c01c039f4","0x49e200f23c049f401323c0482200e798049f40127980481600f244049f4","0x4c910127d004c91012904039e40127d0049e40127840380c0127d00480c","0xfa807032024fa00900e9440381f0127d0048074a801e489e401923cf3014","0x498300e06c0a00c3e80240a0092ee01c039f401201cf780700e7d004807","0x38073e80240380c00e08c04e6e00e7d0060210122c4038210127d00481b","0x4400700e7d0048140127a8038073e8024e280935401c039f401206404c51","0xf48071f4024fa0090120249680700e7d00481f013238038073e80240b009","0xf3007022024fa009022024f3807022024fa00900f9bc038270127d004807","0x49f40127c0f780c3c801cf78093e8024039e500e7c0049f40120441380c","0x48fa012088038070127d004807012058039ed0127d0049ee012900039ee","0x4a4100e4b4049f40124b4049e100e030049f4012030049e200e3e8049f4","0x1180931801c039f401201c060073da4b4060fa00e050049ed0127d0049ed","0xf5009c9201cf50093e80240395700e7ac049f40120240492d00e01cfa009","0xb00700e7d0049e801392c039e73d0030fa0093d2027250073d2024fa009","0x968093e8024968093c201cf58093e8024f580904401c038093e802403809","0xf19e43ca798e29f401279c969eb00e715028073ce024fa0093ce02726007","0x49e50124b4038073e80240380c00e78404e703c4024fa00c3c6024a8807","0xa60073ba778061f401277c0494a00e77c049f40127880494f00e780049f4","0x39f401201c0a0071b6370061f40127700494a00e7700b00c3e80240b009","0xa280cce24fc6d00c3e80306d9dd3cc4b5048073c0024fa0093c002411007","0x248093e80240382700e120049f40127800492d00e01cfa00900e03003947","0xfa00909002411007098024fa0091b40240b00709c024fa009092024c5807","0x48071f401caa8093e80242700931a01caa0093e80249f809b2601c27809","0x49f401201c138072ce024fa0093c00249680700e7d00480701801c03e72","0x49670120880384c0127d004945012058039690127d00496801266003968","0x96a0900e554049f40125a40498d00e550049f401251c04d9300e13c049f4","0x2780925a01c039f401201c060072fe5f8066732f25cc061f4018370ef04c","0x2c9807300024fa0090b4024110071aa024fa0092e60240b0070b4024fa009","0x600700f9d0048071f401cc18093e8024aa009b2601cc10093e8024bc809","0x4d9300e178049f401201ecb80730c024fa00909e0249680700e7d004807","0x61f4018178aa17e25a824039860127d0049860120880385e0127d00485e","0xb0070cc024fa00930c0249680700e7d00480701801cd48d40199d4cd193","0xc10093e8024bf809b2601cc00093e80243300904401c6a8093e8024c9809","0x380c00e6b804e76358024fa00c2aa024c4007306024fa009334026c9807","0x4807ca801cd88093e8024c000925a01c039f40126b00484f00e01cfa009","0xbf8073726dc061f40126dc04d6400e6e0049f4012608048f500e6dc049f4","0xe99c60187d0049c6013138039c60127d0048070b401ce18093e8024dc809","0xfa009386024c00073a6024fa0093a60246a807362024fa00936202411007","0x6007398734e712dcee744e900c3e8030dc1c33a6790d88143f201ce1809","0x7a8070ea024fa0093a4024968073a4024fa0093a40241100700e7d004807","0x39b70127d0049b7013958039ca0127d004807ace01cf60093e8024c1809","0xfa00938c0246a8070ea024fa0090ea024110070f0024fa0093946dc06568","0xfa80c3e8030f607838c7443a8143f201c3c0093e80243c00930001ce3009","0x968073ea024fa0093ea0241100700e7d00480701801c6c87f0f84b73c1c7","0x49f401220c0498300e20c0a00c3e80240a0092ee01c410093e8024fa809","0xfa009388026c3807388024fa0091b0026c30071b0024fa00900e3dc03885","0x4480903201c448093e8024e8009b1201c039f401222004d8800e7404400c","0x6b80c3e8024429cf0184b45600739e024fa00939e024f380739e024fa009","0x4d8a00e6f8e000c3e8024e08d5018650039c10127d0049c101279c039c1","0x38073e8024dd009b1801c6b1ba0187d00488f01362c0388f0127d0049be","0x61f40126f404d6400e6f4049f40126d80497e00e6d8049f401235804d8d","0x49b4013138039b40127d0048070b401cde0093e8024498092fe01c499bd","0xf1007366024fa0093660246a807104024fa009104024110073666d0061f4","0x61bc36671c411c530401ce00093e8024e000902c01c6b8093e80246b809","0xfa00912e0241100700e7d00480701801c4d9af1324b73c9b036425c969f4","0xd90093c201cd80093e8024d80093ce01c4e8093e80244b80925a01c4b809","0xd51ad0187d0061b03800303300713a024fa00913a02411007364024fa009","0x3d6700e688049f40122740492d00e01cfa00900e030039a334869c96e7a","0x39a20127d0049a20120880399f0127d0049a037a032b4007340024fa009","0x49f40126b40481600e67c049f401267c0498000e6d0049f40126d0048d5","0x380c00e654cc99b25b9ec5419d33c4b4fa00c33e6d0d91a238a608039ad","0x49e700e2b0049f40126780492d00e678049f40126780482200e01cfa009","0x38ac0127d0048ac0120880399d0127d00499d012784038a80127d0048a8","0x9680700e7d00480701801cd29a615e4b73e192328030fa00c1506b406066","0x398d0127d004998013618039980127d0048071ee01c588093e802456009","0x48b101208803989316030fa009318024a5007318058061f40120580494c","0x480701801cc29870199f45c9880187d00618932465096a0900e2c4049f4","0x48bd01262c038bd0127d00480704e01cc20093e80245880925a01c039f4","0x4d9300e5f4049f40126100482200e604049f40126200481600e2fc049f4","0x380c00e01f3f00900e3e80397c0127d0048bf012634038c20127d0048b9","0xbd00933001cbd0093e80240382700e5ec049f40122c40492d00e01cfa009","0x2c98072fa024fa0092f602411007302024fa00930e0240b0072f0024fa009","0xfa00c3166a8c092d41201cbe0093e8024bc00931a01c610093e8024c2809","0x39720127d00497d0124b4038073e80240380c00e5d06480ccfe5d8bb80c","0x49f40125d804d9300e5c0049f40125c80482200e5c4049f40125dc04816","0x38073e80240380c00e01f4000900e3e80396d0127d0048c201364c0386b","0x6f8093e80246f809b2601c6f8093e802403d9700e380049f40125f40492d","0xb300cd023746f00c3e80306f8c21924b5048071c0024fa0091c002411007","0x49f40123780481600e58c049f40123800492d00e01cfa00900e03003964","0x48dd01364c0386b0127d00497401364c039700127d00496301208803971","0x2780700e7d00480701801cb0809d04588049f40185f00498800e5b4049f4","0xaf8140187d0048140125dc039600127d0049700124b4038073e8024b1009","0x495c0136200395a2b8030fa00931a026c38072bc024fa0092be024c1807","0xab0093ce01cab0093e8024ab80903201cab8093e8024ad009b1201c039f4","0x49f401254c049e700e54c1000c3e8024af1561ae4b4560072ac024fa009","0x4d6400e548049f40121ac048f500e3b47580c3e8024a997101865003953","0x394d0127d0048070b401ca78093e8024a88092fe01ca88ed0187d0048ed","0xfa0092980246a8072c0024fa0092c002411007298534061f401253404c4e","0xa1f900e3ac049f40123ac0481600e080049f40120800c80c90401ca6009","0x38073e80240380c00e5187b8f525ba0ca414a0187d00615229e530ce960","0x49f40125b4048f500e524049f40125280492d00e528049f401252804822","0x4949012088038fe0127d0049401da032b4007280024fa00900f59c0394b","0xa1f900e3f8049f40123f80498000e534049f4012534048d500e524049f4","0x38073e80240380c00e4049f0ff25ba10110fd0187d00614b1fc534a4149","0x393b0127d0048fd0124b4038fd0127d0048fd012088038073e8024039ef","0x2d480726e024fa00900e7a4039360127d0048073d201c9d0093e802403e64","0xfa00926202671007262024fa009268026d5007268024fa00902c4e80a12d","0x9d80904401c758093e80247580902c01c039f40124c004ce300e4309800c","0x2f00726c024fa00926c0242f007218024fa009218024ba007276024fa009","0x9b10c2763ac0a4e400e088049f40120880f80c4bc01c9b8093e80249b809","0x480701801c93009d0a4a0049f40184a804ce500e4a89710925a7d004937","0x278074600008c12d3e8024940099ce01c8e8093e80249700925a01c039f4","0x38073e80251880928e01d192310187d004918012514038073e802518009","0x49f40128c80484800e01cfa009466024a38074688cc061f401200004945","0x1111d38b3a00391d0127d00491d01208803a360127d004a3401212003a35","0x11c00904401c039f401201c060074788ecfc12dd0c8e51c00c3e80311b235","0x624200e8fc049f401201c1380747a024fa00947002496807470024fa009","0x848093e80248480902c01d208093e80252000948601d200093e80251f9c5","0xfa009472024f0807040024fa009040024f100747a024fa00947a02411007","0xfa00900e03003a414720811e909028025208093e80252080948201d1c809","0xfa0093f0024968073f0024fa0093f00241100700e7d0049c50126a803807","0x12180948001d218093e80251e24201879003a420127d0048073ca01cfc809","0xf10073f2024fa0093f202411007212024fa0092120240b007488024fa009","0x1220093e80252200948201d1d8093e80251d8093c201c100093e802410009","0x9680700e7d0049c50126a8038073e80240380c00e9111d8203f24240a009","0x848093e80248480902c01d230093e80249300948001d228093e802497009","0xfa009044024f0807040024fa009040024f100748a024fa00948a02411007","0xfa00900e03003a4604408122909028025230093e80252300948201c11009","0x39f40120580488800e01cfa009028024f500700e7d0049c50126a803807","0x49f40123fc0492d00e3fc049f40123fc0482200e01cfa00903e02647007","0x4901012178039f70127d00493e01278403a490127d004a4701208803a47","0x39f4012714049aa00e01cfa00900e03003807d0e024038fa00e928049f4","0x38073e80240f80991c01c039f40120580488800e01cfa009028024f5007","0x1100700e7d00494d013140038073e8024b680935801c039f40123b404d71","0x1248093e80252580904401d258093e80247a80925a01c7a8093e80247a809","0x39f401201cf7807494024fa00928c0242f0073ee024fa0091ee024f0807","0xfa00949a0252000749a024fa009494930061e400e930049f401201cf2807","0x100093c401d248093e80252480904401c758093e80247580902c01d27009","0xa00949c024fa00949c025208073ee024fa0093ee024f0807040024fa009","0x3580935801c039f40125840484f00e01cfa00900e03003a4e3ee081248eb","0x4816012220038073e80240a0093d401c039f4012714049aa00e01cfa009","0xfa0090320262880700e7d00496d0126b0038073e80240f80991c01c039f4","0xfa0092e20240b00749e024fa0092e00249680700e7d00498d01362003807","0x39f401201c0600700fa20048071f401d288093e80252780904401d28009","0x38073e8024e280935401c039f40125d0049ac00e01cfa0092c8024d6007","0x23000700e7d00481f013238038073e80240b00911001c039f4012050049ea","0x492d00e01cfa00931a026c400700e7d004819013144038073e8024be009","0x3a510127d004a5301208803a500127d00496601205803a530127d0048e0","0x49e700e954049f401201edb8074a8024fa00900e7a4038073e8024039ef","0x3a570127d0048073ca01d2b0093e80252aa5401879803a550127d004a55","0xfa0094a00240b0074b0024fa0093ec025200073ec024fa0094ac95c061e4","0xce8093c201c6b8093e80246b8093c401d288093e80252880904401d28009","0x380c00e960ce8d74a29400a0094b0024fa0094b00252080733a024fa009","0x4819013144038073e8024d280935801c039f4012698049ac00e01cfa009","0xfa00902c0244400700e7d0048140127a8038073e8024e280935401c039f4","0x49f40122b00492d00e01cfa009354024d600700e7d00481f01323803807","0x49f401296c049e700e96c049f401201eb70074b4024fa00900e7a403a59","0x12c80904401d2e8093e80245780902c01d2e0093e80252da5a01879803a5b","0x7d007890024fa0094b80242f0074be024fa00933a024f08074bc024fa009","0x49c50126a8038073e80240c8098a201c039f401201c0600700fa2404807","0xfa00903e0264700700e7d004816012220038073e80240a0093d401c039f4","0xfa00933602496807336024fa0093360241100700e7d0049aa0126b003807","0xcc8093c201e258093e80262480904401e250093e8024d680902c01e24809","0x480701801c03e8a01201c7d00789a024fa00932a0242f007898024fa009","0xfa0090320262880700e7d0049a30126b0038073e8024d200935801c039f4","0x39f40120580488800e01cfa009028024f500700e7d0049c50126a803807","0x38073e8024da0098a001c039f40126f404d7100e01cfa00903e02647007","0x3c500127d004807adc01e278093e8024039e900f138049f40122740492d","0xfa00934e0240b0078a2024fa0098a113c061e600f140049f4013140049e7","0x2288090bc01d2f8093e8024d90093c201d2f0093e80262700904401d2e809","0x2d90078a6024fa0094bc0243a8078a4024fa0094ba024e6007890024fa009","0x600700fa2c048071f401e2a8093e802624009b6601e2a0093e80252f809","0xa0093d401c039f4012714049aa00e01cfa0090320262880700e7d004807","0x49b4013140038073e80240f80991c01c039f40120580488800e01cfa009","0x48990124b4038990127d004899012088038073e8024de809ae201c039f4","0x49e100f12c049f40131580482200f128049f40127000481600f158049f4","0x3c520127d004c4a01273003c4d0127d00489b01217803c4c0127d0049af","0x49f401313404db300f150049f401313004db200f14c049f401312c04875","0x49f40131562b80c3c801e2b8093e8024039e500e01cfa00900e7bc03c55","0x4c5301208803c520127d004c5201205803c590127d004c5801290003c58","0x4a4100f150049f4013150049e100e35c049f401235c049e200f14c049f4","0xc8098a201c039f401201c060078b31506bc538a405004c590127d004c59","0x4816012220038073e80240a0093d401c039f4012714049aa00e01cfa009","0x487c0124b40387c0127d00487c012088038073e80240f80991c01c039f4","0x485e00f170049f40121fc049e100f16c049f40131680482200f168049f4","0x4819013144038073e80240380c00e01f4600900e3e803c5d0127d0048d9","0xfa00902c0244400700e7d0048140127a8038073e8024e280935401c039f4","0x39f401260c049ac00e01cfa00936e026b880700e7d00481f01323803807","0x49f40127380492d00e738049f40127380482200e01cfa00938c02628007","0x49cc01217803c5c0127d0049cd01278403c5b0127d004c5e01208803c5e","0x4c5d8be030f20078be024fa00900e794038073e8024039ef00f174049f4","0x482200e354049f40123540481600f180049f40127ec04a4000e7ec049f4","0x3c5c0127d004c5c0127840380c0127d00480c01278803c5b0127d004c5b","0x2780700e7d00480701801e3045c01916c6a814013180049f401318004a41","0x49ea00e01cfa00938a024d500700e7d004819013144038073e8024d7009","0xc100935801c039f401207c04c8e00e01cfa00902c0244400700e7d004814","0x6a80902c01e400093e8024c000925a01c039f401260c049ac00e01cfa009","0x480701801c03e8d01201c7d007904024fa00990002411007902024fa009","0xfa00938a024d500700e7d004819013144038073e8024d480935801c039f4","0x39f401207c04c8e00e01cfa00902c0244400700e7d0048140127a803807","0x2420093e8024c300925a01c039f401255404c6000e01cfa0092fe024d6007","0x39f401201cf7807904024fa00990802411007902024fa0091a80240b007","0xfe0093e8024fe0093ce01cfe0093e802403db700f214049f401201cf4807","0x4c87916030f2007916024fa00900e79403c870127d0049fc90a030f3007","0x482200f204049f40132040481600f238049f401323404a4000f234049f4","0x39e40127d0049e40127840380c0127d00480c01278803c820127d004c82","0x22880700e7d00480701801e471e401920a40814013238049f401323804a41","0x488800e01cfa009028024f500700e7d0049c50126a8038073e80240c809","0x4a4000f23c049f40127940492d00e01cfa00903e0264700700e7d004816","0x3c8f0127d004c8f012088039e60127d0049e601205803c910127d0049e1","0x49f401324404a4100e790049f4012790049e100e030049f4012030049e2","0xfa00c0180240f807018024fa009012024e28079227900648f3cc05004c91","0xc80702c024fa00938a0241000700e7d00480701801c0a009d1c7149680c","0x100093e80249680904201c0f8093e80241100903601c110093e80240b009","0x1380700e7d00480701801c03e8f01201c7d007032024fa00903e02411807","0x38200127d004814012084038210127d00481b0120440381b0127d004807","0xfa00904602424007046080061f401208004c4b00e064049f401208404823","0x49f700e01cfa00900e03003811013a40138093e80300c8093e001c7d009","0x39f401201c060073de027488073e8030f800916201cf80270187d004827","0xf700c3e80301000903e01c039f401209c049d300e01cfa0091f4024aa807","0xf500903201cf50093e8024f680904001c039f401201c060073d6027491ed","0x118073ce024fa0093dc024108073d0024fa0093d20240d8073d2024fa009","0x480704e01c039f401201c0600700fa4c048071f401cf30093e8024f4009","0x482300e79c049f40127ac0482100e790049f40127940481100e794049f4","0x39f401201c060073c40274a1e30127d0061e60127c0039e60127d0049e4","0x484800e01cfa00900e030039df013a54f01e10187d0061e300e03251807","0x39de0127d0049de012364039e10127d0049e1012058039de0127d0049e7","0x60071b60274c0dc0127d0061dc013a5c039dc3ba030fa0093bc78406696","0x34d9450127d00613f013a680393f1b4030fa0091b80274c80700e7d004807","0x4848013a70038480127d0049453c00310600700e7d00480701801ca3809","0x4e9d00e130049f40121380482100e138049f4012368049c500e124049f4","0x49e00132d0038073e80240380c00e01f4f00900e3e80384f0127d004849","0xaa80904201caa8093e80246d00938a01caa0093e8024a380940401c039f4","0x4e9f2ce024fa00c09e0268d80709e024fa0092a80274e807098024fa009","0x49f40127740481600e5a4049f401259c04e9c00e01cfa00900e03003968","0x35000900e3e80397e0127d004969013a74039790127d00484c01208403973","0x49f40125a004ea100e5fc049f40127740481600e01cfa00900e03003807","0x38073e80240380c00e01f5100900e3e8038d50127d00484c0120840385a","0xee8093e8024ee80902c01cc00093e80246d809d4601c039f401278004cb4","0xef80902c01c039f401201c0600730077406009300024fa00930002752007","0xfa0093c40242780700e7d00480701801c03ea501201c7d007304024fa009","0xfa009304024e6007306024fa00900e09c039820127d00480701205803807","0x6a80909001c6a8093e8024f380904201c2d0093e8024c1809d4201cbf809","0x39930127d00485e30c033538070bc024fa0090b40275300730c024fa009","0x49f401266804ea400e5fc049f40125fc0481600e668049f401264c04ea8","0x480730e01c039f40127bc0498c00e01cfa00900e0300399a2fe0300499a","0x58807352024fa009352024f3807352024fa0091a809c0624e00e350049f4","0x38073e80247d0092aa01c039f401201c060070cc027548073e8030d4809","0xb98093e80240380902c01cd70093e8024d600940401cd60093e802403827","0xfa0092fc027550072fc024fa00935c0274e8072f2024fa00904002410807","0x4ea800e6e0049f40126c4db80cd4e01cdb8093e8024bc80909001cd8809","0x49b90127d0049b9013a90039730127d004973012058039b90127d0049b8","0xfa009040024f680700e7d004866012630038073e80240380c00e6e4b980c","0x49c61f40335380738c024fa00938602753007386024fa00900e09c03807","0x4ea400e01c049f401201c0481600e748049f401274c04ea800e74c049f4","0x39f4012080049ed00e01cfa00900e030039d200e030049d20127d0049d2","0x49ce013aa0039ce0127d0049d11f4033538073a2024fa00902202753007","0x380c012734049f401273404ea400e01c049f401201c0481600e734049f4","0xfa00938a0268900738a030061f401203004cda00e01cfa00900e7bc039cd","0xa009d5601c039f401208804c6000e01cfa00902c0265a8070440580a12d","0x38190127d00482025a030f3007040024fa00903e0275600703e024fa009","0x1080996801c7d0230424b4fa00903602689007036030061f401203004cda","0x11809a3601c0c8093e80240c8090bc01c039f40123e804c6000e01cfa009","0x39f00127d0048090124b4038073e80240380c00e04404ead04e024fa00c","0x49f40127bc0c80c3cc01cf78093e8024f78093ce01cf78093e8024038b9","0x495500e7a8f580c3e8024f680940e01cf68270187d004827012804039ee","0xf30073d0024fa0093d2027560073d2024fa0093d60275580700e7d0049ea","0xfa0093cc0265a0073ca798061f401209c04a0700e79c049f40127a0f700c","0xf180938a01cf18093e8024f2009d5c01cf21e50187d0049e501347403807","0xf38073c0024fa0093c20262a8073c2024fa0093c4026260073c4024fa009","0x49f401279404eae00e77c049f4012780f380c3cc01cf00093e8024f0009","0x49de012364039f00127d0049f0012088038070127d004807012058039de","0xee92d3e8024ef9de3e001ce2d1e00e77c049f401277c0485e00e778049f4","0x492d00e01cfa00900e030038da013abc6d8093e80306e00997401c6e1dc","0x38073e8024a380909e01ca39450187d0048db0132f00393f0127d0049dc","0x49f40125140485e00e124049f40124fc0482200e120049f401277404816","0x9680700e7d00480c01226c038073e80240380c00e01f5800900e3e80384e","0xee8093e8024ee80902c01c278093e80246d009d6201c260093e8024ee009","0x384f0987749680909e024fa00909e02759007098024fa00909802411007","0xc38072a8024fa0090120249680700e7d00481101213c038073e80240380c","0xb38093e8024aa819018798039550127d00495501279c039550127d004807","0xfa0092ce0242f007092024fa0092a802411007090024fa00900e0240b007","0x4cb500e01cfa0092d00265a0072e65a4b412d3e802406009a2401c27009","0xbc80931001c039f401201c0a0072f2024fa0092e60275980700e7d004969","0x9680700e7d00497e01213c038073e80240380c00e5fc04eb42fc024fa00c","0x39800127d00485a012088038d50127d00480717201c2d0093e802424809","0x484f00e01cfa00900e03003807d6a024038fa00e608049f4012354049e7","0x482200e618049f401201cc3807306024fa0090920249680700e7d00497f","0x61e600e01cfa00900e7bc039820127d00498601279c039800127d004983","0xcd0093e8024c985e019ad8039930127d00480704e01c2f0093e8024c104e","0xfa00930002411007090024fa0090900240b0071a8024fa0093340275b807","0x38073e8024039ef00e350c004825a0246a0093e80246a009d6401cc0009","0x492d00e01cfa00900e0300382003e0335c02202c030fa00c01201c06009","0x49f4012050049c500e08c1081b25a7d0049c5013ae4038190127d004822","0x60fa01207c038190127d004819012088038160127d004816012058038fa","0x39ef0127d0048190124b4038073e80240380c00e7c004eba02209c061f4","0x38073e80240381400e7b4049f40127b80481900e7b8049f401204404820","0x49f40127b4049e700e7bc049f40127bc0482200e09c049f401209c04821","0x492d00e01cfa00900e030039e9013aecf51eb0187d00602701207c039ed","0x39e60127d0049e8012088039e70127d0049ea01264c039e80127d0049ef","0x3807d78024038fa00e790049f401279c0499a00e794049f40127ac04821","0x6a0073c4024fa00900e09c039e30127d0049ef0124b4038073e80240380c","0xf28093e8024f480904201cf30093e8024f180904401cf08093e8024f1009","0xfa00c3c8024d48073c0024fa0093ca024240073c8024fa0093c2024cd007","0x49e60124b4038073e8024039ef00e01cfa00900e030039de013af4ef809","0x620e00e370049f40127700481900e770049f401277c0482000e774049f4","0x49f40123701080c41c01c6e0093e80246e0093ce01c6d8093e8024f681b","0x6d80c38baf8038da0127d0048da01279c038db0127d0048db01279c038da","0xee80904401c2492d0187d00492d0128340384828e5149f9c53e8024118da","0xf380728a024fa00928a024f380727e024fa00927e0244e8073ba024fa009","0xfa00c0927740b12d3ba01c240093e8024240093ce01ca38093e8024a3809","0x39550127d00484c0124b4038073e80240380c00e5502780cd7e1302700c","0x49550120880384e0127d00484e012058039670127d00484828e51496cbd","0x4cbe00e4b4049f40124b4049de00e4fc049f40124fc0489d00e554049f4","0xf016725a4fcaa84e02d2fc039e00127d0049e0012364039670127d004967","0x495500e01cfa00900e030039792e65a4b41c50125e4b99692d0714fa009","0xa28093a601c039f40124b404ec000e01cfa00928e024e980700e7d0049e0","0x48073d201cbf0093e8024aa00925a01c039f4012120049d300e01cfa009","0xbf80c3cc01c2d0093e80242d0093ce01c2d0093e80240384c00e5fc049f4","0x39820127d0048d5300030f2007300024fa00900e794038d50127d00485a","0x49f40125f80482200e13c049f401213c0481600e60c049f401260804ec1","0x9f97e09e714049830127d004983013b080393f0127d00493f0122740397e","0x36000700e7d0049de01213c038073e8024039ef00e01cfa00900e03003983","0x2f0093e8024f681b018838039860127d0049e60124b4038073e802496809","0xfa0090bc024f3807334024fa0093260840620e00e64c049f401201cc3807","0xd48d438a7d004823334178061c5d7c01ccd0093e8024cd0093ce01c2f009","0x49a93c00336180700e7d0049ac01274c038073e8024330093a601cd6066","0x482200e058049f40120580481600e6c4049f40126b804ec400e6b8049f4","0x49b10127d0049b1013b08038d40127d0048d4012274039860127d004986","0xc80925a01c039f40124b404ec000e01cfa00900e030039b11a86180b1c5","0xf3807372024fa00937006c0620e00e6e0049f401201cc380736e024fa009","0xe98073a474ce31c338a7d0048230426e4061c5d7c01cdc8093e8024dc809","0x3618073a2024fa0093e00242400700e7d0049d201274c038073e8024e9809","0x49f40120580481600e734049f401273804ec400e738049f4012718e880c","0x49cd013b08039c30127d0049c3012274039b70127d0049b701208803816","0x39f401271404ec500e01cfa00900e030039cd3866dc0b1c5012734049f4","0xe60093e80241000925a01c039f40124b404ec000e01cfa009028024aa807","0xf60093e8024f60093ce01cf60093e80240384c00e1d4049f401201cf4807","0x49ca0f0030f20070f0024fa00900e794039ca0127d0049ec0ea030f3007","0x482200e07c049f401207c0481600e71c049f40127d404ec100e7d4049f4","0x49c70127d0049c7013b080380c0127d00480c012274039cc0127d0049cc","0xb00940001c0f8093e8024039e900e01cfa00900e7bc039c70187300f9c5","0x1100700e024fa00900e0240b00700e7d00482001226c03819040030fa009","0xf8093e80240f8090bc01c0c8093e80240c80934e01c048093e802404809","0x3630fa0127d0060230132e80382304206c969f401207c0c80900e7165c807","0x49f401201cef807022024fa0090420249680700e7d00480701801c13809","0x49ef012514038073e8024f700909e01cf71ef0187d0048fa0132f0039f0","0x480717201cf50093e8024038b900e01cfa0093da024a38073d67b4061f4","0x240073ce024fa0093d07a4f512d97a01cf40093e8024038b900e7a4049f4","0x88093e80240880904401c0d8093e80240d80902c01cf30093e8024f5809","0xfa0093ce0265f0073e0024fa0093e0024ef00725a024fa00925a0244e807","0xe29f4012798f39f025a0440d81697e01cf30093e8024f30091b201cf3809","0x38073e80240380c00e78004ec73c2024fa00c3c4026600073c478cf21e5","0xfa0093bc024aa8073ba778061f401278404cc200e77c049f40127900492d","0xfa0091b8027648071b8024fa0093b8027640073b8024fa00900f30c03807","0x9f80903201c9f8093e80246d009d9601c039f401236c04eca00e3686d80c","0xa380c3e8024ee9450184b45600728a024fa00928a024f380728a024fa009","0x49b300e1382480c3e8024241e5018650038480127d00484801279c03848","0x110072a8024fa00900e1680384f0127d00484e0125fc0384c0127d004822","0xa38093e8024a38093c401caa0093e8024aa0091aa01cef8093e8024ef809","0x3661672aa030fa00c09813caa1c53be050fc807092024fa0090920240b007","0xaa80925a01caa8093e8024aa80904401c039f401201c060072e65a4b412d","0x1218072fe024fa0092fc0500624200e5f8049f401201c138072f2024fa009","0xbc8093e8024bc80904401c248093e80242480902c01c2d0093e8024bf809","0xfa0092ce024f08073c6024fa0093c60244e80728e024fa00928e024f1007","0x480701801c2d1673c651cbc84902c0242d0093e80242d00948201cb3809","0x49680124b4039680127d004968012088038073e80240a00935401c039f4","0x4a4000e608049f40125ccc000c3c801cc00093e8024039e500e354049f4","0x38d50127d0048d5012088038490127d004849012058039830127d004982","0x49f40125a4049e100e78c049f401278c0489d00e51c049f401251c049e2","0xfa00900e030039832d278ca38d5092058049830127d00498301290403969","0x49f40127900492d00e01cfa009028024d500700e7d00482201271003807","0x49e3012274039930127d0049860120880385e0127d0049e501205803986","0xfa00900e03003807d9a024038fa00e350049f401278004cce00e668049f4","0x49f40120840492d00e01cfa009028024d500700e7d00482201271003807","0x492d012274039930127d0049a90120880385e0127d00481b012058039a9","0x481600e198049f401235004a4000e350049f401209c04cce00e668049f4","0x380c0127d00480c012788039930127d0049930120880385e0127d00485e","0x49f401219804a4100e714049f4012714049e100e668049f40126680489d","0xf8093e8024039e900e01cfa00900e7bc0386638a668061930bc05804866","0xfa00900e0240b00700e7d00482001226c03819040030fa00902c02500007","0xf8090bc01c0c8093e80240c80934e01c048093e80240480904401c03809","0x60230132e80382304206c969f401207c0c80900e7165c80703e024fa009","0xef807022024fa0090420249680700e7d00480701801c13809d9c3e8049f4","0x38073e8024f700909e01cf71ef0187d0048fa0132f0039f00127d004807","0xf50093e8024038b900e01cfa0093da024a38073d67b4061f40127bc04945","0xfa0093d07a4f512d97a01cf40093e8024038b900e7a4049f401201c5c807","0x880904401c0d8093e80240d80902c01cf30093e8024f580909001cf3809","0x25f0073e0024fa0093e0024ef00725a024fa00925a0244e807022024fa009","0xf39f025a0440d81697e01cf30093e8024f30091b201cf38093e8024f3809","0x380c00e78004ecf3c2024fa00c3c4026600073c478cf21e538a7d0049e6","0xaa8073ba778061f401278404cc200e77c049f40127900492d00e01cfa009","0x3648071b8024fa0093b8027640073b8024fa00900fb40038073e8024ef009","0x9f8093e80246d009d9601c039f401236c04eca00e3686d80c3e80246e009","0xee9450184b45600728a024fa00928a024f380728a024fa00927e0240c807","0x2480c3e8024241e5018650038480127d00484801279c0384828e030fa009","0xfa00900e1680384f0127d00484e0125fc0384c0127d0048220126cc0384e","0xa38093c401caa0093e8024aa0091aa01cef8093e8024ef80904401caa009","0xfa00c09813caa1c53be050fc807092024fa0090920240b00728e024fa009","0xaa8093e8024aa80904401c039f401201c060072e65a4b412dda259caa80c","0xfa0092fc0500624200e5f8049f401201c138072f2024fa0092aa02496807","0xbc80904401c248093e80242480902c01c2d0093e8024bf80948601cbf809","0xf08073c6024fa0093c60244e80728e024fa00928e024f10072f2024fa009","0x2d1673c651cbc84902c0242d0093e80242d00948201cb38093e8024b3809","0x39680127d004968012088038073e80240a00935401c039f401201c06007","0x49f40125ccc000c3c801cc00093e8024039e500e354049f40125a00492d","0x48d5012088038490127d004849012058039830127d00498201290003982","0x49e100e78c049f401278c0489d00e51c049f401251c049e200e354049f4","0x39832d278ca38d5092058049830127d004983012904039690127d004969","0x492d00e01cfa009028024d500700e7d004822012710038073e80240380c","0x39930127d0049860120880385e0127d0049e5012058039860127d0049e4","0x3807da4024038fa00e350049f401278004cce00e668049f401278c0489d","0x492d00e01cfa009028024d500700e7d004822012710038073e80240380c","0x39930127d0049a90120880385e0127d00481b012058039a90127d004821","0x49f401235004a4000e350049f401209c04cce00e668049f40124b40489d","0x480c012788039930127d0049930120880385e0127d00485e01205803866","0x4a4100e714049f4012714049e100e668049f40126680489d00e030049f4","0x36980702c024fa00900fb4c0386638a668061930bc058048660127d004866","0x48073de01c039f401201cfa807032024fa00900fb4c0381f0127d004807","0x13809dae3e804ed60460276a821013b500d8093e808c060093fc01c039f4","0x36f9ea013b78f5809dba7b404edc3dc0276d9ef013b68f8009db204404ed8","0x39f401207c04ee000e01cfa0090320277000700e7d00480701801cf4809","0xf38093e802403ee100e7a0049f40120240492d00e01cfa00902c02770007","0x481b013b88039e60127d0049e725a030f30073ce024fa0093ce024f3807","0x38073e8024f18093d401cf11e33c84b4fa0093ca027718073ca06c061f4","0xf00093e8024f080930601cf08093e8024f2009dc801c039f401278804888","0xef009dc601cef01b0187d00481b013b88039df0127d0049e038a030f3007","0x37200700e7d0048dc012220038073e8024ee8093d401c6e1dc3ba4b4fa009","0x49f4012368ef80c3cc01c6d0093e80246d80930601c6d8093e8024ee009","0xa38093d401c039f4012514049ea00e120a394525a7d00481b013b8c0393f","0x384c09c030fa009092024a5007092120061f40121200494c00e01cfa009","0xaa0093e8024278091ea01c278093e80242700929001c039f4012130049ac","0xb380935801cb41670187d004848012528039550127d00495427e030f3007","0x61e600e5cc049f40125a4048f500e5a4049f40125a00494800e01cfa009","0xbf8093e8024f30090bc01cbf0093e8024f400904401cbc8093e8024b9955","0x37000700e7d00480701801c03ee501201c7d0070b4024fa0092f20242f007","0x492d00e01cfa00902c0277000700e7d00481f013b80038073e80240c809","0xf3007300024fa009300024f3807300024fa00900e7f4038d50127d004809","0xfa00930602773807306084061f401208404ee600e608049f40126009680c","0xc3009dc801c039f401264c0488800e01cfa0090bc024f5007326178c312d","0x39a90127d0048d438a030f30071a8024fa009334024c1807334024fa009","0xd60093d401cd89ae3584b4fa0090cc027738070cc084061f401208404ee6","0xdb80930601cdb8093e8024d7009dc801c039f40126c40488800e01cfa009","0xe31c325a7d004821013b9c039b90127d0049b8352030f3007370024fa009","0x61f401274c0494c00e01cfa00938c024f500700e7d0049c30127a8039d3","0xe880929001c039f4012738049ac00e738e880c3e8024e900929401ce91d3","0x38750127d0049cc372030f3007398024fa00939a0247a80739a024fa009","0x49f40127280494800e01cfa0093d8024d60073947b0061f401274c0494a","0x6a80904401ce38093e8024fa875018798039f50127d0048780123d403878","0x7d0070b4024fa00938e0242f0072fe024fa0093040242f0072fc024fa009","0x4816013b80038073e80240f809dc001c039f401201c0600700fb9404807","0x487f01279c0387f0127d004807dd001c3e0093e80240480925a01c039f4","0xb0071b2024fa00904602774807040024fa0090fe4b4061e600e1fc049f4","0x6c8093e80246c80934e01c3e0093e80243e00904401c038093e802403809","0x3e00738b2e4038200127d0048200320337500738a024fa00938a0242f007","0x380c00e71004eeb1b0024fa00c10a0265d00710a20c4112d3e8024e28d9","0x27807112740061f401236004cbc00e220049f401220c0492d00e01cfa009","0x6b8093e8024e79d00404b77600739e024fa00900e09c038073e802444809","0xfa00911002411007104024fa0091040240b007382024fa0091ae02507807","0x38073e80240380c00e7044408225a024e08093e8024e0809dda01c44009","0xdf0093e8024e2009ddc01ce00093e80244180925a01c039f401208004947","0xfa00937c02776807380024fa00938002411007104024fa0091040240b007","0x37000700e7d004819013b80038073e80240380c00e6f8e008225a024df009","0xf3807374024fa00900fbbc0388f0127d0048090124b4038073e80240b009","0x49f40123e804ef000e088049f40126e89680c3cc01cdd0093e8024dd009","0x48d601269c0388f0127d00488f012088038070127d004807012058038d6","0x25c807044024fa00904407c066ea00e714049f40127140485e00e358049f4","0xda009de26f0049f401824c04cba00e24cde9b625a7d0049c51ac23c039c5","0x4b80c3e8024de00997801cd98093e8024de80925a01c039f401201c06007","0x49b012e08896eec00e6c0049f401201c1380700e7d0049b201213c039b2","0x482200e6d8049f40126d80481600e6bc049f401226404a0f00e264049f4","0x480701801cd79b336c4b4049af0127d0049af013bb4039b30127d0049b3","0x49b4013bb80389b0127d0049bd0124b4038073e80241100928e01c039f4","0x4eed00e26c049f401226c0482200e6d8049f40126d80481600e274049f4","0xfa0090320277000700e7d00480701801c4e89b36c4b40489d0127d00489d","0x49f401201f7900735a024fa0090120249680700e7d00481f013b8003807","0x13809de601c0a0093e8024d512d018798039aa0127d0049aa01279c039aa","0xd380735a024fa00935a0241100700e024fa00900e0240b00734e024fa009","0x49f40120500b00cdd401ce28093e8024e28090bc01cd38093e8024d3809","0xd00093e8030d100997401cd11a33484b4fa00938a69cd680738b2e403814","0x49a00132f00399e0127d0049a30124b4038073e80240380c00e67c04ef4","0xa12ddd801ccd8093e80240382700e01cfa00915002427807150674061f4","0xd20093e8024d200902c01cca8093e8024cc80941e01ccc8093e8024cd99d","0x399533c6909680932a024fa00932a0277680733c024fa00933c02411007","0x377007158024fa0093460249680700e7d00481401251c038073e80240380c","0x560093e80245600904401cd20093e8024d200902c01cca0093e8024cf809","0x4ee000e01cfa00900e0300399415869096809328024fa00932802776807","0x480925a01c039f401205804ee000e01cfa00903e0277000700e7d004819","0x61e600e2bc049f40122bc049e700e2bc049f401201f7a807324024fa009","0x588093e8024d2809d5601cd28093e802408809dec01cd30093e80245792d","0x49920120880398d0127d00499838a030f3007330024fa00916202756007","0x38fa00e168049f40126340485e00e5fc049f40126980485e00e5f8049f4","0xfa00903e0277000700e7d004819013b80038073e80240380c00e01f72809","0x49f401201f7b807318024fa0090120249680700e7d004816013b8003807","0xf8009df001cc48093e8024c592d0187980398b0127d00498b01279c0398b","0x39f401261c049ea00e614c38b925a7d004988013be4039883e0030fa009","0xfa009308714061e600e610049f40122e40481900e01cfa00930a024f5007","0x38c22fa604969f40122fc04ef900e2fcf800c3e8024f8009df001c5e809","0x397c0127d00497d013b90038073e8024610093d401c039f4012604049d3","0xfa0093e00277c8072f4024fa0092f62f4061e600e5ec049f40125f004983","0xbb009dc801c039f40125dc049ea00e01cfa0092f0024e98072ec5dcbc12d","0x39720127d0049742f4030f30072e8024fa009192024c1807192024fa009","0x49f40125c80485e00e5fc049f40126240485e00e5f8049f401263004822","0x37000700e7d004819013b80038073e80240380c00e01f7280900e3e80385a","0x37d0072e2024fa0090120249680700e7d004816013b80038073e80240f809","0x358093e8024b812d018798039700127d00497001279c039700127d004807","0x49ea00e3786f8e025a7d00496d013bec0396d3de030fa0093de024fd007","0x61e600e374049f40123800481900e01cfa0091bc024f500700e7d0048df","0x969f401259004efb00e590f780c3e8024f78093f401cb30093e80246e9c5","0x4962013b90038073e8024b08093d401c039f401258c049d300e584b1163","0x37d8072bc024fa0092be598061e600e57c049f40125800498300e580049f4","0x39f4012568049ea00e01cfa0092b8024e98072ae568ae12d3e8024f7809","0x49532bc030f30072a6024fa0092ac024c18072ac024fa0092ae02772007","0x485e00e5fc049f40121ac0485e00e5f8049f40125c40482200e3ac049f4","0x4819013b80038073e80240380c00e01f7280900e3e80385a0127d0048eb","0xfa0090120249680700e7d004816013b80038073e80240f809dc001c039f4","0xa912d018798039520127d00495201279c039520127d004807df801c76809","0xa614d25a7d00494f013bf80394f3dc030fa0093dc0277e8072a2024fa009","0x49f40125340481900e01cfa009294024e980700e7d00494c01274c0394a","0x4efe00e3dcf700c3e8024f7009dfa01c7a8093e8024a41c501879803948","0x38073e8024a58093a601c039f4012518049d300e52ca494625a7d0048f7","0xfa0093dc0277f0071fc024fa0092803d4061e600e500049f401252404819","0x9f00903201c039f40123fc049d300e01cfa0091fa024e980727c3fc7e92d","0x397e0127d0048ed0120880393b0127d0049011fc030f3007202024fa009","0x3807dca024038fa00e168049f40124ec0485e00e5fc049f40125440485e","0x4ee000e01cfa00903e0277000700e7d004819013b80038073e80240380c","0x49e700e4d8049f401201f7f807274024fa0090120249680700e7d004816","0xf680c3e8024f6809e0001c9b8093e80249b12d018798039360127d004936","0x4931013b90038073e8024980093d401c981310187d004934013c0403934","0x38080725c024fa009212714061e600e424049f40124300498300e430049f4","0x930093e802494009dc801c039f40124a8049ea00e4a09500c3e8024f6809","0x493a012088039180127d00491d25c030f300723a024fa00924c024c1807","0x38fa00e168049f40124600485e00e5fc049f40124dc0485e00e5f8049f4","0xfa00903e0277000700e7d004819013b80038073e80240380c00e01f72809","0x49f401201f81007000024fa0090120249680700e7d004816013b8003807","0xf5809e0601d188093e80251812d01879803a300127d004a3001279c03a30","0x38073e80251a0093d401d1a2330187d004a32013c1003a323d6030fa009","0xfa00946c714061e600e8d8049f40128d40498300e8d4049f40128cc04ee4","0xfc009dc801c039f40128e4049ea00e7e11c80c3e8024f5809e0801d1c009","0x3a3d0127d004a3c470030f3007478024fa009476024c1807476024fa009","0x49f40128f40485e00e5fc049f40128c40485e00e5f8049f401200004822","0x37000700e7d004819013b80038073e80240380c00e01f7280900e3e80385a","0x38280747e024fa0090120249680700e7d004816013b80038073e80240f809","0x1208093e80252012d01879803a400127d004a4001279c03a400127d004807","0x1218093d401d21a420187d0049f9013c1c039f93d4030fa0093d402783007","0x61e600e914049f40129100498300e910049f401290804ee400e01cfa009","0x39f401291c049ea00e9252380c3e8024f5009e0e01d230093e8025229c5","0x4a4a48c030f3007494024fa0093ee024c18073ee024fa00949202772007","0x485e00e5fc049f40129040485e00e5f8049f40128fc0482200e92c049f4","0x4819013b80038073e80240380c00e01f7280900e3e80385a0127d004a4b","0xfa0090120249680700e7d004816013b80038073e80240f809dc001c039f4","0x12692d01879803a4d0127d004a4d01279c03a4d0127d004807e1001d26009","0x128a500187d004a4f013c2803a4f3d2030fa0093d20278480749c024fa009","0x49f401294c0498300e94c049f401294004ee400e01cfa0094a2024f5007","0x49ea00e95d2b00c3e8024f4809e1401d2a8093e80252a1c501879803a54","0xf30074b0024fa0093ec024c18073ec024fa0094ae0277200700e7d004a56","0x49f40129380485e00e5f8049f40129300482200e964049f40129612a80c","0x12d05a2fe4b7760074b4024fa00900e09c0385a0127d004a590121780397f","0x1100700e024fa00900e0240b0074b8024fa0094b6025078074b6024fa009","0x39ef00e970bf00725a0252e0093e80252e009dda01cbf0093e8024bf009","0x4816012800038220127d0048073d201c039f4012050049aa00e01cfa009","0x482200e01c049f401201c0481600e01cfa00903e0244d80704007c061f4","0x38220127d004822012178038200127d00482001269c038090127d004809","0x4f0b046024fa00c0420265d00704206c0c92d3e80241102001201ce2cb9","0x88093e8024039df00e09c049f401206c0492d00e01cfa00900e030038fa","0xfa0093e0024a280700e7d0049ef01213c039ef3e0030fa0090460265e007","0xfa00900e2e4039eb0127d00480717201c039f40127b80494700e7b4f700c","0x484800e7a0049f40127a4f51eb25b2f4039e90127d00480717201cf5009","0x38270127d004827012088038190127d004819012058039e70127d0049ed","0x49f40127a004cbe00e044049f4012044049de00e4b4049f40124b40489d","0xf31c53e8024f39e80224b41381902d2fc039e70127d0049e7012364039e8","0x9680700e7d00480701801cf0809e18788049f401878c04cc000e78cf21e5","0x39f401277c0495500e778ef80c3e8024f100998401cf00093e8024f2809","0x61f401277004cc500e770049f401277404cc400e774049f401201f68007","0x48da012064038da0127d0048db01331c038073e80246e00998c01c6d8dc","0xa39450187d0049de27e030968ac00e4fc049f40124fc049e700e4fc049f4","0x2480937a01c248480187d0049473cc030ca00728e024fa00928e024f3807","0xda00700e7d00484c0126f00384f098030fa00909c0244980709c024fa009","0xb38093e8024aa8092fe01caa8093e8024aa0092fc01caa0093e802427809","0x49f40125a0048d500e780049f40127800482200e5a0049f401201c2d007","0xe29e038a608038480127d004848012058039450127d00494501278803968","0x482200e01cfa00900e0300385a2fe5f896f0d2f25ccb492d3e8030b3968","0x39790127d00497901279c038d50127d0049690124b4039690127d004969","0xfa00c2f21200607f00e354049f40123540482200e5cc049f40125cc049e1","0x26500730c024fa0091aa0249680700e7d00480701801cc1809e1c608c000c","0xc00093e8024c000902c01cc98093e80242f00999601c2f0093e8024c1009","0xfa0093c80244e80728a024fa00928a024f100730c024fa00930c02411007","0xc318002c024c98093e8024c980999801cb98093e8024b98093c201cf2009","0x48073d201ccd0093e80246a80925a01c039f401201c060073265ccf2145","0x6a00c3cc01cd48093e8024d48093ce01cd48093e80240389700e350049f4","0x39ae0127d004866358030f2007358024fa00900e794038660127d0049a9","0x49f40126680482200e60c049f401260c0481600e6c4049f40126b804ccd","0x4973012784039e40127d0049e4012274039450127d0049450127880399a","0x380c00e6c4b99e428a668c18160126c4049f40126c404ccc00e5cc049f4","0x39e500e6dc049f40125f80492d00e5f8049f40125f80482200e01cfa009","0x39c30127d0049b9013334039b90127d00485a370030f2007370024fa009","0x49f4012514049e200e6dc049f40126dc0482200e120049f401212004816","0x49c30133300397f0127d00497f012784039e40127d0049e401227403945","0x49e50124b4038073e80240380c00e70cbf9e428a6dc2401601270c049f4","0x489d00e748049f40127180482200e74c049f40127980481600e718049f4","0x380c00e01f8780900e3e8039ce0127d0049e1013338039d10127d0049e4","0x482200e74c049f40120640481600e734049f401206c0492d00e01cfa009","0x39ce0127d0048fa013338039d10127d00492d012274039d20127d0049cd","0x49f40127480482200e74c049f401274c0481600e730049f401273804ccd","0x49c5012784039d10127d0049d10122740380c0127d00480c012788039d2","0x39ef00e730e29d1018748e9816012730049f401273004ccc00e714049f4","0xfa00900e0300382202c0338801438a030fa00c01201c0600900e01cfa009","0x49c5012058038200127d00480c0127140381f0127d0048140124b403807","0x4f11036064061f40180800481f00e07c049f401207c0482200e714049f4","0x49f401206c0482000e08c049f401207c0492d00e01cfa00900e03003821","0x1392d018798038270127d00482701279c038270127d0048fa012064038fa","0x1100738a024fa00938a0240b0073e0024fa00903202424007022024fa009","0x88093e8024088090bc01cf80093e8024f80091b201c118093e802411809","0x480701801cf69ee3de4b4049ed3dc7bc969f4012044f802338a7168f007","0xfa00900e09c039eb0127d00481f0124b4038073e8024108093da01c039f4","0x481600e7a0049f40127a404eb700e7a4049f40127a89680cd6c01cf5009","0x49e80127d0049e8013ac8039eb0127d0049eb012088039c50127d0049c5","0x492d01251c038073e8024060092aa01c039f401201c060073d07ace292d","0xfa00900e130039e60127d0048073d201cf38093e80241100925a01c039f4","0x39e500e790049f4012794f300c3cc01cf28093e8024f28093ce01cf2809","0x39e10127d0049e2013ac4039e20127d0049e43c6030f20073c6024fa009","0x49f401278404eb200e79c049f401279c0482200e058049f401205804816","0xb12d3e8030968090186b8038073e8024e280935401cf09e702c4b4049e1","0x38160127d004816012088038073e80240380c00e06c0c82025bc480f822","0x49f401207c049b700e07c049f401207c049b100e084049f40120580492d","0xfa00904e024cd80704e024fa0091f4024540071f4024fa00900e67403823","0xf780903201cf78093e8024f800932a01c039f40120440499900e7c00880c","0xf680c3e80240a1ee0184b4560073dc024fa0093dc024f38073dc024fa009","0xe300700e7d0049ea01270c039e63ce7a0f49ea0287d0048230126e4039eb","0x498300e01cfa0093cc024e980700e7d0049e70127a8038073e8024f4809","0x39e50127d0049e501279c039eb0127d0049eb01279c039e50127d0049e8","0x380c32801cf18093e8024f18093ce01cf19e40187d0049e53d67b4968ac","0xef80c3e8024f000915e01cf00093e8024f080932401cf09e20187d0049e3","0xfa0093ba024bf0073ba024fa0093bc024d280700e7d0049df012698039de","0x4821012088038db0127d0048070b401c6e0093e8024ee0092fe01cee009","0x481600e790049f4012790049e200e36c049f401236c048d500e084049f4","0x2414725bc4ca293f1b44b4fa00c1b836c1102138a608039e20127d0049e2","0x49f40123680492d00e368049f40123680482200e01cfa00900e03003849","0x484e0120880393f0127d00493f012784039450127d00494501279c0384e","0x492d00e01cfa00900e0300384c013c50039f4018514048b100e138049f4","0x110072aa024fa0092a8024cc0072a8024fa00900e09c0384f0127d00484e","0x600700fc54048071f401cb40093e8024aa80931a01cb38093e802427809","0x382700e5a4049f40121380492d00e01cfa009098024c600700e7d004807","0xc68072ce024fa0092d2024110072f2024fa0092e6024c58072e6024fa009","0xbf0093e8024bf00931a01cbf0093e8024b400931201cb40093e8024bc809","0x497f01213c038073e80240380c00e16804f162fe024fa00c2fc024c4007","0xfa00900fc5c039800127d0048073d201c6a8093e8024b380925a01c039f4","0x39e500e60c049f4012608c000c3cc01cc10093e8024c10093ce01cc1009","0x39930127d00485e01384c0385e0127d00498330c030f200730c024fa009","0x49f4012790049e200e354049f40123540482200e788049f401278804816","0xf20d53c4050049930127d0049930138500393f0127d00493f012784039e4","0x49f401259c0492d00e01cfa0090b40242780700e7d00480701801cc993f","0xfa0093520270b007352024fa0091a80270a8071a8024fa00900e09c0399a","0xf20093c401ccd0093e8024cd00904401cf10093e8024f100902c01c33009","0xa0090cc024fa0090cc0270a00727e024fa00927e024f08073c8024fa009","0x492d00e51c049f401251c0482200e01cfa00900e0300386627e790cd1e2","0x39b10127d00484935c030f200735c024fa00900e794039ac0127d004947","0x49f40126b00482200e788049f40127880481600e6dc049f40126c404e13","0x49b7013850038480127d004848012784039e40127d0049e4012788039ac","0xfa009028024e980700e7d00480701801cdb8483c86b0f10140126dc049f4","0xfa00900e794039b80127d0048200124b4038200127d00482001208803807","0x481600e718049f401270c04e1300e70c049f401206cdc80c3c801cdc809","0x380c0127d00480c012788039b80127d0049b8012088038070127d004807","0xe30190186e003814012718049f401271804e1400e064049f4012064049e1","0xf780700e7d0048073ea01c0c8093e802403a5100e07c049f401201d2a007","0x499b00e084049f401206c048a800e06c049f401201cce80700e7d004807","0x38270127d0048fa012654038073e80241180933201c7d0230187d004821","0xfa009022024f38073e0050061f4012050049f700e044049f401209c04819","0xf68160187d0048160125dc039ee3de030fa0093e00440612d15801c08809","0xf59ee3de4b4560073dc024fa0093dc024f38073d6024fa0093da024c1807","0xf400c3e8024f4807018650039e90127d0049e901279c039e93d4030fa009","0xf280934c01cf21e50187d0049e60122bc039e60127d0049e7012648039e7","0x497f00e788049f401278c0497e00e78c049f4012790049a500e01cfa009","0xf10073c0024fa0093c00246a8073c0024fa00900e168039e10127d0049e2","0x61e13c04b4049c530401cf40093e8024f400902c01cf50093e8024f5009","0xfa0093be0241100700e7d00480701801c6d8dc3b84b78c1dd3bc77c969f4","0xfa0093ba024f380700e7d00480702801c6d0093e8024ef80925a01cef809","0xee80916201c6d0093e80246d00904401cef0093e8024ef0093c201cee809","0x1380728a024fa0091b40249680700e7d00480701801c9f809e3201cfa00c","0x38490127d004945012088038480127d004947012660039470127d004807","0x498c00e01cfa00900e03003807e34024038fa00e138049f40121200498d","0x498b00e13c049f401201c13807098024fa0091b40249680700e7d00493f","0x384e0127d004954012634038490127d00484c012088039540127d00484f","0x49f40185540498800e554049f40125540498d00e554049f401213804989","0xfa0092ce0242780700e7d0048073de01c039f401201c060072d00278d967","0xfa0092e60278e0072e6024fa00900e674039690127d0048490124b403807","0xbf809e3e01c039f40125f804f1e00e5fcbf00c3e8024bc809e3a01cbc809","0x3980028030fa009028024fb8071aa024fa0090b40240c8070b4024fa009","0xb0092ee01cc19820187d0049801aa7a8968ac00e354049f4012354049e7","0x39830127d00498301279c0385e0127d00498601260c0398602c030fa009","0xf400c32801cc98093e8024c98093ce01cc98200187d00485e306608968ac","0x38660127d0049a9012660039a90127d00480704e01c6a19a0187d004993","0xd88093e80240385a00e6b8049f40123500497f00e6b0049f401219804c81","0xfa009358024f3807362024fa0093620246a8072d2024fa0092d202411007","0xa1f900e668049f40126680481600e080049f40120800c80c90401cd6009","0x38073e80240380c00e718e19b925bc80dc1b70187d0061ac35c6c4ef169","0x49f401274c0482200e74c049f40126dc0492d00e6dc049f40126dc04822","0xfa00900e030039cc39a73896f213a2088e912d3e8030dc1d30186b8039d3","0x49d10126c4038750127d0049d20124b4039d20127d0049d201208803807","0x48073d201ce50093e8024039e900e7b0049f4012744049b700e744049f4","0x39f40127d4049c300e3643f87c38e7d40a1f40127b0049b900e1e0049f4","0x38073e80246c8093a601c039f40121fc049ea00e01cfa00938e024e3007","0x4883013388038830127d004882013c8c038820127d00487c02c05096f22","0x482200e668049f40126680481600e01cfa00910a026718071b0214061f4","0x39ca0127d0049ca012178038d80127d0048d80125d0038750127d004875","0x6c07533405272007044024fa00904407c0625e00e1e0049f40121e00485e","0x380c00e73c04f24112024fa00c3a0026728073a0220e212d3e80243c1ca","0x39be380704969f401222404ce700e35c049f40122200492d00e01cfa009","0x39f401223c0494700e6e84780c3e8024e080928a01c039f40126f80484f","0xfa0093740242400700e7d0048d601251c039b61ac030fa009380024a2807","0x6b9c59d001c6b8093e80246b80904401c498093e8024db00909001cde809","0x482200e01cfa00900e030039b212e6cc96f253686f0061f401824cde822","0x121007132024fa00900e09c039b00127d0049bc0124b4039bc0127d0049bc","0x49f40127100481600e26c049f40126bc04a4300e6bc049f4012264e280c","0x49b4012784038200127d004820012788039b00127d0049b0012088039c4","0x480701801c4d9b40406c0e201401226c049f401226c04a4100e6d0049f4","0x49b30124b4039b30127d0049b3012088038073e8024e280935401c039f4","0x4a4000e6a8049f40126c8d680c3c801cd68093e8024039e500e274049f4","0x389d0127d00489d012088039c40127d0049c4012058039a70127d0049aa","0x49f401269c04a4100e25c049f401225c049e100e080049f4012080049e2","0x38073e8024e280935401c039f401201c0600734e25c1009d388050049a7","0x49f40127100481600e68c049f401273c04a4000e690049f40122200492d","0x4822012784038200127d004820012788039a40127d0049a4012088039c4","0x480701801cd1822040690e201401268c049f401268c04a4100e088049f4","0xfa00902c024f500700e7d00481401274c038073e8024e280935401c039f4","0xfa00939c0249680739c024fa00939c0241100700e7d00481f01323803807","0xcf80948001ccf8093e8024e61a0018790039a00127d0048073ca01cd1009","0xf1007344024fa00934402411007334024fa0093340240b00733c024fa009","0xcf0093e8024cf00948201ce68093e8024e68093c201c100093e802410009","0xe980700e7d0049c50126a8038073e80240380c00e678e68203446680a009","0x482200e01cfa00903e0264700700e7d0048160127a8038073e80240a009","0xf2007150024fa00900e7940399d0127d0049b90124b4039b90127d0049b9","0x49f40126680481600e664049f401266c04a4000e66c049f40127185400c","0x49c3012784038200127d0048200127880399d0127d00499d0120880399a","0x480701801ccc9c3040674cd014012664049f401266404a4100e70c049f4","0x39f4012050049d300e01cfa0092d00242780700e7d0048073de01c039f4","0x38073e80240c8098a201c039f401207c04c8e00e01cfa00902c024f5007","0x49f40122b0e280c48401c560093e80240382700e654049f40121240492d","0x4995012088039e80127d0049e8012058039920127d00499401290c03994","0x4a4100e778049f4012778049e100e7a8049f40127a8049e200e654049f4","0xe280935401c039f401201c06007324778f51953d0050049920127d004992","0x481f013238038073e80240b0093d401c039f4012050049d300e01cfa009","0x49dc0124b4039dc0127d0049dc012088038073e80240c8098a201c039f4","0x4a4000e694049f401236cd300c3c801cd30093e8024039e500e2bc049f4","0x38af0127d0048af012088039e80127d0049e8012058038b10127d0049a5","0x49f40122c404a4100e370049f4012370049e100e7a8049f40127a8049e2","0xc8093e802403a5100e07c049f401201d2a007162370f50af3d0050048b1","0x48a800e06c049f401201cce80700e7d0048073de01c039f401201cfa807","0x38073e80241180933201c7d0230187d00482101266c038210127d00481b","0x61f4012050049f700e044049f401209c0481900e09c049f40123e804995","0x39ee3de030fa0093e00440612d15801c088093e8024088093ce01cf8014","0xfa0093dc024f38073d6024fa0093da024c18073da058061f401205804977","0x39e90127d0049e901279c039e93d4030fa0093d67b8f792d15801cf7009","0x49e60122bc039e60127d0049e7012648039e73d0030fa0093d201c06194","0x497e00e78c049f4012790049a500e01cfa0093ca024d30073c8794061f4","0x6a8073c0024fa00900e168039e10127d0049e20125fc039e20127d0049e3","0xf40093e8024f400902c01cf50093e8024f50093c401cf00093e8024f0009","0x480701801c6d8dc3b84b7931dd3bc77c969f4018784f012d012714c1007","0x480702801c6d0093e8024ef80925a01cef8093e8024ef80904401c039f4","0x6d00904401cef0093e8024ef0093c201cee8093e8024ee8093ce01c039f4","0x9680700e7d00480701801c9f809e4e01cfa00c3ba024588071b4024fa009","0x38480127d004947012660039470127d00480704e01ca28093e80246d009","0x3807e50024038fa00e138049f40121200498d00e124049f401251404822","0x13807098024fa0091b40249680700e7d00493f012630038073e80240380c","0x38490127d00484c012088039540127d00484f01262c0384f0127d004807","0x49f40125540498d00e554049f40121380498900e138049f40125500498d","0x48073de01c039f401201c060072d0027949670127d00615501262003955","0xfa00902c024f500700e7d00481401274c038073e8024b380909e01c039f4","0x49f40121240492d00e01cfa0090320262880700e7d00481f01323803807","0x497901290c039790127d00497338a031210072e6024fa00900e09c03969","0x49e200e5a4049f40125a40482200e7a0049f40127a00481600e5f8049f4","0x497e0127d00497e012904039de0127d0049de012784039ea0127d0049ea","0xb400909e01c039f401201cf780700e7d00480701801cbf1de3d45a4f4014","0x2d009e3801c2d0093e80240399d00e5fc049f40121240492d00e01cfa009","0x38f80700e7d004980013c7803982300030fa0091aa0278e8071aa024fa009","0xa00c3e80240a0093ee01cc30093e8024c180903201cc18093e8024c1009","0xbb80733464c061f4012178c31ea25a2b0039860127d00498601279c0385e","0x49f4012668049e700e6a4049f40123500498300e3500b00c3e80240b009","0xca0070cc024fa0090cc024f38070cc080061f40126a4cd19325a2b00399a","0x49f40126c40498b00e6c4049f401201c1380735c6b0061f4012198f400c","0xfa00900e168039b90127d0049ae0125fc039b80127d0049b7013204039b7","0xdc0093ce01ce18093e8024e18091aa01cbf8093e8024bf80904401ce1809","0x39ac0127d0049ac012058038200127d00482003203241007370024fa009","0xfa00900e030039ce3a274896f2a3a6718061f40186e0dc9c33bc5fc0a1f9","0x49cd012088039cd0127d0049c60124b4039c60127d0049c601208803807","0x380c00e1e0e51ec25bcac3a8223984b4fa00c3a6734061ae00e734049f4","0x49b100e7d4049f40127300492d00e730049f40127300482200e01cfa009","0xf48070f8024fa00900e7a4039c70127d0048750126dc038750127d004875","0x48d901270c038d810a20c410d90287d0049c70126e40387f0127d004807","0xfa0091b0024e980700e7d0048850127a8038073e80244100938c01c039f4","0x4ce200e220049f401271004f2d00e710049f401220c0b01425bcb003807","0x39ac0127d0049ac012058038073e8024e80099c601c449d00187d004888","0x49f40121f00485e00e224049f40122240497400e7d4049f40127d404822","0xd60149c801c110093e80241101f0189780387f0127d00487f0121780387c","0x39be013cb8e00093e8030e08099ca01ce08d739e4b4fa0090fe1f0449f5","0x6b1ba25a7d0049c001339c0388f0127d0048d70124b4038073e80240380c","0x49bd01251c0389337a030fa009374024a280700e7d0049b601213c039b6","0x4980909001c039f40126f00494700e6d0de00c3e80246b00928a01c039f4","0x27400711e024fa00911e0241100712e024fa00936802424007366024fa009","0x38073e80240380c00e26cd789925bcbcd81b20187d006097366088479c5","0xd68093e80240382700e274049f40126c80492d00e6c8049f40126c804822","0x49cf012058039a70127d0049aa01290c039aa0127d0049ad38a03121007","0x49e100e080049f4012080049e200e274049f40122740482200e73c049f4","0x600734e6c01009d39e050049a70127d0049a7012904039b00127d0049b0","0x492d00e264049f40122640482200e01cfa00938a024d500700e7d004807","0x39a20127d00489b346030f2007346024fa00900e794039a40127d004899","0x49f40126900482200e73c049f401273c0481600e680049f401268804a40","0x49a0012904039af0127d0049af012784038200127d004820012788039a4","0xfa00938a024d500700e7d00480701801cd01af040690e7814012680049f4","0x49cf0120580399e0127d0049be0129000399f0127d0048d70124b403807","0x49e100e080049f4012080049e200e67c049f401267c0482200e73c049f4","0x600733c0881019f39e0500499e0127d00499e012904038220127d004822","0xb0093d401c039f4012050049d300e01cfa00938a024d500700e7d004807","0xf600925a01cf60093e8024f600904401c039f401207c04c8e00e01cfa009","0x120007336024fa0090f02a0061e400e2a0049f401201cf280733a024fa009","0xce8093e8024ce80904401cd60093e8024d600902c01ccc8093e8024cd809","0xfa00933202520807394024fa009394024f0807040024fa009040024f1007","0x39f4012714049aa00e01cfa00900e03003999394080ce9ac028024cc809","0x38073e80240f80991c01c039f4012058049ea00e01cfa009028024e9807","0x560093e8024039e500e654049f40127480492d00e748049f401274804822","0x49ac012058039920127d004994012900039940127d0049ce158030f2007","0x49e100e080049f4012080049e200e654049f40126540482200e6b0049f4","0x600732474410195358050049920127d004992012904039d10127d0049d1","0xc8098a201c039f4012714049aa00e01cfa00903e0264700700e7d004807","0x49dc012088038073e80240b0093d401c039f4012050049d300e01cfa009","0xd300c3c801cd30093e8024039e500e2bc049f40127700492d00e770049f4","0x39e80127d0049e8012058038b10127d0049a5012900039a50127d0048db","0x49f4012370049e100e7a8049f40127a8049e200e2bc049f40122bc04822","0x39f401201cf7807162370f50af3d0050048b10127d0048b1012904038dc","0xf8093e80241100930801c110093e80240398500e058049f401201cbd007","0xfa009032024c080700e7d0048200122fc03819040030fa00903e0245e807","0xb0093ce01c108093e8024108093ce01c108093e80240d80903201c0d809","0x49f40123e8049e700e3e81180c3e80240b0210184b45600702c024fa009","0x48c200e7c0049f40120440497d00e0441380c3e80247d007018650038fa","0x39ed0127d0049ee0125ec038073e8024f78092f801cf71ef0187d0049f0","0xf48093e80240385a00e7a8049f40127ac0497f00e7ac049f40127b40497e","0xfa00904e0240b007046024fa009046024f10073d2024fa0093d20246a807","0x60073c6790f292de60798f39e825a7d0061ea3d24b4049c530401c13809","0xf38073c4024fa0093d0024968073d0024fa0093d00241100700e7d004807","0xf10093e8024f100904401cf38093e8024f38093c201cf30093e8024f3009","0xfa0093c40249680700e7d00480701801cf0809e6201cfa00c3cc02458807","0x482200e778049f401277c0498300e77c0a00c3e80240a0092ee01cf0009","0x38073e80240380c00e77404f3200e7d0061de0122c4039e00127d0049e0","0x39dc0127d0049e00124b4038073e8024e280935401c039f4012050049ea","0x38db0127d0048db01279c038db0127d004807e6601c6e0093e8024039e9","0xfa0091b44fc061e400e4fc049f401201cf28071b4024fa0091b6370061e6","0xee00904401c138093e80241380902c01ca38093e8024a280948001ca2809","0x1208073ce024fa0093ce024f0807046024fa009046024f10073b8024fa009","0x498c00e01cfa00900e030039473ce08cee027028024a38093e8024a3809","0x481600e124049f401201cbd007090024fa0093c00249680700e7d0049dd","0x38230127d004823012788038480127d004848012088038270127d004827","0x49f4012050048dc00e124049f4012124049e700e79c049f401279c049e1","0x48da00e554aa04f0981380a1f4012050249c53ce08c2402704552403814","0xb48093e80242600925a01c039f401201c060072d00279a1670127d006155","0x49f401201cbd00700e7d00497901213c039792e6030fa0092ce02494007","0xfa0092d20241100709c024fa00909c0240b0072fe024fa00900e5e80397e","0xbf0093ce01caa0093e8024aa0093c201c278093e8024278093c401cb4809","0xbf97e2e65502796909c08b9a8072fe024fa0092fe024f38072fc024fa009","0x380c00e17804f3630c024fa00c3060246d007306608c00d50b4050fa009","0x278071a8668061f40126180492800e64c049f40123540492d00e01cfa009","0x481600e198049f401201cbd007352024fa00900e5e0038073e80246a009","0x39800127d004980012788039930127d0049930120880385a0127d00485a","0x49f4012198049e700e6a4049f40126a4049e700e608049f4012608049e1","0xd60140126e0db9b135c6b00a1f4012198d499a304600c985a045cd403866","0x2f00948001cdc8093e80246a80925a01c039f401201c060073706dcd89ae","0xf1007372024fa009372024110070b4024fa0090b40240b007386024fa009","0xe18093e8024e180948201cc10093e8024c10093c201cc00093e8024c0009","0x39c60127d00484c0124b4038073e80240380c00e70cc11803721680a009","0x49f40127180482200e138049f40121380481600e74c049f40125a004a40","0x49d3012904039540127d0049540127840384f0127d00484f012788039c6","0xfa0093c2024c600700e7d00480701801ce995409e7182701401274c049f4","0x49f40127880492d00e01cfa009028024f500700e7d0049c50126a803807","0x49f4012738049e700e738049f401201f9b8073a2024fa00900e7a4039d2","0xe69cc018790039cc0127d0048073ca01ce68093e8024e71d1018798039ce","0x1100704e024fa00904e0240b0073d8024fa0090ea025200070ea024fa009","0xf38093e8024f38093c201c118093e8024118093c401ce90093e8024e9009","0x38073e80240380c00e7b0f38233a409c0a0093d8024fa0093d802520807","0x39e50127d0049e5012088038073e8024e280935401c039f4012050049ea","0x49f401278c3c00c3c801c3c0093e8024039e500e728049f40127940492d","0x49ca012088038270127d004827012058039c70127d0049f5012900039f5","0x4a4100e790049f4012790049e100e08c049f401208c049e200e728049f4","0x3a5400e050049f401201d2980738e790119ca04e050049c70127d0049c7","0x49f401201cf480700e7d0048073de01c039f401201cfa807044024fa009","0x482003e030f3007040024fa009040024f3807040024fa00900fce00381f","0xc80c3cc01c0d8093e80240d8093ce01c0d8093e802403f3900e064049f4","0xf3007046024fa009046024f3807046024fa00900fce8038210127d00481b","0xfa00c25a024061ae00e3e8049f40123e80485e00e3e8049f401208c1080c","0x49f401209c0482200e01cfa00900e030039ee3de7c096f3b0220581392d","0x48110126dc038110127d0048110126c4039ed0127d0048270124b403827","0x39f40127a8049c300e798f39e83d27a80a1f40127ac049b900e7ac049f4","0x38073e8024f30093a601c039f401279c049ea00e01cfa0093d0024f5007","0x119f401279404f3e00e794049f40127a404f3d00e7a4049f40127a404f3c","0xf500700e7d0049e401274c0393f1b436c6e1dc3ba778ef9e03c2788f19e4","0x49d300e01cfa0093c2024aa80700e7d0049e20126b0038073e8024f1809","0xee00935801c039f401277404f3f00e01cfa0093bc024e980700e7d0049e0","0x48da013140038073e80246d8098a001c039f40123700495500e01cfa009","0xef8fa018798039df0127d0049df01279c038073e80249f8092aa01c039f4","0x1080700e7d00494701251c0384828e030fa00928a024a280728a024fa009","0x49f401212404c4c00e1242400c3e80242400989601c240093e802424009","0x49c5013138039c50127d0049c50280322680709c024fa00900e168039c5","0x38160127d0048160440312f00709c024fa00909c0246a807098714061f4","0xb3955019d00aa04f0187d00604c09c01c96c4f00e7b4049f40127b404822","0xf680700e7d0049c5013140038073e8024aa0098a001c039f401201c06007","0x2290072d2024fa00900e7a4039680127d0049ed0124b4038073e802424009","0xbc8093e8024b9969018798039730127d00497301279c039730127d004807","0xfa0092fe0271a0072fe024fa0092f25f8061e400e5f8049f401201cf2807","0x60093c401cb40093e8024b400904401c278093e80242780902c01c2d009","0xa0090b4024fa0090b40271a80702c024fa00902c024f0807018024fa009","0xf680925a01c039f401259c04c5000e01cfa00900e0300385a02c030b404f","0x481600e608049f401201c5c807300024fa009090024240071aa024fa009","0x380c0127d00480c012788038d50127d0048d5012088039550127d004955","0xc000c1aa5540a45300e608049f4012608049e700e600049f4012600048d9","0x380c00e35004f41334024fa00c3260262a007326178c318338a7d004982","0x4c5600e198049f401271404c5500e6a4049f40126180492d00e01cfa009","0x38073e8024d880909e01c039f40126b00495500e6c4d71ac25a7d00499a","0xdc809c7001cdc8093e8024dc009c6e01cdc1b70187d00486635c178968ac","0xf1007352024fa00935202411007306024fa0093060240b007386024fa009","0xe18093e8024e1809c6a01c0b0093e80240b0093c201cdb8093e8024db809","0x9680700e7d0049c5013140038073e80240380c00e70c0b1b735260c0a009","0xc18093e8024c180902c01ce98093e80246a009c6801ce30093e8024c3009","0xfa00902c024f08070bc024fa0090bc024f100738c024fa00938c02411007","0xfa00900e030039d302c178e3183028024e98093e8024e9809c6a01c0b009","0x39f401208804c8e00e01cfa0091f4024a380700e7d00481401323403807","0x49f401201cf28073a4024fa0093e0024968073e0024fa0093e002411007","0x380902c01ce68093e8024e7009c6801ce70093e8024f71d1018790039d1","0xf0807018024fa009018024f10073a4024fa0093a40241100700e024fa009","0x39cd3de030e9007028024e68093e8024e6809c6a01cf78093e8024f7809","0xfa00902801c0619400e050049f40127140481900e714049f40124b404f42","0x2c6007032080061f401207c04d8b00e07c049f401208804d8a00e0880b00c","0x38210127d00481b0125f80381b0127d004819013634038073e802410009","0x49f401201c2d0071f4024fa009046024bf807046084061f401208404d64","0xb00902c01c088093e8024088091aa01c088270187d00482701313803827","0xf51eb3da4b7a19ee3de7c0969f40183e80880c012714c100702c024fa009","0xf48093e8024f800925a01cf80093e8024f800904401c039f401201c06007","0xfa0093d2024110073de024fa0093de024f08073dc024fa0093dc024f3807","0xfa00900e030039e43ca79896f443ce7a0061f40187b80b00c0cc01cf4809","0x49e2042032b40073c4024fa00900f59c039e30127d0049e90124b403807","0x498000e09c049f401209c048d500e78c049f401278c0482200e784049f4","0xfa00c3c209cf79e338a608039e80127d0049e8012058039e10127d0049e1","0x49f40127800482200e01cfa00900e030038dc3b877496f453bc77cf012d","0x49df012784039de0127d0049de01279c038db0127d0049e00124b4039e0","0x3a313f1b4030fa00c3bc7a00606600e36c049f401236c0482200e77c049f4","0xf380c37001c248093e80246d80925a01c039f401201c0600709051ca292d","0x384f0127d00484c0135b00384c0127d00484e0135ac0384e0127d00493f","0x49f401277c049e100e124049f40121240482200e368049f401236804816","0x38073e80240380c00e13cef8491b47140484f0127d00484f0135b4039df","0x9680700e7d0049e70126b0038073e80242400935801c039f401251c049ac","0xf38072ce024fa00900f5b8039550127d0048073d201caa0093e80246d809","0x49f40125140481600e5a0049f401259caa80c3cc01cb38093e8024b3809","0x4968012178039790127d0049df012784039730127d00495401208803969","0x39f401279c049ac00e01cfa00900e03003807e8e024038fa00e5f8049f4","0xfa0093d00240b0072fe024fa0093ba024968073ba024fa0093ba02411007","0x6e0090bc01cc00093e8024ee0093c201c6a8093e8024bf80904401c2d009","0xfa0093ca024d600700e7d00480701801c03f4801201c7d007304024fa009","0x39f401209c04c5000e01cfa009042026b880700e7d0049e40126b003807","0x2f0093e802403d6e00e618049f401201cf4807306024fa0093d202496807","0x49e6012058039930127d00485e30c030f30070bc024fa0090bc024f3807","0x485e00e5e4049f40127bc049e100e5cc049f401260c0482200e5a4049f4","0x38d40127d00497e334030f2007334024fa00900e7940397e0127d004993","0x49f40125cc0482200e5a4049f40125a40481600e6a4049f401235004d72","0xbc9732d2714049a90127d0049a90135b4039790127d00497901278403973","0x38073e802410809ae201c039f401209c04c5000e01cfa00900e030039a9","0x49f40120580481600e198049f40127b40492d00e7b4049f40127b404822","0x49ea012178039800127d0049eb012784038d50127d0048660120880385a","0x4d7200e6b8049f4012608d600c3c801cd60093e8024039e500e608049f4","0x38d50127d0048d50120880385a0127d00485a012058039b10127d0049ae","0x39b13003542d1c50126c4049f40126c404d6d00e600049f4012600049e1","0x380c00e05004f4938a4b4061f40180300481f00e030049f4012024049c5","0x499a00e088049f40124b40482100e058049f40127140499300e01cfa009","0xfa00900e09c038073e80240380c00e01fa500900e3e80381f0127d004816","0xc80933401c110093e80240a00904201c0c8093e8024100091a801c10009","0x38210127d00481b0121200381b044030fa0090440262580703e024fa009","0xfa0090460241000700e7d00480701801c7d009e9608c049f401807c049a9","0x380ce9801c088093e8024088093ce01c088093e80241380903201c13809","0x39f40120840495500e01cfa00900e030039ee013d34f79f00187d006011","0xfa0093de026270073d6088061f401208804c4b00e7b4049f401201c2d007","0xf480c3e8030f51ed3d67c0e2f4e00e7b4049f40127b4048d500e7a8f780c","0x4c4c00e7981100c3e80241100989601c039f401201c060073ce027a79e8","0xf28093e8024f28091aa01cf21ef0187d0049ef013138039e50127d0049e6","0xf080cea0788f180c3e8030f21e53d24b6278073d0024fa0093d002410807","0xee809ea2778ef80c3e8030f11ef04478ce2f4e00e01cfa00900e030039e0","0x6e0093e8024ee009ea401cee0093e8024f400909001c039f401201c06007","0x48da013d4c038da0127d0048dc1b6031088071b6024fa0093bc02424007","0xef80c0124fc049f40124fc04f5400e77c049f401277c0481600e4fc049f4","0x39450127d0048073d201c039f40127a0049ed00e01cfa00900e0300393f","0x49f401251ca280c3cc01ca38093e8024a38093ce01ca38093e802403f55","0x484e013d580384e0127d004848092030f2007092024fa00900e79403848","0xee80c012130049f401213004f5400e774049f40127740481600e130049f4","0x38073e8024f40093da01c039f401278004c5000e01cfa00900e0300384c","0x3ab80709e024fa00900e7a4038073e8024f78098a001c039f4012088049ed","0xaa8093e8024aa04f018798039540127d00495401279c039540127d004807","0xfa0092d0027ab0072d0024fa0092aa59c061e400e59c049f401201cf2807","0xb49e1018024b48093e8024b4809ea801cf08093e8024f080902c01cb4809","0xf480700e7d0048220127b4038073e8024f78098a001c039f401201c06007","0xf30072f2024fa0092f2024f38072f2024fa00900fd54039730127d004807","0x49f40125f8bf80c3c801cbf8093e8024039e500e5f8049f40125e4b980c","0x48d5013d50039e70127d0049e7012058038d50127d00485a013d580385a","0x1380700e7d0048220127b4038073e80240380c00e354f380c012354049f4","0xc18093e8024c1021018844039820127d004980013d60039800127d004807","0xfa00930c027aa0073dc024fa0093dc0240b00730c024fa009306027a9807","0x49ed00e01cfa0091f40242780700e7d00480701801cc31ee018024c3009","0x621100e64c049f401217804f5800e178049f401201c1380700e7d004822","0x38093e80240380902c01c6a0093e8024cd009ea601ccd0093e8024c9821","0x3a5100e07c049f401201d2a0071a801c060091a8024fa0091a8027aa007","0x49f401201cc280700e7d0048073de01c039f401201cfa807032024fa009","0x1180917e01c7d0230187d0048210122f4038210127d00481b0126100381b","0x49f700e044049f401209c0481900e09c049f40123e80498100e01cfa009","0xfa0093e00440612d15801c088093e8024088093ce01cf80140187d004814","0x39eb3da030fa0093dc01c0619400e7b8049f40127b8049e700e7b8f780c","0xfa0093d2024be0073d07a4061f40127a8048c200e7a8049f40127ac0497d","0x49e60125fc039e60127d0049e70125f8039e70127d0049e80125ec03807","0xf78093c401cf20093e8024f20091aa01cf20093e80240385a00e794049f4","0x969f4018794f212d012714c10073da024fa0093da0240b0073de024fa009","0xf18093e8024f180904401c039f401201c060073bc77cf012deb2784f11e3","0x49f401277004a1200e770049f401201cc28073ba024fa0093c602496807","0x48da013d70038073e80246d809eb601c6d0db0187d0048dc013d68038dc","0xf380728e050061f4012050049f700e514049f40124fc0481900e4fc049f4","0x484801279c03848040030fa00928e514f792d15801ca28093e8024a2809","0x384c0127d00484e0125fc0384e092030fa0090907b40619400e120049f4","0x49f40127740482200e5500b00c3e80240b0093ee01c278093e80240385a","0x10019019208039e10127d0049e101279c0384f0127d00484f012354039dd","0xfa00c2a8130279e23ba050fc807092024fa0090920240b007040024fa009","0xaa8093e8024aa80904401c039f401201c060072d25a0b392deba088aa80c","0xbf0093e8024039e900e5e4049f401201cf48072e6024fa0092aa02496807","0x2d0099c401c2d0093e8024bf809ebe01cbf8093e80240b1e10284b7af007","0x11007092024fa0090920240b00700e7d0048d501338c039801aa030fa009","0xbc8093e8024bc8090bc01cc00093e8024c00092e801cb98093e8024b9809","0xb9849029390038220127d00482203e0312f0072fc024fa0092fc0242f007","0x6007326027b005e0127d00618601339403986306608969f40125f8bc980","0x331a91a84b4fa0090bc02673807334024fa0093060249680700e7d004807","0xfa009358024a380735c6b0061f40123500494500e01cfa0090cc02427807","0x49ae012120038073e8024d880928e01cdb9b10187d0049a901251403807","0xe2ce800e668049f40126680482200e6e4049f40126dc0484800e6e0049f4","0x1100700e7d00480701801ce89d23a64b7b09c6386030fa00c3726e01119a","0x39cd0127d00480704e01ce70093e8024e180925a01ce18093e8024e1809","0xfa0093040240b0070ea024fa00939802521807398024fa00939a71406242","0xe30093c201c100093e8024100093c401ce70093e8024e700904401cc1009","0x380c00e1d4e302039c6080a0090ea024fa0090ea0252080738c024fa009","0xe980925a01ce98093e8024e980904401c039f4012714049aa00e01cfa009","0x1200070f0024fa0093a2728061e400e728049f401201cf28073d8024fa009","0xf60093e8024f600904401cc10093e8024c100902c01cfa8093e80243c009","0xfa0093ea025208073a4024fa0093a4024f0807040024fa009040024f1007","0x39f4012714049aa00e01cfa00900e030039f53a4080f6182028024fa809","0xfa0093040240b0070f8024fa0093260252000738e024fa00930602496807","0x110093c201c100093e8024100093c401ce38093e8024e380904401cc1009","0x380c00e1f01102038e6080a0090f8024fa0090f802520807044024fa009","0x481401274c038073e8024e280935401c039f4012058049d300e01cfa009","0xfa0092ce0241100700e7d00481f013238038073e8024f08093a601c039f4","0xb48d9018790038d90127d0048073ca01c3f8093e8024b380925a01cb3809","0x11007092024fa0090920240b007106024fa00910402520007104024fa009","0xb40093e8024b40093c201c100093e8024100093c401c3f8093e80243f809","0x38073e80240380c00e20cb40200fe1240a009106024fa00910602520807","0x22880700e7d00481401274c038073e8024e280935401c039f4012058049d3","0x968073c0024fa0093c00241100700e7d00481f013238038073e80240c809","0xe20093e8024ef0d8018790038d80127d0048073ca01c428093e8024f0009","0xfa00910a024110073da024fa0093da0240b007110024fa00938802520007","0x4400948201cef8093e8024ef8093c201cf78093e8024f78093c401c42809","0x8c007162050108af23001c58814394220ef9ef10a7b40a009110024fa009","0x9680c01201c940af23001ce282115e460039c500e7149680c01201c940af","0x38b1029138e292d0180240392815e460038b10280845791800e2c40a0bf","0xa02115e460038b1029c28e292d0180240392815e460038b102808457918","0x5791800e2c40a02115e460038b1029d88e292d0180240392815e460038b1","0x600900e4a05791800e2c40a02115e460038b1029d8ce292d01802403928","0xe2f6538a4b40600900e4a05791800e2c40a02115e460038b1029d90e292d","0xb02115e4604980716205bb312d0180240392815e460039c50422bc8c007","0x588160422bc8c09300e2c40b7670287149680c01201c940af23024c038b1","0x38b102c0845791812601c58816ed0050e292d0180240392815e46049807","0x49807162058108af23024c038b102dda40a1c525a030048072502bc8c093","0x940af23001c588140422bc8c007162053b501438a4b40600900e4a057918","0x9680c01201c940af23001c588140422bc8c007162053b59c525a03004807","0x58814eda7149680c01201c940af23001c588140422bc8c007162053b61c5","0x108af23001c58814edc7149680c01201c940af23001c588140422bc8c007","0x8c007162050108af23001c58814ede7149680c01201c940af23001c58814","0x48072502bc8c007162050108af23001c58814ee07149680c01201c940af","0x3b91c525a030048072502bc8c007162050108af23001c58814ee27149680c","0x5791800e717b99c525a030048072502bc8c007162050108af23001c58814","0x392815e460039c50422bc8c00738bdd09680c01201c940af23001ce2821","0x8c00738bdd89680c01201c940af23001ce282115e460039c5eea4b406009","0x8c007162050108af23001c58814eee4b40600900e4a05791800e714108af","0x48072502bc8c007162050108af23001c58814ef07149680c01201c940af","0x3bd1c525a030048072502bc8c007162050108af23001c58814ef27149680c","0x8c007162053bd9c525a030048072502bc8c007162050108af23001c58814","0x588140422bc8c007162053be1c525a030048072502bc8c007162050108af","0x940af23001c588140422bc8c007162053be9c525a030048072502bc8c007","0xa77f25a030048072502bc8c00738a0845791800e717bf1c525a03004807","0x5791800e2c40a78038a4b40600900e4a05791800e2c40a02115e460038b1","0x38b10280845791800e2c40a78138a4b40600900e4a05791800e2c40a021","0x392815e460038b10280845791800e2c40a78238a4b40600900e4a057918","0xe292d0180240392815e460038b10280845791800e2c40a78338a4b406009","0xff850287149680c01201c970af1624600381403e2f4578b123001c0b784","0x110160287149680c01201c970af162460038140b407c0f8bd15e2c48c007","0x578b123001c0df8738a4b40600900e5188c00725a0240c82123001c0a786","0xf82202c050e292d0180240392e15e2c48c007028064138090b407c0f8bd","0xe292d0180240392e15e2c48c0070281680f8bd15e2c48c007045e200c820","0xe292d0180240392e15e2c48c0070281680f8bd15e2c48c007045e240b014","0x381610a2f45789316246003822f160240395200e03010807019e280b014","0xb08517a2bc498b123001c1178c02c050e292d0180240395315e24c58918","0x428bd15e24c5891800e08bc68160287149680c01201c970af1262c48c007","0x5e8af1262c48c007045e380b01438a4b40600900e4b85789316246003816","0x5e8af1624600381ff1e0580a1c525a0300480725c2bc498b123001c0b085","0x5891800e07fc802202c050e292d0180240392e15e2c48c0070285980f809","0x3816f220880b01438a4b40600900e4b8578b123001c0a16603e0245e8af","0x5791800e717c901438a4b40600900e4b8578b123001c0a00917a2bc58918","0x5891800e0500f97815e2c48c00702de4c9680c01201cba0af23001ce2972","0xba0af162460038142fa5f0578b123001c0b7940287149680c01201cba0af","0x970af162460038140b407c0f8bd15e2c48c00703fe540a1c525a03004807","0x5891800e0502d01f03e2f4578b123001c0ff960440580a1c525a03004807","0x38140b407c0f8bd15e2c48c00703fe5c110160287149680c01201c970af","0xa05a03e2f4578b123001c117980440580a1c525a0300480725c2bc58918","0xa05a03e2f4578b123001c1179902c050e292d0180240398115e2c48c007","0x358090122f4578b123001c11f9a02c050e292d0180240398115e2c48c007","0xc82003e0880b01438a4b40600900e4b8578b123001c0a02703e07c0f85a","0xff9c38a4b40600900e61c578b123001c0a0bd15e2c48c007029e6c1081b","0x110160287149680c01201c970af162460038140b407c0f8bd15e2c48c007","0x3cf0160287149680c01201cca0b123001ce28270121680f8b123001c1179d","0xd10af23001c0b79f38a4b40600900e66c5891800e7140482116246003814","0x2d01f17a2bc5891800e08bd001438a4b40600900e6505791800e7140c809","0x2d01f17a2bc5891800e08bd08160287149680c01201c970af16246003814","0x480735a01c0602100e033d10160287149680c01201c970af16246003814","0x109b025424c8c00702de909680c01201cd791800e4b40c88523001ce2fa3","0xb02710a2f4578931624600381ff4a050e292d018024039b2126460039c5","0x5e8af1262c48c00703fe98110160287149680c01201c970af1262c48c007","0xb311800e053d382202c050e292d0180240392e15e24c5891800e05813885","0x381610a2f45789316246003822f507149680c01201cdd11800e4b40c819","0xd791800e4b40c82123001ce2fa902c050e292d0180240395315e24c58918","0x9680c01201cc38af162460038140122f4578b123001c0b7aa25a03004807","0xe292d0180240392e15e2c48c00702807c048bd15e2c48c007045eac0a1c5","0xe292d0180240392e15e2c48c00702807c048bd15e2c48c007045eb00b014","0xa1c525a0300480725c2bc5891800e0500f8bd15e2c48c00702deb40b014","0xb38af23001ce2faf25a030048073282bc5891800e050578b123001ce2fae","0x8c007045ec4048072a801c0602100e033d812d0180240397415e460039c5","0x1ec80b01438a4b40600900e4b8578b123001c0a0090122f4578b1"]} \ No newline at end of file diff --git a/crates/pathfinder/src/devnet/fixtures/system/udc_2.sierra b/crates/pathfinder/src/devnet/fixtures/system/udc_2.sierra new file mode 100644 index 0000000000..50d887f9da --- /dev/null +++ b/crates/pathfinder/src/devnet/fixtures/system/udc_2.sierra @@ -0,0 +1 @@ +{"abi":[{"type":"impl","name":"UniversalDeployerImpl","interface_name":"openzeppelin_utils::deployments::interface::UniversalDeployerABI"},{"type":"enum","name":"core::bool","variants":[{"name":"False","type":"()"},{"name":"True","type":"()"}]},{"type":"struct","name":"core::array::Span::","members":[{"name":"snapshot","type":"@core::array::Array::"}]},{"type":"interface","name":"openzeppelin_utils::deployments::interface::UniversalDeployerABI","items":[{"type":"function","name":"deploy_contract","inputs":[{"name":"class_hash","type":"core::starknet::class_hash::ClassHash"},{"name":"salt","type":"core::felt252"},{"name":"not_from_zero","type":"core::bool"},{"name":"calldata","type":"core::array::Span::"}],"outputs":[{"type":"core::starknet::contract_address::ContractAddress"}],"state_mutability":"external"},{"type":"function","name":"deployContract","inputs":[{"name":"classHash","type":"core::starknet::class_hash::ClassHash"},{"name":"salt","type":"core::felt252"},{"name":"notFromZero","type":"core::bool"},{"name":"calldata","type":"core::array::Span::"}],"outputs":[{"type":"core::starknet::contract_address::ContractAddress"}],"state_mutability":"external"}]},{"type":"event","name":"openzeppelin_presets::universal_deployer::UniversalDeployer::ContractDeployed","kind":"struct","members":[{"name":"address","type":"core::starknet::contract_address::ContractAddress","kind":"data"},{"name":"deployer","type":"core::starknet::contract_address::ContractAddress","kind":"data"},{"name":"not_from_zero","type":"core::bool","kind":"data"},{"name":"class_hash","type":"core::starknet::class_hash::ClassHash","kind":"data"},{"name":"calldata","type":"core::array::Span::","kind":"data"},{"name":"salt","type":"core::felt252","kind":"data"}]},{"type":"event","name":"openzeppelin_presets::universal_deployer::UniversalDeployer::Event","kind":"enum","variants":[{"name":"ContractDeployed","type":"openzeppelin_presets::universal_deployer::UniversalDeployer::ContractDeployed","kind":"nested"}]}],"contract_class_version":"0.1.0","entry_points_by_type":{"CONSTRUCTOR":[],"EXTERNAL":[{"function_idx":1,"selector":"0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d"},{"function_idx":0,"selector":"0x2730079d734ee55315f4f141eaed376bddd8c2133523d223a344c5604e0f7f8"}],"L1_HANDLER":[]},"sierra_program":["0x1","0x7","0x0","0x2","0xb","0x4","0x147","0xb9","0x3e","0x52616e6765436865636b","0x800000000000000100000000000000000000000000000000","0x456e756d","0x800000000000000700000000000000000000000000000001","0x0","0x1e7cc030b6a62e51219c7055ff773a8dff8fb71637d893064207dc67ba74304","0x4172726179","0x800000000000000300000000000000000000000000000001","0x1","0x19","0x537472756374","0x800000000000000f00000000000000000000000000000001","0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3","0x800000000000000300000000000000000000000000000003","0x2","0x3","0x16a4c8d7c05909052238a862d8cc3e7975bf05a07b3a69c6b28951083a6d672","0x5","0x74584e9f10ffb1a40aa5a3582e203f6758defc4a497d1a2d5a89f274a320e9","0x4","0x6","0x436f6e7374","0x800000000000000000000000000000000000000000000002","0x7533325f737562204f766572666c6f77","0x496e646578206f7574206f6620626f756e6473","0x4661696c656420746f20646573657269616c697a6520706172616d202331","0x4661696c656420746f20646573657269616c697a6520706172616d202332","0x4661696c656420746f20646573657269616c697a6520706172616d202333","0x4661696c656420746f20646573657269616c697a6520706172616d202334","0x4f7574206f6620676173","0x800000000000000300000000000000000000000000000004","0x104eb68e98232f2362ae8fd62c9465a5910d805fa88b305d1f7721b8727f04","0x11","0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d","0x436f6e747261637441646472657373","0x800000000000000700000000000000000000000000000000","0x800000000000000700000000000000000000000000000003","0x3288d594b9a45d15bb2fcb7903f06cdb06b27f0ba88186ec4cfaa98307cb972","0x436c61737348617368","0x536e617073686f74","0x800000000000000700000000000000000000000000000002","0x1baeba72e79e9db2587cf44fedb2f3700b2075a5e8e39a562584862c4b71f62","0x17","0x66656c74323532","0x800000000000000700000000000000000000000000000007","0x338d16334c0a706762ef0d355ecb050a48247cf99a25c012de083e3cf0ea3ec","0x14","0x15","0x16","0x18","0xabd7a88fd677970dc688769a74ab341a2e1e229d10e8d3b1aee50c9246944e","0x1a","0x426f78","0x23","0x25","0x75313238","0x26","0x1f","0x1597b831feeb60c71f259624b79cf66995ea4f7e383403583674ab9c33b9cec","0x20","0x753332","0x80000000000000070000000000000000000000000000000e","0x348a62b7a38c0673e61e888d83a3ac1bf334ee7361a8514593d3d9532ed8b39","0x1e","0x21","0x22","0x753634","0x800000000000000700000000000000000000000000000004","0x3808c701a5d13e100ab11b6c02f91f752ecae7e420d21b56c90ec0a475cc7e5","0x24","0x3342418ef16b3e2799b906b1e4e89dbb9b111332dd44f72458ce44f9895b508","0x800000000000000700000000000000000000000000000006","0x7d4d99e9ed8d285b5c61b493cedb63976bc3d9da867933d829f49ce838b5e7","0x1d","0x1c","0x27","0x506564657273656e","0x556e696e697469616c697a6564","0x800000000000000200000000000000000000000000000001","0x29","0x53797374656d","0x2c","0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473","0x29d7d57c04a880978e7b3689f6218e507f3be17588744b58dc17762447ad0e7","0x30","0x1038fccf15d21489c6c5fde4ab0b72cb01c02bf8242be2b91673ec10fe4465f","0x33","0x33a29af9d9e7616713f5d76fbf2bc710ab5b2784a16ba7d30515dd65ef5143a","0x34","0x4275696c74696e436f737473","0x9931c641b913035ae674b400b61a51476d506bbe8bba2ff8a6272790aba9e6","0x32","0x1d49f7a4b277bf7b55a2664ce8cef5d6922b5ffb806b89644b9e0cdbbcac378","0x38","0x13fdd7105045794a99550ae1c4ac13faa62610dfab62c16422bfcf5803baa6e","0x39","0x4e6f6e5a65726f","0x11c6d8087e00642489f92d2821ad6ebd6532ad1a3b6d12833da6d6810391511","0x4761734275696c74696e","0xa5","0x7265766f6b655f61705f747261636b696e67","0x77697468647261775f676173","0x6272616e63685f616c69676e","0x72656465706f7369745f676173","0x7374727563745f6465636f6e737472756374","0x656e61626c655f61705f747261636b696e67","0x73746f72655f74656d70","0x3d","0x61727261795f736e617073686f745f706f705f66726f6e74","0x756e626f78","0x72656e616d65","0x656e756d5f696e6974","0x3c","0x6a756d70","0x7374727563745f636f6e737472756374","0x656e756d5f6d61746368","0x64697361626c655f61705f747261636b696e67","0x636c6173735f686173685f7472795f66726f6d5f66656c74323532","0x66656c743235325f69735f7a65726f","0x64726f70","0x3b","0x66756e6374696f6e5f63616c6c","0x3a","0x37","0x6765745f6275696c74696e5f636f737473","0x36","0x77697468647261775f6761735f616c6c","0x626f6f6c5f6e6f745f696d706c","0x35","0x61727261795f6e6577","0x636f6e74726163745f616464726573735f746f5f66656c74323532","0x61727261795f617070656e64","0x736e617073686f745f74616b65","0x7","0x8","0x9","0x31","0x647570","0x7533325f7472795f66726f6d5f66656c74323532","0x636f6e73745f61735f696d6d656469617465","0x2f","0x61727261795f736c696365","0x61727261795f6c656e","0x7533325f6f766572666c6f77696e675f737562","0xa","0xb","0x2e","0x616c6c6f635f6c6f63616c","0x66696e616c697a655f6c6f63616c73","0x6765745f657865637574696f6e5f696e666f5f76325f73797363616c6c","0x28","0x706564657273656e","0x73746f72655f6c6f63616c","0x6465706c6f795f73797363616c6c","0x1b","0x13","0xc","0x12","0x656d69745f6576656e745f73797363616c6c","0x2d","0x2b","0x2a","0x10","0xf","0xe","0xd","0x636c6173735f686173685f746f5f66656c74323532","0x7533325f746f5f66656c74323532","0x3c8","0xffffffffffffffff","0xee","0xdf","0xd9","0xcd","0xc0","0x44","0xb3","0xa3","0x3f","0x40","0x41","0x63","0x42","0x43","0x45","0x46","0x47","0x48","0x49","0x94","0x4a","0x4b","0x4c","0x4d","0x4e","0x4f","0x50","0x51","0x52","0x53","0x54","0x8b","0x55","0x56","0x57","0x58","0x59","0x5a","0x5b","0x5c","0x5d","0x5e","0x5f","0x60","0x61","0x62","0x64","0x65","0x66","0x67","0x68","0x69","0x6a","0x6b","0x6c","0x6d","0x6e","0x6f","0x70","0x71","0x72","0x73","0xe6","0x74","0x75","0x76","0x77","0x78","0x79","0x1e7","0x10b","0x112","0x1d8","0x1d2","0x1c6","0x1b9","0x136","0x13d","0x1ac","0x19c","0x15c","0x18d","0x184","0x1df","0x1f9","0x1fe","0x241","0x238","0x230","0x226","0x21f","0x2e9","0x271","0x27b","0x2d4","0x7a","0x7b","0x7c","0x2c1","0x7d","0x7e","0x2b8","0x7f","0x80","0x81","0x2ca","0x82","0x83","0x84","0x85","0x86","0x87","0x88","0x89","0x8a","0x8c","0x8d","0x8e","0x8f","0x90","0x91","0x92","0x35c","0x93","0x362","0x95","0x96","0x97","0x98","0x99","0x9a","0x396","0x9b","0x9c","0x9d","0x9e","0x9f","0xa0","0x3be","0x3b4","0xa1","0xa2","0xa4","0xf9","0x1f2","0x24b","0x253","0x2fd","0x305","0x30d","0x315","0x31d","0x325","0x32d","0x335","0x39f","0x21f2","0x440a0c05840120f048340a0e058340a0c058281208038180a04018080200","0x3c14090b858120f050242e160a8242809098141c03078242409068141c0b","0x5c2c1b0782812170b0681e0a0485c2c190782812170b0601e0a0485c2c05","0xc2009078241e09068143e0b0f03c14090b8583a0f050242e160e03c1409","0x105024138401210048980a250189046220782812170b0541221048800a0e","0xc1409190246209180245e09178245c051682c482c1582454051482c1e09","0xec0a29058e81204140e41208038907037048106a36048106a34048cc0a29","0x2480092082414090502414091902480091782414091f8147c0b120f47809","0x118120a0491c0a44058bc1246049181245029101624218c81242049081232","0x138a00927938044d260240835050245e091782496092502492052402c8009","0x94060a048106a050790812170b14c1e0a0485c2c520493c9c02288bc124f","0x141c0317824ae09068144a0b2b014180b190241a051482c20092a824a805","0x340a25058401232049740a2501854125c0496c0a0e01890b415049641258","0x1900463080241409310144a030502408610a824c0092f8141c032f0246409","0x1b81409049b4d809049ac0a09049ac0a6a190241269029a00a67029980a65","0x40120939814e47104824d62b04824d605079c4120f380281209378281209","0x1dc6409049ac6409049cc1409049ac0a76029d4e209049d0120f388241e70","0x24e80f08024f405078c0120f381e412093c0c01209358241e300483ce005","0x1e06009049e06409049e0aa09049e05609049e0bc09049d0c009049a4f609","0x24d65204824d65004824d609079f0120f3804020093d0c412093c0281209","0x2412740a040127a18824126b2b824127302a000a7f3f024126b029f4f809","0x3c12093c03c120942828120942015065704824f05904824d20a048250481","0x1e90c10049e82a10049e82009049e02410049e80a0f3e0241e702e0241273","0xac1209450241e890483ce08904824d60507a24120f3822020093d21c2009","0x240140904a3c140904a388409049ac840904a291a0904a300a8b448241274","0x3ce09108024f47b04824d605079ec120f381801209398141e5e0483ce005","0x1cc2409049cd260904a30120f2f0241e7049040127a2102412780483cf609","0x25c1209358152c054a94012094a0bc12094a14812094a0541209358541209","0x24126b18024128a17824127825824127825024127826024126926024126e","0x14012094c8c81209450c4120945015302f04825140a04825143004824e82f","0x24126b4d82412784d82412850283d3609079c06809049cc5e0904a640a9a","0x24e89d08024f45204825320f04824d63404824d69c04825189b04824e89b","0x1e02a09049a50209049ac0a0f408241e702c824127302a7c4209049a53c09","0x2518a30482518a204824f0a104824f0a004824f00907a04120f380481209","0x1a4680904a29220904a31240904a313a0904a314c0904a314a0904a314809","0x24de05538c4120937a1c1209462201209460c01209378bc1209378d01209","0x1ac0a0f4f0241e701082412730a024126943024127453040127a02aa06409","0x2181209358141e860483ce01404824e60907a78120f380d012093c2781209","0x21d0c0f55854240f5503c1e09078240a05550240a0502aa4120f430241e70","0x2a812050901522095502428090a0151009550242a09080140aaa048141e05","0x2793a9207aa81e9104a1c0a8804aa8128804a180a1204aa81212048540a05","0x2522055202554094e825100552825540944024200502aa81205078154c09","0x2a8129204a740a9e04aa812a504a180a2104aa812a304a480aa304aa812a4","0x251009080140aaa048141e05028281205528145e09550244209530153809","0x153c09550246009430145609550246209518146209550240aa4028c012aa","0x141409560c812aa078bc1221028bc12aa048ac12a602a7012aa04a98129d","0xd012aa048d01286028d012aa04a78121002815540902a780a05550240a0f","0x10012aa048d012100281554090283c0a4a04ab4969b07aa81e320903d3805","0x255c3c1d03d540f4e0250e05200255409200250c054d82554094d8242a05","0xe8129d028d812aa048f012880290812aa0490012100281554090283c0a41","0x3d540f1d0250e051b02554091b0245e05210255409210250c051d0255409","0x25c12aa048dc12880293012aa0490812100281554090283c0a3904abc6e46","0x1424055082554094b82522055102554092302460052802554091b0252205","0x28812aa04a8812310293012aa04930128602a8412aa04a84122f028155409","0x15480550025540926024200502aa8120507814a40936015540f508245605","0x2554094682414052a8255409500250c05468255409498246405498255409","0x25540926024200502aa81252048d00a05550240a0f02815600902a940a89","0x2414052a82554092e0250c052c82554092b82536052b825540902a900a5c","0x25449b0792c0aa204aa812a2048c40a9b04aa8129b048540a8904aa81259","0x2a81255048400a05550240a0f0297812b13e025540f3f02494053f2041eaa","0x1c412aa079e4123a0298012aa049801286029e4f60f55024f80920014c009","0x2180ab304aa8127b048500a0004aa81260048400a05550240a0f029b012b2","0x153c0502aa81205078156e095b2d5680f5503d6609438140009550240009","0x246c0502aa81271049080a05550256a09208140aaa04ad0123c028155409","0x157009550240009080140aaa0492c1237028155409280248c0502aa81289","0x2502090a8140a09550240a094b8157209550256009260156009550240a39","0x2e412aa04ae412a20284012aa04840125002ae012aa04ae0128602a0412aa","0x25540900024200502aa812b7048f00a05550240a0f02ae420b8408142409","0x4140055d82554095d824a4055d02554095d0250c055d825540902a840aba","0x24200502aa812054f0140aaa048141e05602fc1ebe5eaf01eaa07aed7481","0x2554095e0242a0561825540902a340ac204aa8128904a4c0ac104aa812bd","0x1540a1004aa81210049400a0504aa8120504a5c0ac104aa812c104a180abc","0x24e20918815840955025840905014a00955024a009178149609550249609","0x320125c02b218ec662b1024aa049c5845025b0c200560af11089029c412aa","0x2554090295c0acc04aa812c5048400a05550240a0f02b2c12ca64825540f","0x1f00ad004aa812cf049f80a05550259c09408159ece07aa812c9049640acd","0x34c123002815540969024c00569b481eaa04b44125e02b4412aa04b419a0f","0x255409630252e056b02554096a824f2056a82554096a024f6056a0255409","0x2880ac704aa812c7049400acc04aa812cc04a180ac404aa812c4048540ac6","0x35c12aa04b1412100281554090283c0ad663b3188c609025ac0955025ac09","0x250c05620255409620242a05630255409630252e056c0255409658249805","0x31daec46304812d804aa812d804a880ac704aa812c7049400ad704aa812d7","0x155409448246c0502aa81271049080a05550240a9e0281554090283c0ad8","0x2a81205388156c09550258009080140aaa0492c1237028155409280248c05","0x157e09550257e090a8140a09550240a094b815b40955025b20926015b209","0x2fc0a1204b6812aa04b6812a20284012aa04840125002ad812aa04ad81286","0x24f609210140aaa049b0126c02815540902a780a05550240a0f02b6820b6","0x1801210028155409258246e0502aa81250049180a055502512091b0140aaa","0x1412aa04814129702b7412aa04b70124c02b7012aa0481400056d8255409","0x25440508025540908024a0056d82554096d8250c05408255409408242a05","0x246e0502aa812054f0140aaa048141e056e841b6810284812dd04aa812dd","0x15bc0955024aa09080140aaa049401246028155409448246c0502aa8124b","0x378128602a0412aa04a0412150281412aa04814129702b7c12aa04978124c","0x37c20de4081424096f82554096f825440508025540908024a0056f0255409","0x1554091b0248c0502aa8124b048dc0a055502472091e0140aaa048141e05","0x14129702b8812aa04b84124c02b8412aa048156605700255409210242005","0x25540908024a005700255409700250c054d82554094d8242a05028255409","0x2482091e0140aaa048141e0571041c09b0284812e204aa812e204a880a10","0x24980572025540902ad00ae304aa81240048400a055502496091b8140aaa","0x2a812e304a180a9b04aa8129b048540a0504aa8120504a5c0ae504aa812e4","0x3c0ae50838d360509025ca0955025ca0951014200955024200928015c609","0x39c12aa04928121502b9812aa048d012100281554094e024780502aa81205","0x140aaa048153c0502aa81205078140ae9048154a05740255409730250c05","0x2a81212048540aea04aa8129e048400a055502538091e0140aaa04828126c","0x25c0aec04aa812eb049300aeb04aa812055a815d00955025d40943015ce09","0x24200928015d00955025d00943015ce0955025ce090a8140a09550240a09","0x24840502aa8120507815d8107439c0a1204bb012aa04bb012a20284012aa","0x3bc12aa04bb8124c02bb812aa04814e20576825540943824200502aa81214","0x24a005768255409768250c05430255409430242a05028255409028252e05","0x140aaa048140a0577841da860284812ef04aa812ef04a880a1004aa81210","0x22012aa0485412100281554090283c0a874303de0150903d540f078241e09","0x2510094301424095502424090a8140aaa0481424054882554090a0242805","0x2a81288048400a05550240a0f02a9812f14ea481eaa07a44128702a2012aa","0x144209550254609490154609550254809488154809550253a09440154a09","0x240aa5028bc12aa0488412a602a7012aa04a48129d02a7812aa04a941286","0xc412a3028c412aa04815480518025540944024200502aa81205078140af2","0x255409158254c054e0255409530253a054f0255409180250c05158255409","0x24200502aa812054f0140aaa048141e0505025e63204aa81e2f048840a2f","0x1494097a12d360f5503c641207a700a3404aa8123404a180a3404aa8129e","0x2a8124004a180a9b04aa8129b048540a4004aa81234048400a05550240a0f","0x25540920024200502aa812050781482097a8f0740f5503d3809438148009","0xbc0a4204aa8124204a180a3a04aa8123a04a740a3604aa8123c04a200a42","0x24200502aa812050781472097b0dc8c0f5503c7409438146c09550246c09","0x2a81246048c00a5004aa8123604a440a9704aa8123704a200a4c04aa81242","0x250c05508255409508245e0502aa81205090154209550252e09488154409","0x240a0f0294812f702aa81ea1048ac0aa204aa812a2048c40a4c04aa8124c","0x2180a8d04aa81293048c80a9304aa81205520154009550249809080140aaa","0x140aaa048141e0502be01205528151209550251a0905014aa09550254009","0x2a8125704a6c0a5704aa8120552014b809550249809080140aaa049481234","0x1536095502536090a815120955024b20905014aa0955024b80943014b209","0x25f27c04aa81e7e049280a7e4083d54095126c1e4b02a8812aa04a881231","0x250c053c9ec1eaa049f012400298012aa0495412100281554090283c0a5e","0x24c009080140aaa048141e0536025f47104aa81e79048e80a6004aa81260","0x2d01eaa07acc12870280012aa04800128602acc12aa049ec12140280012aa","0x2d412410281554095a024780502aa812054f0140aaa048141e055b825f6b5","0x246e0502aa81250049180a055502512091b0140aaa049c41242028155409","0x2e412aa04ac0124c02ac012aa0481472055c025540900024200502aa8124b","0x24a0055c02554095c0250c05408255409408242a05028255409028252e05","0x140aaa048141e055c84170810284812b904aa812b904a880a1004aa81210","0x2a812ba04a180abb04aa81205508157409550240009080140aaa04adc123c","0x3c0ac05f83df8bd5e03d540f5dae90210500157609550257609290157409","0x158409550251209498158209550257a09080140aaa048153c0502aa81205","0x240a094b81582095502582094301578095502578090a8158609550240a8d","0x14012aa04940122f0292c12aa0492c12550284012aa0484012500281412aa","0x308a04b618400ac15e2211205388255409388246205610255409610241405","0x140aaa048141e0565825fac904aa81ec8049700ac863b198ac4092a81271","0x338128102b3d9c0f5502592092c8159a09550240a5702b3012aa04b141210","0x3d540968824bc05688255409683341e7c02b4012aa04b3c127e028155409","0x1e40ad504aa812d4049ec0ad404aa812d3048c00a0555025a40930015a6d2","0x2598094301588095502588090a8158c09550258c094b815ac0955025aa09","0x15acc7663118c1204b5812aa04b5812a202b1c12aa04b1c125002b3012aa","0x2a812c604a5c0ad804aa812cb049300ad704aa812c5048400a05550240a0f","0x158e09550258e0928015ae0955025ae094301588095502588090a8158c09","0x140aaa048153c0502aa8120507815b0c76bb118c1204b6012aa04b6012a2","0x155409258246e0502aa81250049180a055502512091b0140aaa049c41242","0x14129702b6812aa04b64124c02b6412aa04814e2055b0255409600242005","0x25540908024a0055b02554095b0250c055f82554095f8242a05028255409","0x2a812054f0140aaa048141e056d0416cbf0284812da04aa812da04a880a10","0x24a009230140aaa04a2412360281554093d824840502aa8126c049b00a05","0x2498056e0255409028000adb04aa81260048400a055502496091b8140aaa","0x2a812db04a180a8104aa81281048540a0504aa8120504a5c0add04aa812dc","0x3c0add0836d020509025ba0955025ba0951014200955024200928015b609","0x248c0502aa81289048d80a055502496091b8140aaa048153c0502aa81205","0x255409028252e056f82554092f02498056f02554092a824200502aa81250","0x2880a1004aa81210049400ade04aa812de04a180a8104aa81281048540a05","0x140aaa048e4123c0281554090283c0adf08379020509025be0955025be09","0x25540902acc0ae004aa81242048400a05550246c09230140aaa0492c1237","0x2180a9b04aa8129b048540a0504aa8120504a5c0ae204aa812e1049300ae1","0x381360509025c40955025c40951014200955024200928015c00955025c009","0x248009080140aaa0492c123702815540920824780502aa8120507815c410","0x140a09550240a094b815ca0955025c80926015c809550240ab402b8c12aa","0x39412a20284012aa04840125002b8c12aa04b8c128602a6c12aa04a6c1215","0x24200502aa8129c048f00a05550240a0f02b9420e34d8142409728255409","0x15fc0902a940ae804aa812e604a180ae704aa8124a048540ae604aa81234","0x140aaa04a70123c02815540905024d80502aa812054f0140aaa048141e05","0x240ab502ba012aa04ba8128602b9c12aa04848121502ba812aa04a781210","0x39c12aa04b9c12150281412aa04814129702bb012aa04bac124c02bac12aa","0x14240976025540976025440508025540908024a005740255409740250c05","0x1c40aed04aa81287048400a05550242809210140aaa048141e0576041d0e7","0x2a81286048540a0504aa8120504a5c0aef04aa812ee049300aee04aa81205","0x25de0955025de0951014200955024200928015da0955025da09430150c09","0x1424097f850200f5503c1e09438141e095502412090a015de1076a180a12","0x2a8121504ae00a8604aa8121004a740a1504aa8121404adc0a05550240a0f","0x2a8128804ac00a8804aa81205520140aaa048141e0502c001205528150e09","0x2490c0f550250c095c8150e095502522095c0150c095502424094e8152209","0x2200a05550240a0f02a94130153025540f4382574054e8255409490246005","0x28c0a0f5d8154609550254609178154609550254809488154809550254c09","0x25540902af00a05550253a09210140aaa048141e054e026049e1083d540f","0xbc12aa048bc12bf028c53c0f550253c095e814608607aa8128604ae40a2f","0x2a8128604ae40a05550240a0f028281303190ac1eaa078c45e30108518005","0x2554094d8257e0525a781eaa04a7812bd02a6c12aa048d012c1028d10c0f","0x141e051e0e81f04201281eaa0792d362b083080a3204aa8123204a740a9b","0x24600502aa81205078146c0982908820f5503c809e4312828c0028155409","0x246e3907b100a3904aa81242048c00a3704aa8124604b0c0a4604aa81232","0x25c12aa04a5c12c60290412aa04904121502a5c12aa0493012c50293012aa","0x25900528025540902b1c0a055502464091e0140aaa048141e054b9041e09","0x3c0aa21b03c12a204aa812a204b180a3604aa81236048540aa204aa81250","0x3240a05550250c091e0140aaa048c8123c0281554091e025920502aa81205","0x2554091d0242a0529025540950825900550825540902b2c0a05550253c09","0x140aaa04a7812c90281554090283c0a521d03c125204aa8125204b180a3a","0x2a8120a048540a9304aa812a004b200aa004aa81205638140aaa04a18123c","0x15540943024780502aa8120507815260a078252609550252609630141409","0x258a054482554092aa741ec40295412aa04a3412cc02a3412aa048154805","0x3c0a5c4e03c125c04aa8125c04b180a9c04aa8129c048540a5c04aa81289","0x3300a5704aa81205520140aaa04a18123c02815540952824d80502aa81205","0x141215029f812aa04a0412c502a0412aa049653a0f62014b20955024ae09","0x240acd0281412aa04814ae053f0141e093f02554093f0258c05028255409","0x4012aa048159c05078255409048141e7c0282412aa04824122f0282412aa","0x24412aa04815a2050a024121404aa8121404b400a1404aa8120f0803d9e05","0x140aaa048153c0502aa812056a0154a09550240ad302a7412aa04815a405","0x2a812a404a180a05550240a0f028bd389e0841842a352041540f080241ed5","0x1462095502442096b81442095502442096b0146009550254809080154809","0x3680a055502464096c8140aaa048ac12b602a6c680a190ac24aa048c412d8","0x12d0c0f550250c096d8140aaa04814240502aa8129b049180a05550246809","0x25ba0505025540905025b805180255409180250c0551825540951824a005","0x2a81230048400a05550249409360140aaa048141e05200260e4a04aa81e4b","0x1042a0f550242a096f0154c09550241e094b8147809550247409430147409","0x15540920024d80502aa81205078140b08048154a05208255409208245e05","0x3780a4604aa81236049f80a360503d540905025be05210255409180242005","0x14780955024840943014983907aa812372303c20e0028dc2a0f550242a09","0x2526054ba181eaa04a1812db0290412aa04930122f02a9812aa048e41297","0x140120a02a850e0f550250e0971015441207aa8121204b840a5004aa81297","0x220a4145503ca0a120a89463c0ab900aa604aa812a65283dc605280255409","0x140aaa04a80124202815540902a780a05550240a0f029551a93084254092","0x2a812052b814b809550240a5702a2412aa0494812100294812aa049481286","0x490c0a2c855cc052ca481eaa04a4812df02a4812aa04a493a0f72814ae09","0x1f012ea02978f80f55024fc0974014fc09550250209738150209550242a87","0x2180a05550240a0f0298012aa0497812ec0297812aa0497812eb028155409","0x2a81279048bc0a7904aa8120576814f609550251209080151209550251209","0x1ec12aa049ec12860281412aa048141215029c412aa049e4b80f3e014f209","0x3e14052b82554092b825de0538825540938825de0530025540930025dc05","0x140aaa04814240559800d81055024ae71301ec0a12858151009550251091","0x261c055b825540900024200502aa81205078156a0986ad012aa07acc130c","0x2e8126002aed740f5502570092f0140aaa04ae4126c02ae560b8082a812b4","0x2fc12aa04aec12300281554095e024c0055eaf01eaa04ac0125e028155409","0x3041eaa07b017e885b8521e055b82554095b8250c056002554095e8246005","0x158209550258209430140aaa048153c0502aa81205078158ac46184220c2","0x242a05640255409638262405638255409490501f1102b1812aa04b041210","0x2a812c2049400aa604aa812a604a5c0ac604aa812c604a180a6c04aa8126c","0x24812da0281554090283c0ac8612998c6c090259009550259009898158409","0x159209550258609080158609550258609430140aaa048501281028155409","0x240aa502b3412aa04b1412ef02b3012aa04b10125002b2c12aa04b241286","0x240009080140aaa04850128102815540949025b40502aa81205078140b14","0x32c12aa04b381286028155409678262c056833c1eaa04ad4131502b3812aa","0x2a81205670140aaa048153c0566825540968025de0566025540944024a005","0x1b012aa049b0121502b4c12aa04b48131702b4812aa04b35a20f67815a209","0x26260566025540966024a005530255409530252e05658255409658250c05","0x24840502aa812054f0140aaa048141e0569b314ccb3604812d304aa812d3","0xdc0a055502414096d0140aaa0485012810281554090a8248c0502aa81287","0x140aaa04a74131902815540948826300502aa81286048d80a05550242409","0x155aa0f67815aa09550240ace02b5012aa04a4c121002a4c12aa04a4c1286","0x2554096a0250c05028255409028242a056b82554096b0262e056b0255409","0x4812d704aa812d704c4c0a8d04aa8128d049400aa604aa812a604a5c0ad4","0x4680a05550242a09230140aaa04a1c12420281554090283c0ad746a99a805","0x140aaa04a181236028155409090246e0502aa8121404a040a05550254a09","0x2a8129e048400a9e04aa8129e04a180a05550253a098c8140aaa04a441318","0x15b40955025b2098b815b209550245eb607b3c0ab604aa8120567015b009","0x27012500283c12aa0483c129702b6012aa04b6012860281412aa048141215","0x140a09550240a5702b69380f6c01424096d02554096d02626054e0255409","0x240ace0283c12aa048240a0f3e0141209550241209178141209550240b1b","0x240a570285012090a02554090a025a0050a0255409078401ecf0284012aa","0x3c12aa048240a0f3e0141209550241209178141209550240b1c0281412aa","0x5012090a02554090a025a0050a0255409078401ecf0284012aa048159c05","0x240a0f3e0141209550241209178141209550240b1d0281412aa04814ae05","0x2554090a025a0050a0255409078401ecf0284012aa048159c05078255409","0x141209550241209178141209550240aca0281412aa04814ae050a0241214","0x25a0050a0255409078401ecf0284012aa048159c05078255409048141e7c","0x241209178141209550240b1e0281412aa04814ae050a024121404aa81214","0x255409078401ecf0284012aa048159c05078255409048141e7c0282412aa","0x141209550240b1f0281412aa04814ae050a024121404aa8121404b400a14","0x401ecf0284012aa048159c05078255409048141e7c0282412aa04824122f","0x240b200281412aa04814ae050a024121404aa8121404b400a1404aa8120f","0x4012aa048159c05078255409048141e7c0282412aa04824122f0282412aa","0x140aaa048153c050a024121404aa8121404b400a1404aa8120f0803d9e05","0x2a8128604b680a9248a210e860a85554090902644050903c1eaa0483c1321","0x252409230140aaa04a441242028155409440246e0502aa81287048d80a05","0x29412aa04a98280f3e0154c09550253a093f0153a09550242a09918140aaa","0x2546096d014602f4e27842a30aaa812a404c880aa40783d5409078264205","0xc0124602815540917824840502aa8129c048dc0a05550253c091b0140aaa","0x25540915a941e7c028ac12aa048c4127e028c412aa048841323028155409","0xd012da028e8804a25a6c681555024140991014140f07aa8120f04c840a32","0x248c0502aa81240049080a055502494091b8140aaa04a6c12da028155409","0x146409550246409778140aaa0481424051e025540925826480502aa8123a","0x24121002815540920824d80502aa812050781484099290412aa078f012dd","0xe412aa04918122f028dc12aa048d812860291812aa048164c051b0255409","0x13012aa04824121002815540921024d80502aa81205078140b27048154a05","0x240a9e028e412aa04a5c122f028dc12aa04930128602a5c12aa048157c05","0x5554095102644055103c1eaa0483c13210294012aa048e4640f3e0140aaa","0x155409500246c0502aa8125204b680a055502542096d014aa8d49a80a4a1","0x251209948151209550252609940140aaa049541246028155409468248405","0x2a8125904c880a590783d54090782642052b82554092e1401e7c0297012aa","0x2a8127c048d80a0555024fc096d0140aaa04a0412da029ecc05e3e1f90215","0x2654053c9801eaa0498012e20281554093d8248c0502aa8125e048dc0a05","0x2a8120004cac0a0004aa8126c04b040a6c04aa81271048500a7104aa81279","0x2d412aa04980132a02ad012aa04accae0f3e0156609550256609178156609","0x25de055a82554095a82462051b82554091b8250c05028255409028242a05","0x4b972095503d60099681560b85b84154095a2d46e050a4b00ab404aa812b4","0x1b00abd5e03d54095c8265e055d82554095c024200502aa81205078157409","0x3680a05550257e096d01588c36130580bf0aaa8120f04c880a05550257a09","0x140aaa04b0c1242028155409610246e0502aa812c1048d80a05550258009","0x40213002b1c12aa04815480563025540962af01e7c02b1412aa04b101291","0x257609430156e09550256e090a8159209550259009988159009550258ec6","0x242009300140aaa048141e0564aed6e1004b2412aa04b24133202aec12aa","0x540acc04aa812ba04cd00acb04aa812b8048400a05550241e09998140aaa","0x33196b7080259809550259809990159609550259609430156e09550256e09","0x140aaa048141e05430541f35090501eaa078240a0f048140aaa048153c05","0x21c12860285012aa04850121502a2012aa0483c121402a1c12aa048481210","0x250e09080140aaa048141e054e8266c924883d540f440250e05438255409","0x29012aa04a90122f02a9012aa04a94129102a9412aa04a48128802a9812aa","0x2180a1404aa81214048540a2104aa81291048c00aa304aa812a40803cf805","0x2982814960154609550254609778144209550244209188154c09550254c09","0x140aaa04a74123c0281554090283c0a2f4e278200917a713c10550254621","0xac1338028ac12aa048c4200f9b8146209550240aa4028c012aa04a1c1210","0x255409190256405180255409180250c050a02554090a0242a05190255409","0x140aaa04840126002815540907824840502aa812050781464300a0401232","0x242a090a81536095502468099c8146809550240a710282812aa04a181210","0x14024a54d8282a1004a6c12aa04a6c12b20282812aa0482812860285412aa","0x148d80528048645236014a01202850200f04814f85236014a01219148d805","0xc4ae52281b00a889e05412059d8240a7b0283c640507ce82810078240a7c","0x4fc2a0902cf82a0902cf50e860a8482810078240a8129140d805090c8600a","0x401e0f1a1b00a12a20541205a18541205a10541205a08541205a00541205","0x518200f048150c6c028401e323601429450a0401e0902a78d805"]} \ No newline at end of file diff --git a/crates/pathfinder/src/devnet/utils.rs b/crates/pathfinder/src/devnet/utils.rs new file mode 100644 index 0000000000..8febf27a09 --- /dev/null +++ b/crates/pathfinder/src/devnet/utils.rs @@ -0,0 +1,86 @@ +use anyhow::Context as _; +use num_bigint::BigUint; +use pathfinder_common::state_update::StateUpdateData; +use pathfinder_common::{ContractAddress, StorageAddress, StorageValue}; +use pathfinder_crypto::Felt; +use pathfinder_executor::IntoFelt as _; + +#[cfg(test)] +pub fn compute_public_key(private_key: Felt) -> anyhow::Result { + let public_key = + pathfinder_crypto::signature::get_pk(private_key).context("Deriving public key")?; + Ok(pathfinder_common::PublicKey(public_key)) +} + +/// Converts Cairo short string to [`Felt`]. +pub fn cairo_short_string_to_felt(str: &str) -> anyhow::Result { + anyhow::ensure!( + str.is_ascii(), + "Cairo short strings must be ASCII, but got: {str}" + ); + anyhow::ensure!( + str.len() <= 31, + "Cairo short strings must be at most 31 characters long, but got a string of length {}: \ + {str}", + str.len() + ); + + let ascii_bytes = str.as_bytes(); + + let mut buffer = [0u8; 32]; + buffer[(32 - ascii_bytes.len())..].copy_from_slice(ascii_bytes); + + Ok(Felt::from_be_bytes(buffer).expect("not to overflow")) +} + +pub fn split_biguint(biguint: BigUint) -> (Felt, Felt) { + let high: BigUint = &biguint >> 128; + let high = Felt::from_u128(high.try_into().expect("no overflow")); + let low_mask = (BigUint::from(1_u8) << 128) - 1_u8; + let low: BigUint = &biguint & &low_mask; + let low = Felt::from_u128(low.try_into().expect("no overflow")); + (high, low) +} + +pub fn join_felts(high: Felt, low: Felt) -> BigUint { + let high: u128 = high.try_into().expect("no overflow"); + let high = BigUint::from(high); + let low: u128 = low.try_into().expect("no overflow"); + let low = BigUint::from(low); + + (high << 128) + low +} + +pub fn get_storage_at( + state_update: &StateUpdateData, + contract_address: ContractAddress, + storage_address: starknet_api::state::StorageKey, +) -> Felt { + state_update + .contract_updates + .get(&contract_address) + .and_then(|update| { + update + .storage + .get(&StorageAddress(storage_address.into_felt())) + }) + .map(|storage_value| storage_value.0) + .unwrap_or_default() +} + +pub fn set_storage_at( + state_update: &mut StateUpdateData, + contract_address: ContractAddress, + storage_address: starknet_api::state::StorageKey, + value: Felt, +) -> anyhow::Result<()> { + let contract_update = state_update + .contract_updates + .get_mut(&contract_address) + .context("Contract not found in state update")?; + contract_update.storage.insert( + StorageAddress(storage_address.into_felt()), + StorageValue(value), + ); + Ok(()) +} diff --git a/crates/pathfinder/src/lib.rs b/crates/pathfinder/src/lib.rs index c5072c9e45..7d0b541d37 100644 --- a/crates/pathfinder/src/lib.rs +++ b/crates/pathfinder/src/lib.rs @@ -1,9 +1,53 @@ #![deny(rust_2018_idioms)] pub mod config; +#[cfg(feature = "p2p")] pub mod consensus; +#[cfg(feature = "p2p")] +pub mod devnet; pub mod monitoring; pub mod p2p_network; pub mod state; pub mod sync; -pub mod validator; +pub enum SyncMessageToConsensus { + /// Ask consensus for the finalized and **decided upon** block with given + /// number. The only difference from a committed block is that the state + /// tries are not updated yet, so the state commitment is not computed + /// and hence the block hash cannot be computed yet. + GetConsensusFinalizedBlock { + number: pathfinder_common::BlockNumber, + reply: ConsensusFinalizedBlockReply, + }, + /// Notify consensus that a block has been committed to storage. This can be + /// either a block that was downloaded from the feeder gateway or a block + /// that was produced locally by the consensus engine. + ConfirmBlockCommitted { + number: pathfinder_common::BlockNumber, + }, + #[cfg(feature = "p2p")] + ValidateBlock { + // TODO: Stubbed for now, as an example. When used by P2P sync it should contain the block + // commit certificate. Also, since this is never sent, the result is not used. In the + // future, the result is used to update peer scoring and is also updating the tip of the + // chain state for sync. + block: std::sync::Arc, + reply: ValidateBlockReply, + }, +} + +pub type ConsensusFinalizedBlockReply = + tokio::sync::oneshot::Sender>>; + +#[cfg(feature = "p2p")] +pub type ValidateBlockReply = tokio::sync::oneshot::Sender; + +/// Various channels used to communicate with the consensus engine. +#[derive(Clone)] +pub struct ConsensusChannels { + /// Watcher for the latest + /// [pathfinder_common::consensus_info::ConsensusInfo]. + pub consensus_info_watch: + tokio::sync::watch::Receiver, + /// Channel for the sync task to send requests to consensus. + pub sync_to_consensus_tx: tokio::sync::mpsc::Sender, +} diff --git a/crates/pathfinder/src/monitoring.rs b/crates/pathfinder/src/monitoring.rs index cf9e0dc75e..c64b972fb9 100644 --- a/crates/pathfinder/src/monitoring.rs +++ b/crates/pathfinder/src/monitoring.rs @@ -229,17 +229,15 @@ mod tests { #[tokio::test] async fn metrics() { - use pathfinder_common::test_utils::metrics::ScopedRecorderGuard; - let recorder = PrometheusBuilder::new().build_recorder(); let handle = recorder.handle(); // Automatically deregister the recorder - let _guard = ScopedRecorderGuard::new(recorder); + let _guard = metrics::set_default_local_recorder(&recorder); // We don't care about the recorder being a singleton as the counter name here // does not interfere with any other "real" counter registered in // pathfinder or other tests - let counter = metrics::register_counter!("x"); + let counter = metrics::counter!("x"); counter.increment(123); let readiness = Arc::new(AtomicBool::new(false)); diff --git a/crates/pathfinder/src/p2p_network/common.rs b/crates/pathfinder/src/p2p_network/common.rs index 3b5fa1573d..e1c916b14a 100644 --- a/crates/pathfinder/src/p2p_network/common.rs +++ b/crates/pathfinder/src/p2p_network/common.rs @@ -28,7 +28,7 @@ pub async fn dial_bootnodes( // TODO: Use exponential backoff with a max retry limit, at least one boot node // needs to be reachable for the node to be useful. - // https://github.com/eqlabs/pathfinder/issues/2937 + // https://github.com/equilibriumco/pathfinder/issues/2937 for _ in 0..5 { match core_client.dial(peer_id, bootstrap_address.clone()).await { Ok(_) => { diff --git a/crates/pathfinder/src/p2p_network/sync/sync_handlers.rs b/crates/pathfinder/src/p2p_network/sync/sync_handlers.rs index c02db64ba8..c8060086e3 100644 --- a/crates/pathfinder/src/p2p_network/sync/sync_handlers.rs +++ b/crates/pathfinder/src/p2p_network/sync/sync_handlers.rs @@ -19,7 +19,13 @@ use p2p_proto::sync::transaction::{ TransactionsRequest, TransactionsResponse, }; -use pathfinder_common::{class_definition, BlockHash, BlockNumber, SignedBlockHeader}; +use pathfinder_common::class_definition::{ + self, + SerializedCairoDefinition, + SerializedClassDefinition, + SerializedSierraDefinition, +}; +use pathfinder_common::{BlockHash, BlockNumber, SignedBlockHeader}; use pathfinder_storage::{Storage, Transaction}; use tokio::sync::mpsc; @@ -144,32 +150,32 @@ fn get_header( Ok(false) } -#[derive(Debug, Clone)] -enum ClassDefinition { - Cairo(Vec), - Sierra { sierra: Vec, _casm: Vec }, -} - fn get_classes_for_block( db_tx: &Transaction<'_>, block_number: BlockNumber, tx: &mpsc::Sender, ) -> anyhow::Result { let get_definition = - |block_number: BlockNumber, class_hash| -> anyhow::Result { + |block_number: BlockNumber, class_hash| -> anyhow::Result { let definition = db_tx .class_definition_at(block_number.into(), class_hash)? .context(format!( "Class definition {class_hash} not found at block {block_number}", ))?; - let casm_definition = db_tx.casm_definition(class_hash)?; - Ok(match casm_definition { - Some(_casm) => ClassDefinition::Sierra { - sierra: definition, - _casm: Vec::new(), // TODO casm - }, - None => ClassDefinition::Cairo(definition), - }) + let class_def = if db_tx + .is_sierra(class_hash)? + .expect("Class definition exists in storage") + { + SerializedClassDefinition::Sierra(SerializedSierraDefinition::from_bytes( + definition.into_bytes(), + )) + } else { + SerializedClassDefinition::Cairo(SerializedCairoDefinition::from_bytes( + definition.into_bytes(), + )) + }; + + Ok(class_def) }; let Some(declared_classes) = db_tx.declared_classes_at(block_number.into())? else { @@ -182,20 +188,18 @@ fn get_classes_for_block( tracing::trace!(?class_hash, "Sending class definition"); let class: Class = match class_definition { - ClassDefinition::Cairo(definition) => { + SerializedClassDefinition::Cairo(cairo) => { let cairo_class = - serde_json::from_slice::>(&definition)?; + serde_json::from_slice::>(cairo.as_bytes())?; Class::Cairo0 { class: cairo_class.to_dto(), domain: 0, // TODO class_hash: Hash(class_hash.0), } } - ClassDefinition::Sierra { - sierra, - _casm: _, // TODO - } => { - let sierra_class = serde_json::from_slice::>(&sierra)?; + SerializedClassDefinition::Sierra(sierra) => { + let sierra_class = + serde_json::from_slice::>(sierra.as_bytes())?; Class::Cairo1 { class: sierra_class.to_dto(), @@ -402,7 +406,7 @@ fn get_start_block_number( /// This function must detach the thread used to run the blocking DB operation /// otherwise the entire p2p swarm will be blocked. /// -/// Related issue: +/// Related issue: async fn spawn_blocking_get( request: Request, storage: Storage, diff --git a/crates/pathfinder/src/p2p_network/sync/sync_handlers/tests.rs b/crates/pathfinder/src/p2p_network/sync/sync_handlers/tests.rs index da31abf67f..66b2b449bb 100644 --- a/crates/pathfinder/src/p2p_network/sync/sync_handlers/tests.rs +++ b/crates/pathfinder/src/p2p_network/sync/sync_handlers/tests.rs @@ -104,7 +104,7 @@ mod prop { use futures::channel::mpsc; use futures::StreamExt; - use p2p::sync::client::conv::{CairoDefinition, SierraDefinition, TryFromDto}; + use p2p::sync::client::conv::TryFromDto; use p2p::sync::client::types::Receipt; use p2p_proto::class::Class; use p2p_proto::common::BlockNumberOrHash; @@ -124,6 +124,10 @@ mod prop { TransactionsRequest, TransactionsResponse, }; + use pathfinder_common::class_definition::{ + SerializedCairoDefinition, + SerializedSierraDefinition, + }; use pathfinder_common::event::Event; use pathfinder_common::prelude::*; use pathfinder_common::state_update::SystemContractUpdate; @@ -353,11 +357,10 @@ mod prop { responses.into_iter().for_each(|response| match response { ClassesResponse::Class(Class::Cairo0 { class, domain: _, class_hash: _ }) => { - actual_cairo.push(CairoDefinition::try_from_dto(class).unwrap().0); + actual_cairo.push(SerializedCairoDefinition::try_from_dto(class).unwrap()); }, ClassesResponse::Class(Class::Cairo1 { class, domain: _, class_hash: _ }) => { - let SierraDefinition(sierra) = SierraDefinition::try_from_dto(class).unwrap(); - actual_sierra.push(sierra); + actual_sierra.push(SerializedSierraDefinition::try_from_dto(class).unwrap()); }, _ => panic!("unexpected response"), }); @@ -503,11 +506,11 @@ mod prop { /// Fixtures for prop tests mod fixtures { + use pathfinder_block_commitments::calculate_receipt_commitment; use pathfinder_storage::fake::{fill, generate, Block, Config}; use pathfinder_storage::{Storage, StorageBuilder}; use crate::p2p_network::sync::sync_handlers::MAX_COUNT_IN_TESTS; - use crate::state::block_hash::calculate_receipt_commitment; pub const MAX_NUM_BLOCKS: u64 = MAX_COUNT_IN_TESTS * 2; diff --git a/crates/pathfinder/src/state.rs b/crates/pathfinder/src/state.rs index 33d3efd306..62bcd21112 100644 --- a/crates/pathfinder/src/state.rs +++ b/crates/pathfinder/src/state.rs @@ -1,4 +1,5 @@ -pub mod block_hash; mod sync; -pub use sync::{l1, l2, revert, sync, SyncContext, RESET_DELAY_ON_FAILURE}; +// Re-export L1 gas price sync types +pub use l1::{sync_gas_prices, L1GasPriceSyncConfig}; +pub use sync::{consensus_sync, l1, l2, repair, revert, sync, SyncContext, RESET_DELAY_ON_FAILURE}; diff --git a/crates/pathfinder/src/state/sync.rs b/crates/pathfinder/src/state/sync.rs index 11d98821a7..68cb2809df 100644 --- a/crates/pathfinder/src/state/sync.rs +++ b/crates/pathfinder/src/state/sync.rs @@ -2,6 +2,7 @@ mod class; pub mod l1; pub mod l2; mod pending; +pub mod repair; pub mod revert; use std::future::Future; @@ -9,10 +10,24 @@ use std::sync::Arc; use std::time::Duration; use anyhow::Context; +use pathfinder_block_commitments as block_hash; +use pathfinder_common::class_definition::{ + SerializedCairoDefinition, + SerializedCasmDefinition, + SerializedSierraDefinition, +}; use pathfinder_common::prelude::*; -use pathfinder_common::{BlockId, Chain}; +use pathfinder_common::state_update::StateUpdateData; +use pathfinder_common::{ + BlockId, + Chain, + ConsensusFinalizedL2Block, + DeclaredClass, + L2Block, + L2BlockToCommit, +}; use pathfinder_crypto::Felt; -use pathfinder_ethereum::{EthereumApi, EthereumStateUpdate}; +use pathfinder_ethereum::{EthereumClient, EthereumStateUpdate}; use pathfinder_merkle_tree::starknet_state::update_starknet_state; use pathfinder_rpc::types::syncing::{self, NumberedBlock, Syncing}; use pathfinder_rpc::{Notifications, PendingData, Reorg, SyncState}; @@ -20,18 +35,14 @@ use pathfinder_storage::pruning::BlockchainHistoryMode; use pathfinder_storage::{Connection, Storage, Transaction, TransactionBehavior}; use primitive_types::H160; use starknet_gateway_client::GatewayApi; -use starknet_gateway_types::reply::{ - Block, - GasPrices, - PendingBlock, - PreConfirmedBlock, - PreLatestBlock, -}; +use starknet_gateway_types::error::{KnownStarknetErrorCode, SequencerError}; +use starknet_gateway_types::reply::{Block, GasPrices, PreConfirmedBlock, PreLatestBlock}; use tokio::sync::mpsc::{self, Receiver}; -use tokio::sync::watch::Sender as WatchSender; +use tokio::sync::watch::{self, Sender as WatchSender}; use crate::state::l1::L1SyncContext; use crate::state::l2::{BlockChain, L2SyncContext}; +use crate::{ConsensusChannels, SyncMessageToConsensus}; /// Delay before restarting L1 or L2 tasks if they fail. This delay helps /// prevent DoS if these tasks are crashing. @@ -43,8 +54,8 @@ pub const RESET_DELAY_ON_FAILURE: std::time::Duration = std::time::Duration::ZER #[derive(Debug)] pub enum SyncEvent { L1Update(EthereumStateUpdate), - /// New L2 [block update](StateUpdate) found. - Block( + /// New L2 [block update](StateUpdate) found on gateway. + DownloadedBlock( ( Box, (TransactionCommitment, EventCommitment, ReceiptCommitment), @@ -54,25 +65,34 @@ pub enum SyncEvent { Box, l2::Timings, ), + /// A new L2 finalized block received from consensus. The consumer task is + /// responsible for updating the state tries, computing the state + /// commitment, and finally, the block hash. + FinalizedConsensusBlock { + /// L2 block finalized and decided upon by consensus. + l2_block: Box, + /// A oneshot channel to notify when the state tries update is done, + /// returning the computed block hash and state commitment, which is + /// necessary for the download block logic to continue its work. + state_tries_updated_tx: tokio::sync::oneshot::Sender<(BlockHash, StateCommitment)>, + }, /// An L2 reorg was detected, contains the reorg-tail which /// indicates the oldest block which is now invalid /// i.e. reorg-tail - 1 should be the new head. Reorg(BlockNumber), /// A new unique L2 Cairo 0.x class was found. CairoClass { - definition: Vec, + definition: SerializedCairoDefinition, hash: ClassHash, }, /// A new unique L2 Cairo 1.x class was found. SierraClass { - sierra_definition: Vec, + sierra_definition: SerializedSierraDefinition, sierra_hash: SierraHash, - casm_definition: Vec, + casm_definition: SerializedCasmDefinition, casm_hash: CasmHash, casm_hash_v2: CasmHash, }, - /// A new L2 pending update was polled. - Pending((Box, Box)), /// A new L2 pre-confirmed update was polled. Optionally contains /// [pre latest](PreLatestBlock) data. PreConfirmed { @@ -102,6 +122,8 @@ pub struct SyncContext { pub sequencer_public_key: PublicKey, pub fetch_concurrency: std::num::NonZeroUsize, pub fetch_casm_from_fgw: bool, + pub compiler_resource_limits: pathfinder_compiler::ResourceLimits, + pub blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, } impl From<&SyncContext> for L1SyncContext @@ -130,6 +152,8 @@ where block_validation_mode: value.block_validation_mode, storage: value.storage.clone(), sequencer_public_key: value.sequencer_public_key, + compiler_resource_limits: value.compiler_resource_limits, + blockifier_libfuncs: value.blockifier_libfuncs, fetch_concurrency: value.fetch_concurrency, fetch_casm_from_fgw: value.fetch_casm_from_fgw, } @@ -137,23 +161,22 @@ where } /// Implements the main sync loop, where L1 and L2 sync results are combined. -pub async fn sync( - context: SyncContext, +pub async fn sync( + context: SyncContext, mut l1_sync: L1Sync, l2_sync: L2Sync, ) -> anyhow::Result<()> where - Ethereum: EthereumApi + Clone + Send + 'static, SequencerClient: GatewayApi + Clone + Send + Sync + 'static, F1: Future> + Send + 'static, F2: Future> + Send + 'static, - L1Sync: FnMut(mpsc::Sender, L1SyncContext) -> F1, + L1Sync: FnMut(mpsc::Sender, L1SyncContext) -> F1, L2Sync: FnOnce( mpsc::Sender, L2SyncContext, Option<(BlockNumber, BlockHash, StateCommitment)>, BlockChain, - tokio::sync::watch::Receiver<(BlockNumber, BlockHash)>, + watch::Receiver<(BlockNumber, BlockHash)>, ) -> F2 + Copy, { @@ -178,8 +201,10 @@ where restart_delay, verify_tree_hashes: _, sequencer_public_key: _, + compiler_resource_limits: _, + blockifier_libfuncs: _, fetch_concurrency: _, - fetch_casm_from_fgw, + fetch_casm_from_fgw: _, } = context; let mut db_conn = storage @@ -257,33 +282,30 @@ where pending_data, verify_tree_hashes: context.verify_tree_hashes, notifications, + sync_to_consensus_tx: None, }; let mut consumer_handle = util::task::spawn(consumer(event_receiver, consumer_context, tx_current)); - let mut pending_handle = util::task::spawn(pending::poll_pending( + let mut pending_handle = util::task::spawn(pending::poll_pre_confirmed( event_sender.clone(), sequencer.clone(), head_poll_interval, - storage.clone(), rx_latest.clone(), rx_current.clone(), - fetch_casm_from_fgw, )); loop { tokio::select! { _ = &mut pending_handle => { - tracing::error!("Pending tracking task ended unexpectedly"); + tracing::error!("Pre-confirmed tracking task ended unexpectedly"); - pending_handle = util::task::spawn(pending::poll_pending( + pending_handle = util::task::spawn(pending::poll_pre_confirmed( event_sender.clone(), sequencer.clone(), Duration::from_secs(2), - storage.clone(), rx_latest.clone(), rx_current.clone(), - fetch_casm_from_fgw, )); }, _ = &mut latest_handle => { @@ -419,6 +441,284 @@ where } } +/// Implements the main sync loop (like [sync]), where L1 and +/// **consensus-aware** L2 sync results are combined. +/// +/// This function is also stripped of the sync status updater and pending block +/// poller, since this is a PoC for consensus integration and those features +/// are not needed here. +pub async fn consensus_sync( + context: SyncContext, + mut l1_sync: L1Sync, + l2_sync: L2Sync, + consensus_channels: ConsensusChannels, +) -> anyhow::Result<()> +where + SequencerClient: GatewayApi + Clone + Send + Sync + 'static, + F1: Future> + Send + 'static, + F2: Future> + Send + 'static, + L1Sync: FnMut(mpsc::Sender, L1SyncContext) -> F1, + L2Sync: FnOnce( + mpsc::Sender, + Option, + L2SyncContext, + Option<(BlockNumber, BlockHash, StateCommitment)>, + BlockChain, + watch::Receiver<(BlockNumber, BlockHash)>, + ) -> F2 + + Copy, +{ + let l1_context = L1SyncContext::from(&context); + let l2_context = L2SyncContext::from(&context); + + let SyncContext { + storage, + ethereum: _, + chain: _, + chain_id: _, + core_address: _, + sequencer, + state, + head_poll_interval, + l1_poll_interval: _, + pending_data, + submitted_tx_tracker, + block_validation_mode: _, + notifications, + block_cache_size, + restart_delay, + verify_tree_hashes: _, + sequencer_public_key: _, + compiler_resource_limits: _, + blockifier_libfuncs: _, + fetch_concurrency: _, + fetch_casm_from_fgw: _, + } = context; + + let mut db_conn = storage + .connection() + .context("Creating database connection")?; + + let (event_sender, event_receiver) = mpsc::channel(8); + + // Get the latest block from the database + let l2_head = tokio::task::block_in_place(|| -> anyhow::Result<_> { + let tx = db_conn.transaction()?; + let l2_head = tx + .block_header(BlockId::Latest) + .context("Fetching latest block header from database")? + .map(|header| (header.number, header.hash, header.state_commitment)); + + Ok(l2_head) + })?; + + // (Jan 2026) Although this will not happen on mainnet, nor on testnet, we can + // imagine custom networks (in particular ad-hoc integration test networks) + // which start from genesis, where the genesis block is decided upon in + // consensus and it will not not be available at a feeder gateway until >=3 + // network participants actually decide upon the genesis block. + let gateway_latest = match sequencer.head().await { + Ok(gateway_latest) => gateway_latest, + Err(SequencerError::StarknetError(e)) + if e.code == KnownStarknetErrorCode::BlockNotFound.into() => + { + // Use some invalid initial values, the reason is that the API is common for + // production sync and we don't want to introduce an Option-based runtime check + // that could fail. + (BlockNumber::GENESIS, BlockHash::ZERO) + } + // head() retries on non starknet errors so any other starknet error code indicates + // a problem with the feeder gateway + Err(error) => { + tracing::error!(%error, "Error fetching latest block from gateway"); + Err(error).context("Fetching latest block from gateway")? + } + }; + + // Keep polling the sequencer for the latest block + let (tx_latest, rx_latest) = tokio::sync::watch::channel(gateway_latest); + let mut latest_handle = util::task::spawn(l2::poll_latest( + sequencer.clone(), + head_poll_interval, + tx_latest, + )); + + // Start L1 producer task. Clone the event sender so that the channel remains + // open even if the producer task fails. + let mut l1_handle = util::task::spawn(l1_sync(event_sender.clone(), l1_context.clone())); + + // Fetch latest blocks from storage + let latest_blocks = latest_n_blocks(&mut db_conn, block_cache_size) + .await + .context("Fetching latest blocks from storage")?; + let block_chain = BlockChain::with_capacity(block_cache_size, latest_blocks); + + let sync_to_consensus_tx = consensus_channels.sync_to_consensus_tx.clone(); + + // Start L2 producer task. Clone the event sender so that the channel remains + // open even if the producer task fails. + let mut l2_handle = util::task::spawn(l2_sync( + event_sender.clone(), + Some(consensus_channels.clone()), + l2_context.clone(), + l2_head, + block_chain, + rx_latest.clone(), + )); + + let (current_num, current_hash, _) = l2_head.unwrap_or_default(); + let (tx_current, _rx_current) = tokio::sync::watch::channel((current_num, current_hash)); + let consumer_context = ConsumerContext { + storage: storage.clone(), + state, + submitted_tx_tracker, + pending_data, + verify_tree_hashes: context.verify_tree_hashes, + notifications, + sync_to_consensus_tx: Some(sync_to_consensus_tx.clone()), + }; + let mut consumer_handle = + util::task::spawn(consumer(event_receiver, consumer_context, tx_current)); + + loop { + tokio::select! { + _ = &mut latest_handle => { + tracing::error!("Tracking chain tip task ended unexpectedly"); + tracing::debug!("Shutting down other tasks"); + + l1_handle.abort(); + l2_handle.abort(); + consumer_handle.abort(); + + _ = l1_handle.await; + _ = l2_handle.await; + _ = consumer_handle.await; + + anyhow::bail!("Sync process terminated"); + }, + l1_producer_result = &mut l1_handle => { + match l1_producer_result.context("Join L1 sync process handle")? { + Ok(()) => { + tracing::error!("L1 sync process terminated without an error."); + } + Err(e) => { + tracing::warn!("L1 sync process terminated with: {e:?}"); + } + } + + let fut = l1_sync(event_sender.clone(), l1_context.clone()); + l1_handle = util::task::spawn(async move { + tokio::time::sleep(RESET_DELAY_ON_FAILURE).await; + fut.await + }); + }, + l2_producer_result = &mut l2_handle => { + // L2 sync process failed; restart it. + match l2_producer_result.context("Join L2 sync process handle")? { + Ok(()) => { + tracing::error!("L2 sync process terminated without an error."); + } + Err(e) => { + tracing::warn!("L2 sync process terminated with: {e:?}"); + } + } + + let l2_head = tokio::task::block_in_place(|| { + let tx = db_conn.transaction()?; + tx.block_header(BlockId::Latest) + }) + .context("Query L2 head from database")? + .map(|block| (block.number, block.hash, block.state_commitment)); + + let latest_blocks = latest_n_blocks(&mut db_conn, block_cache_size) + .await + .context("Fetching latest blocks from storage")?; + let block_chain = BlockChain::with_capacity(1_000, latest_blocks); + let fut = l2_sync( + event_sender.clone(), + Some(consensus_channels.clone()), + l2_context.clone(), + l2_head, + block_chain, + rx_latest.clone() + ); + + l2_handle = util::task::spawn(async move { + tokio::time::sleep(restart_delay).await; + fut.await + }); + tracing::info!("L2 sync process restarted."); + }, + consumer_result = &mut consumer_handle => { + match consumer_result { + Ok(Ok(())) => { + tracing::debug!("Sync consumer task exited gracefully"); + }, + Ok(Err(e)) => { + tracing::error!(reason=?e, "Sync consumer task terminated with an error"); + } + Err(e) if e.is_cancelled() => { + tracing::debug!("Sync consumer task cancelled successfully"); + }, + Err(panic) => { + tracing::error!(%panic, "Sync consumer task panic'd"); + } + } + + // Shutdown the other processes. + tracing::debug!("Shutting down L1 and L2 sync producer tasks"); + l1_handle.abort(); + l2_handle.abort(); + latest_handle.abort(); + + match l1_handle.await { + Ok(Ok(())) => { + tracing::debug!("L1 sync task exited gracefully"); + }, + Ok(Err(e)) => { + tracing::error!(reason=?e, "L1 sync task terminated with an error"); + } + Err(e) if e.is_cancelled() => { + tracing::debug!("L1 sync task cancelled successfully"); + }, + Err(panic) => { + tracing::error!(%panic, "L1 sync task panic'd"); + } + } + + match l2_handle.await { + Ok(Ok(())) => { + tracing::debug!("L2 sync task exited gracefully"); + }, + Ok(Err(e)) => { + tracing::error!(reason=?e, "L2 sync task terminated with an error"); + } + Err(e) if e.is_cancelled() => { + tracing::debug!("L2 sync task cancelled successfully"); + }, + Err(panic) => { + tracing::error!(%panic, "L2 sync task panic'd"); + } + } + + match latest_handle.await { + Ok(()) => { + tracing::debug!("Latest polling task exited gracefully"); + }, + Err(e) if e.is_cancelled() => { + tracing::debug!("Latest polling task cancelled successfully"); + }, + Err(panic) => { + tracing::error!(%panic, "Latest polling task panic'd"); + } + } + + anyhow::bail!("Sync process terminated"); + } + } + } +} + struct ConsumerContext { pub storage: Storage, pub state: Arc, @@ -426,6 +726,7 @@ struct ConsumerContext { pub pending_data: WatchSender, pub verify_tree_hashes: bool, pub notifications: Notifications, + pub sync_to_consensus_tx: Option>, } async fn consumer( @@ -440,6 +741,7 @@ async fn consumer( pending_data, verify_tree_hashes, mut notifications, + sync_to_consensus_tx, } = context; let mut last_block_start = std::time::Instant::now(); @@ -469,10 +771,10 @@ async fn consumer( while let Some(event) = events.recv().await { use SyncEvent::*; - if let Block((block, _), _, _, _, _) = &event { + if let DownloadedBlock((block, _), _, _, _, _) = &event { if block.block_number < next_number { - tracing::debug!("Ignoring duplicate block {}", block.block_number); - return anyhow::Ok(()); + tracing::debug!(block_number=%block.block_number, "Ignoring duplicate block"); + continue; } let block_number = block.block_number; @@ -484,32 +786,32 @@ async fn consumer( Syncing::Status(status) => { status.current = NumberedBlock::from((block_hash, block_number)); - metrics::gauge!("current_block", block_number.get() as f64); + metrics::gauge!("current_block").set(block_number.get() as f64); if status.highest.number <= block_number { status.highest = status.current; - metrics::gauge!("highest_block", block_number.get() as f64); + metrics::gauge!("highest_block").set(block_number.get() as f64); } } } } - tokio::task::block_in_place(|| { + let sync_to_consensus_msg = tokio::task::block_in_place(|| { let tx = db_conn .transaction_with_behavior(TransactionBehavior::Immediate) .context("Create database transaction")?; let pruning_event = PruningEvent::from_sync_event(&event); - let notification = match event { + let (notification, sync_to_consensus_msg) = match event { L1Update(update) => { tracing::trace!("Updating L1 sync to block {}", update.block_number); l1_update(&tx, &update)?; tracing::info!("L1 sync updated to block {}", update.block_number); - None + (None, None) } - Block( + DownloadedBlock( (block, (tx_comm, ev_comm, rc_comm)), state_update, signature, @@ -518,8 +820,8 @@ async fn consumer( ) => { tracing::trace!("Updating L2 state to block {}", block.block_number); if block.block_number < next_number { - tracing::debug!("Ignoring duplicate block {}", block.block_number); - return anyhow::Ok(()); + tracing::debug!(block_number=%block.block_number, "Ignoring duplicate block"); + return anyhow::Ok(None); } let block_number = block.block_number; @@ -531,15 +833,18 @@ async fn consumer( .map(|x| x.1.storage.len()) .sum(); let update_t = std::time::Instant::now(); - let block_header = l2_update( - &tx, - block.as_ref(), + let l2_block = l2_block_from_fgw_reply( + block, tx_comm, rc_comm, ev_comm, + *state_diff_commitment, *state_update, + )?; + let l2_block = l2_update( + &tx, + l2_block.into(), *signature, - *state_diff_commitment, verify_tree_hashes, storage.clone(), ) @@ -561,14 +866,16 @@ async fn consumer( + timings.signature_download) .as_secs_f64(); - metrics::gauge!("block_download", download_time); - metrics::gauge!("block_processing", update_t.as_secs_f64()); - metrics::histogram!("block_processing_duration_seconds", update_t); - metrics::gauge!("block_latency", latency as f64); - metrics::gauge!( - "block_time", - (block_timestamp.get() - latest_timestamp.get()) as f64 - ); + metrics::gauge!("block_download").set(download_time); + metrics::gauge!("block_processing").set(update_t.as_secs_f64()); + metrics::histogram!("block_processing_duration_seconds") + .record(update_t.as_secs_f64()); + metrics::gauge!("block_latency").set(latency as f64); + if let Some(block_time_secs) = + block_timestamp.get().checked_sub(latest_timestamp.get()) + { + metrics::gauge!("block_time").set(block_time_secs as f64); + } latest_timestamp = block_timestamp; next_number += 1; @@ -599,7 +906,46 @@ async fn consumer( } } - Some(Notification::L2Block(block, block_header.into())) + ( + Some(Notification::L2Block(Arc::new(l2_block))), + Some(SyncMessageToConsensus::ConfirmBlockCommitted { + number: block_number, + }), + ) + } + FinalizedConsensusBlock { + l2_block, + state_tries_updated_tx, + } => { + if l2_block.header.number < next_number { + tracing::debug!( + "Ignoring duplicate finalized block {}", + l2_block.header.number + ); + return anyhow::Ok(None); + } + + let l2_block = l2_update( + &tx, + (*l2_block).into(), + BlockCommitmentSignature::default(), + verify_tree_hashes, + storage.clone(), + )?; + + state_tries_updated_tx + .send((l2_block.header.hash, l2_block.header.state_commitment)) + .expect( + "Receiver was dropped, which means that the consumer task exited and \ + all sync related tasks, including this one, will be restarted.", + ); + + let number = l2_block.header.number; + + ( + Some(Notification::L2Block(Arc::new(l2_block))), + Some(SyncMessageToConsensus::ConfirmBlockCommitted { number }), + ) } Reorg(reorg_tail) => { tracing::trace!("Reorg L2 state to block {}", reorg_tail); @@ -620,7 +966,7 @@ async fn consumer( None => tracing::info!("L2 reorg occurred, new L2 head is genesis"), } - Some(Notification::L2Reorg(reorg)) + (Some(Notification::L2Reorg(reorg)), None) } CairoClass { definition, hash } => { tracing::trace!("Inserting new Cairo class with hash: {hash}"); @@ -629,7 +975,7 @@ async fn consumer( tracing::debug!(%hash, "Inserted new Cairo class"); - None + (None, None) } SierraClass { sierra_definition, @@ -649,26 +995,7 @@ async fn consumer( tracing::debug!(sierra=%sierra_hash, casm=%casm_hash, "Inserted new Sierra class"); - None - } - Pending((pending_block, pending_state_update)) => { - tracing::trace!("Updating pending data"); - let (number, hash) = tx - .block_id(BlockId::Latest) - .context("Fetching latest block hash")? - .unwrap_or_default(); - - if pending_block.parent_hash == hash { - let data = PendingData::from_pending_block( - *pending_block, - *pending_state_update, - number + 1, - ); - pending_data.send_replace(data); - tracing::debug!("Updated pending data"); - } - - None + (None, None) } PreConfirmed { number, @@ -695,7 +1022,8 @@ async fn consumer( Ok(pending) => { let pre_latest_tx_count = pending.pre_latest_transactions().map(|txs| txs.len()); - let pre_confirmed_tx_count = pending.pending_transactions().len(); + let pre_confirmed_tx_count = + pending.pre_confirmed_transactions().len(); pending_data.send_replace(pending); tracing::debug!(block_number = %number, %pre_confirmed_tx_count, ?pre_latest_tx_count, "Updated pre-confirmed data"); } @@ -705,7 +1033,7 @@ async fn consumer( } } - None + (None, None) } }; @@ -722,8 +1050,20 @@ async fn consumer( send_notification(notification, &mut notifications); } - commit_result + commit_result.map(|_| sync_to_consensus_msg) })?; + + if let (Some(sync_to_consensus_tx), Some(sync_to_consensus_msg)) = + (sync_to_consensus_tx.clone(), sync_to_consensus_msg) + { + sync_to_consensus_tx + .send(sync_to_consensus_msg) + .await + .context( + "Sending L2 consensus finalized and decided upon block committed message to \ + consensus", + )?; + } } Ok(()) @@ -740,7 +1080,9 @@ impl PruningEvent { SyncEvent::L1Update(ethereum_state_update) => { Some(Self::L1Checkpoint(ethereum_state_update.block_number)) } - SyncEvent::Block((block, _), _, _, _, _) => Some(Self::L2Head(block.block_number)), + SyncEvent::DownloadedBlock((block, _), _, _, _, _) => { + Some(Self::L2Head(block.block_number)) + } _ => None, } } @@ -877,7 +1219,7 @@ async fn update_sync_status_latest( state: Arc, starting_block_hash: BlockHash, starting_block_num: BlockNumber, - mut latest: tokio::sync::watch::Receiver<(BlockNumber, BlockHash)>, + mut latest: watch::Receiver<(BlockNumber, BlockHash)>, ) { let starting = NumberedBlock::from((starting_block_hash, starting_block_num)); @@ -902,8 +1244,8 @@ async fn update_sync_status_latest( highest: latest, }); - metrics::gauge!("current_block", starting.number.get() as f64); - metrics::gauge!("highest_block", latest.number.get() as f64); + metrics::gauge!("current_block").set(starting.number.get() as f64); + metrics::gauge!("highest_block").set(latest.number.get() as f64); tracing::debug!( status=%sync_status, @@ -914,7 +1256,7 @@ async fn update_sync_status_latest( if status.highest.hash != latest.hash { status.highest = latest; - metrics::gauge!("highest_block", latest.number.get() as f64); + metrics::gauge!("highest_block").set(latest.number.get() as f64); tracing::debug!( %status, @@ -954,37 +1296,156 @@ fn l1_update(transaction: &Transaction<'_>, update: &EthereumStateUpdate) -> any Ok(()) } -/// Returns the new [StateCommitment] after the update. #[allow(clippy::too_many_arguments)] fn l2_update( transaction: &Transaction<'_>, - block: &Block, - transaction_commitment: TransactionCommitment, - receipt_commitment: ReceiptCommitment, - event_commitment: EventCommitment, - state_update: StateUpdate, + block: L2BlockToCommit, signature: BlockCommitmentSignature, - state_diff_commitment: StateDiffCommitment, verify_tree_hashes: bool, // we need this so that we can create extra read-only transactions for // parallel contract state updates storage: Storage, -) -> anyhow::Result { +) -> anyhow::Result { let (storage_commitment, class_commitment) = update_starknet_state( transaction, - (&state_update).into(), + block.state_update().as_ref(), verify_tree_hashes, - block.block_number, + block.number(), storage, ) .context("Updating Starknet state")?; - let state_commitment = StateCommitment::calculate(storage_commitment, class_commitment); + let state_commitment = StateCommitment::calculate( + storage_commitment, + class_commitment, + block.starknet_version(), + ); + + if let Some(expected_state_commitment) = block.state_commitment() { + // Ensure that roots match.. what should we do if it doesn't? For now the whole + // sync process ends.. + anyhow::ensure!( + state_commitment == expected_state_commitment, + "State commitment mismatch" + ); + } + + let block = match block { + L2BlockToCommit::FromConsensus(block) => { + let parent_hash = if let Some(parent_number) = block.header.number.parent() { + transaction + .block_hash(BlockId::Number(parent_number)) + .context("Fetching parent block hash")? + .context("Parent block missing - logic error in storage")? + } else { + BlockHash::ZERO + }; + let ConsensusFinalizedL2Block { + header, + state_update, + transactions_and_receipts, + events, + declared_classes, + } = block; + + declared_classes.into_iter().try_for_each( + |DeclaredClass { + sierra_hash, + casm_hash_v2, + sierra_def, + casm_def, + }| { + // Insert classes before state update because the latter will trigger + // `upsert_declared_at` and insert a NULL definition + // + // TODO so far `L2Block` does not contain the class definitions, due to the flow + // of the FGw sync. + transaction.insert_sierra_class_definition( + &sierra_hash, + &sierra_def, + &casm_def, + &casm_hash_v2, + ) + }, + )?; + + L2Block { + header: header.compute_hash( + parent_hash, + state_commitment, + block_hash::compute_final_hash, + ), + state_update, + transactions_and_receipts, + events, + } + } + L2BlockToCommit::FromFgw(block) => block, + }; - // Ensure that roots match.. what should we do if it doesn't? For now the whole - // sync process ends.. + // Update L2 database. These types shouldn't be options at this level, + // but for now the unwraps are "safe" in that these should only ever be + // None for pending queries to the sequencer, but we aren't using those here. + // Nonetheless, the 0 defaults for l2_gas_price do show in the + // database (for old blocks that don't really have that price), + // and since the feeder gateway normally returns 1 in that case, + // that should also be the default. + transaction + .insert_block_header(&block.header) + .context("Inserting block header into database")?; + + transaction + .insert_transaction_data( + block.header.number, + &block.transactions_and_receipts, + Some(&block.events), + ) + .context("Insert transaction data into database")?; + + // Insert state updates + transaction + .insert_state_update_data(block.header.number, &block.state_update) + .context("Insert state update into database")?; + + // Insert signature + transaction + .insert_signature(block.header.number, &signature) + .context("Insert signature into database")?; + + // Track combined L1 and L2 state. + let l1_l2_head = transaction.l1_l2_pointer().context("Query L1-L2 head")?; + let expected_next = l1_l2_head + .map(|head| head + 1) + .unwrap_or(BlockNumber::GENESIS); + + if expected_next == block.header.number { + if let Some(l1_state) = transaction + .l1_state_at_number(block.header.number) + .context("Query L1 state")? + { + if l1_state.block_hash == block.header.hash { + transaction + .update_l1_l2_pointer(Some(block.header.number)) + .context("Update L1-L2 head")?; + } + } + } + + Ok(block) +} + +fn l2_block_from_fgw_reply( + block: Box, + transaction_commitment: TransactionCommitment, + receipt_commitment: ReceiptCommitment, + event_commitment: EventCommitment, + state_diff_commitment: StateDiffCommitment, + state_update: StateUpdate, +) -> anyhow::Result { anyhow::ensure!( - state_commitment == block.state_commitment, - "State root mismatch" + block.transactions.len() == block.transaction_receipts.len(), + "Transactions and receipts mismatch. There were {} transactions and {} receipts.", + block.transactions.len(), + block.transaction_receipts.len() ); let transaction_count = block.transactions.len(); @@ -994,17 +1455,13 @@ fn l2_update( .map(|(_, events)| events.len()) .sum(); - // Update L2 database. These types shouldn't be options at this level, - // but for now the unwraps are "safe" in that these should only ever be - // None for pending queries to the sequencer, but we aren't using those here. - // Nonetheless, the 0 defaults for l2_gas_price do show in the - // database (for old blocks that don't really have that price), - // and since the feeder gateway normally returns 1 in that case, - // that should also be the default. let l2_gas_price = block.l2_gas_price.unwrap_or(GasPrices { price_in_wei: GasPrice(1), price_in_fri: GasPrice(1), }); + + let state_update: StateUpdateData = state_update.into(); + let header = BlockHeader { hash: block.block_hash, parent_hash: block.parent_block_hash, @@ -1025,7 +1482,7 @@ fn l2_update( .unwrap_or(SequencerAddress(Felt::ZERO)), starknet_version: block.starknet_version, event_commitment, - state_commitment, + state_commitment: block.state_commitment, transaction_commitment, transaction_count, event_count, @@ -1035,18 +1492,7 @@ fn l2_update( state_diff_length: state_update.state_diff_length(), }; - transaction - .insert_block_header(&header) - .context("Inserting block header into database")?; - - // Insert the transactions. - anyhow::ensure!( - block.transactions.len() == block.transaction_receipts.len(), - "Transactions and receipts mismatch. There were {} transactions and {} receipts.", - block.transactions.len(), - block.transaction_receipts.len() - ); - let (transactions_data, events_data): (Vec<_>, Vec<_>) = block + let (transactions_and_receipts, events) = block .transactions .iter() .cloned() @@ -1054,59 +1500,31 @@ fn l2_update( .map(|(tx, (receipt, events))| ((tx, receipt), events)) .unzip(); - transaction - .insert_transaction_data(header.number, &transactions_data, Some(&events_data)) - .context("Insert transaction data into database")?; - - // Insert state updates - transaction - .insert_state_update(block.block_number, &state_update) - .context("Insert state update into database")?; - - // Insert signature - transaction - .insert_signature(block.block_number, &signature) - .context("Insert signature into database")?; - - // Track combined L1 and L2 state. - let l1_l2_head = transaction.l1_l2_pointer().context("Query L1-L2 head")?; - let expected_next = l1_l2_head - .map(|head| head + 1) - .unwrap_or(BlockNumber::GENESIS); - - if expected_next == header.number { - if let Some(l1_state) = transaction - .l1_state_at_number(header.number) - .context("Query L1 state")? - { - if l1_state.block_hash == header.hash { - transaction - .update_l1_l2_pointer(Some(header.number)) - .context("Update L1-L2 head")?; - } - } - } - - Ok(header) + Ok(L2Block { + header, + state_update, + transactions_and_receipts, + events, + }) } enum Notification { - L2Block(Box, Box), + L2Block(Arc), L2Reorg(Reorg), } fn send_notification(notification: Notification, notifications: &mut Notifications) { match notification { - Notification::L2Block(block, header) => { + Notification::L2Block(block) => { notifications .block_headers - .send(header.into()) + .send(Arc::new(block.header.clone())) // Ignore errors in case nobody is listening. New listeners may subscribe in the // future. .ok(); notifications .l2_blocks - .send(block.into()) + .send(block) // Ignore errors in case nobody is listening. New listeners may subscribe in the // future. .ok(); @@ -1215,6 +1633,12 @@ Blockchain history must include the reorg tail and its parent block to perform a mod tests { use std::sync::Arc; + use pathfinder_common::class_definition::{ + SerializedCairoDefinition, + SerializedCasmDefinition, + SerializedOpaqueClassDefinition, + SerializedSierraDefinition, + }; use pathfinder_common::event::Event; use pathfinder_common::felt_bytes; use pathfinder_common::macro_prelude::*; @@ -1298,7 +1722,7 @@ mod tests { state_update.with_parent_state_commitment(parent_state_commitment) }); - let transactions = vec![ + let transactions = [ Transaction { hash: transaction_hash_bytes!( &format!("declare v0 tx hash {block_num}").into_bytes() @@ -1672,7 +2096,7 @@ mod tests { // Send block updates, followed by a reorg to genesis. for (a, b, c, d, e) in block_data { event_tx - .send(SyncEvent::Block(a, b, c, d, e)) + .send(SyncEvent::DownloadedBlock(a, b, c, d, e)) .await .unwrap(); } @@ -1687,6 +2111,7 @@ mod tests { pending_data: tx, verify_tree_hashes: false, notifications: Default::default(), + sync_to_consensus_tx: None, }; let (tx, _rx) = tokio::sync::watch::channel(Default::default()); @@ -1722,7 +2147,7 @@ mod tests { // Send block updates, followed by a reorg to genesis. for (a, b, c, d, e) in generate_block_data() { event_tx - .send(SyncEvent::Block(a, b, c, d, e)) + .send(SyncEvent::DownloadedBlock(a, b, c, d, e)) .await .unwrap(); } @@ -1741,6 +2166,7 @@ mod tests { pending_data: tx, verify_tree_hashes: false, notifications: Default::default(), + sync_to_consensus_tx: None, }; let (tx, _rx) = tokio::sync::watch::channel(Default::default()); @@ -1781,7 +2207,7 @@ mod tests { let block2 = blocks[2].clone(); for (a, b, c, d, e) in blocks { event_tx - .send(SyncEvent::Block(a, b, c, d, e)) + .send(SyncEvent::DownloadedBlock(a, b, c, d, e)) .await .unwrap(); } @@ -1793,7 +2219,7 @@ mod tests { // updated after a reorg, causing the reorg'd block numbers to be considered // duplicates and skipped - breaking sync. event_tx - .send(SyncEvent::Block( + .send(SyncEvent::DownloadedBlock( block2.0, block2.1, block2.2, block2.3, block2.4, )) .await @@ -1809,6 +2235,7 @@ mod tests { pending_data: tx, verify_tree_hashes: false, notifications: Default::default(), + sync_to_consensus_tx: None, }; let (tx, _rx) = tokio::sync::watch::channel(Default::default()); @@ -1843,7 +2270,7 @@ mod tests { // Send block updates, followed by a reorg to genesis. for (a, b, c, d, e) in generate_block_data() { event_tx - .send(SyncEvent::Block(a, b, c, d, e)) + .send(SyncEvent::DownloadedBlock(a, b, c, d, e)) .await .unwrap(); } @@ -1862,6 +2289,7 @@ mod tests { pending_data: tx, verify_tree_hashes: false, notifications: Default::default(), + sync_to_consensus_tx: None, }; let (tx, _rx) = tokio::sync::watch::channel(Default::default()); @@ -1884,7 +2312,7 @@ mod tests { let (event_tx, event_rx) = tokio::sync::mpsc::channel(1); let class_hash = class_hash_bytes!(b"class hash"); - let expected_definition = b"cairo class definition".to_vec(); + let expected_definition = SerializedCairoDefinition::from_slice(b"cairo class definition"); event_tx .send(SyncEvent::CairoClass { @@ -1904,6 +2332,7 @@ mod tests { pending_data: tx, verify_tree_hashes: false, notifications: Default::default(), + sync_to_consensus_tx: None, }; let (tx, _rx) = tokio::sync::watch::channel(Default::default()); @@ -1912,7 +2341,10 @@ mod tests { let tx = connection.transaction().unwrap(); let definition = tx.class_definition(class_hash).unwrap().unwrap(); - assert_eq!(definition, expected_definition); + assert_eq!( + definition, + SerializedOpaqueClassDefinition::from(expected_definition) + ); } #[tokio::test(flavor = "multi_thread")] @@ -1927,13 +2359,14 @@ mod tests { let (event_tx, event_rx) = tokio::sync::mpsc::channel(1); let class_hash = felt_bytes!(b"class hash"); - let expected_definition = b"sierra class definition".to_vec(); + let expected_definition = + SerializedSierraDefinition::from_slice(b"sierra class definition"); event_tx .send(SyncEvent::SierraClass { sierra_definition: expected_definition.clone(), sierra_hash: SierraHash(class_hash), - casm_definition: b"casm definition".to_vec(), + casm_definition: SerializedCasmDefinition::from_slice(b"casm definition"), casm_hash: casm_hash_bytes!(b"casm hash"), casm_hash_v2: casm_hash_bytes!(b"casm hash blake"), }) @@ -1950,6 +2383,7 @@ mod tests { pending_data: tx, verify_tree_hashes: false, notifications: Default::default(), + sync_to_consensus_tx: None, }; let (tx, _rx) = tokio::sync::watch::channel(Default::default()); @@ -1958,7 +2392,10 @@ mod tests { let tx = connection.transaction().unwrap(); let definition = tx.class_definition(ClassHash(class_hash)).unwrap().unwrap(); - assert_eq!(definition, expected_definition); + assert_eq!( + definition, + SerializedOpaqueClassDefinition::from(expected_definition) + ); let casm_hash_v2 = tx.casm_hash_v2(ClassHash(class_hash)).unwrap().unwrap(); assert_eq!(casm_hash_v2, casm_hash_bytes!(b"casm hash blake")); @@ -1978,7 +2415,7 @@ mod tests { let (a, b, c, d, e) = blocks[0].clone(); event_tx - .send(SyncEvent::Block( + .send(SyncEvent::DownloadedBlock( a.clone(), b.clone(), c.clone(), @@ -1988,7 +2425,7 @@ mod tests { .await .unwrap(); event_tx - .send(SyncEvent::Block(a.clone(), b.clone(), c, d, e)) + .send(SyncEvent::DownloadedBlock(a.clone(), b.clone(), c, d, e)) .await .unwrap(); drop(event_tx); @@ -2001,6 +2438,7 @@ mod tests { pending_data: tx, verify_tree_hashes: false, notifications: Default::default(), + sync_to_consensus_tx: None, }; let (tx, _rx) = tokio::sync::watch::channel(Default::default()); @@ -2194,7 +2632,7 @@ mod tests { // Send block updates. for (a, b, c, d, e) in blocks { event_tx - .send(SyncEvent::Block(a, b, c, d, e)) + .send(SyncEvent::DownloadedBlock(a, b, c, d, e)) .await .unwrap(); } @@ -2213,6 +2651,7 @@ mod tests { pending_data: tx, verify_tree_hashes: false, notifications, + sync_to_consensus_tx: None, }; let (tx, _rx) = tokio::sync::watch::channel(Default::default()); @@ -2255,7 +2694,7 @@ mod tests { // Send block updates. for (a, b, c, d, e) in blocks { event_tx - .send(SyncEvent::Block(a, b, c, d, e)) + .send(SyncEvent::DownloadedBlock(a, b, c, d, e)) .await .unwrap(); } @@ -2272,6 +2711,7 @@ mod tests { pending_data: tx, verify_tree_hashes: false, notifications: Default::default(), + sync_to_consensus_tx: None, }; let (tx, _rx) = tokio::sync::watch::channel(Default::default()); @@ -2354,7 +2794,7 @@ mod tests { // Send block updates. for (a, b, c, d, e) in blocks { event_tx - .send(SyncEvent::Block(a, b, c, d, e)) + .send(SyncEvent::DownloadedBlock(a, b, c, d, e)) .await .unwrap(); } @@ -2373,6 +2813,7 @@ mod tests { pending_data: tx, verify_tree_hashes: false, notifications, + sync_to_consensus_tx: None, }; let (tx, _rx) = tokio::sync::watch::channel(Default::default()); @@ -2399,6 +2840,7 @@ mod tests { pending_data: tx, verify_tree_hashes: false, notifications, + sync_to_consensus_tx: None, }; let (tx, _rx) = tokio::sync::watch::channel(Default::default()); @@ -2430,6 +2872,7 @@ Blockchain history must include the reorg tail and its parent block to perform a pending_data: tx, verify_tree_hashes: false, notifications, + sync_to_consensus_tx: None, }; let (tx, _rx) = tokio::sync::watch::channel(Default::default()); @@ -2458,7 +2901,7 @@ Blockchain history must include the reorg tail and its parent block to perform a // Send block updates. for (a, b, c, d, e) in blocks { event_tx - .send(SyncEvent::Block(a, b, c, d, e)) + .send(SyncEvent::DownloadedBlock(a, b, c, d, e)) .await .unwrap(); } @@ -2477,6 +2920,7 @@ Blockchain history must include the reorg tail and its parent block to perform a pending_data: tx, verify_tree_hashes: false, notifications, + sync_to_consensus_tx: None, }; let (tx, _rx) = tokio::sync::watch::channel(Default::default()); @@ -2506,6 +2950,7 @@ Blockchain history must include the reorg tail and its parent block to perform a pending_data: tx, verify_tree_hashes: false, notifications, + sync_to_consensus_tx: None, }; let (tx, _rx) = tokio::sync::watch::channel(Default::default()); @@ -2546,7 +2991,7 @@ Blockchain history must include the reorg tail and its parent block to perform a // Send block updates. for (a, b, c, d, e) in blocks { event_tx - .send(SyncEvent::Block(a, b, c, d, e)) + .send(SyncEvent::DownloadedBlock(a, b, c, d, e)) .await .unwrap(); } @@ -2563,6 +3008,7 @@ Blockchain history must include the reorg tail and its parent block to perform a pending_data: tx, verify_tree_hashes: false, notifications: Default::default(), + sync_to_consensus_tx: None, }; let (tx, _rx) = tokio::sync::watch::channel(Default::default()); @@ -2656,7 +3102,7 @@ Blockchain history must include the reorg tail and its parent block to perform a // Send block updates. for (a, b, c, d, e) in blocks.into_iter() { event_tx - .send(SyncEvent::Block(a, b, c, d, e)) + .send(SyncEvent::DownloadedBlock(a, b, c, d, e)) .await .unwrap(); } @@ -2683,6 +3129,7 @@ Blockchain history must include the reorg tail and its parent block to perform a pending_data: tx, verify_tree_hashes: false, notifications: Default::default(), + sync_to_consensus_tx: None, }; let (tx, _rx) = tokio::sync::watch::channel(Default::default()); @@ -2716,22 +3163,29 @@ Blockchain history must include the reorg tail and its parent block to perform a async fn event_filter_pruning() { use pathfinder_storage::AGGREGATE_BLOOM_BLOCK_RANGE_LEN; - let storage = StorageBuilder::in_memory_with_blockchain_pruning_and_pool_size( - pathfinder_storage::pruning::BlockchainHistoryMode::Prune { num_blocks_kept: 0 }, - std::num::NonZeroU32::new(10).unwrap(), - ) - .unwrap(); - let mut conn = storage.connection().unwrap(); - - let tx = conn.transaction().unwrap(); - let first_filter_exists = tx - .event_filter_exists( - BlockNumber::GENESIS, - BlockNumber::GENESIS + AGGREGATE_BLOOM_BLOCK_RANGE_LEN - 1, + let tempdir = tempfile::TempDir::new().unwrap(); + let storage_pruning_mode = + pathfinder_storage::pruning::BlockchainHistoryMode::Prune { num_blocks_kept: 0 }; + let storage_pool_size = std::num::NonZeroU32::new(10).unwrap(); + let storage = + StorageBuilder::in_persisted_tempdir_with_blockchain_pruning_and_pool_size( + &tempdir, + storage_pruning_mode, + storage_pool_size, ) .unwrap(); + let mut conn = storage.connection().unwrap(); + + let first_filter_exists = { + let db_tx = conn.transaction().unwrap(); + db_tx + .event_filter_exists( + BlockNumber::GENESIS, + BlockNumber::GENESIS + AGGREGATE_BLOOM_BLOCK_RANGE_LEN - 1, + ) + .unwrap() + }; assert!(!first_filter_exists); - drop(tx); let mut blocks = block_data_with_state_updates(vec![ StateUpdate::default(); @@ -2754,72 +3208,98 @@ Blockchain history must include the reorg tail and its parent block to perform a // Send all but one block update. for (a, b, c, d, e) in blocks.into_iter() { event_tx - .send(SyncEvent::Block(a, b, c, d, e)) + .send(SyncEvent::DownloadedBlock(a, b, c, d, e)) .await .unwrap(); } // Close the event channel which allows the consumer task to exit. drop(event_tx); - let (tx, _rx) = tokio::sync::watch::channel(Default::default()); + let (pending_tx, _) = tokio::sync::watch::channel(Default::default()); let context = ConsumerContext { storage: storage.clone(), state: Arc::new(SyncState::default()), submitted_tx_tracker: pathfinder_rpc::tracker::SubmittedTransactionTracker::new( 10, 10, ), - pending_data: tx, + pending_data: pending_tx, verify_tree_hashes: false, notifications: Default::default(), + sync_to_consensus_tx: None, }; - let (tx, _rx) = tokio::sync::watch::channel(Default::default()); - consumer(event_rx, context, tx).await.unwrap(); + let (current_tx, _) = tokio::sync::watch::channel(Default::default()); + consumer(event_rx, context, current_tx).await.unwrap(); - let tx = conn.transaction().unwrap(); - let first_filter_exists = tx - .event_filter_exists( - BlockNumber::GENESIS, - BlockNumber::GENESIS + AGGREGATE_BLOOM_BLOCK_RANGE_LEN - 1, - ) - .unwrap(); + let first_filter_exists = { + let db_tx = conn.transaction().unwrap(); + db_tx + .event_filter_exists( + BlockNumber::GENESIS, + BlockNumber::GENESIS + AGGREGATE_BLOOM_BLOCK_RANGE_LEN - 1, + ) + .unwrap() + }; assert!(first_filter_exists); - drop(tx); let (event_tx, event_rx) = tokio::sync::mpsc::channel(AGGREGATE_BLOOM_BLOCK_RANGE_LEN as usize); // Send the last block update. let (a, b, c, d, e) = last_block; event_tx - .send(SyncEvent::Block(a, b, c, d, e)) + .send(SyncEvent::DownloadedBlock(a, b, c, d, e)) .await .unwrap(); // Close the event channel which allows the consumer task to exit. drop(event_tx); - let (tx, _rx) = tokio::sync::watch::channel(Default::default()); + let (pending_tx, _) = tokio::sync::watch::channel(Default::default()); let context = ConsumerContext { storage: storage.clone(), state: Arc::new(SyncState::default()), submitted_tx_tracker: pathfinder_rpc::tracker::SubmittedTransactionTracker::new( 10, 10, ), - pending_data: tx, + pending_data: pending_tx, verify_tree_hashes: false, notifications: Default::default(), + sync_to_consensus_tx: None, }; - let (tx, _rx) = tokio::sync::watch::channel(Default::default()); - consumer(event_rx, context, tx).await.unwrap(); + let (current_tx, _) = tokio::sync::watch::channel(Default::default()); + consumer(event_rx, context, current_tx).await.unwrap(); - let tx = conn.transaction().unwrap(); - let first_filter_exists = tx - .event_filter_exists( - BlockNumber::GENESIS, - BlockNumber::GENESIS + AGGREGATE_BLOOM_BLOCK_RANGE_LEN - 1, + let first_filter_exists = { + let db_tx = conn.transaction().unwrap(); + db_tx + .event_filter_exists( + BlockNumber::GENESIS, + BlockNumber::GENESIS + AGGREGATE_BLOOM_BLOCK_RANGE_LEN - 1, + ) + .unwrap() + }; + assert!(!first_filter_exists); + + // Pretend like we shut down unexpectedly by dropping these. + drop(conn); + drop(storage); + + // Create a new storage object to make sure the running event filter is rebuilt + // correctly even when filters are pruned. + let storage = + StorageBuilder::in_persisted_tempdir_with_blockchain_pruning_and_pool_size( + &tempdir, + storage_pruning_mode, + storage_pool_size, ) .unwrap(); - assert!(!first_filter_exists); + let mut conn = storage.connection().unwrap(); + let db_tx = conn.transaction().unwrap(); + // Running event filter got rebuilt so its next expected block is latest + 1. + assert_eq!( + db_tx.next_block_without_events().get(), + AGGREGATE_BLOOM_BLOCK_RANGE_LEN + 1 + ); } /// A regression test related to block purging behavior during reorg @@ -2840,8 +3320,8 @@ Blockchain history must include the reorg tail and its parent block to perform a let reorg_regression_data = ReorgRegressionData::new(); let removed_class_hash = SierraHash(reorg_regression_data.removed_class_hash.0); - let sierra_definition = b"sierra definition".to_vec(); - let casm_definition = b"casm definition".to_vec(); + let sierra_definition = SerializedSierraDefinition::from_slice(b"sierra definition"); + let casm_definition = SerializedCasmDefinition::from_slice(b"casm definition"); let casm_hash = casm_hash_bytes!(b"casm hash"); let casm_hash_v2 = casm_hash_bytes!(b"casm hash blake"); @@ -2861,7 +3341,7 @@ Blockchain history must include the reorg tail and its parent block to perform a let blocks = block_data_with_state_updates(reorg_regression_data.state_updates); for (a, b, c, d, e) in blocks { event_tx - .send(SyncEvent::Block(a, b, c, d, e)) + .send(SyncEvent::DownloadedBlock(a, b, c, d, e)) .await .unwrap(); } @@ -2883,6 +3363,7 @@ Blockchain history must include the reorg tail and its parent block to perform a pending_data: tx, verify_tree_hashes: false, notifications: Default::default(), + sync_to_consensus_tx: None, }; let (tx, _rx) = tokio::sync::watch::channel(Default::default()); diff --git a/crates/pathfinder/src/state/sync/class.rs b/crates/pathfinder/src/state/sync/class.rs index d09356f93b..f26b35a18e 100644 --- a/crates/pathfinder/src/state/sync/class.rs +++ b/crates/pathfinder/src/state/sync/class.rs @@ -1,16 +1,22 @@ use anyhow::Context; +use pathfinder_common::class_definition::{ + SerializedCairoDefinition, + SerializedCasmDefinition, + SerializedClassDefinition, + SerializedSierraDefinition, +}; use pathfinder_common::{CasmHash, ClassHash, SierraHash}; -use starknet_gateway_client::GatewayApi; +use starknet_gateway_client::{BlockId, GatewayApi}; pub enum DownloadedClass { Cairo { - definition: Vec, + definition: SerializedCairoDefinition, hash: ClassHash, }, Sierra { - sierra_definition: Vec, + sierra_definition: SerializedSierraDefinition, sierra_hash: SierraHash, - casm_definition: Vec, + casm_definition: SerializedCasmDefinition, casm_hash_v2: CasmHash, }, } @@ -18,34 +24,34 @@ pub enum DownloadedClass { pub async fn download_class( sequencer: &SequencerClient, class_hash: ClassHash, + compiler_resource_limit: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, fetch_casm_from_fgw: bool, ) -> Result { use pathfinder_class_hash::compute_class_hash; let definition = sequencer - .pending_class_by_hash(class_hash) + .class_by_hash(class_hash, BlockId::Latest) .await - .with_context(|| format!("Downloading class {}", class_hash.0))? - .to_vec(); + .with_context(|| format!("Downloading class {}", class_hash.0))?; let (tx, rx) = tokio::sync::oneshot::channel(); rayon::spawn(move || { - let computed_hash = compute_class_hash(&definition).context("Computing class hash"); - let _ = tx.send((computed_hash, definition)); + let result = compute_class_hash(definition).context("Computing class hash"); + let _ = tx.send(result); }); - let (hash, definition) = rx.await.context("Panic on rayon thread")?; - let hash = hash?; + let (hash, serialized_class) = rx.await.context("Panic on rayon thread")??; use pathfinder_class_hash::ComputedClassHash; - match hash { - ComputedClassHash::Cairo(hash) => { + match (hash, serialized_class) { + (ComputedClassHash::Cairo(hash), SerializedClassDefinition::Cairo(definition)) => { if class_hash != hash { tracing::warn!(expected=%class_hash, computed=%hash, "Cairo 0 class hash mismatch"); } Ok(DownloadedClass::Cairo { definition, hash }) } - ComputedClassHash::Sierra(hash) => { + (ComputedClassHash::Sierra(hash), SerializedClassDefinition::Sierra(sierra_definition)) => { anyhow::ensure!( class_hash == hash, "Class hash mismatch, {} instead of {}", @@ -64,21 +70,23 @@ pub async fn download_class( let (sierra_definition, casm_definition) = if fetch_casm_from_fgw { ( - definition, + sierra_definition, sequencer - .pending_casm_by_hash(class_hash) + .casm_by_hash(class_hash, BlockId::Latest) .await - .with_context(|| format!("Downloading CASM {}", class_hash.0))? - .to_vec(), + .with_context(|| format!("Downloading CASM {}", class_hash.0))?, ) } else { let (send, recv) = tokio::sync::oneshot::channel(); rayon::spawn(move || { let _span = span.entered(); - let compile_result = pathfinder_compiler::compile_to_casm(&definition) - .context("Compiling Sierra class"); - - let _ = send.send((compile_result, definition)); + let compile_result = pathfinder_compiler::compile_sierra_to_casm( + &sierra_definition, + compiler_resource_limit, + blockifier_libfuncs, + ) + .context("Compiling Sierra class"); + let _ = send.send((compile_result, sierra_definition)); }); let (casm_definition, sierra_definition) = recv.await.expect("Panic on rayon thread"); @@ -88,10 +96,9 @@ pub async fn download_class( Err(error) => { tracing::info!(class_hash=%hash, ?error, "CASM compilation failed, falling back to fetching from gateway"); sequencer - .pending_casm_by_hash(class_hash) + .casm_by_hash(class_hash, BlockId::Latest) .await .with_context(|| format!("Downloading CASM {}", class_hash.0))? - .to_vec() } }; (sierra_definition, casm_definition) @@ -126,5 +133,6 @@ pub async fn download_class( casm_hash_v2, }) } + _ => unreachable!("compute_class_hash returns matching hash and class variants"), } } diff --git a/crates/pathfinder/src/state/sync/l1.rs b/crates/pathfinder/src/state/sync/l1.rs index 4fee20780a..5e1a7b4c42 100644 --- a/crates/pathfinder/src/state/sync/l1.rs +++ b/crates/pathfinder/src/state/sync/l1.rs @@ -1,7 +1,9 @@ use std::time::Duration; -use pathfinder_common::Chain; -use pathfinder_ethereum::EthereumApi; +use anyhow::Context; +use pathfinder_common::{Chain, L1BlockNumber}; +use pathfinder_ethereum::{EthereumClient, L1GasPriceData}; +use pathfinder_gas_price::{AddSampleError, L1GasPriceProvider}; use primitive_types::H160; use tokio::sync::mpsc; @@ -18,16 +20,14 @@ pub struct L1SyncContext { pub poll_interval: Duration, } -/// Syncs L1 state update logs. Emits [Ethereum state -/// update](pathfinder_ethereum::EthereumStateUpdate) which should be handled to -/// update storage and respond to queries. -pub async fn sync( +/// Syncs L1 state update logs. +/// +/// Emits [Ethereum state update](pathfinder_ethereum::EthereumStateUpdate) +/// which should be handled to update storage and respond to queries. +pub async fn sync( tx_event: mpsc::Sender, - context: L1SyncContext, -) -> anyhow::Result<()> -where - T: EthereumApi + Clone, -{ + context: L1SyncContext, +) -> anyhow::Result<()> { let L1SyncContext { mut ethereum, chain: _, @@ -49,3 +49,177 @@ where Ok(()) } + +/// Configuration for L1 gas price synchronization. +#[derive(Debug, Clone)] +pub struct L1GasPriceSyncConfig { + /// Number of historical blocks to fetch on startup. + /// Default: 10 + pub startup_blocks: u64, + + /// Delay before reconnecting after a failure (seconds). + /// Default: 15 + pub reconnect_delay_secs: u64, + + /// Maximum gap size (in blocks) to attempt inline backfill. Gaps larger + /// than this trigger a full buffer reset instead. + /// Default: 100 + pub max_gap_blocks: u64, +} + +impl Default for L1GasPriceSyncConfig { + fn default() -> Self { + Self { + startup_blocks: 10, + reconnect_delay_secs: 15, + max_gap_blocks: 100, + } + } +} + +/// Syncs L1 gas prices from block headers into the provider. +/// +/// Uses historical data at startup, and then subscribes to new block headers +/// and adds gas prices as they arrive. +pub async fn sync_gas_prices( + ethereum: EthereumClient, + provider: L1GasPriceProvider, + config: L1GasPriceSyncConfig, +) -> anyhow::Result<()> { + let reconnect_delay = Duration::from_secs(config.reconnect_delay_secs); + + loop { + match sync_gas_prices_inner(ðereum, &provider, &config).await { + Ok(()) => { + tracing::warn!("L1 gas price subscription ended, restarting"); + } + Err(e) => { + tracing::warn!(error = %e, "L1 gas price sync failed, restarting"); + } + } + + provider.clear(); + std::thread::sleep(reconnect_delay); + } +} + +/// A self-contained sync "cycle" for gas price syncing that allows us to +/// recover from gaps and reorgs. +/// +/// Bootstraps with historical data, then subscribes and processes blocks until +/// the subscription ends or an unrecoverable error occurs. +async fn sync_gas_prices_inner( + ethereum: &EthereumClient, + provider: &L1GasPriceProvider, + config: &L1GasPriceSyncConfig, +) -> anyhow::Result<()> { + // Bootstrap with historical data up to the latest block (not just finalized) + // to minimize the gap between bootstrap and the first subscription block. + let latest = ethereum.get_latest_block_number().await?; + let start_block = + L1BlockNumber::new_or_panic(latest.get().saturating_sub(config.startup_blocks).max(1)); + + tracing::debug!( + start = %start_block, + end = %latest, + "Fetching historical gas prices" + ); + + let historical_data = ethereum + .get_gas_price_data_range(start_block, latest) + .await + .context("Fetching historical gas prices")?; + + provider + .add_samples(historical_data) + .context("Adding historical samples")?; + + tracing::debug!( + samples = provider.sample_count(), + "Historical gas prices loaded" + ); + + // Subscribe to new block headers + let (tx, mut rx) = mpsc::channel::(32); + + let ethereum_for_sub = ethereum.clone(); + util::task::spawn(async move { + if let Err(e) = ethereum_for_sub.subscribe_block_headers(tx).await { + tracing::warn!(error = %e, "Block header subscription failed"); + } + }); + + // Process incoming blocks + while let Some(data) = rx.recv().await { + process_block(ethereum, provider, config, data).await?; + } + + // Channel closed (WS died) + Ok(()) +} + +/// Processes a single block from the subscription. Handles gaps via inline +/// backfill and signals reorgs as errors for the outer loop to handle. +async fn process_block( + ethereum: &EthereumClient, + provider: &L1GasPriceProvider, + config: &L1GasPriceSyncConfig, + data: L1GasPriceData, +) -> anyhow::Result<()> { + match provider.add_sample(data) { + Ok(()) => { + tracing::trace!( + block = %data.block_number, + base_fee = data.base_fee_per_gas, + blob_fee = data.blob_fee, + "Added gas price sample" + ); + Ok(()) + } + Err(AddSampleError::Gap { expected, actual }) => { + if actual < expected { + anyhow::bail!("Block number went backward: expected {expected}, got {actual}"); + } + + let gap_size = actual.get() - expected.get(); + + if gap_size > config.max_gap_blocks { + anyhow::bail!( + "Gap too large ({gap_size} blocks, max {}), restarting", + config.max_gap_blocks + ); + } + + tracing::info!( + expected = %expected, + actual = %actual, + gap_size, + "Gap detected, backfilling" + ); + + let gap_end = L1BlockNumber::new_or_panic(actual.get() - 1); + let gap_data = ethereum + .get_gas_price_data_range(expected, gap_end) + .await + .context("Backfilling gap")?; + + provider + .add_samples(gap_data) + .context("Adding gap-fill samples")?; + + provider + .add_sample(data) + .context("Adding block after gap-fill")?; + + tracing::info!( + from = %expected, + to = %data.block_number, + "Gap filled successfully" + ); + Ok(()) + } + Err(AddSampleError::Reorg { block_number, .. }) => { + anyhow::bail!("L1 reorg detected at block {block_number}"); + } + } +} diff --git a/crates/pathfinder/src/state/sync/l2.rs b/crates/pathfinder/src/state/sync/l2.rs index 52a86a26c0..2fe08b45b2 100644 --- a/crates/pathfinder/src/state/sync/l2.rs +++ b/crates/pathfinder/src/state/sync/l2.rs @@ -3,6 +3,13 @@ use std::time::Duration; use anyhow::{anyhow, Context}; use futures::{StreamExt, TryStreamExt}; +use pathfinder_block_commitments::{ + calculate_event_commitment, + calculate_receipt_commitment, + calculate_transaction_commitment, + header_from_gateway_block, + verify_block_hash, +}; use pathfinder_common::prelude::*; use pathfinder_common::state_update::{ContractClassUpdate, StateUpdateData}; use pathfinder_common::Chain; @@ -10,18 +17,12 @@ use pathfinder_storage::Storage; use starknet_gateway_client::GatewayApi; use starknet_gateway_types::error::SequencerError; use starknet_gateway_types::reply::{Block, BlockSignature, Status}; -use tokio::sync::mpsc; +use tokio::sync::{mpsc, watch}; use tracing::Instrument; -use crate::state::block_hash::{ - calculate_event_commitment, - calculate_receipt_commitment, - calculate_transaction_commitment, - header_from_gateway_block, - verify_block_hash, -}; use crate::state::sync::class::{download_class, DownloadedClass}; use crate::state::sync::SyncEvent; +use crate::{ConsensusChannels, SyncMessageToConsensus}; #[derive(Default, Debug, Clone, Copy)] pub struct Timings { @@ -91,6 +92,8 @@ pub struct L2SyncContext { pub block_validation_mode: BlockValidationMode, pub storage: Storage, pub sequencer_public_key: PublicKey, + pub compiler_resource_limits: pathfinder_compiler::ResourceLimits, + pub blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, pub fetch_concurrency: std::num::NonZeroUsize, pub fetch_casm_from_fgw: bool, } @@ -100,7 +103,7 @@ pub async fn sync( context: L2SyncContext, mut head: Option<(BlockNumber, BlockHash, StateCommitment)>, mut blocks: BlockChain, - mut latest: tokio::sync::watch::Receiver<(BlockNumber, BlockHash)>, + mut latest: watch::Receiver<(BlockNumber, BlockHash)>, ) -> anyhow::Result<()> where GatewayClient: GatewayApi + Clone + Send + 'static, @@ -123,6 +126,8 @@ where block_validation_mode, storage, sequencer_public_key, + compiler_resource_limits, + blockifier_libfuncs, fetch_concurrency: _, fetch_casm_from_fgw, } = context; @@ -234,6 +239,349 @@ where &state_update, &sequencer, storage.clone(), + compiler_resource_limits, + blockifier_libfuncs, + fetch_casm_from_fgw, + ) + .await + .with_context(|| format!("Handling newly declared classes for block {next:?}"))?; + emit_events_for_downloaded_classes( + &tx_event, + downloaded_classes, + &state_update.declared_sierra_classes, + ) + .await?; + let t_declare = t_declare.elapsed(); + + // Download signature + let (signature_result, t_signature) = signature_handle + .await + .context("Joining signature task")? + .context("Task cancelled")?; + let (signature, t_signature) = match signature_result { + Ok(signature) => (signature, t_signature), + Err(SequencerError::StarknetError(err)) + if err.code + == starknet_gateway_types::error::KnownStarknetErrorCode::BlockNotFound + .into() => + { + // There is a race condition here: if the query for the signature was made + // _before_ the block was published -- but by the time we + // actually queried for the block it was there. In this case + // we just retry the signature download until we get it. + let t_signature = std::time::Instant::now(); + let signature = loop { + match sequencer.signature(next.into()).await { + Ok(s) => { + break s; + } + Err(SequencerError::StarknetError(err)) + if err.code + == starknet_gateway_types::error::KnownStarknetErrorCode::BlockNotFound + .into() => + { + // Wait a bit and retry + tokio::time::sleep(Duration::from_millis(500)).await; + continue; + } + Err(err) => { + return Err(err) + .context(format!("Fetch signature for block {next:?} from sequencer")) + } + } + }; + (signature, t_signature.elapsed()) + } + Err(err) => { + return Err(err) + .context(format!("Fetch signature for block {next:?} from sequencer")) + } + }; + + // An extra sanity check for the signature API. + anyhow::ensure!( + block.block_hash == signature.block_hash, + "Signature block hash mismatch, actual {:x}, expected {:x}", + signature.block_hash.0, + block.block_hash.0, + ); + + // Check block commitment signature + let signature: BlockCommitmentSignature = signature.signature(); + let (signature, state_update) = match block_validation_mode { + BlockValidationMode::Strict => { + let block_hash = block.block_hash; + let (tx, rx) = tokio::sync::oneshot::channel(); + rayon::spawn(move || { + let verify_result = signature.verify(sequencer_public_key, block_hash); + let _ = tx.send((verify_result, signature, state_update)); + }); + let (verify_result, signature, state_update) = + rx.await.context("Panic on rayon thread")?; + + if let Err(error) = verify_result { + tracing::warn!(%error, block_number=%block.block_number, "Block commitment signature mismatch"); + } + (signature, state_update) + } + BlockValidationMode::AllowMismatch => (signature, state_update), + }; + + head = Some((next, block.block_hash, state_update.state_commitment)); + blocks.push(next, block.block_hash, state_update.state_commitment); + + let timings = Timings { + block_download: t_block, + class_declaration: t_declare, + signature_download: t_signature, + }; + + tx_event + .send(SyncEvent::DownloadedBlock( + (block, commitments), + state_update, + Box::new(signature), + Box::new(state_diff_commitment), + timings, + )) + .await + .context("Event channel closed")?; + } +} + +/// Same as [sync] with the key differences being: +/// - has no bulk sync phase (PoC for consensus sync, keeping it as simple as +/// possible) +/// - interacts with consensus via [ConsensusChannels] +pub async fn consensus_sync( + tx_event: mpsc::Sender, + consensus_channels: Option, + context: L2SyncContext, + mut head: Option<(BlockNumber, BlockHash, StateCommitment)>, + mut blocks: BlockChain, + mut latest: watch::Receiver<(BlockNumber, BlockHash)>, +) -> anyhow::Result<()> +where + GatewayClient: GatewayApi + Clone + Send + 'static, +{ + let L2SyncContext { + sequencer, + chain, + chain_id, + block_validation_mode, + storage, + sequencer_public_key, + compiler_resource_limits, + blockifier_libfuncs, + fetch_concurrency: _, + fetch_casm_from_fgw, + } = context; + + let ConsensusChannels { + mut consensus_info_watch, + sync_to_consensus_tx, + } = consensus_channels + .expect("In consensus-aware L2 sync, consensus channels are always provided"); + + // In case of a freshly bootstrapped network both watched values will not be + // available, so we wait for either to yield a value to avoid busy-looping + // in the loop below. + let consensus_watch_fut = consensus_info_watch.wait_for(|info| info.highest_decision.is_some()); + let fgw_watch_fut = latest.wait_for(|(number, hash)| { + // The watch does not wrap the missing value in an Option, because we want to + // avoid runtime checks in production sync (which is FGw only at the moment and + // assumes that the watch is always initialized with a valid value). + if number == &BlockNumber::GENESIS { + // Zero hash indicates an uninitialized watch + hash != &BlockHash::ZERO + } else { + true + } + }); + + tokio::select! { + biased; + + _ = consensus_watch_fut => {} + _ = fgw_watch_fut => {} + } + + // Start polling head of chain + 'outer: loop { + // Get the next block from L2. + let (next, head_meta) = match &head { + Some(head) => (head.0 + 1, Some(head)), + None => (BlockNumber::GENESIS, None), + }; + + // Check if the Consensus engine has already committed this block + // to avoid redundant downloads. + let (tx, rx) = tokio::sync::oneshot::channel(); + let request = SyncMessageToConsensus::GetConsensusFinalizedBlock { + number: next, + reply: tx, + }; + sync_to_consensus_tx + .send(request) + .await + .context("Requesting committed block")?; + + let reply = rx + .await + .context("Receiving committed block from consensus")?; + + // IMPORTANT + // A race condition can occur in fast local networks: + // - Alice (the proposer) commits H + // - FGw uses Alice's DB directly, so it also serves H immediately + // - Bob hasn't committed H yet, he executed the proposal at H and voted on it, + // but his internal consensus engine hasn't communicated the positive decision + // yet, so he asks for the block from FGw + // - Bob downloads H from FGw, even though he will shortly have a confirmation + // that he can commit the locally executed proposal at H. + if let Some(l2_block) = reply { + tracing::debug!("Block {next} already committed in consensus, skipping download"); + + let (state_tries_updated_tx, rx) = tokio::sync::oneshot::channel(); + + tx_event + .send(SyncEvent::FinalizedConsensusBlock { + l2_block, + state_tries_updated_tx, + }) + .await + .context("Event channel closed")?; + + let (block_hash, state_commitment) = rx + .await + .context("Waiting for state tries to be updated in consumer")?; + + head = Some((next, block_hash, state_commitment)); + blocks.push(next, block_hash, state_commitment); + + continue 'outer; + } + + tracing::debug!("Downloading block {next} from sequencer"); + + // We start downloading the signature for the block + let signature_handle = util::task::spawn({ + let sequencer = sequencer.clone(); + async move { + let t_signature = std::time::Instant::now(); + let result = sequencer.signature(next.into()).await; + let t_signature = t_signature.elapsed(); + + Ok((result, t_signature)) + } + }); + + let t_block = std::time::Instant::now(); + + let (block, commitments, state_update, state_diff_commitment) = loop { + match download_block( + next, + chain, + chain_id, + head_meta.map(|h| h.1), + &sequencer, + &blocks, + block_validation_mode, + ) + .await? + { + DownloadBlock::Block(block, commitments, state_update, state_diff_commitment) => { + break (block, commitments, state_update, state_diff_commitment) + } + DownloadBlock::Wait => { + let fgw_fut = latest.wait_for(|(_, hash)| hash != &head.unwrap_or_default().1); + let consensus_fut = consensus_info_watch.changed(); + + tokio::select! { + biased; + + res = consensus_fut => { + match res { + Ok(_) => continue 'outer, + Err(_) => { + tracing::debug!("Consensus info watch closed, exiting"); + return Ok(()); + } + } + } + res = fgw_fut => { + if res.is_err() { + tracing::debug!("Feeder gateway latest watch closed, exiting"); + return Ok(()); + } + // Otherwise we just retry downloading the block + } + } + } + DownloadBlock::Retry => { + // Now try from consensus, and then retry downloading from the FGw + continue 'outer; + } + DownloadBlock::Reorg => { + head = match head { + Some(some_head) => reorg( + &some_head, + chain, + chain_id, + &tx_event, + &sequencer, + &blocks, + block_validation_mode, + ) + .await + .context("L2 reorg")?, + None => None, + }; + + match &head { + Some((number, hash, commitment)) => { + blocks.push(*number, *hash, *commitment) + } + None => blocks.reset_to_genesis(), + } + + continue 'outer; + } + } + }; + let t_block = t_block.elapsed(); + + if let Some(some_head) = &head { + if some_head.1 != block.parent_block_hash { + head = reorg( + some_head, + chain, + chain_id, + &tx_event, + &sequencer, + &blocks, + block_validation_mode, + ) + .await + .context("L2 reorg")?; + + match &head { + Some((number, hash, commitment)) => blocks.push(*number, *hash, *commitment), + None => blocks.reset_to_genesis(), + } + + continue 'outer; + } + } + + // Download and emit newly declared classes. + let t_declare = std::time::Instant::now(); + let downloaded_classes = download_new_classes( + &state_update, + &sequencer, + storage.clone(), + compiler_resource_limits, + blockifier_libfuncs, fetch_casm_from_fgw, ) .await @@ -330,7 +678,7 @@ where }; tx_event - .send(SyncEvent::Block( + .send(SyncEvent::DownloadedBlock( (block, commitments), state_update, Box::new(signature), @@ -350,7 +698,7 @@ where pub async fn poll_latest( gateway: impl GatewayApi, interval: Duration, - sender: tokio::sync::watch::Sender<(BlockNumber, BlockHash)>, + sender: watch::Sender<(BlockNumber, BlockHash)>, ) { let mut interval = tokio::time::interval(interval); interval.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Delay); @@ -390,6 +738,8 @@ pub async fn download_new_classes( state_update: &StateUpdate, sequencer: &impl GatewayApi, storage: Storage, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, fetch_casm_from_fgw: bool, ) -> Result, anyhow::Error> { let deployed_classes = state_update @@ -444,9 +794,15 @@ pub async fn download_new_classes( let futures = require_downloading.into_iter().map(|class_hash| { async move { - download_class(sequencer, class_hash, fetch_casm_from_fgw) - .await - .with_context(|| format!("Downloading class {}", class_hash.0)) + download_class( + sequencer, + class_hash, + compiler_resource_limits, + blockifier_libfuncs, + fetch_casm_from_fgw, + ) + .await + .with_context(|| format!("Downloading class {}", class_hash.0)) } .in_current_span() }); @@ -524,6 +880,20 @@ async fn download_block( let state_update = Box::new(state_update); let state_diff_length = state_update.state_diff_length(); + // TODO Currently empty proposals used for consensus integration tests carry an + // empty state diff commitment. + #[cfg(all( + feature = "p2p", + feature = "consensus-integration-tests", + debug_assertions + ))] + let state_diff_commitment = + if block.state_diff_commitment == Some(StateDiffCommitment::ZERO) { + StateDiffCommitment::ZERO + } else { + state_diff_commitment + }; + let block_number = block.block_number; let verify_result = verify_gateway_block_commitments_and_hash( &block, @@ -571,11 +941,20 @@ async fn download_block( } } Err(SequencerError::StarknetError(err)) if err.code == BlockNotFound.into() => { - // We've queried past the head of the chain. - let (seq_head_number, seq_head_hash) = sequencer - .head() - .await - .context("Query sequencer for latest block")?; + // We've queried past the head of the chain or the genesis block is not yet + // available. + let (seq_head_number, seq_head_hash) = match sequencer.head().await { + Ok(x) => x, + Err(SequencerError::StarknetError(err)) if err.code == BlockNotFound.into() => { + return Ok(DownloadBlock::Wait); + } + // head() retries on non starknet errors so any other starknet error code indicates + // a problem with the feeder gateway + Err(error) => { + tracing::error!(%error, "Error fetching latest block from gateway"); + Err(error).context("Fetching latest block from gateway")? + } + }; if seq_head_number >= block_number { // We were ahead of the sequencer but in the meantime it has caught up to us. We @@ -635,6 +1014,8 @@ where block_validation_mode, storage, sequencer_public_key, + compiler_resource_limits, + blockifier_libfuncs, fetch_concurrency, fetch_casm_from_fgw, } = context; @@ -734,12 +1115,18 @@ where .context("Verifying block contents")?; let t_declare = std::time::Instant::now(); - let downloaded_classes = - download_new_classes(&state_update, &sequencer, storage, fetch_casm_from_fgw) - .await - .with_context(|| { - format!("Handling newly declared classes for block {block_number:?}") - })?; + let downloaded_classes = download_new_classes( + &state_update, + &sequencer, + storage, + compiler_resource_limits, + blockifier_libfuncs, + fetch_casm_from_fgw, + ) + .await + .with_context(|| { + format!("Handling newly declared classes for block {block_number:?}") + })?; let t_declare = t_declare.elapsed(); let timings = Timings { @@ -861,7 +1248,7 @@ where .await?; tx_event - .send(SyncEvent::Block( + .send(SyncEvent::DownloadedBlock( ( Box::new(block), (transaction_commitment, event_commitment, receipt_commitment), @@ -1063,6 +1450,7 @@ fn verify_gateway_block_commitments_and_hash( let computed_transaction_commitment = calculate_transaction_commitment(&block.transactions, block.starknet_version)?; + let block_number = block.block_number; // Older blocks on mainnet don't carry a precalculated transaction commitment. if block.transaction_commitment == TransactionCommitment::ZERO { @@ -1070,7 +1458,7 @@ fn verify_gateway_block_commitments_and_hash( // possible. header.transaction_commitment = computed_transaction_commitment; } else if computed_transaction_commitment != header.transaction_commitment { - tracing::debug!(%computed_transaction_commitment, actual_transaction_commitment=%header.transaction_commitment, "Transaction commitment mismatch"); + tracing::debug!(%block_number, %computed_transaction_commitment, actual_transaction_commitment=%header.transaction_commitment, "Transaction commitment mismatch"); return Ok(VerifyResult::Mismatch); } @@ -1084,7 +1472,7 @@ fn verify_gateway_block_commitments_and_hash( // Older blocks on mainnet don't carry a precalculated receipt commitment. if let Some(receipt_commitment) = block.receipt_commitment { if computed_receipt_commitment != receipt_commitment { - tracing::debug!(%computed_receipt_commitment, actual_receipt_commitment=%receipt_commitment, "Receipt commitment mismatch"); + tracing::debug!(%block_number, %computed_receipt_commitment, actual_receipt_commitment=%receipt_commitment, "Receipt commitment mismatch"); return Ok(VerifyResult::Mismatch); } } else { @@ -1098,6 +1486,7 @@ fn verify_gateway_block_commitments_and_hash( .iter() .map(|(receipt, events)| (receipt.transaction_hash, events.as_slice())) .collect::>(); + let event_commitment = calculate_event_commitment(&events_with_tx_hashes, block.starknet_version)?; @@ -1108,12 +1497,12 @@ fn verify_gateway_block_commitments_and_hash( // possible. header.event_commitment = event_commitment; } else if event_commitment != block.event_commitment { - tracing::debug!(computed_event_commitment=%event_commitment, actual_event_commitment=%block.event_commitment, "Event commitment mismatch"); + tracing::debug!(%block_number, computed_event_commitment=%event_commitment, actual_event_commitment=%block.event_commitment, "Event commitment mismatch"); return Ok(VerifyResult::Mismatch); } Ok(match verify_block_hash(header, chain, chain_id)? { - crate::state::block_hash::VerifyResult::Match => { + pathfinder_block_commitments::VerifyResult::Match => { // For pre-0.13.2 blocks we actually have to re-compute some commitments: after // we've verified that the block hash is correct we no longer need // the legacy commitments. The P2P protocol requires that all @@ -1144,7 +1533,7 @@ fn verify_gateway_block_commitments_and_hash( VerifyResult::Match((transaction_commitment, event_commitment, receipt_commitment)) } - crate::state::block_hash::VerifyResult::Mismatch => VerifyResult::Mismatch, + pathfinder_block_commitments::VerifyResult::Mismatch => VerifyResult::Mismatch, }) } @@ -1213,6 +1602,7 @@ mod tests { use std::sync::LazyLock; use assert_matches::assert_matches; + use pathfinder_common::class_definition::SerializedOpaqueClassDefinition; use pathfinder_common::macro_prelude::*; use pathfinder_common::prelude::*; use pathfinder_common::Chain; @@ -1366,6 +1756,8 @@ mod tests { block_validation_mode: MODE, storage, sequencer_public_key: PublicKey::ZERO, + compiler_resource_limits: pathfinder_compiler::ResourceLimits::for_test(), + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs::default(), fetch_concurrency: std::num::NonZeroUsize::new(1).unwrap(), fetch_casm_from_fgw: false, }; @@ -1408,6 +1800,8 @@ mod tests { block_validation_mode: MODE, storage, sequencer_public_key: PublicKey::ZERO, + compiler_resource_limits: pathfinder_compiler::ResourceLimits::for_test(), + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs::default(), fetch_concurrency: std::num::NonZeroUsize::new(1).unwrap(), fetch_casm_from_fgw: false, }; @@ -1439,6 +1833,8 @@ mod tests { storage, sequencer_public_key: PublicKey::ZERO, fetch_concurrency: std::num::NonZeroUsize::new(2).unwrap(), + compiler_resource_limits: pathfinder_compiler::ResourceLimits::for_test(), + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs::default(), fetch_casm_from_fgw: false, }; @@ -1458,12 +1854,15 @@ mod tests { }) } - static CONTRACT0_DEF: LazyLock = - LazyLock::new(|| format!("{DEF0}0{DEF1}").into()); - static CONTRACT0_DEF_V2: LazyLock = - LazyLock::new(|| format!("{DEF0}0 v2{DEF1}").into()); - static CONTRACT1_DEF: LazyLock = - LazyLock::new(|| format!("{DEF0}1{DEF1}").into()); + static CONTRACT0_DEF: LazyLock = LazyLock::new(|| { + SerializedOpaqueClassDefinition::from_bytes(format!("{DEF0}0{DEF1}").into_bytes()) + }); + static CONTRACT0_DEF_V2: LazyLock = LazyLock::new(|| { + SerializedOpaqueClassDefinition::from_bytes(format!("{DEF0}0 v2{DEF1}").into_bytes()) + }); + static CONTRACT1_DEF: LazyLock = LazyLock::new(|| { + SerializedOpaqueClassDefinition::from_bytes(format!("{DEF0}1{DEF1}").into_bytes()) + }); static BLOCK0: LazyLock = LazyLock::new(|| reply::Block { block_hash: BLOCK0_HASH, @@ -1739,36 +2138,36 @@ mod tests { mock: &mut MockGatewayApi, seq: &mut mockall::Sequence, class_hash: ClassHash, - returned_result: Result, + returned_result: Result, ) { - mock.expect_pending_class_by_hash() - .withf(move |x| x == &class_hash) + mock.expect_class_by_hash() + .withf(move |x, _| x == &class_hash) .times(1) .in_sequence(seq) - .return_once(|_| returned_result); + .return_once(|_, _| returned_result); } /// Convenience wrapper fn expect_class_by_hash_no_sequence( mock: &mut MockGatewayApi, class_hash: ClassHash, - returned_result: Result, + returned_result: Result, ) { - mock.expect_pending_class_by_hash() - .withf(move |x| x == &class_hash) + mock.expect_class_by_hash() + .withf(move |x, _| x == &class_hash) .times(1) - .return_once(|_| returned_result); + .return_once(|_, _| returned_result); } fn expect_class_by_hash_no_sequence_at_most_once( mock: &mut MockGatewayApi, class_hash: ClassHash, - returned_result: Result, + returned_result: Result, ) { - mock.expect_pending_class_by_hash() - .withf(move |x| x == &class_hash) + mock.expect_class_by_hash() + .withf(move |x, _| x == &class_hash) .times(..=1) - .return_once(|_| returned_result); + .return_once(|_, _| returned_result); } /// Convenience wrapper @@ -1869,7 +2268,7 @@ mod tests { SyncEvent::CairoClass { hash, .. } => { assert_eq!(hash, CONTRACT0_HASH); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, signature, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, signature, _, _) => { assert_eq!(*block, *BLOCK0); assert_eq_sorted!(*state_update, *STATE_UPDATE0); // assert_eq!(*signature, BLOCK0_COMMITMENT_SIGNATURE); @@ -1879,7 +2278,7 @@ mod tests { SyncEvent::CairoClass { hash, .. } => { assert_eq!(hash, CONTRACT1_HASH); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, signature, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, signature, _, _) => { assert_eq!(*block, *BLOCK1); assert_eq_sorted!(*state_update, *STATE_UPDATE1); // assert_eq!(*signature, BLOCK1_COMMITMENT_SIGNATURE); @@ -1947,6 +2346,8 @@ mod tests { ) .unwrap(), sequencer_public_key: PublicKey::ZERO, + compiler_resource_limits: pathfinder_compiler::ResourceLimits::for_test(), + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs::default(), fetch_concurrency: std::num::NonZeroUsize::new(1).unwrap(), fetch_casm_from_fgw: false, }; @@ -1967,7 +2368,7 @@ mod tests { SyncEvent::CairoClass{hash, ..} => { assert_eq!(hash, CONTRACT1_HASH); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, *BLOCK1); assert_eq!(*state_update, *STATE_UPDATE1); }); @@ -2133,7 +2534,7 @@ mod tests { SyncEvent::CairoClass{hash, ..} => { assert_eq!(hash, CONTRACT0_HASH); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, *BLOCK0); assert_eq!(*state_update, *STATE_UPDATE0); }); @@ -2141,7 +2542,7 @@ mod tests { SyncEvent::CairoClass{hash, ..} => { assert_eq!(hash, CONTRACT1_HASH); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, *BLOCK1); assert_eq!(*state_update, *STATE_UPDATE1); }); @@ -2151,7 +2552,7 @@ mod tests { latest_tx.send((BLOCK2_NUMBER, BLOCK2_HASH)).unwrap(); assert_matches!(rx_event.recv().await.unwrap(), - SyncEvent::Block((block, _), state_update, _, _, _) => { + SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, *BLOCK2); assert_eq!(*state_update, *STATE_UPDATE2); }); @@ -2273,7 +2674,7 @@ mod tests { SyncEvent::CairoClass{hash, ..} => { assert_eq!(hash, CONTRACT0_HASH); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, *BLOCK0); assert_eq_sorted!(*state_update, *STATE_UPDATE0); }); @@ -2285,7 +2686,7 @@ mod tests { SyncEvent::CairoClass{hash, ..} => { assert_eq!(hash, CONTRACT0_HASH_V2); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, *BLOCK0_V2); assert_eq_sorted!(*state_update, *STATE_UPDATE0_V2); }); @@ -2504,7 +2905,7 @@ mod tests { SyncEvent::CairoClass{hash, ..} => { assert_eq!(hash, CONTRACT0_HASH); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, *BLOCK0); assert_eq!(*state_update, *STATE_UPDATE0); insert_block_header(&storage, *block); @@ -2513,12 +2914,12 @@ mod tests { SyncEvent::CairoClass{hash, ..} => { assert_eq!(hash, CONTRACT1_HASH); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, *BLOCK1); assert_eq!(*state_update, *STATE_UPDATE1); insert_block_header(&storage, *block); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, *BLOCK2); assert_eq!(*state_update, *STATE_UPDATE2); insert_block_header(&storage, *block); @@ -2542,12 +2943,12 @@ mod tests { .send((block1_v2.block_number, block1_v2.block_hash)) .unwrap(); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, *BLOCK0_V2); assert_eq!(*state_update, *STATE_UPDATE0_V2); insert_block_header(&storage, *block); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, block1_v2); assert!(state_update.contract_updates.is_empty()); insert_block_header(&storage, *block); @@ -2847,7 +3248,7 @@ mod tests { SyncEvent::CairoClass{hash, ..} => { assert_eq!(hash, CONTRACT0_HASH); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, *BLOCK0); assert_eq!(*state_update, *STATE_UPDATE0); insert_block_header(&storage, *block); @@ -2856,17 +3257,17 @@ mod tests { SyncEvent::CairoClass{hash, ..} => { assert_eq!(hash, CONTRACT1_HASH); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, *BLOCK1); assert_eq!(*state_update, *STATE_UPDATE1); insert_block_header(&storage, *block); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, *BLOCK2); assert_eq!(*state_update, *STATE_UPDATE2); insert_block_header(&storage, *block); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, block3); assert_eq!(*state_update, *STATE_UPDATE3); insert_block_header(&storage, *block); @@ -2884,12 +3285,12 @@ mod tests { l2_reorg(&tx, tail).unwrap(); tx.commit().unwrap(); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, block1_v2); assert_eq!(*state_update, *STATE_UPDATE1_V2); insert_block_header(&storage, *block); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, block2_v2); assert_eq!(*state_update, *STATE_UPDATE2_V2); insert_block_header(&storage, *block); @@ -3079,7 +3480,7 @@ mod tests { SyncEvent::CairoClass{hash, ..} => { assert_eq!(hash, CONTRACT0_HASH); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, *BLOCK0); assert_eq!(*state_update, *STATE_UPDATE0); }); @@ -3087,11 +3488,11 @@ mod tests { SyncEvent::CairoClass{hash, ..} => { assert_eq!(hash, CONTRACT1_HASH); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, *BLOCK1); assert_eq!(*state_update, *STATE_UPDATE1); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, *BLOCK2); assert_eq!(*state_update, *STATE_UPDATE2); }); @@ -3104,7 +3505,7 @@ mod tests { assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Reorg(tail) => { assert_eq!(tail, BLOCK2_NUMBER); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, block2_v2); assert_eq!(*state_update, *STATE_UPDATE2_V2); }); @@ -3309,7 +3710,7 @@ mod tests { SyncEvent::CairoClass{hash, ..} => { assert_eq!(hash, CONTRACT0_HASH); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, *BLOCK0); assert_eq!(*state_update, *STATE_UPDATE0); }); @@ -3317,7 +3718,7 @@ mod tests { SyncEvent::CairoClass{hash, ..} => { assert_eq!(hash, CONTRACT1_HASH); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, *BLOCK1); assert_eq!(*state_update, *STATE_UPDATE1); }); @@ -3325,11 +3726,11 @@ mod tests { assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Reorg(tail) => { assert_eq!(tail, BLOCK1_NUMBER); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, block1_v2); assert_eq!(*state_update, *STATE_UPDATE1_V2); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, _, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, _, _, _) => { assert_eq!(*block, block2); assert_eq!(*state_update, *STATE_UPDATE2); }); @@ -3428,7 +3829,7 @@ mod tests { SyncEvent::CairoClass { hash, .. } => { assert_eq!(hash, CONTRACT0_HASH); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, signature, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, signature, _, _) => { assert_eq!(*block, *BLOCK0); assert_eq_sorted!(*state_update, *STATE_UPDATE0); assert_eq!(*signature, BLOCK0_SIGNATURE.signature()); @@ -3437,7 +3838,7 @@ mod tests { SyncEvent::CairoClass { hash, .. } => { assert_eq!(hash, CONTRACT1_HASH); }); - assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::Block((block, _), state_update, signature, _, _) => { + assert_matches!(rx_event.recv().await.unwrap(), SyncEvent::DownloadedBlock((block, _), state_update, signature, _, _) => { assert_eq!(*block, *BLOCK1); assert_eq_sorted!(*state_update, *STATE_UPDATE1); assert_eq!(*signature, BLOCK1_SIGNATURE.signature()); diff --git a/crates/pathfinder/src/state/sync/pending.rs b/crates/pathfinder/src/state/sync/pending.rs index a2c5f2eb6b..f441c4ff63 100644 --- a/crates/pathfinder/src/state/sync/pending.rs +++ b/crates/pathfinder/src/state/sync/pending.rs @@ -1,6 +1,5 @@ use anyhow::Context; -use pathfinder_common::{BlockHash, BlockNumber, StarknetVersion}; -use pathfinder_storage::Storage; +use pathfinder_common::{BlockHash, BlockNumber}; use starknet_gateway_client::GatewayApi; use tokio::sync::watch; use tokio::time::Instant; @@ -9,140 +8,13 @@ use crate::state::sync::SyncEvent; /// Emits new pending data events while the current block is close to the latest /// block. -pub async fn poll_pending( +#[allow(clippy::too_many_arguments)] +pub async fn poll_pre_confirmed( tx_event: tokio::sync::mpsc::Sender, sequencer: S, poll_interval: std::time::Duration, - storage: Storage, latest: watch::Receiver<(BlockNumber, BlockHash)>, current: watch::Receiver<(BlockNumber, BlockHash)>, - fetch_casm_from_fgw: bool, -) { - poll_pre_starknet_0_14_0( - &tx_event, - &sequencer, - poll_interval, - &storage, - &latest, - ¤t, - fetch_casm_from_fgw, - ) - .await; - - poll_starknet_0_14_0( - &tx_event, - &sequencer, - poll_interval, - &storage, - &latest, - ¤t, - fetch_casm_from_fgw, - ) - .await; -} - -const STARKNET_VERSION_0_14_0: StarknetVersion = StarknetVersion::new(0, 14, 0, 0); - -pub async fn poll_pre_starknet_0_14_0( - tx_event: &tokio::sync::mpsc::Sender, - sequencer: &S, - poll_interval: std::time::Duration, - storage: &Storage, - latest: &watch::Receiver<(BlockNumber, BlockHash)>, - current: &watch::Receiver<(BlockNumber, BlockHash)>, - fetch_casm_from_fgw: bool, -) { - let mut prev_tx_count = 0; - let mut prev_hash = BlockHash::default(); - - loop { - let t_fetch = Instant::now(); - - let latest = latest.borrow().0.get(); - let current = current.borrow().0.get(); - - if latest.abs_diff(current) > 6 { - tracing::debug!(%latest, %current, "Not in sync yet; skipping pending block download"); - tokio::time::sleep_until(t_fetch + poll_interval).await; - continue; - } - - let (block, state_update) = match sequencer.pending_block().await { - Ok(r) => r, - Err(err) => { - tracing::debug!(%err, "Failed to fetch pending block"); - tokio::time::sleep_until(t_fetch + poll_interval).await; - continue; - } - }; - - // If we've reached Starknet 0.14.0, stop polling for pending blocks as we need - // to transition to polling the pre-confirmed block instead. - if block.starknet_version >= STARKNET_VERSION_0_14_0 { - tracing::debug!("Reached Starknet 0.14.0, stopping pending block polling"); - break; - } - - // Use the transaction count as a proxy for freshness of the pending data. - // - // The sequencer has multiple feeder gateways which are not 100% in sync making - // it possible for us to receive stale data, older than the previous data. - if block.parent_hash == prev_hash && block.transactions.len() <= prev_tx_count { - tracing::trace!("No change in pending block data"); - tokio::time::sleep_until(t_fetch + poll_interval).await; - continue; - } - - // Download, process and emit all missing classes. This can occasionally - // fail when querying a desync'd feeder gateway which isn't aware of the - // new pending classes. In this case, ignore the new pending data as it - // is incomplete. - match super::l2::download_new_classes( - &state_update, - sequencer, - storage.clone(), - fetch_casm_from_fgw, - ) - .await - { - Err(e) => tracing::debug!(reason=?e, "Failed to download pending classes"), - Ok(downloaded_classes) => { - if let Err(e) = super::l2::emit_events_for_downloaded_classes( - tx_event, - downloaded_classes, - &state_update.declared_sierra_classes, - ) - .await - { - tracing::error!(error=%e, "Event channel closed unexpectedly. Ending pending stream."); - break; - } - - prev_tx_count = block.transactions.len(); - prev_hash = block.parent_hash; - tracing::trace!("Emitting a pending update"); - if let Err(e) = tx_event - .send(SyncEvent::Pending((block.into(), state_update.into()))) - .await - { - tracing::error!(error=%e, "Event channel closed unexpectedly. Ending pending stream."); - break; - } - } - } - - tokio::time::sleep_until(t_fetch + poll_interval).await; - } -} - -pub async fn poll_starknet_0_14_0( - tx_event: &tokio::sync::mpsc::Sender, - sequencer: &S, - poll_interval: std::time::Duration, - storage: &Storage, - latest: &watch::Receiver<(BlockNumber, BlockHash)>, - current: &watch::Receiver<(BlockNumber, BlockHash)>, - fetch_casm_from_fgw: bool, ) { const IN_SYNC_THRESHOLD: u64 = 6; @@ -197,7 +69,7 @@ pub async fn poll_starknet_0_14_0( continue; } - let pre_latest_data = match fetch_pre_latest(sequencer, latest_number, latest_hash).await { + let pre_latest_data = match fetch_pre_latest(&sequencer, latest_number, latest_hash).await { Ok(r) => r.map(Box::new), Err(e) => { tracing::debug!(%e, "Failed to fetch pre-latest block"); @@ -206,48 +78,13 @@ pub async fn poll_starknet_0_14_0( } }; - let pre_confirmed_block_number = if let Some(pre_latest) = pre_latest_data.as_ref() { - let (_, _, state_update) = pre_latest.as_ref(); - - // Download, process and emit all missing classes. This can occasionally - // fail when querying an out of sync feeder gateway which isn't aware of - // the new pending classes. In this case, ignore the new pending data as - // it is incomplete. - match super::l2::download_new_classes( - state_update, - sequencer, - storage.clone(), - fetch_casm_from_fgw, - ) - .await - { - Err(e) => { - tracing::debug!(reason=?e, "Failed to download pending classes"); - // Ignore incomplete pending data. - tokio::time::sleep_until(t_fetch + poll_interval).await; - continue; - } - Ok(downloaded_classes) => { - if let Err(e) = super::l2::emit_events_for_downloaded_classes( - tx_event, - downloaded_classes, - &state_update.declared_sierra_classes, - ) - .await - { - tracing::error!(error=%e, "Event channel closed unexpectedly. Ending pre-confirmed stream."); - break; - } - } - } - - // Pre-latest block exists which means that the sequencer has already started - // building the next pre-confirmed block. + // If the pre-latest block (latest + 1) exists then the sequencer has already + // started building the next pre-confirmed block (latest + 2). + let pre_confirmed_block_number = if pre_latest_data.is_some() { latest_number + 2 } else { latest_number + 1 }; - let pre_confirmed_block = match sequencer .preconfirmed_block(pre_confirmed_block_number.into()) .await @@ -278,12 +115,11 @@ pub async fn poll_starknet_0_14_0( tracing::error!(error=%e, "Event channel closed unexpectedly. Ending pre-confirmed stream."); break; } - - tokio::time::sleep_until(t_fetch + poll_interval).await; } else { tracing::trace!("No change in pre-confirmed block data"); - tokio::time::sleep_until(t_fetch + poll_interval).await; } + + tokio::time::sleep_until(t_fetch + poll_interval).await; } } @@ -332,7 +168,6 @@ mod tests { Transaction, TransactionVariant, }; - use pathfinder_storage::StorageBuilder; use starknet_gateway_client::MockGatewayApi; use starknet_gateway_types::reply::state_update::{ DeclaredSierraClass, @@ -346,14 +181,13 @@ mod tests { Block, GasPrices, L1DataAvailabilityMode, - PendingBlock, PreConfirmedBlock, PreLatestBlock, Status, }; use tokio::sync::watch; - use super::poll_pending; + use super::poll_pre_confirmed; use crate::state::sync::SyncEvent; const PARENT_HASH: BlockHash = block_hash!("0x1234"); @@ -384,7 +218,7 @@ mod tests { pub static PENDING_UPDATE: LazyLock = LazyLock::new(|| StateUpdate::default().with_parent_state_commitment(PARENT_ROOT)); - pub static PENDING_BLOCK: LazyLock = LazyLock::new(|| PendingBlock { + pub static PRE_LATEST_BLOCK: LazyLock = LazyLock::new(|| PreLatestBlock { l1_gas_price: GasPrices { price_in_wei: GasPrice(11), ..Default::default() @@ -407,13 +241,8 @@ mod tests { }, ), }], - starknet_version: StarknetVersion::default(), - l1_da_mode: L1DataAvailabilityMode::Calldata, - }); - - pub static PRE_LATEST_BLOCK: LazyLock = LazyLock::new(|| PreLatestBlock { starknet_version: StarknetVersion::new(0, 14, 0, 0), - ..PENDING_BLOCK.clone() + l1_da_mode: L1DataAvailabilityMode::Calldata, }); pub static PRE_CONFIRMED_BLOCK: LazyLock = @@ -452,6 +281,7 @@ mod tests { account_deployment_data: vec![], calldata: vec![], sender_address: contract_address!("0x2"), + proof_facts: vec![], }, ), }, @@ -525,23 +355,19 @@ mod tests { sequencer .expect_pending_block() - .returning(|| Ok((PENDING_BLOCK.clone(), PENDING_UPDATE.clone()))); + .returning(|| Ok((PRE_LATEST_BLOCK.clone(), PENDING_UPDATE.clone()))); + sequencer + .expect_preconfirmed_block() + .returning(move |_| Ok(PRE_CONFIRMED_BLOCK.clone())); - let (_, latest) = watch::channel(Default::default()); - let (_, current) = watch::channel(Default::default()); + let latest_hash = PRE_LATEST_BLOCK.parent_hash; + let latest_block_number = BlockNumber::new_or_panic(1); + let (_, latest) = watch::channel((latest_block_number, latest_hash)); + let (_, current) = watch::channel((latest_block_number, latest_hash)); let sequencer = Arc::new(sequencer); let _jh = tokio::spawn(async move { - poll_pending( - tx, - sequencer, - std::time::Duration::ZERO, - StorageBuilder::in_memory().unwrap(), - latest, - current, - false, - ) - .await + poll_pre_confirmed(tx, sequencer, std::time::Duration::ZERO, latest, current).await }); let result = tokio::time::timeout(TEST_TIMEOUT, rx.recv()) @@ -549,7 +375,22 @@ mod tests { .expect("Event should be emitted") .unwrap(); - assert_matches!(result, SyncEvent::Pending(x) if *x.0 == *PENDING_BLOCK && *x.1 == *PENDING_UPDATE); + let expected_pre_latest_data = Some(Box::new(( + latest_block_number + 1, + PRE_LATEST_BLOCK.clone(), + PENDING_UPDATE.clone(), + ))); + + assert_matches!( + result, + SyncEvent::PreConfirmed { + number, + block, + pre_latest_data, + } if number == latest_block_number + 2 + && *block == *PRE_CONFIRMED_BLOCK + && pre_latest_data == expected_pre_latest_data + ); } #[tokio::test] @@ -562,7 +403,7 @@ mod tests { let (tx, mut rx) = tokio::sync::mpsc::channel(1); let mut sequencer = MockGatewayApi::new(); - let mut b0 = PENDING_BLOCK.clone(); + let mut b0 = PRE_CONFIRMED_BLOCK.clone(); b0.transactions.push(Transaction { hash: transaction_hash!("0x22"), variant: TransactionVariant::L1Handler(L1HandlerTransaction { @@ -588,31 +429,34 @@ mod tests { static COUNT: std::sync::Mutex = std::sync::Mutex::new(0); - sequencer.expect_pending_block().returning(move || { + sequencer + .expect_pending_block() + .returning(move || Ok((PRE_LATEST_BLOCK.clone(), PENDING_UPDATE.clone()))); + sequencer.expect_preconfirmed_block().returning(move |_| { let mut count = COUNT.lock().unwrap(); *count += 1; let block = match *count { 1 => b0_copy.clone(), - 2 => PENDING_BLOCK.clone(), + 2 => PRE_CONFIRMED_BLOCK.clone(), _ => b1_copy.clone(), }; - Ok((block, PENDING_UPDATE.clone())) + Ok(block) }); let sequencer = Arc::new(sequencer); - let (_, rx_latest) = watch::channel(Default::default()); - let (_, rx_current) = watch::channel(Default::default()); + let latest_hash = PRE_LATEST_BLOCK.parent_hash; + let latest_block_number = BlockNumber::new_or_panic(1); + let (_, rx_latest) = watch::channel((latest_block_number, latest_hash)); + let (_, rx_current) = watch::channel((latest_block_number, latest_hash)); let _jh = tokio::spawn(async move { - poll_pending( + poll_pre_confirmed( tx, sequencer, std::time::Duration::ZERO, - StorageBuilder::in_memory().unwrap(), rx_latest, rx_current, - false, ) .await }); @@ -622,67 +466,43 @@ mod tests { .expect("Event should be emitted") .unwrap(); - assert_matches!(result1, SyncEvent::Pending(x) if *x.0 == b0 && *x.1 == *PENDING_UPDATE); + let expected_pre_latest_data = Some(Box::new(( + latest_block_number + 1, + PRE_LATEST_BLOCK.clone(), + PENDING_UPDATE.clone(), + ))); + + assert_matches!( + result1, + SyncEvent::PreConfirmed { + number, + block, + pre_latest_data, + } if number == latest_block_number + 2 + && *block == b0 + && pre_latest_data == expected_pre_latest_data + ); let result2 = tokio::time::timeout(TEST_TIMEOUT, rx.recv()) .await .expect("Event should be emitted") .unwrap(); - assert_matches!(result2, SyncEvent::Pending(x) if *x.0 == b1 && *x.1 == *PENDING_UPDATE); - } - - #[tokio::test] - async fn transition_to_polling_pre_confirmed() { - let (tx, mut rx) = tokio::sync::mpsc::channel(1); - let mut sequencer = MockGatewayApi::new(); - - // A pending block with Starknet version 0.14.0 should trigger the transition - // to polling the pre-confirmed block. - let pending_block = PendingBlock { - starknet_version: StarknetVersion::new(0, 14, 0, 0), - ..PENDING_BLOCK.clone() - }; - let pending_block_copy = pending_block.clone(); - - sequencer - .expect_pending_block() - .returning(move || Ok((pending_block.clone(), PENDING_UPDATE.clone()))); - sequencer - .expect_pending_block() - .returning(move || Ok((pending_block_copy.clone(), PENDING_UPDATE.clone()))); - sequencer - .expect_preconfirmed_block() - .returning(move |_| Ok(PRE_CONFIRMED_BLOCK.clone())); - - let sequencer = Arc::new(sequencer); - let (_, rx_latest) = watch::channel(Default::default()); - let (_, rx_current) = watch::channel(Default::default()); - let _jh = tokio::spawn(async move { - poll_pending( - tx, - sequencer, - std::time::Duration::ZERO, - StorageBuilder::in_memory().unwrap(), - rx_latest, - rx_current, - false, - ) - .await - }); - - let result1 = tokio::time::timeout(TEST_TIMEOUT, rx.recv()) - .await - .expect("Event should be emitted") - .unwrap(); + let expected_pre_latest_data = Some(Box::new(( + latest_block_number + 1, + PRE_LATEST_BLOCK.clone(), + PENDING_UPDATE.clone(), + ))); assert_matches!( - result1, + result2, SyncEvent::PreConfirmed { number, block, - .. - } if number == BlockNumber::new_or_panic(1) && *block == *PRE_CONFIRMED_BLOCK + pre_latest_data, + } if number == latest_block_number + 2 + && *block == b1 + && pre_latest_data == expected_pre_latest_data ); } @@ -694,7 +514,7 @@ mod tests { sequencer .expect_pending_block() - .returning(move || Ok((PENDING_BLOCK.clone(), PENDING_UPDATE.clone()))); + .returning(move || Ok((PRE_LATEST_BLOCK.clone(), PENDING_UPDATE.clone()))); let (number, block, state_update) = super::fetch_pre_latest(&sequencer, our_latest_number, our_latest_hash) @@ -714,9 +534,9 @@ mod tests { let our_latest_hash = NEXT_BLOCK.parent_block_hash; let different_hash = block_hash!("0xdeadbeef"); - let pending_block = PendingBlock { + let pending_block = PreLatestBlock { parent_hash: different_hash, - ..PENDING_BLOCK.clone() + ..PRE_LATEST_BLOCK.clone() }; sequencer @@ -731,71 +551,8 @@ mod tests { } #[tokio::test] - async fn poll_starknet_0_14_0_with_pre_latest_data() { - let (tx, mut rx) = tokio::sync::mpsc::channel(2); - let mut sequencer = MockGatewayApi::new(); - - let our_latest_hash = PRE_LATEST_BLOCK.parent_hash; - - // Make sure that the pending block triggers a transition to Starknet 0.14.0 - // polling. Note that this block is ignored as `poll_pre_starknet_0_14_0` - // does not handle pre-latest blocks. - sequencer - .expect_pending_block() - .returning(move || Ok((PRE_LATEST_BLOCK.clone(), PENDING_UPDATE.clone()))); - // This will be polled by `poll_starknet_0_14_0` and will not be ignored. - sequencer - .expect_pending_block() - .returning(move || Ok((PRE_LATEST_BLOCK.clone(), PENDING_UPDATE.clone()))); - sequencer - .expect_preconfirmed_block() - .returning(move |_| Ok(PRE_CONFIRMED_BLOCK.clone())); - - let latest_block_number = BlockNumber::new_or_panic(10); - - let (_, rx_latest) = watch::channel((latest_block_number, our_latest_hash)); - let (_, rx_current) = watch::channel((latest_block_number, our_latest_hash)); - - let sequencer = Arc::new(sequencer); - let _jh = tokio::spawn(async move { - super::poll_pending( - tx, - sequencer, - std::time::Duration::ZERO, - StorageBuilder::in_memory().unwrap(), - rx_latest, - rx_current, - false, - ) - .await - }); - - let event = tokio::time::timeout(TEST_TIMEOUT, rx.recv()) - .await - .expect("Event should be emitted") - .unwrap(); - - let expected_pre_latest_data = Some(Box::new(( - latest_block_number + 1, - PRE_LATEST_BLOCK.clone(), - PENDING_UPDATE.clone(), - ))); - - assert_matches!( - event, - SyncEvent::PreConfirmed { - number, - block, - pre_latest_data - } if number == latest_block_number + 2 - && *block == *PRE_CONFIRMED_BLOCK - && pre_latest_data == expected_pre_latest_data - ); - } - - #[tokio::test] - async fn poll_starknet_0_14_0_stale_transactions_is_ignored() { - // This test ensures that when `poll_starknet_0_14_0` receives pre-confirmed + async fn stale_transactions_is_ignored() { + // This test ensures that when `poll_pre_confirmed` receives pre-confirmed // blocks with stale data (same or lower transaction count), no event is // emitted. let (tx, mut rx) = tokio::sync::mpsc::channel(1); @@ -843,14 +600,12 @@ mod tests { let sequencer = Arc::new(sequencer); let _jh = tokio::spawn(async move { - super::poll_starknet_0_14_0( - &tx, - &sequencer, + super::poll_pre_confirmed( + tx, + sequencer, std::time::Duration::ZERO, - &StorageBuilder::in_memory().unwrap(), - &rx_latest, - &rx_current, - false, + rx_latest, + rx_current, ) .await }); @@ -882,9 +637,9 @@ mod tests { /// we must make sure that inconsistencies in the gateway responses do not /// cause the polling task to emit inconsistent updates. /// - /// See also . + /// See also . #[tokio::test] - async fn poll_starknet_0_14_0_inconsistent_gateway_data_is_ignored() { + async fn ignores_inconsistent_pre_latest_from_gateway() { let (tx, mut rx) = tokio::sync::mpsc::channel(1); let mut sequencer = MockGatewayApi::new(); @@ -932,14 +687,12 @@ mod tests { let sequencer = Arc::new(sequencer); let _jh = tokio::spawn(async move { - super::poll_starknet_0_14_0( - &tx, - &sequencer, + super::poll_pre_confirmed( + tx, + sequencer, std::time::Duration::ZERO, - &StorageBuilder::in_memory().unwrap(), - &rx_latest, - &rx_current, - false, + rx_latest, + rx_current, ) .await }); diff --git a/crates/pathfinder/src/state/sync/repair.rs b/crates/pathfinder/src/state/sync/repair.rs new file mode 100644 index 0000000000..a7ae76fabf --- /dev/null +++ b/crates/pathfinder/src/state/sync/repair.rs @@ -0,0 +1,314 @@ +use anyhow::Context; +use futures::StreamExt; +use pathfinder_common::ClassHash; +use pathfinder_storage::Storage; +use starknet_gateway_client::GatewayApi; + +use super::class::{download_class, DownloadedClass}; + +pub async fn repair_missing_class_definitions( + storage: Storage, + sequencer: S, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, + fetch_casm_from_fgw: bool, +) -> anyhow::Result<()> { + repair_missing_class_definitions_with(storage, move |hash| { + let sequencer = sequencer.clone(); + async move { + download_class( + &sequencer, + hash, + compiler_resource_limits, + blockifier_libfuncs, + fetch_casm_from_fgw, + ) + .await + } + }) + .await +} + +/// Inner implementation that accepts an injectable download function for +/// tests, allowing us to pass a fake that returns known [`DownloadedClass`] +/// values without using the sequencer or running hash computation. +async fn repair_missing_class_definitions_with( + storage: Storage, + download: F, +) -> anyhow::Result<()> +where + F: Fn(ClassHash) -> Fut + Clone, + Fut: std::future::Future>, +{ + let missing = tokio::task::spawn_blocking({ + let storage = storage.clone(); + move || { + let mut db = storage + .connection() + .context("Creating database connection")?; + let tx = db.transaction().context("Creating transaction")?; + tx.class_hashes_with_missing_definitions() + .context("Querying missing class definitions") + } + }) + .await + .context("Joining database task")??; + + if missing.is_empty() { + tracing::debug!("No missing class definitions to repair"); + return Ok(()); + } + + let total = missing.len(); + tracing::info!(count = total, "Repairing missing class definitions"); + + let mut repaired = 0usize; + let mut failed = 0usize; + + let results = futures::stream::iter(missing) + .map(|hash| { + let download = download.clone(); + async move { (hash, download(hash).await) } + }) + .buffer_unordered(4); + + tokio::pin!(results); + + while let Some((declared_hash, result)) = results.next().await { + match result { + Err(e) => { + tracing::warn!(hash=%declared_hash, error=%e, "Failed to download class definition for repair"); + failed += 1; + } + Ok(downloaded) => { + let store_result = tokio::task::spawn_blocking({ + let storage = storage.clone(); + move || store_repaired_class(&storage, declared_hash, downloaded) + }) + .await + .unwrap_or_else(|e| Err(anyhow::anyhow!(e))); + + match store_result { + Err(e) => { + tracing::warn!(hash=%declared_hash, error=%e, "Failed to store repaired class definition"); + failed += 1; + } + Ok(()) => { + repaired += 1; + } + } + } + } + } + + if failed == 0 { + tracing::info!(total, repaired, "Finished repairing class definitions"); + } else { + tracing::warn!( + total, + repaired, + failed, + "Finished repairing class definitions" + ); + } + + Ok(()) +} + +fn store_repaired_class( + storage: &Storage, + declared_hash: ClassHash, + downloaded: DownloadedClass, +) -> anyhow::Result<()> { + let mut db = storage + .connection() + .context("Creating database connection")?; + let tx = db.transaction().context("Creating transaction")?; + + match downloaded { + DownloadedClass::Cairo { definition, .. } => { + tx.update_cairo_class_definition(declared_hash, &definition) + .context("Storing repaired Cairo class definition")?; + } + DownloadedClass::Sierra { + sierra_definition, + casm_definition, + casm_hash_v2, + .. + } => { + tx.update_sierra_class_definition( + &pathfinder_common::SierraHash(declared_hash.0), + &sierra_definition, + &casm_definition, + &casm_hash_v2, + ) + .context("Storing repaired Sierra class definition")?; + } + } + + tx.commit().context("Committing repaired class definition") +} + +#[cfg(test)] +mod tests { + use std::collections::HashSet; + + use pathfinder_common::class_definition::{ + SerializedCairoDefinition, + SerializedOpaqueClassDefinition, + }; + use pathfinder_common::state_update::StateUpdateData; + use pathfinder_common::BlockNumber; + use pathfinder_storage::StorageBuilder; + + use super::*; + + fn storage() -> Storage { + StorageBuilder::in_memory().unwrap() + } + + fn insert_placeholder(storage: &Storage, hash: ClassHash) { + let mut db = storage.connection().unwrap(); + let tx = db.transaction().unwrap(); + tx.insert_state_update_data( + BlockNumber::GENESIS, + &StateUpdateData { + declared_cairo_classes: HashSet::from([hash]), + ..Default::default() + }, + ) + .unwrap(); + tx.commit().unwrap(); + } + + #[tokio::test] + async fn nothing_to_repair() { + let storage = storage(); + + repair_missing_class_definitions_with(storage, |_hash| async { + panic!("download should not be called when there are no missing definitions") + }) + .await + .unwrap(); + } + + #[tokio::test] + async fn cairo_repair() { + let storage = storage(); + let hash = ClassHash(pathfinder_crypto::Felt::from_hex_str("0xdeadbeef").unwrap()); + let definition = SerializedCairoDefinition::from_slice(b"cairo class definition bytes"); + + insert_placeholder(&storage, hash); + + repair_missing_class_definitions_with(storage.clone(), { + let definition = definition.clone(); + move |requested| { + let definition = definition.clone(); + async move { + Ok(DownloadedClass::Cairo { + hash: requested, + definition, + }) + } + } + }) + .await + .unwrap(); + + let mut db = storage.connection().unwrap(); + let tx = db.transaction().unwrap(); + let stored = tx.class_definition(hash).unwrap(); + assert_eq!( + stored, + Some(SerializedOpaqueClassDefinition::from(definition)) + ); + } + + /// Cairo 0 classes can have a mismatch between the declared hash and the + /// hash computed from the downloaded bytes. The repair must store the + /// definition under the declared hash regardless. + #[tokio::test] + async fn cairo_repair_hash_mismatch() { + let storage = storage(); + let declared = ClassHash(pathfinder_crypto::Felt::from_hex_str("0xaaaa").unwrap()); + let computed = ClassHash(pathfinder_crypto::Felt::from_hex_str("0xbbbb").unwrap()); + let definition = SerializedCairoDefinition::from_slice(b"cairo class definition bytes"); + + insert_placeholder(&storage, declared); + + repair_missing_class_definitions_with(storage.clone(), { + let definition = definition.clone(); + move |_| { + let definition = definition.clone(); + async move { + Ok(DownloadedClass::Cairo { + // Return the computed hash, which differs from the declared one. + hash: computed, + definition, + }) + } + } + }) + .await + .unwrap(); + + let mut db = storage.connection().unwrap(); + let tx = db.transaction().unwrap(); + // Stored under the declared hash, not the computed one. + assert_eq!( + tx.class_definition(declared).unwrap(), + Some(SerializedOpaqueClassDefinition::from(definition)) + ); + assert_eq!(tx.class_definition(computed).unwrap(), None); + } + + /// A download failure for one class must not abort the repair of others. + #[tokio::test] + async fn partial_failure() { + let storage = storage(); + let good = ClassHash(pathfinder_crypto::Felt::from_hex_str("0x1111").unwrap()); + let bad = ClassHash(pathfinder_crypto::Felt::from_hex_str("0x2222").unwrap()); + let definition = SerializedCairoDefinition::from_slice(b"good class definition"); + + // Insert both in one state update to avoid block number conflicts. + { + let mut db = storage.connection().unwrap(); + let tx = db.transaction().unwrap(); + tx.insert_state_update_data( + BlockNumber::GENESIS, + &StateUpdateData { + declared_cairo_classes: HashSet::from([good, bad]), + ..Default::default() + }, + ) + .unwrap(); + tx.commit().unwrap(); + } + + repair_missing_class_definitions_with(storage.clone(), { + let definition = definition.clone(); + move |hash| { + let definition = definition.clone(); + async move { + if hash == bad { + anyhow::bail!("gateway returned 404"); + } + Ok(DownloadedClass::Cairo { hash, definition }) + } + } + }) + .await + .unwrap(); + + let mut db = storage.connection().unwrap(); + let tx = db.transaction().unwrap(); + assert_eq!( + tx.class_definition(good).unwrap(), + Some(SerializedOpaqueClassDefinition::from(definition)) + ); + // bad was not repaired — definition IS NULL, so it still appears in + // the missing list. + let still_missing = tx.class_hashes_with_missing_definitions().unwrap(); + assert_eq!(still_missing, vec![bad]); + } +} diff --git a/crates/pathfinder/src/state/sync/revert.rs b/crates/pathfinder/src/state/sync/revert.rs index 988dae26f9..a16d2d41b0 100644 --- a/crates/pathfinder/src/state/sync/revert.rs +++ b/crates/pathfinder/src/state/sync/revert.rs @@ -34,7 +34,11 @@ pub fn revert_starknet_state( let storage_commitment = revert_contract_updates(transaction, head, target_block)?; let class_commitment = revert_class_updates(transaction, head, target_block)?; - let state_commitment = StateCommitment::calculate(storage_commitment, class_commitment); + let state_commitment = StateCommitment::calculate( + storage_commitment, + class_commitment, + target_header.starknet_version, + ); if state_commitment != target_header.state_commitment { anyhow::bail!( "State commitment mismatch: expected {}, calculated {}", diff --git a/crates/pathfinder/src/sync.rs b/crates/pathfinder/src/sync.rs index 91f96cbfc7..9cd497043c 100644 --- a/crates/pathfinder/src/sync.rs +++ b/crates/pathfinder/src/sync.rs @@ -52,6 +52,8 @@ pub struct Sync { pub public_key: PublicKey, pub l1_checkpoint_override: Option, pub verify_tree_hashes: bool, + pub compiler_resource_limits: pathfinder_compiler::ResourceLimits, + pub blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, pub block_hash_db: Option, } @@ -87,7 +89,6 @@ where /// errors are transient. We cannot proceed without a checkpoint, so we /// retry until we get one. async fn get_checkpoint(&self) -> pathfinder_ethereum::EthereumStateUpdate { - use pathfinder_ethereum::EthereumApi; if let Some(forced) = &self.l1_checkpoint_override { return *forced; } @@ -128,6 +129,8 @@ where chain_id: self.chain_id, public_key: self.public_key, verify_tree_hashes: self.verify_tree_hashes, + compiler_resource_limits: self.compiler_resource_limits, + blockifier_libfuncs: self.blockifier_libfuncs, block_hash_db: self.block_hash_db.clone(), } .run(checkpoint) @@ -189,6 +192,8 @@ where chain_id: self.chain_id, public_key: self.public_key, verify_tree_hashes: self.verify_tree_hashes, + compiler_resource_limits: self.compiler_resource_limits, + blockifier_libfuncs: self.blockifier_libfuncs, block_hash_db: self.block_hash_db.clone(), } .run(&mut next, &mut parent_hash, self.fgw_client.clone()) @@ -307,6 +312,18 @@ mod tests { StateDiffsError, TransactionData, }; + use pathfinder_block_commitments::{ + calculate_event_commitment, + calculate_receipt_commitment, + calculate_transaction_commitment, + compute_final_hash, + }; + use pathfinder_common::class_definition::{ + SerializedCairoDefinition, + SerializedCasmDefinition, + SerializedOpaqueClassDefinition, + SerializedSierraDefinition, + }; use pathfinder_common::event::Event; use pathfinder_common::prelude::*; use pathfinder_common::receipt::Receipt; @@ -326,12 +343,6 @@ mod tests { use starknet_gateway_types::error::SequencerError; use super::*; - use crate::state::block_hash::{ - calculate_event_commitment, - calculate_receipt_commitment, - calculate_transaction_commitment, - compute_final_hash, - }; const TIMEOUT: Duration = Duration::from_secs(10); @@ -491,6 +502,8 @@ mod tests { block_hash: last_checkpoint_header.hash, }), verify_tree_hashes: true, + compiler_resource_limits: pathfinder_compiler::ResourceLimits::for_test(), + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs::default(), block_hash_db: None, }; @@ -606,7 +619,11 @@ mod tests { ); pretty_assertions_sorted::assert_eq!( cairo_defs, - expected.cairo_defs.into_iter().collect::>(), + expected + .cairo_defs + .into_iter() + .map(|(h, d)| (h, SerializedOpaqueClassDefinition::from(d))) + .collect::>(), "block {}", block_number ); @@ -616,7 +633,15 @@ mod tests { .sierra_defs .into_iter() // All sierra fixtures are not compile-able - .map(|(h, s, _, _)| (h, (s, starknet_gateway_test_fixtures::class_definitions::CAIRO_1_1_0_BALANCE_CASM_JSON.to_vec()))) + .map(|(h, s, _, _)| ( + h, + ( + SerializedOpaqueClassDefinition::from(s), + SerializedCasmDefinition::from_slice( + starknet_gateway_test_fixtures::class_definitions::CAIRO_1_1_0_BALANCE_CASM_JSON + ), + ) + )) .collect::>(), "block {}", block_number @@ -1062,8 +1087,12 @@ mod tests { #[async_trait::async_trait] impl GatewayApi for FakeFgw { - async fn pending_casm_by_hash(&self, _: ClassHash) -> Result { - Ok(bytes::Bytes::from_static( + async fn casm_by_hash( + &self, + _: ClassHash, + _: BlockId, + ) -> Result { + Ok(SerializedCasmDefinition::from_slice( starknet_gateway_test_fixtures::class_definitions::CAIRO_1_1_0_BALANCE_CASM_JSON, )) } diff --git a/crates/pathfinder/src/sync/checkpoint.rs b/crates/pathfinder/src/sync/checkpoint.rs index b13514a234..05eee92dcf 100644 --- a/crates/pathfinder/src/sync/checkpoint.rs +++ b/crates/pathfinder/src/sync/checkpoint.rs @@ -23,6 +23,7 @@ use p2p_proto::sync::transaction::{ TransactionsRequest, TransactionsResponse, }; +use pathfinder_block_commitments::calculate_transaction_commitment; use pathfinder_block_hashes::BlockHashDb; use pathfinder_common::prelude::*; use pathfinder_common::receipt::Receipt; @@ -32,11 +33,10 @@ use pathfinder_ethereum::EthereumStateUpdate; use pathfinder_storage::Storage; use primitive_types::H160; use serde_json::de; -use starknet_gateway_client::{Client, GatewayApi}; +use starknet_gateway_client::{BlockId, Client, GatewayApi}; use tokio::sync::Mutex; use tracing::Instrument; -use crate::state::block_hash::calculate_transaction_commitment; use crate::sync::error::SyncError; use crate::sync::stream::{InfallibleSource, Source, SyncReceiver, SyncResult}; use crate::sync::{class_definitions, events, headers, state_updates, transactions}; @@ -53,6 +53,8 @@ pub struct Sync { pub chain_id: ChainId, pub public_key: PublicKey, pub verify_tree_hashes: bool, + pub compiler_resource_limits: pathfinder_compiler::ResourceLimits, + pub blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, pub block_hash_db: Option, } @@ -78,6 +80,8 @@ where public_key: PublicKey, l1_anchor_override: Option, verify_tree_hashes: bool, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, block_hash_db: Option, ) -> Self { Self { @@ -89,6 +93,8 @@ where chain_id, public_key, verify_tree_hashes, + compiler_resource_limits, + blockifier_libfuncs, block_hash_db, } } @@ -101,8 +107,6 @@ where &self, checkpoint: EthereumStateUpdate, ) -> Result<(BlockNumber, BlockHash), SyncError> { - use pathfinder_ethereum::EthereumApi; - let local_state = LocalState::from_db(self.storage.clone(), checkpoint) .await .context("Querying local state")?; @@ -264,6 +268,8 @@ where class_stream, self.storage.clone(), self.fgw_client.clone(), + self.compiler_resource_limits, + self.blockifier_libfuncs, expected_declarations, ) .await?; @@ -373,6 +379,8 @@ async fn handle_class_stream> + Send + 'static, storage: Storage, fgw: SequencerClient, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, expected_declarations: impl Stream)>> + Send + 'static, @@ -399,6 +407,8 @@ async fn handle_class_stream Result { - Ok(bytes::Bytes::from_static(CASM2)) + _: BlockId, + ) -> Result { + Ok(SerializedCasmDefinition::from_slice(CASM2)) } } @@ -1430,7 +1447,7 @@ mod tests { struct Setup { pub streamed_classes: Vec, anyhow::Error>>, pub declared_classes: DeclaredClasses, - pub expected_defs: HashMap>, + pub expected_defs: HashMap, pub storage: Storage, } @@ -1466,19 +1483,20 @@ mod tests { fake_block(1, state_update1), ]; - blocks[1].cairo_defs = vec![(cairo_hash, CAIRO.to_vec())]; + blocks[1].cairo_defs = + vec![(cairo_hash, SerializedCairoDefinition::from_slice(CAIRO))]; blocks[1].sierra_defs = vec![ // Does not compile ( sierra0_hash, - SIERRA0.to_vec(), + SerializedSierraDefinition::from_slice(SIERRA0), Default::default(), Default::default(), ), // Compiles just fine ( sierra2_hash, - SIERRA2.to_vec(), + SerializedSierraDefinition::from_slice(SIERRA2), Default::default(), Default::default(), ), @@ -1487,17 +1505,17 @@ mod tests { let streamed_classes = vec![ Ok(PeerData::for_tests(ClassDefinition::Cairo { block_number: BlockNumber::GENESIS + 1, - definition: CAIRO.to_vec(), + definition: SerializedCairoDefinition::from_slice(CAIRO), hash: cairo_hash, })), Ok(PeerData::for_tests(ClassDefinition::Sierra { block_number: BlockNumber::GENESIS + 1, - sierra_definition: SIERRA0.to_vec(), + sierra_definition: SerializedSierraDefinition::from_slice(SIERRA0), hash: sierra0_hash, })), Ok(PeerData::for_tests(ClassDefinition::Sierra { block_number: BlockNumber::GENESIS + 1, - sierra_definition: SIERRA2.to_vec(), + sierra_definition: SerializedSierraDefinition::from_slice(SIERRA2), hash: sierra2_hash, })), ]; @@ -1518,9 +1536,18 @@ mod tests { ]); let expected_defs = [ - (cairo_hash, CAIRO.to_vec()), - (ClassHash(sierra0_hash.0), SIERRA0.to_vec()), - (ClassHash(sierra2_hash.0), SIERRA2.to_vec()), + ( + cairo_hash, + SerializedOpaqueClassDefinition::from_slice(CAIRO), + ), + ( + ClassHash(sierra0_hash.0), + SerializedOpaqueClassDefinition::from_slice(SIERRA0), + ), + ( + ClassHash(sierra2_hash.0), + SerializedOpaqueClassDefinition::from_slice(SIERRA2), + ), ] .into(); @@ -1550,6 +1577,8 @@ mod tests { stream::iter(streamed_classes), storage.clone(), FakeFgw, + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), declared_classes.to_stream(), ) .await @@ -1563,12 +1592,13 @@ mod tests { db.casm_definition(ClassHash(SIERRA0_HASH.0)) .unwrap() .unwrap(), - CASM2 + SerializedCasmDefinition::from_slice(CASM2) ); assert!(serde_json::from_slice::( - &db.casm_definition(ClassHash(SIERRA2_HASH.0)) + db.casm_definition(ClassHash(SIERRA2_HASH.0)) .unwrap() .unwrap() + .as_bytes() ) .unwrap()["compiler_version"] .is_string()); @@ -1608,6 +1638,8 @@ mod tests { stream::once(std::future::ready(Ok(data))), storage, FakeFgw, + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), Faker.fake::().to_stream(), ) .await, @@ -1639,6 +1671,8 @@ mod tests { stream::iter(streamed_classes), storage, FakeFgw, + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), declared_classes.to_stream(), ) .await, @@ -1652,6 +1686,8 @@ mod tests { stream::once(std::future::ready(Err(anyhow::anyhow!("")))), StorageBuilder::in_memory().unwrap(), FakeFgw, + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), Faker.fake::().to_stream(), ) .await, @@ -1665,6 +1701,7 @@ mod tests { use fake::{Fake, Faker}; use futures::stream; use p2p::libp2p::PeerId; + use pathfinder_block_commitments::calculate_event_commitment; use pathfinder_common::event::Event; use pathfinder_common::transaction::TransactionVariant; use pathfinder_common::{StarknetVersion, TransactionHash}; @@ -1674,7 +1711,6 @@ mod tests { use super::super::handle_event_stream; use super::*; - use crate::state::block_hash::calculate_event_commitment; type TransactionInfo = (TransactionHash, TransactionIndex); diff --git a/crates/pathfinder/src/sync/class_definitions.rs b/crates/pathfinder/src/sync/class_definitions.rs index f2ab703a28..db08cf9ab6 100644 --- a/crates/pathfinder/src/sync/class_definitions.rs +++ b/crates/pathfinder/src/sync/class_definitions.rs @@ -10,13 +10,21 @@ use p2p::sync::client::types::ClassDefinition as P2PClassDefinition; use p2p::PeerData; use p2p_proto::transaction; use pathfinder_class_hash::from_parts::{compute_cairo_class_hash, compute_sierra_class_hash}; -use pathfinder_common::class_definition::{Cairo, ClassDefinition as GwClassDefinition, Sierra}; +use pathfinder_common::class_definition::{ + Cairo, + ClassDefinition as GwClassDefinition, + SerializedCairoDefinition, + SerializedCasmDefinition, + SerializedClassDefinition, + SerializedSierraDefinition, + Sierra, +}; use pathfinder_common::state_update::DeclaredClasses; use pathfinder_common::{BlockNumber, CasmHash, ClassHash, SierraHash}; use pathfinder_storage::{Storage, Transaction}; use rayon::iter::{IntoParallelIterator, ParallelIterator}; use serde_json::de; -use starknet_gateway_client::GatewayApi; +use starknet_gateway_client::{BlockId, GatewayApi}; use starknet_gateway_types::error::SequencerError; use starknet_gateway_types::reply::call; use tokio::sync::mpsc::{self, Receiver}; @@ -30,22 +38,16 @@ use crate::sync::stream::ProcessStage; #[derive(Debug)] pub struct ClassWithLayout { pub block_number: BlockNumber, - pub definition: ClassDefinition, + pub definition: SerializedClassDefinition, pub layout: GwClassDefinition<'static>, pub hash: ClassHash, } -#[derive(Debug)] -pub(super) enum ClassDefinition { - Cairo(Vec), - Sierra(Vec), -} - #[derive(Debug)] pub struct Class { pub block_number: BlockNumber, pub hash: ClassHash, - pub definition: ClassDefinition, + pub definition: SerializedClassDefinition, } #[derive(Debug)] @@ -57,10 +59,10 @@ pub struct CompiledClass { #[derive(Debug)] pub enum CompiledClassDefinition { - Cairo(Vec), + Cairo(SerializedCairoDefinition), Sierra { - sierra_definition: Vec, - casm_definition: Vec, + sierra_definition: SerializedSierraDefinition, + casm_definition: SerializedCasmDefinition, casm_hash_v2: CasmHash, }, } @@ -143,14 +145,14 @@ fn verify_layout_impl( hash, } => { let layout = GwClassDefinition::Cairo( - serde_json::from_slice::>(&definition).map_err(|error| { + serde_json::from_slice::>(definition.as_bytes()).map_err(|error| { tracing::debug!(%peer, %block_number, %error, "Bad class layout"); SyncError::BadClassLayout(*peer) })?, ); Ok(ClassWithLayout { block_number, - definition: ClassDefinition::Cairo(definition), + definition: SerializedClassDefinition::Cairo(definition), layout, hash, }) @@ -161,14 +163,16 @@ fn verify_layout_impl( hash, } => { let layout = GwClassDefinition::Sierra( - serde_json::from_slice::>(&sierra_definition).map_err(|error| { - tracing::debug!(%peer, %block_number, %error, "Bad class layout"); - SyncError::BadClassLayout(*peer) - })?, + serde_json::from_slice::>(sierra_definition.as_bytes()).map_err( + |error| { + tracing::debug!(%peer, %block_number, %error, "Bad class layout"); + SyncError::BadClassLayout(*peer) + }, + )?, ); Ok(ClassWithLayout { block_number, - definition: ClassDefinition::Sierra(sierra_definition), + definition: SerializedClassDefinition::Sierra(sierra_definition), layout, hash: ClassHash(hash.0), }) @@ -416,11 +420,23 @@ pub(super) fn expected_declarations_stream( pub struct CompileSierraToCasm { fgw: T, tokio_handle: tokio::runtime::Handle, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, } impl CompileSierraToCasm { - pub fn new(fgw: T, tokio_handle: tokio::runtime::Handle) -> Self { - Self { fgw, tokio_handle } + pub fn new( + fgw: T, + tokio_handle: tokio::runtime::Handle, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, + ) -> Self { + Self { + fgw, + tokio_handle, + compiler_resource_limits, + blockifier_libfuncs, + } } } @@ -434,7 +450,13 @@ impl ProcessStage for CompileSierraToCas input .into_par_iter() .map(|class| { - let compiled = compile_or_fetch_impl(class, &self.fgw, &self.tokio_handle)?; + let compiled = compile_or_fetch_impl( + class, + &self.fgw, + &self.tokio_handle, + self.compiler_resource_limits, + self.blockifier_libfuncs, + )?; Ok(compiled) }) .collect::, SyncError>>() @@ -447,6 +469,8 @@ pub(super) async fn compile_sierra_to_casm_or_fetch< peer_data: Vec>, fgw: SequencerClient, tokio_handle: tokio::runtime::Handle, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, ) -> Result>, SyncError> { use rayon::prelude::*; let (tx, rx) = oneshot::channel(); @@ -455,7 +479,13 @@ pub(super) async fn compile_sierra_to_casm_or_fetch< .into_par_iter() .map(|x| { let PeerData { peer, data } = x; - let compiled = compile_or_fetch_impl(data, &fgw, &tokio_handle)?; + let compiled = compile_or_fetch_impl( + data, + &fgw, + &tokio_handle, + compiler_resource_limits, + blockifier_libfuncs, + )?; Ok(PeerData::new(peer, compiled)) }) .collect::>, SyncError>>(); @@ -468,6 +498,8 @@ fn compile_or_fetch_impl( class: Class, fgw: &SequencerClient, tokio_handle: &tokio::runtime::Handle, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, ) -> Result { let Class { block_number, @@ -476,10 +508,14 @@ fn compile_or_fetch_impl( } = class; let definition = match definition { - ClassDefinition::Cairo(c) => CompiledClassDefinition::Cairo(c), - ClassDefinition::Sierra(sierra_definition) => { - let casm_definition = pathfinder_compiler::compile_to_casm(&sierra_definition) - .context("Compiling Sierra class"); + SerializedClassDefinition::Cairo(c) => CompiledClassDefinition::Cairo(c), + SerializedClassDefinition::Sierra(sierra_definition) => { + let casm_definition = pathfinder_compiler::compile_sierra_to_casm( + &sierra_definition, + compiler_resource_limits, + blockifier_libfuncs, + ) + .context("Compiling Sierra class"); let casm_definition = match casm_definition { Ok(x) => x, @@ -487,12 +523,11 @@ fn compile_or_fetch_impl( // that the class is declared and exists so if the gateway responds with an // error we should restart the sync and retry later. Err(_) => tokio_handle - .block_on(fgw.pending_casm_by_hash(hash)) + .block_on(fgw.casm_by_hash(hash, BlockId::Latest)) .map_err(|error| { tracing::debug!(%block_number, class_hash=%hash, %error, "Fetching casm from feeder gateway failed"); SyncError::FetchingCasmFailed - })? - .to_vec(), + })?, }; let casm_hash_v2 = pathfinder_casm_hashes::get_precomputed_casm_v2_hash(&hash); diff --git a/crates/pathfinder/src/sync/error.rs b/crates/pathfinder/src/sync/error.rs index e5724f51db..2545d6eb10 100644 --- a/crates/pathfinder/src/sync/error.rs +++ b/crates/pathfinder/src/sync/error.rs @@ -3,6 +3,7 @@ use std::sync::Arc; use p2p::libp2p::PeerId; use p2p::PeerData; use pathfinder_common::{BlockNumber, ClassHash, SignedBlockHeader}; +use pathfinder_storage::StorageError; #[derive(Debug, thiserror::Error, Clone)] pub(super) enum SyncError { @@ -119,3 +120,10 @@ impl From for SyncError { Self::Fatal(Arc::new(e)) } } + +impl From for SyncError { + fn from(e: StorageError) -> Self { + // StorageError is always fatal + Self::Fatal(Arc::new(e.into())) + } +} diff --git a/crates/pathfinder/src/sync/events.rs b/crates/pathfinder/src/sync/events.rs index 49780290b1..57fe58daaf 100644 --- a/crates/pathfinder/src/sync/events.rs +++ b/crates/pathfinder/src/sync/events.rs @@ -5,6 +5,7 @@ use anyhow::Context; use p2p::libp2p::PeerId; use p2p::sync::client::types::EventsForBlockByTransaction; use p2p::PeerData; +use pathfinder_block_commitments::calculate_event_commitment; use pathfinder_common::event::Event; use pathfinder_common::prelude::*; use pathfinder_common::receipt::Receipt; @@ -15,7 +16,6 @@ use tokio_stream::wrappers::ReceiverStream; use super::error::SyncError; use super::storage_adapters; -use crate::state::block_hash::calculate_event_commitment; use crate::sync::stream::ProcessStage; /// Returns the first block number whose events are missing in storage, counting diff --git a/crates/pathfinder/src/sync/headers.rs b/crates/pathfinder/src/sync/headers.rs index b4e2a72027..f20b0034e7 100644 --- a/crates/pathfinder/src/sync/headers.rs +++ b/crates/pathfinder/src/sync/headers.rs @@ -4,10 +4,10 @@ use futures::StreamExt; use p2p::libp2p::PeerId; use p2p::PeerData; use p2p_proto::sync::header; +use pathfinder_block_commitments::VerifyResult; use pathfinder_common::prelude::*; use pathfinder_storage::Storage; -use crate::state::block_hash::VerifyResult; use crate::sync::error::SyncError; use crate::sync::stream::{ProcessStage, SyncReceiver}; @@ -233,7 +233,7 @@ impl VerifyHashAndSignature { .as_ref() .and_then(|db| db.block_hash(header.number)) .unwrap_or(header.hash); - let computed_hash = crate::state::block_hash::compute_final_hash(header); + let computed_hash = pathfinder_block_commitments::compute_final_hash(header); { if computed_hash == expected_hash { true diff --git a/crates/pathfinder/src/sync/state_updates.rs b/crates/pathfinder/src/sync/state_updates.rs index 14ffe96653..5990aa0177 100644 --- a/crates/pathfinder/src/sync/state_updates.rs +++ b/crates/pathfinder/src/sync/state_updates.rs @@ -275,7 +275,13 @@ pub async fn batch_update_starknet_state( error.context(format!("Updating Starknet state, tail {tail}")), )), })?; - let state_commitment = StateCommitment::calculate(storage_commitment, class_commitment); + let starknet_version = db + .block_header(tail.into()) + .context("Querying block header for starknet version")? + .context("Block header not found")? + .starknet_version; + let state_commitment = + StateCommitment::calculate(storage_commitment, class_commitment, starknet_version); let expected_state_commitment = db .state_commitment(tail.into()) .context("Querying state commitment")? diff --git a/crates/pathfinder/src/sync/track.rs b/crates/pathfinder/src/sync/track.rs index 5b54857c84..346ad96e25 100644 --- a/crates/pathfinder/src/sync/track.rs +++ b/crates/pathfinder/src/sync/track.rs @@ -40,6 +40,8 @@ pub struct Sync { pub public_key: PublicKey, pub block_hash_db: Option, pub verify_tree_hashes: bool, + pub compiler_resource_limits: pathfinder_compiler::ResourceLimits, + pub blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, } impl Sync { @@ -125,7 +127,12 @@ impl Sync { .pipe(class_definitions::VerifyLayout, 10) .pipe(class_definitions::VerifyHash, 10) .pipe( - class_definitions::CompileSierraToCasm::new(fgw, tokio::runtime::Handle::current()), + class_definitions::CompileSierraToCasm::new( + fgw, + tokio::runtime::Handle::current(), + self.compiler_resource_limits, + self.blockifier_libfuncs, + ), 10, ) .pipe( @@ -810,7 +817,11 @@ impl ProcessStage for StoreBlock { .with_context(|| format!("Updating Starknet state, block_number {block_number}"))?; // Ensure that roots match. - let state_commitment = StateCommitment::calculate(storage_commitment, class_commitment); + let state_commitment = StateCommitment::calculate( + storage_commitment, + class_commitment, + header.starknet_version, + ); let expected_state_commitment = header.state_commitment; if state_commitment != expected_state_commitment { tracing::debug!( diff --git a/crates/pathfinder/src/sync/transactions.rs b/crates/pathfinder/src/sync/transactions.rs index 280594e986..212c2391c9 100644 --- a/crates/pathfinder/src/sync/transactions.rs +++ b/crates/pathfinder/src/sync/transactions.rs @@ -5,6 +5,7 @@ use anyhow::{anyhow, Context}; use p2p::libp2p::PeerId; use p2p::sync::client::types::TransactionData; use p2p::PeerData; +use pathfinder_block_commitments::calculate_transaction_commitment; use pathfinder_common::prelude::*; use pathfinder_common::receipt::Receipt; use pathfinder_common::transaction::{ @@ -22,7 +23,6 @@ use tokio_stream::wrappers::ReceiverStream; use super::error::SyncError; use super::storage_adapters; use super::stream::ProcessStage; -use crate::state::block_hash::calculate_transaction_commitment; /// For a single block #[derive(Clone, Debug)] diff --git a/crates/pathfinder/src/validator.rs b/crates/pathfinder/src/validator.rs deleted file mode 100644 index a4b25eef5c..0000000000 --- a/crates/pathfinder/src/validator.rs +++ /dev/null @@ -1,1485 +0,0 @@ -use std::str::FromStr; -use std::sync::Arc; -use std::time::Instant; - -use anyhow::Context; -use p2p::sync::client::conv::TryFromDto; -use p2p_proto::class::Cairo1Class; -use p2p_proto::consensus::{BlockInfo, ProposalInit, TransactionVariant as ConsensusVariant}; -use p2p_proto::sync::transaction::{DeclareV3WithoutClass, TransactionVariant as SyncVariant}; -use p2p_proto::transaction::DeclareV3WithClass; -use pathfinder_common::class_definition::{SelectorAndFunctionIndex, SierraEntryPoints}; -use pathfinder_common::event::Event; -use pathfinder_common::receipt::Receipt; -use pathfinder_common::state_update::{StateUpdate, StateUpdateData}; -use pathfinder_common::transaction::{Transaction, TransactionVariant}; -use pathfinder_common::{ - class_definition, - BlockHash, - BlockHeader, - BlockNumber, - BlockTimestamp, - ChainId, - EntryPoint, - EventCommitment, - L1DataAvailabilityMode, - ProposalCommitment, - ReceiptCommitment, - SequencerAddress, - StarknetVersion, - StateCommitment, - StateDiffCommitment, - TransactionCommitment, - TransactionHash, -}; -use pathfinder_executor::types::{to_starknet_api_transaction, BlockInfoPriceConverter}; -use pathfinder_executor::{BlockExecutor, ClassInfo, IntoStarkFelt}; -use pathfinder_merkle_tree::starknet_state::update_starknet_state; -use pathfinder_rpc::context::{ETH_FEE_TOKEN_ADDRESS, STRK_FEE_TOKEN_ADDRESS}; -use pathfinder_storage::{Storage, Transaction as DbTransaction}; -use rayon::prelude::*; -use tracing::debug; - -use crate::state::block_hash::{ - self, - calculate_event_commitment, - calculate_receipt_commitment, - calculate_transaction_commitment, -}; - -pub fn new( - chain_id: ChainId, - proposal_init: ProposalInit, -) -> anyhow::Result { - ValidatorBlockInfoStage::new(chain_id, proposal_init) -} - -/// Validates the basic block metadata and proposal information before any -/// transaction processing. -#[derive(Debug)] -pub struct ValidatorBlockInfoStage { - chain_id: ChainId, - proposal_height: BlockNumber, -} - -impl ValidatorBlockInfoStage { - pub fn new( - chain_id: ChainId, - proposal_init: ProposalInit, - ) -> anyhow::Result { - // TODO(validator) how can we validate the proposal init? - Ok(ValidatorBlockInfoStage { - chain_id, - proposal_height: BlockNumber::new(proposal_init.block_number) - .context("ProposalInit height exceeds i64::MAX")?, - }) - } - - pub fn validate_consensus_block_info( - self, - block_info: BlockInfo, - storage: Storage, - ) -> anyhow::Result { - let _span = tracing::debug_span!( - "Validator::validate_block_info", - height = %block_info.block_number, - timestamp = %block_info.timestamp, - builder = %block_info.builder.0, - ) - .entered(); - - let Self { - chain_id, - proposal_height, - } = self; - - anyhow::ensure!( - proposal_height == block_info.block_number, - "ProposalInit height does not match BlockInfo height: {} != {}", - proposal_height, - block_info.block_number, - ); - - // TODO(validator) validate block info (timestamp, gas prices) - - let BlockInfo { - block_number, - timestamp, - builder, - l1_da_mode, - l2_gas_price_fri, - l1_gas_price_wei, - l1_data_gas_price_wei, - eth_to_strk_rate, - } = block_info; - - let block_info = pathfinder_executor::types::BlockInfo::try_from_proposal( - block_number, - timestamp, - SequencerAddress(builder.0), - match l1_da_mode { - p2p_proto::common::L1DataAvailabilityMode::Blob => L1DataAvailabilityMode::Blob, - p2p_proto::common::L1DataAvailabilityMode::Calldata => { - L1DataAvailabilityMode::Calldata - } - }, - BlockInfoPriceConverter::consensus( - l2_gas_price_fri, - l1_gas_price_wei, - l1_data_gas_price_wei, - eth_to_strk_rate, - ), - StarknetVersion::new(0, 14, 0, 0), /* TODO(validator) should probably come from - * somewhere... */ - ) - .context("Creating internal BlockInfo representation")?; - - Ok(ValidatorTransactionBatchStage { - chain_id, - block_info, - expected_block_header: None, - transactions: Vec::new(), - receipts: Vec::new(), - events: Vec::new(), - executor: None, - cumulative_state_updates: Vec::new(), - batch_sizes: Vec::new(), - batch_p2p_transactions: Vec::new(), - storage, - }) - } -} - -/// Executes transactions and manages the block execution state. -pub struct ValidatorTransactionBatchStage { - chain_id: ChainId, - block_info: pathfinder_executor::types::BlockInfo, - expected_block_header: Option, - transactions: Vec, - receipts: Vec, - events: Vec>, - /// Single executor for all batches (optimized from multiple executors) - executor: Option, - /// Cumulative state updates after each batch (for rollback reconstruction) - cumulative_state_updates: Vec, - /// Size of each batch (for proper rollback calculations) - batch_sizes: Vec, - /// Original p2p transactions per batch (for partial execution) - batch_p2p_transactions: Vec>, - /// Storage for creating new connections - storage: Storage, -} - -impl ValidatorTransactionBatchStage { - /// Create a new ValidatorTransactionBatchStage - pub fn new( - chain_id: ChainId, - block_info: pathfinder_executor::types::BlockInfo, - storage: Storage, - ) -> anyhow::Result { - Ok(ValidatorTransactionBatchStage { - chain_id, - block_info, - expected_block_header: None, - transactions: Vec::new(), - receipts: Vec::new(), - events: Vec::new(), - executor: None, - cumulative_state_updates: Vec::new(), - batch_sizes: Vec::new(), - batch_p2p_transactions: Vec::new(), - storage, - }) - } - - pub fn has_proposal_commitment(&self) -> bool { - self.expected_block_header.is_some() - } - - /// Get the current number of executed transactions - pub fn transaction_count(&self) -> usize { - self.transactions.len() - } - - /// Reconstruct executor from a cumulative state update - /// This is used for rollback scenarios where we need to recreate the - /// executor from a stored state diff checkpoint - fn reconstruct_executor_from_state_update( - &self, - state_update_data: &StateUpdateData, - ) -> anyhow::Result { - // Convert StateUpdateData to StateUpdate - let state_update = StateUpdate { - block_hash: pathfinder_common::BlockHash::ZERO, - parent_state_commitment: pathfinder_common::StateCommitment::ZERO, - state_commitment: pathfinder_common::StateCommitment::ZERO, - contract_updates: state_update_data.contract_updates.clone(), - system_contract_updates: state_update_data.system_contract_updates.clone(), - declared_cairo_classes: state_update_data.declared_cairo_classes.clone(), - declared_sierra_classes: state_update_data.declared_sierra_classes.clone(), - migrated_compiled_classes: state_update_data.migrated_compiled_classes.clone(), - }; - - // Create BlockExecutor from the StateUpdate - BlockExecutor::new_with_pending_state( - self.chain_id, - self.block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - self.storage - .connection() - .context("Creating database connection for executor reconstruction")?, - Arc::new(state_update), - ) - .context("Creating BlockExecutor from state update") - } - - /// Execute a batch of transactions using a single executor and extract - /// state diffs - pub fn execute_batch( - &mut self, - transactions: Vec, - ) -> anyhow::Result<()> { - if transactions.is_empty() { - return Ok(()); - } - - let batch_size = transactions.len(); - let batch_index = self.cumulative_state_updates.len(); - - tracing::debug!( - "Executing batch {} with {} transactions", - batch_index, - batch_size - ); - - // Convert transactions to executor format - let txns = transactions - .iter() - .map(|t| try_map_transaction(t.clone())) - .collect::>>()?; - let (common_txns, executor_txns): (Vec<_>, Vec<_>) = txns.into_iter().unzip(); - - // Verify transaction hashes - let txn_hashes = common_txns - .par_iter() - .map(|t| { - if t.verify_hash(self.chain_id) { - Ok(t.hash) - } else { - Err(anyhow::anyhow!( - "Transaction hash mismatch, expected: {}", - t.hash - )) - } - }) - .collect::>>() - .context("Verifying transaction hashes")?; - - // Initialize executor on first batch, or use existing executor - if self.executor.is_none() { - // First batch - start from initial state - self.executor = Some(BlockExecutor::new( - self.chain_id, - self.block_info, - ETH_FEE_TOKEN_ADDRESS, - STRK_FEE_TOKEN_ADDRESS, - self.storage - .connection() - .context("Creating database connection")?, - )?); - } - - // Get mutable reference to executor - let executor = self - .executor - .as_mut() - .context("Executor should be initialized")?; - - // Set the correct transaction index - executor.set_transaction_index(self.transactions.len()); - - // Execute the batch transactions in the single executor - let (receipts, events): (Vec<_>, Vec<_>) = - executor.execute(executor_txns)?.into_iter().unzip(); - - // Extract cumulative state diff after batch execution - let state_diff = executor.extract_state_diff()?; - let state_update_data: StateUpdateData = state_diff.into(); - self.cumulative_state_updates.push(state_update_data); - - // Convert receipts to common format with correct sequential transaction indices - let base_transaction_index = self.transactions.len(); - let receipts: Vec = receipts - .into_iter() - .zip(txn_hashes) - .enumerate() - .map(|(batch_idx, (receipt, hash))| Receipt { - transaction_hash: hash, - actual_fee: receipt.actual_fee, - execution_resources: receipt.execution_resources, - l2_to_l1_messages: receipt.l2_to_l1_messages, - execution_status: receipt.execution_status, - transaction_index: pathfinder_common::TransactionIndex::new( - (base_transaction_index + batch_idx) as u64, - ) - .expect("Transaction index should be valid"), - }) - .collect(); - - // Store batch size and original p2p transactions for potential rollback - self.batch_sizes.push(batch_size); - self.batch_p2p_transactions.push(transactions); - - // Update our state - self.transactions.extend(common_txns); - self.receipts.extend(receipts); - self.events.extend(events); - - // Validate consistency after each batch execution - self.validate_batch_consistency()?; - - tracing::debug!( - "Executed batch {} with {} transactions, total transactions: {}", - batch_index, - batch_size, - self.transactions.len() - ); - - Ok(()) - } - - /// Rollback to the state after a specific batch (discard later batches) - pub fn rollback_to_batch(&mut self, target_batch: usize) -> anyhow::Result<()> { - if target_batch >= self.cumulative_state_updates.len() { - return Err(anyhow::anyhow!( - "Target batch {} exceeds available batches {}", - target_batch, - self.cumulative_state_updates.len() - )); - } - - // Calculate how many transactions to keep based on the target batch - // Sum up the sizes of all batches up to and including the target batch - let transactions_to_keep: usize = self.batch_sizes.iter().take(target_batch + 1).sum(); - - // Truncate all vectors to match the target batch - self.transactions.truncate(transactions_to_keep); - self.receipts.truncate(transactions_to_keep); - self.events.truncate(transactions_to_keep); - self.cumulative_state_updates.truncate(target_batch + 1); - self.batch_sizes.truncate(target_batch + 1); - self.batch_p2p_transactions.truncate(target_batch + 1); - - // Reconstruct executor from the state update at target batch - let state_update_at_target = &self.cumulative_state_updates[target_batch]; - self.executor = Some(self.reconstruct_executor_from_state_update(state_update_at_target)?); - self.executor - .as_mut() - .context("Executor should be initialized after reconstruction")? - .set_transaction_index(transactions_to_keep); - - // Validate consistency after rollback - self.validate_batch_consistency()?; - - tracing::debug!( - "Rolled back to batch {} - kept {} transactions, {} receipts, {} events", - target_batch, - self.transactions.len(), - self.receipts.len(), - self.events.len() - ); - - Ok(()) - } - - /// Rollback to a specific transaction count - pub fn rollback_to_transaction( - &mut self, - target_transaction_count: usize, - ) -> anyhow::Result<()> { - let target_batch = self.find_batch_containing_transaction(target_transaction_count)?; - - let cumulative_size_up_to_batch: usize = self.batch_sizes.iter().take(target_batch).sum(); - let transactions_in_target_batch = target_transaction_count - cumulative_size_up_to_batch; - - // If the target transaction count is equal to the batch size, rollback to the - // batch - if transactions_in_target_batch == self.batch_sizes[target_batch] { - self.rollback_to_batch(target_batch) - } else { - // If the target batch is the first batch, re-execute the partial batch - if target_batch == 0 { - // Store the original transactions before clearing state - let original_p2p_transactions = self.batch_p2p_transactions[0].clone(); - - // Clear all state first since we're starting from scratch - self.transactions.clear(); - self.receipts.clear(); - self.events.clear(); - self.executor = None; - self.cumulative_state_updates.clear(); - self.batch_sizes.clear(); - self.batch_p2p_transactions.clear(); - - // Execute the partial batch - let partial_transactions = - &original_p2p_transactions[..transactions_in_target_batch + 1]; - self.execute_batch(partial_transactions.to_vec())?; - } else { - // Store the original p2p transactions before rollback - let original_p2p_transactions = self.batch_p2p_transactions[target_batch].clone(); - - // Rollback to the previous batch - self.rollback_to_batch(target_batch - 1)?; - - // Execute the partial batch that's left - let partial_transactions = - &original_p2p_transactions[..transactions_in_target_batch + 1]; - self.execute_batch(partial_transactions.to_vec())?; - } - - Ok(()) - } - } - - fn find_batch_containing_transaction(&self, target_count: usize) -> anyhow::Result { - let mut cumulative_size = 0; - for (batch_idx, &batch_size) in self.batch_sizes.iter().enumerate() { - if cumulative_size + batch_size > target_count { - return Ok(batch_idx); - } - cumulative_size += batch_size; - } - Err(anyhow::anyhow!( - "Transaction count {} exceeds total transactions {}", - target_count, - self.transactions.len() - )) - } - - /// Finalize with the current state (up to the last executed transaction) - pub fn finalize(&mut self) -> anyhow::Result> { - if self.executor.is_none() { - return Ok(None); - } - - // Take the single executor and finalize it - let executor = self.executor.take().context("Executor should exist")?; - let state_diff = executor.finalize()?; - - Ok(Some(state_diff)) - } - - /// Get the number of batches - pub fn batch_count(&self) -> usize { - self.cumulative_state_updates.len() - } - - /// Get the number of receipts - pub fn receipt_count(&self) -> usize { - self.receipts.len() - } - - /// Get the number of events - pub fn event_count(&self) -> usize { - self.events.len() - } - - /// Get a reference to the receipts (for testing) - #[cfg(test)] - pub fn receipts(&self) -> &[Receipt] { - &self.receipts - } - - /// Validate that batch tracking vectors are consistent - fn validate_batch_consistency(&self) -> anyhow::Result<()> { - if self.cumulative_state_updates.len() != self.batch_sizes.len() { - return Err(anyhow::anyhow!( - "Batch consistency error: {} state updates but {} batch sizes", - self.cumulative_state_updates.len(), - self.batch_sizes.len() - )); - } - - // Validate that the sum of batch sizes matches the total transaction count - let total_batch_transactions: usize = self.batch_sizes.iter().sum(); - if total_batch_transactions != self.transactions.len() { - return Err(anyhow::anyhow!( - "Batch size mismatch: batch sizes sum to {} but we have {} transactions", - total_batch_transactions, - self.transactions.len() - )); - } - - // Validate that batch sizes are non-zero - for (i, &size) in self.batch_sizes.iter().enumerate() { - if size == 0 { - return Err(anyhow::anyhow!("Invalid batch size: batch {i} has size 0")); - } - } - - Ok(()) - } - - /// Validate that the validator state is consistent - pub fn validate_state_consistency(&self) -> anyhow::Result<()> { - // Validate that receipts and events match transaction count - if self.receipts.len() != self.transactions.len() { - return Err(anyhow::anyhow!( - "State inconsistency: {} receipts but {} transactions", - self.receipts.len(), - self.transactions.len() - )); - } - - if self.events.len() != self.transactions.len() { - return Err(anyhow::anyhow!( - "State inconsistency: {} event arrays but {} transactions", - self.events.len(), - self.transactions.len() - )); - } - Ok(()) - } - - pub fn record_proposal_commitment( - &mut self, - proposal_commitment: p2p_proto::consensus::ProposalCommitment, - ) -> anyhow::Result<()> { - let expected_block_header = BlockHeader { - hash: BlockHash::ZERO, // UNUSED - parent_hash: BlockHash::ZERO, // UNUSED - number: BlockNumber::new(proposal_commitment.block_number) - .context("ProposalCommitment block number exceeds i64::MAX")?, - timestamp: BlockTimestamp::new(proposal_commitment.timestamp) - .context("ProposalCommitment timestamp exceeds i64::MAX")?, - // TODO prices should be validated against proposal_commitment values - eth_l1_gas_price: self.block_info.eth_l1_gas_price, - strk_l1_gas_price: self.block_info.strk_l1_gas_price, - eth_l1_data_gas_price: self.block_info.eth_l1_data_gas_price, - strk_l1_data_gas_price: self.block_info.strk_l1_data_gas_price, - eth_l2_gas_price: self.block_info.eth_l2_gas_price, - strk_l2_gas_price: self.block_info.strk_l2_gas_price, - sequencer_address: SequencerAddress(proposal_commitment.builder.0), - starknet_version: StarknetVersion::from_str(&proposal_commitment.protocol_version)?, - event_commitment: EventCommitment(proposal_commitment.event_commitment.0), - state_commitment: StateCommitment::ZERO, // UNUSED - transaction_commitment: TransactionCommitment( - proposal_commitment.transaction_commitment.0, - ), - transaction_count: 0, // TODO validate concatenated_counts - event_count: 0, // TODO validate concatenated_counts - l1_da_mode: match proposal_commitment.l1_da_mode { - p2p_proto::common::L1DataAvailabilityMode::Blob => L1DataAvailabilityMode::Blob, - p2p_proto::common::L1DataAvailabilityMode::Calldata => { - L1DataAvailabilityMode::Calldata - } - }, - receipt_commitment: ReceiptCommitment(proposal_commitment.receipt_commitment.0), - state_diff_commitment: StateDiffCommitment(proposal_commitment.state_diff_commitment.0), - state_diff_length: 0, // TODO validate concatenated_counts - }; - self.expected_block_header = Some(expected_block_header); - Ok(()) - } - - /// Finalizes the block, producing a header with all commitments except - /// the state commitment and block hash, which are computed in the last - /// stage. Also verifies that the computed proposal commitment matches the - /// expected one. - pub fn consensus_finalize( - self, - expected_proposal_commitment: ProposalCommitment, - ) -> anyhow::Result { - let next_stage = self.consensus_finalize0()?; - let actual_proposal_commitment = next_stage.header.state_diff_commitment; - - if actual_proposal_commitment.0 == expected_proposal_commitment.0 { - Ok(next_stage) - } else { - Err(anyhow::anyhow!( - "expected {expected_proposal_commitment}, actual {actual_proposal_commitment}" - )) - } - } - - /// Finalizes the block, producing a header with all commitments except - /// the state commitment and block hash, which are computed in the last - /// stage. - pub(crate) fn consensus_finalize0(self) -> anyhow::Result { - let Self { - block_info, - expected_block_header, - executor, - transactions, - receipts, - events, - .. - } = self; - - let _span = tracing::debug_span!( - "Validator::consensus_finalize", - height = %block_info.number, - num_transactions = %transactions.len(), - ) - .entered(); - - let start = Instant::now(); - - // For empty proposals (no transactions), we don't need an executor. - // Use an empty state diff instead. - let state_update = if executor.is_none() && transactions.is_empty() { - StateUpdateData::default() - } else { - let executor = executor.context("Executor should exist for finalization")?; - let state_diff = executor.finalize()?; - StateUpdateData::from(state_diff) - }; - - let transaction_commitment = - calculate_transaction_commitment(&transactions, block_info.starknet_version)?; - let receipt_commitment = calculate_receipt_commitment(&receipts)?; - let events_ref_by_txn = events - .iter() - .zip(transactions.iter().map(|t| t.hash)) - .map(|(e, h)| (h, e.as_slice())) - .collect::>(); - let event_commitment = - calculate_event_commitment(&events_ref_by_txn, block_info.starknet_version)?; - let state_diff_commitment = state_update.compute_state_diff_commitment(); - - let header = BlockHeader { - // Computed in ValidatorFinalizeStage::finalize() - hash: BlockHash::ZERO, - parent_hash: BlockHash::ZERO, - number: self.block_info.number, - timestamp: self.block_info.timestamp, - eth_l1_gas_price: self.block_info.eth_l1_gas_price, - strk_l1_gas_price: self.block_info.strk_l1_gas_price, - eth_l1_data_gas_price: self.block_info.eth_l1_data_gas_price, - strk_l1_data_gas_price: self.block_info.strk_l1_data_gas_price, - eth_l2_gas_price: self.block_info.eth_l2_gas_price, - strk_l2_gas_price: self.block_info.strk_l2_gas_price, - sequencer_address: self.block_info.sequencer_address, - starknet_version: self.block_info.starknet_version, - event_commitment, - // Computed in ValidatorFinalizeStage::finalize() - state_commitment: StateCommitment::ZERO, - transaction_commitment, - transaction_count: 0, // TODO validate concatenated_counts - event_count: 0, // TODO validate concatenated_counts - l1_da_mode: self.block_info.l1_da_mode, - receipt_commitment, - state_diff_commitment, - state_diff_length: 0, // TODO validate concatenated_counts - }; - - debug!( - "Block {} finalized in {} ms", - self.block_info.number, - start.elapsed().as_millis() - ); - - if let Some(expected_header) = expected_block_header { - if header != expected_header { - anyhow::bail!("expected {expected_header:?}, actual {header:?}"); - } - } - - Ok(ValidatorFinalizeStage { - header, - state_update, - transactions, - receipts, - events, - }) - } -} - -/// Finalizes the block by computing commitments and updating the database. -pub struct ValidatorFinalizeStage { - header: BlockHeader, - state_update: StateUpdateData, - transactions: Vec, - receipts: Vec, - events: Vec>, -} - -#[derive(Clone, Debug)] -pub struct FinalizedBlock { - pub header: BlockHeader, - pub state_update: StateUpdateData, - pub transactions_and_receipts: Vec<(Transaction, Receipt)>, - pub events: Vec>, -} - -impl ValidatorFinalizeStage { - /// Updates the tries, computes the state commitment and block hash. - /// - /// ### Performance - /// - /// This function performs database operations and is computationally - /// and IO intensive. - pub fn finalize( - self, - db_tx: DbTransaction<'_>, - storage: Storage, - ) -> anyhow::Result { - #[cfg(debug_assertions)] - const VERIFY_HASHES: bool = true; - #[cfg(not(debug_assertions))] - const VERIFY_HASHES: bool = false; - - let Self { - mut header, - state_update, - transactions, - receipts, - events, - } = self; - - let _span = tracing::debug_span!( - "Validator::finalize", - height = %header.number, - num_transactions = %header.transaction_count, - ) - .entered(); - - let start = Instant::now(); - - if let Some(parent_number) = header.number.parent() { - header.parent_hash = db_tx.block_hash(parent_number.into())?.unwrap_or_default(); - } else { - // Parent block hash for the genesis block is zero by definition. - header.parent_hash = BlockHash::ZERO; - } - - let (storage_commitment, class_commitment) = update_starknet_state( - &db_tx, - (&state_update).into(), - VERIFY_HASHES, - header.number, - storage.clone(), - )?; - - db_tx.commit().context("Committing database transaction")?; - - debug!( - "Block {} tries updated in {} ms", - header.number, - start.elapsed().as_millis() - ); - - let start = Instant::now(); - header.state_commitment = StateCommitment::calculate(storage_commitment, class_commitment); - - header.hash = block_hash::compute_final_hash(&header); - - debug!( - "Block {} state commitment and block hash computed in {} ms", - header.number, - start.elapsed().as_millis() - ); - - let transactions_and_receipts = transactions.into_iter().zip(receipts).collect::>(); - - Ok(FinalizedBlock { - header, - state_update, - transactions_and_receipts, - events, - }) - } -} - -pub enum ValidatorStage { - BlockInfo(ValidatorBlockInfoStage), - TransactionBatch(Box), - Finalize(Box), -} - -impl ValidatorStage { - pub fn try_into_block_info_stage(self) -> anyhow::Result { - match self { - ValidatorStage::BlockInfo(stage) => Ok(stage), - _ => anyhow::bail!("Expected block info stage, got {}", self.variant_name()), - } - } - - pub fn try_into_transaction_batch_stage( - self, - ) -> anyhow::Result> { - match self { - ValidatorStage::TransactionBatch(stage) => Ok(stage), - _ => anyhow::bail!( - "Expected transaction batch stage, got {}", - self.variant_name() - ), - } - } - - pub fn try_into_finalize_stage(self) -> anyhow::Result> { - match self { - ValidatorStage::Finalize(stage) => Ok(stage), - _ => anyhow::bail!("Expected finalize stage, got {}", self.variant_name()), - } - } - - fn variant_name(&self) -> &'static str { - match self { - ValidatorStage::BlockInfo(_) => "BlockInfo", - ValidatorStage::TransactionBatch(_) => "TransactionBatch", - ValidatorStage::Finalize(_) => "Finalize", - } - } -} - -/// Maps consensus transaction to a pair of: -/// - common transaction, which is used for verifying the transaction hash -/// - executor transaction, which is used for executing the transaction -fn try_map_transaction( - transaction: p2p_proto::consensus::Transaction, -) -> anyhow::Result<( - pathfinder_common::transaction::Transaction, - pathfinder_executor::Transaction, -)> { - let p2p_proto::consensus::Transaction { - txn, - transaction_hash, - } = transaction; - let (variant, class_info) = match txn { - ConsensusVariant::DeclareV3(DeclareV3WithClass { common, class }) => ( - SyncVariant::DeclareV3(DeclareV3WithoutClass { - common, - class_hash: Default::default(), - }), - Some(class_info(class)?), - ), - ConsensusVariant::DeployAccountV3(v) => (SyncVariant::DeployAccountV3(v), None), - ConsensusVariant::InvokeV3(v) => (SyncVariant::InvokeV3(v), None), - ConsensusVariant::L1HandlerV0(v) => (SyncVariant::L1HandlerV0(v), None), - }; - - let common_txn_variant = TransactionVariant::try_from_dto(variant)?; - - let deployed_address = deployed_address(&common_txn_variant); - - // TODO(validator) why 10^12? - let paid_fee_on_l1 = match &common_txn_variant { - TransactionVariant::L1Handler(_) => { - Some(starknet_api::transaction::fields::Fee(1_000_000_000_000)) - } - _ => None, - }; - - let api_txn = to_starknet_api_transaction(common_txn_variant.clone())?; - let tx_hash = starknet_api::transaction::TransactionHash(transaction_hash.0.into_starkfelt()); - let executor_txn = pathfinder_executor::Transaction::from_api( - api_txn, - tx_hash, - class_info, - paid_fee_on_l1, - deployed_address, - pathfinder_executor::AccountTransactionExecutionFlags::default(), - )?; - let common_txn = pathfinder_common::transaction::Transaction { - hash: TransactionHash(transaction_hash.0), - variant: common_txn_variant, - }; - - Ok((common_txn, executor_txn)) -} - -fn class_info(class: Cairo1Class) -> anyhow::Result { - let Cairo1Class { - abi, - entry_points, - program, - contract_class_version, - } = class; - - let abi_length = abi.len(); - let sierra_program_length = program.len(); - let sierra_version = - starknet_api::contract_class::SierraVersion::from_str(&contract_class_version) - .context("Getting sierra version")?; - - let class_definition = class_definition::Sierra { - abi: abi.into(), - sierra_program: program, - contract_class_version: contract_class_version.into(), - entry_points_by_type: SierraEntryPoints { - constructor: entry_points - .constructors - .into_iter() - .map(|x| SelectorAndFunctionIndex { - selector: EntryPoint(x.selector), - function_idx: x.index, - }) - .collect(), - external: entry_points - .externals - .into_iter() - .map(|x| SelectorAndFunctionIndex { - selector: EntryPoint(x.selector), - function_idx: x.index, - }) - .collect(), - l1_handler: entry_points - .l1_handlers - .into_iter() - .map(|x| SelectorAndFunctionIndex { - selector: EntryPoint(x.selector), - function_idx: x.index, - }) - .collect(), - }, - }; - // TODO(validator) this is suboptimal, the same surplus serialization happens in - // the broadcasted transactions case - let class_definition = - serde_json::to_vec(&class_definition).context("Serializing Sierra class definition")?; - // TODO(validator) compile_to_casm should also accept a deserialized class - // definition - let casm_contract_definition = pathfinder_compiler::compile_to_casm(&class_definition) - .context("Compiling Sierra class definition to CASM")?; - - let casm_contract_definition = pathfinder_executor::parse_casm_definition( - casm_contract_definition, - sierra_version.clone(), - ) - .context("Parsing CASM contract definition")?; - let ci = ClassInfo::new( - &casm_contract_definition, - sierra_program_length, - abi_length, - sierra_version, - )?; - Ok(ci) -} - -fn deployed_address(txnv: &TransactionVariant) -> Option { - match txnv { - TransactionVariant::DeployAccountV3(t) => Some(starknet_api::core::ContractAddress( - starknet_api::core::PatriciaKey::try_from(t.contract_address.get().into_starkfelt()) - .expect("No contract address overflow expected"), - )), - TransactionVariant::DeclareV3(_) - | TransactionVariant::InvokeV3(_) - | TransactionVariant::L1Handler(_) => None, - TransactionVariant::DeclareV0(_) - | TransactionVariant::DeclareV1(_) - | TransactionVariant::DeclareV2(_) - | TransactionVariant::DeployV0(_) - | TransactionVariant::DeployV1(_) - | TransactionVariant::DeployAccountV1(_) - | TransactionVariant::InvokeV0(_) - | TransactionVariant::InvokeV1(_) => { - unreachable!("Proposal parts don't carry older transaction versions: {txnv:?}") - } - } -} - -#[cfg(test)] -mod tests { - use p2p_proto::consensus::TransactionVariant; - use p2p_proto::transaction::L1HandlerV0; - use pathfinder_common::{ - BlockNumber, - BlockTimestamp, - ChainId, - GasPrice, - L1DataAvailabilityMode, - SequencerAddress, - StarknetVersion, - }; - use pathfinder_crypto::Felt; - use pathfinder_executor::types::BlockInfo; - use pathfinder_storage::StorageBuilder; - - use super::*; - - fn create_test_transaction(index: usize) -> p2p_proto::consensus::Transaction { - let txn = TransactionVariant::L1HandlerV0(L1HandlerV0 { - nonce: Felt::from_hex_str(&format!("0x{index}")).unwrap(), - address: p2p_proto::common::Address( - Felt::from_hex_str(&format!("0x{index:x}")).unwrap(), - ), - entry_point_selector: Felt::from_hex_str(&format!("0x{index}")).unwrap(), - calldata: vec![Felt::from_hex_str(&format!("0x{index}")).unwrap()], - }); - - let l1_handler = pathfinder_common::transaction::L1HandlerTransaction { - nonce: pathfinder_common::TransactionNonce( - Felt::from_hex_str(&format!("0x{index}")).unwrap(), - ), - contract_address: pathfinder_common::ContractAddress::new_or_panic( - Felt::from_hex_str(&format!("0x{index:x}")).unwrap(), - ), - entry_point_selector: pathfinder_common::EntryPoint( - Felt::from_hex_str(&format!("0x{index}")).unwrap(), - ), - calldata: vec![pathfinder_common::CallParam( - Felt::from_hex_str(&format!("0x{index}")).unwrap(), - )], - }; - - let chain_id = ChainId::SEPOLIA_TESTNET; - let hash = l1_handler.calculate_hash(chain_id); - - p2p_proto::consensus::Transaction { - transaction_hash: p2p_proto::common::Hash(hash.0), - txn, - } - } - - /// Tests that single executor with state diff storage works - #[test] - fn test_single_executor_optimization() { - let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); - let chain_id = ChainId::SEPOLIA_TESTNET; - - let block_info = BlockInfo { - number: BlockNumber::new_or_panic(1), - timestamp: BlockTimestamp::new_or_panic(1000), - sequencer_address: SequencerAddress::ZERO, - l1_da_mode: L1DataAvailabilityMode::Calldata, - eth_l1_gas_price: GasPrice::ZERO, - strk_l1_gas_price: GasPrice::ZERO, - eth_l1_data_gas_price: GasPrice::ZERO, - strk_l1_data_gas_price: GasPrice::ZERO, - strk_l2_gas_price: GasPrice::ZERO, - eth_l2_gas_price: GasPrice::ZERO, - starknet_version: StarknetVersion::new(0, 14, 0, 0), - }; - - let mut validator_stage = - ValidatorTransactionBatchStage::new(chain_id, block_info, storage.clone()) - .expect("Failed to create validator stage"); - - // Create batches: 3 batches with 2 transactions each - let batches = [ - vec![create_test_transaction(0), create_test_transaction(1)], - vec![create_test_transaction(2), create_test_transaction(3)], - vec![create_test_transaction(4), create_test_transaction(5)], - ]; - - // Execute batch 1 - validator_stage - .execute_batch(batches[0].clone()) - .expect("Failed to execute batch 1"); - - // Should have 1 batch (state update) after first execution - assert_eq!( - validator_stage.batch_count(), - 1, - "Should have 1 batch after first execution" - ); - assert_eq!( - validator_stage.transaction_count(), - 2, - "Should have 2 transactions" - ); - - // Execute batch 2 - validator_stage - .execute_batch(batches[1].clone()) - .expect("Failed to execute batch 2"); - - // Should have 2 batches and 2 state updates - assert_eq!(validator_stage.batch_count(), 2, "Should have 2 batches"); - assert_eq!( - validator_stage.transaction_count(), - 4, - "Should have 4 transactions" - ); - - // Execute batch 3 - validator_stage - .execute_batch(batches[2].clone()) - .expect("Failed to execute batch 3"); - - // Should have 3 batches now with 6 transactions - assert_eq!(validator_stage.batch_count(), 3, "Should have 3 batches"); - assert_eq!( - validator_stage.transaction_count(), - 6, - "Should have 6 transactions" - ); - - // Rollback to batch 1 should reconstruct executor from stored state - validator_stage - .rollback_to_batch(1) - .expect("Failed to rollback to batch 1"); - - assert_eq!( - validator_stage.batch_count(), - 2, - "Should have 2 batches after rollback" - ); - assert_eq!( - validator_stage.transaction_count(), - 4, - "Should have 4 transactions after rollback" - ); - - // Make sure we can continue executing after rollback - validator_stage - .execute_batch(batches[2].clone()) - .expect("Failed to execute batch 3 after rollback"); - - assert_eq!( - validator_stage.batch_count(), - 3, - "Should have 3 batches after re-execution" - ); - assert_eq!( - validator_stage.transaction_count(), - 6, - "Should have 6 transactions after re-execution" - ); - - // Receipts should be consistent - let receipts = validator_stage.receipts(); - assert_eq!(receipts.len(), 6, "Should have 6 receipts"); - - // Verify transaction indices are sequential - for (i, receipt) in receipts.iter().enumerate() { - assert_eq!( - receipt.transaction_index.get(), - i as u64, - "Transaction index mismatch at position {i}" - ); - } - - // Finalize should work with single executor - // Note: State diffs may be empty for L1Handler transactions, which is fine - let _state_diff = validator_stage - .finalize() - .expect("Failed to finalize") - .expect("Should have state diff"); - } - - /// Test that rollback reconstruction produces identical state - #[test] - fn test_rollback_reconstruction_consistency() { - let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); - let chain_id = ChainId::SEPOLIA_TESTNET; - - let block_info = BlockInfo { - number: BlockNumber::new_or_panic(1), - timestamp: BlockTimestamp::new_or_panic(1000), - sequencer_address: SequencerAddress::ZERO, - l1_da_mode: L1DataAvailabilityMode::Calldata, - eth_l1_gas_price: GasPrice::ZERO, - strk_l1_gas_price: GasPrice::ZERO, - eth_l1_data_gas_price: GasPrice::ZERO, - strk_l1_data_gas_price: GasPrice::ZERO, - strk_l2_gas_price: GasPrice::ZERO, - eth_l2_gas_price: GasPrice::ZERO, - starknet_version: StarknetVersion::new(0, 14, 0, 0), - }; - - let batches = [ - vec![create_test_transaction(0), create_test_transaction(1)], - vec![create_test_transaction(2), create_test_transaction(3)], - ]; - - // Create first validator and execute both batches - let mut validator1 = - ValidatorTransactionBatchStage::new(chain_id, block_info, storage.clone()) - .expect("Failed to create validator stage"); - - validator1 - .execute_batch(batches[0].clone()) - .expect("Failed to execute batch 1"); - validator1 - .execute_batch(batches[1].clone()) - .expect("Failed to execute batch 2"); - - let receipts1 = validator1.receipts().to_vec(); - - // Create second validator and execute, then rollback and re-execute - let mut validator2 = - ValidatorTransactionBatchStage::new(chain_id, block_info, storage.clone()) - .expect("Failed to create validator stage"); - - validator2 - .execute_batch(batches[0].clone()) - .expect("Failed to execute batch 1"); - validator2 - .execute_batch(batches[1].clone()) - .expect("Failed to execute batch 2"); - - // Rollback and re-execute - validator2.rollback_to_batch(0).expect("Failed to rollback"); - validator2 - .execute_batch(batches[1].clone()) - .expect("Failed to re-execute batch 2"); - - let receipts2 = validator2.receipts(); - - // Receipts should be identical - assert_eq!( - receipts1.len(), - receipts2.len(), - "Receipt count should match" - ); - for (i, (r1, r2)) in receipts1.iter().zip(receipts2.iter()).enumerate() { - assert_eq!( - r1.transaction_index, r2.transaction_index, - "Transaction index mismatch at position {i}" - ); - assert_eq!( - r1.transaction_hash, r2.transaction_hash, - "Transaction hash mismatch at position {i}" - ); - } - } - - /// Test edge cases in find_batch_containing_transaction and rollback logic - /// This verifies: - /// - find_batch_containing_transaction correctly identifies batches at - /// boundaries - /// - rollback_to_transaction handles edge cases correctly (including - /// target_count == 0) - #[test] - fn test_rollback_edge_cases() { - let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); - let chain_id = ChainId::SEPOLIA_TESTNET; - - let block_info = BlockInfo { - number: BlockNumber::new_or_panic(1), - timestamp: BlockTimestamp::new_or_panic(1000), - sequencer_address: SequencerAddress::ZERO, - l1_da_mode: L1DataAvailabilityMode::Calldata, - eth_l1_gas_price: GasPrice::ZERO, - strk_l1_gas_price: GasPrice::ZERO, - eth_l1_data_gas_price: GasPrice::ZERO, - strk_l1_data_gas_price: GasPrice::ZERO, - strk_l2_gas_price: GasPrice::ZERO, - eth_l2_gas_price: GasPrice::ZERO, - starknet_version: StarknetVersion::new(0, 14, 0, 0), - }; - - let mut validator_stage = - ValidatorTransactionBatchStage::new(chain_id, block_info, storage.clone()) - .expect("Failed to create validator stage"); - - // Create batches with different sizes to test boundary conditions - // Batch 0: 3 transactions (tx's 0, 1, 2) - // Batch 1: 2 transactions (tx's 3, 4) - // Batch 2: 2 transactions (tx's 5, 6) - let batches = [ - vec![ - create_test_transaction(0), - create_test_transaction(1), - create_test_transaction(2), - ], - vec![create_test_transaction(3), create_test_transaction(4)], - vec![create_test_transaction(5), create_test_transaction(6)], - ]; - - // Execute all batches - validator_stage - .execute_batch(batches[0].clone()) - .expect("Failed to execute batch 0"); - validator_stage - .execute_batch(batches[1].clone()) - .expect("Failed to execute batch 1"); - validator_stage - .execute_batch(batches[2].clone()) - .expect("Failed to execute batch 2"); - - assert_eq!( - validator_stage.transaction_count(), - 7, - "Should have 7 transactions" - ); - - // Rollback to transaction at batch boundary (end of batch 0 = transaction 2) - // This should rollback to batch 0 - validator_stage - .rollback_to_transaction(2) - .expect("Failed to rollback to transaction 2"); - assert_eq!( - validator_stage.transaction_count(), - 3, - "Should have 3 transactions after rollback to transaction 2" - ); - assert_eq!( - validator_stage.batch_count(), - 1, - "Should have 1 batch after rollback to transaction 2" - ); - - // Re-execute to get back to 7 transactions - validator_stage - .execute_batch(batches[1].clone()) - .expect("Failed to re-execute batch 1"); - validator_stage - .execute_batch(batches[2].clone()) - .expect("Failed to re-execute batch 2"); - - // Rollback to transaction at batch boundary (start of batch 1 = transaction 3) - // This should rollback to batch 1 (which includes transaction 3) - validator_stage - .rollback_to_transaction(3) - .expect("Failed to rollback to transaction 3"); - assert_eq!( - validator_stage.transaction_count(), - 4, - "Should have 4 transactions after rollback to transaction 3" - ); - assert_eq!( - validator_stage.batch_count(), - 2, - "Should have 2 batches after rollback to transaction 3" - ); - - // Re-execute to get back to 7 transactions - validator_stage - .execute_batch(batches[2].clone()) - .expect("Failed to re-execute batch 2"); - - // Rollback to transaction in middle of batch (transaction 1 in batch 0) - // This should rollback to transaction 1, keeping only first 2 transactions - validator_stage - .rollback_to_transaction(1) - .expect("Failed to rollback to transaction 1"); - assert_eq!( - validator_stage.transaction_count(), - 2, - "Should have 2 transactions after rollback to transaction 1" - ); - assert_eq!( - validator_stage.batch_count(), - 1, - "Should have 1 batch after rollback to transaction 1" - ); - - // Rollback to transaction 0 (first transaction) - // This should keep only the first transaction - // First, we need to get back to having multiple transactions - validator_stage - .execute_batch(vec![create_test_transaction(2)]) - .expect("Failed to add transaction 2 back"); - validator_stage - .execute_batch(batches[1].clone()) - .expect("Failed to re-execute batch 1"); - - validator_stage - .rollback_to_transaction(0) - .expect("Failed to rollback to transaction 0"); - assert_eq!( - validator_stage.transaction_count(), - 1, - "Should have 1 transaction after rollback to transaction 0" - ); - assert_eq!( - validator_stage.batch_count(), - 1, - "Should have 1 batch after rollback to transaction 0" - ); - - // Verify an out of bounds rollback error - let result = validator_stage.rollback_to_transaction(10); - assert!( - result.is_err(), - "Rollback to transaction 10 (out of bounds) should error" - ); - } - - /// Tests that empty proposals (no transactions, no executor) can be - /// finalized. - /// - /// This test covers the case where a proposal has no transactions and - /// therefore no executor is created. The finalization should succeed with - /// an empty state diff. - #[test] - fn test_empty_proposal_finalization() { - let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); - let chain_id = ChainId::SEPOLIA_TESTNET; - - // Create a proposal init for height 0 - let proposal_init = p2p_proto::consensus::ProposalInit { - block_number: 0, - round: 0, - valid_round: None, - proposer: p2p_proto::common::Address(Felt::from_hex_str("0x1").unwrap()), - }; - - // Create block info - let block_info = p2p_proto::consensus::BlockInfo { - block_number: 0, - timestamp: 1000, - builder: p2p_proto::common::Address(Felt::from_hex_str("0x1").unwrap()), - l1_da_mode: p2p_proto::common::L1DataAvailabilityMode::Calldata, - l2_gas_price_fri: 1, - l1_gas_price_wei: 1_000_000_000, - l1_data_gas_price_wei: 1, - eth_to_strk_rate: 1_000_000_000, - }; - - // Create validator stages (empty proposal path) - let validator_block_info = ValidatorBlockInfoStage::new(chain_id, proposal_init) - .expect("Failed to create ValidatorBlockInfoStage"); - - let validator_transaction_batch = validator_block_info - .validate_consensus_block_info(block_info, storage.clone()) - .expect("Failed to validate block info"); - - // Verify the validator is in the expected empty state - assert_eq!( - validator_transaction_batch.transaction_count(), - 0, - "Empty proposal should have 0 transactions" - ); - assert!( - validator_transaction_batch.executor.is_none(), - "Empty proposal should have no executor" - ); - - // Finalize the empty proposal - this should succeed without an executor - let validator_finalize = validator_transaction_batch - .consensus_finalize0() - .expect("Empty proposal finalization should succeed"); - - // Verify the finalized header has correct empty commitments - assert_eq!( - validator_finalize.header.transaction_count, 0, - "Empty proposal should have 0 transaction count" - ); - assert_eq!( - validator_finalize.header.event_count, 0, - "Empty proposal should have 0 event count" - ); - assert_eq!( - validator_finalize.state_update.contract_updates.len(), - 0, - "Empty proposal should have no contract updates" - ); - assert_eq!( - validator_finalize - .state_update - .system_contract_updates - .len(), - 0, - "Empty proposal should have no system contract updates" - ); - assert_eq!( - validator_finalize.state_update.declared_cairo_classes.len(), - 0, - "Empty proposal should have no declared Cairo classes" - ); - assert_eq!( - validator_finalize - .state_update - .declared_sierra_classes - .len(), - 0, - "Empty proposal should have no declared Sierra classes" - ); - } -} diff --git a/crates/pathfinder/tests/common/feeder_gateway.rs b/crates/pathfinder/tests/common/feeder_gateway.rs new file mode 100644 index 0000000000..e87231ff3f --- /dev/null +++ b/crates/pathfinder/tests/common/feeder_gateway.rs @@ -0,0 +1,85 @@ +use std::path::PathBuf; +use std::process::{Child, Command}; +use std::time::Duration; + +use anyhow::Context as _; + +use crate::common::pathfinder_instance::Config; +use crate::common::utils::{self, create_log_file, feeder_gateway_bin}; + +pub struct FeederGateway { + process: Child, + db_dir: PathBuf, + port: Option, +} + +impl FeederGateway { + /// Spawns a local feeder gateway instance that reads from the database + /// file located in the given proposer's database directory. + /// + /// # Important + /// + /// The spawned instance will be terminated when the returned + /// [`FeederGateway`] is dropped. + pub fn spawn(proposer_config: &Config) -> anyhow::Result { + let db_dir = proposer_config.db_dir(); + let marker_file = db_dir.join(format!("{}_ready", proposer_config.name)); + let stdout_path = proposer_config.test_dir.join("fgw_stdout.log"); + let stdout_file = create_log_file("Feeder Gateway", &stdout_path)?; + let stderr_path = proposer_config.test_dir.join("fgw_stderr.log"); + let stderr_file = create_log_file("Feeder Gateway", &stderr_path)?; + + let feeder_bin = feeder_gateway_bin(); + let process = Command::new(feeder_bin) + .args([ + "--port=0", + &format!("--wait-for-marker-file={}", marker_file.display()), + db_dir.join("custom.sqlite").to_str().expect("Valid utf8"), + ]) + .stdout(stdout_file) + .stderr(stderr_file) + .env( + "RUST_LOG", + "trace,feeder_gateway=trace,pathfinder_lib=trace,pathfinder_storage=trace,\ + starknet_gateway_types=trace", + ) + .spawn() + .context("Spawning local feeder gateway")?; + + Ok(Self { + process, + db_dir, + port: None, + }) + } + + pub async fn wait_for_ready( + &mut self, + poll_interval: Duration, + timeout: Duration, + ) -> anyhow::Result<()> { + let pid = self.process.id(); + let port = tokio::time::timeout( + timeout, + utils::wait_for_port(pid, "feeder_gateway", &self.db_dir, poll_interval), + ) + .await??; + self.port = Some(port); + Ok(()) + } + + pub fn port(&self) -> u16 { + self.port + .expect("Port is not set. Call wait_for_ready first.") + } + + fn terminate(&mut self) { + utils::terminate(&mut self.process, "Feeder gateway"); + } +} + +impl Drop for FeederGateway { + fn drop(&mut self) { + self.terminate(); + } +} diff --git a/crates/pathfinder/tests/common/mod.rs b/crates/pathfinder/tests/common/mod.rs index 71c33012a7..20c7736a13 100644 --- a/crates/pathfinder/tests/common/mod.rs +++ b/crates/pathfinder/tests/common/mod.rs @@ -1,5 +1,6 @@ //! Utilities for Pathfinder integration tests. +pub mod feeder_gateway; pub mod pathfinder_instance; pub mod rpc_client; pub mod utils; diff --git a/crates/pathfinder/tests/common/pathfinder_instance.rs b/crates/pathfinder/tests/common/pathfinder_instance.rs index 1749b35af4..e741e9db97 100644 --- a/crates/pathfinder/tests/common/pathfinder_instance.rs +++ b/crates/pathfinder/tests/common/pathfinder_instance.rs @@ -1,20 +1,22 @@ //! Utilities for spawning and managing Pathfinder instances. -use std::fs::{File, OpenOptions}; -use std::io::ErrorKind; use std::path::{Path, PathBuf}; use std::process::{Child, Command}; -use std::sync::atomic::{AtomicBool, AtomicU16, Ordering}; +use std::sync::atomic::{AtomicU16, Ordering}; use std::time::{Duration, Instant}; use anyhow::Context as _; +use futures::future::Either; use http::StatusCode; +use pathfinder_common::integration_testing::debug_create_marker_file; use pathfinder_lib::config::integration_testing::InjectFailureConfig; use tokio::signal::unix::{signal, SignalKind}; -use tokio::sync::watch; +use tokio::sync::{mpsc, watch}; use tokio::task::JoinHandle; use tokio::time::sleep; +use crate::common::utils; + /// Represents a running Pathfinder instance. pub struct PathfinderInstance { process: Child, @@ -24,8 +26,6 @@ pub struct PathfinderInstance { rpc_port_watch_tx: watch::Sender<(u32, u16)>, rpc_port_watch_rx: watch::Receiver<(u32, u16)>, db_dir: PathBuf, - stdout_path: PathBuf, - stderr_path: PathBuf, /// `true` if [`PathfinderInstance::exited_wit_error`] returned /// `Ok(_)`. is_terminated: bool, @@ -36,12 +36,15 @@ pub struct PathfinderInstance { pub struct Config { pub name: &'static str, pub boot_port: Option, + pub sync_enabled: bool, pub my_validator_address: u8, pub validator_addresses: Vec, pub pathfinder_bin: PathBuf, pub fixture_dir: PathBuf, pub test_dir: PathBuf, pub inject_failure: Option, + pub local_feeder_gateway_port: Option, + pub boot_db: Option, } pub type RpcPortWatch = (watch::Sender<(u32, u16)>, watch::Receiver<(u32, u16)>); @@ -60,11 +63,24 @@ impl PathfinderInstance { /// returned `Ok(_)`, which means that the instance has already exited. pub fn spawn(config: Config) -> anyhow::Result { let id_file = config.fixture_dir.join(format!("id_{}.json", config.name)); - let db_dir = config.test_dir.join(format!("db-{}", config.name)); + let db_dir = config.db_dir(); + + if let Some(source) = &config.boot_db { + let destination = db_dir.join("custom.sqlite"); + std::fs::create_dir_all(&db_dir).context("Creating db directory")?; + std::fs::copy(source, &destination).context(format!( + "Copying bootstrap DB from {} to {}", + source.display(), + destination.display(), + ))?; + } + let stdout_path = config.test_dir.join(format!("{}_stdout.log", config.name)); - let stdout_file = create_log_file(&config, &stdout_path)?; + let stdout_file = + utils::create_log_file(format!("Pathfinder instance {}", config.name), &stdout_path)?; let stderr_path = config.test_dir.join(format!("{}_stderr.log", config.name)); - let stderr_file = create_log_file(&config, &stderr_path)?; + let stderr_file = + utils::create_log_file(format!("Pathfinder instance {}", config.name), &stderr_path)?; let mut command = Command::new(config.pathfinder_bin); let command = command @@ -73,42 +89,53 @@ impl PathfinderInstance { .env( "RUST_LOG", "pathfinder_lib=trace,pathfinder=trace,pathfinder_consensus=trace,p2p=off,\ - informalsystems_malachitebft_core_consensus=trace", + informalsystems_malachitebft_core_consensus=trace,starknet_gateway_client=trace,\ + starknet_gateway_types=trace,pathfinder_storage=trace", ) - .args([ - "--ethereum.url=https://ethereum-sepolia-rpc.publicnode.com", - "--network=sepolia-testnet", - format!("--data-directory={}", db_dir.display()).as_str(), - "--debug.pretty-log=true", - "--color=never", - "--monitor-address=127.0.0.1:0", - "--sync.enable=false", - "--rpc.enable=true", - "--http-rpc=127.0.0.1:0", - "--consensus.enable=true", - // Currently the proposer address always points to Alice (0x1). - "--consensus.proposer-addresses=0x1", - format!( - "--consensus.my-validator-address={:#x}", - config.my_validator_address - ) - .as_str(), - format!( - "--consensus.validator-addresses={}", - config - .validator_addresses - .iter() - .map(|a| format!("0x{a}")) - .collect::>() - .join(",") - ) - .as_str(), - "--consensus.history-depth=2", - format!("--p2p.consensus.identity-config-file={}", id_file.display()).as_str(), - "--p2p.consensus.listen-on=/ip4/127.0.0.1/tcp/0", - "--p2p.consensus.experimental.direct-connection-timeout=1", - "--p2p.consensus.experimental.eviction-timeout=1", + .arg("--ethereum.url=wss://ethereum-sepolia-rpc.publicnode.com"); + + if let Some(port) = config.local_feeder_gateway_port { + command.args([ + "--network=custom", + "--chain-id=SN_SEPOLIA", + &format!("--feeder-gateway-url=http://127.0.0.1:{port}/feeder_gateway"), + &format!("--gateway-url=http://127.0.0.1:{port}/gateway"), ]); + } else { + command.arg("--network=sepolia-testnet"); + } + + let command = command.args([ + format!("--data-directory={}", db_dir.display()).as_str(), + "--debug.pretty-log=true", + "--color=never", + "--monitor-address=127.0.0.1:0", + "--rpc.enable=true", + "--http-rpc=127.0.0.1:0", + "--consensus.enable=true", + // Currently the proposer address always points to Alice (0x1). + "--consensus.proposer-addresses=0x1", + format!( + "--consensus.my-validator-address={:#x}", + config.my_validator_address + ) + .as_str(), + format!( + "--consensus.validator-addresses={}", + config + .validator_addresses + .iter() + .map(|a| format!("0x{a}")) + .collect::>() + .join(",") + ) + .as_str(), + "--consensus.history-depth=2", + format!("--p2p.consensus.identity-config-file={}", id_file.display()).as_str(), + "--p2p.consensus.listen-on=/ip4/127.0.0.1/tcp/0", + "--p2p.consensus.experimental.direct-connection-timeout=1", + "--p2p.consensus.experimental.eviction-timeout=1", + ]); if let Some(boot_port) = config.boot_port { // Peer ID from `fixtures/id_Alice.json`. command.arg(format!( @@ -116,15 +143,18 @@ impl PathfinderInstance { 12D3KooWDJryKaxjwNCk6yTtZ4GbtbLrH7JrEUTngvStaDttLtid" )); } + command.arg(format!("--sync.enable={}", config.sync_enabled)); + command.args([ + "--integration-tests.disable-db-verification=true", + "--integration-tests.disable-gas-price-validation=true", + ]); config.inject_failure.map(|i| { - command - .arg(format!( - "--integration-tests.inject-failure={},{}", - i.height, - i.trigger.as_str() - )) - .arg("--integration-tests.disable-db-verification=true") + command.arg(format!( + "--integration-tests.inject-failure={},{}", + i.height, + i.trigger.as_str() + )) }); let process = command @@ -151,8 +181,6 @@ impl PathfinderInstance { rpc_port_watch_tx, rpc_port_watch_rx, db_dir, - stdout_path, - stderr_path, is_terminated: false, }) } @@ -197,9 +225,10 @@ impl PathfinderInstance { } } - /// Waits until the instance is ready to accept requests on the monitor - /// port, or until `timeout` is reached. Polls every `poll_interval`. - /// If the timeout is reached, an error is returned. + /// Waits until the instance is ready to accept requests on the monitor, + /// rpc, and consensus p2p ports, or until `timeout` is reached. Polls + /// every `poll_interval`. If the timeout is reached, an error is + /// returned. pub async fn wait_for_ready( &self, poll_interval: Duration, @@ -209,9 +238,9 @@ impl PathfinderInstance { let fut = async move { let stopwatch = Instant::now(); let (monitor_port, rpc_port, p2p_port) = tokio::join!( - Self::wait_for_port(pid, "monitor", &self.db_dir, poll_interval), - Self::wait_for_port(pid, "rpc", &self.db_dir, poll_interval), - Self::wait_for_port(pid, "p2p_consensus", &self.db_dir, poll_interval), + utils::wait_for_port(pid, "monitor", &self.db_dir, poll_interval), + utils::wait_for_port(pid, "rpc", &self.db_dir, poll_interval), + utils::wait_for_port(pid, "p2p_consensus", &self.db_dir, poll_interval), ); let monitor_port = monitor_port?; self.monitor_port.store(monitor_port, Ordering::Relaxed); @@ -240,7 +269,11 @@ impl PathfinderInstance { } }; match tokio::time::timeout(timeout, fut).await { - Ok(Ok(_)) => Ok(()), + Ok(Ok(_)) => { + // This is to let other processes know + debug_create_marker_file(&format!("{}_ready", self.name), &self.db_dir); + Ok(()) + } Ok(Err(e)) => Err(e), Err(_) => { anyhow::bail!( @@ -251,37 +284,6 @@ impl PathfinderInstance { } } - async fn wait_for_port( - pid: u32, - port_name: &str, - db_dir: &Path, - poll_interval: Duration, - ) -> anyhow::Result { - let port_file = db_dir.join(format!("pid_{pid}_{port_name}_port")); - loop { - match tokio::fs::read_to_string(&port_file).await { - Ok(port_str) => { - let port = port_str - .trim() - .parse::() - .context(format!("Parsing port value in {}", port_file.display()))?; - return Ok(port); - } - Err(e) if e.kind() == ErrorKind::NotFound => { - // File not found yet, continue polling. - } - Err(e) => { - return Err(anyhow::anyhow!( - "Error reading port file {}: {e}", - port_file.display() - )); - } - } - - sleep(poll_interval).await; - } - } - pub fn name(&self) -> &'static str { self.name } @@ -311,102 +313,19 @@ impl PathfinderInstance { return; } - println!( - "Pathfinder instance {:<7} (pid: {}) terminating...", - self.name, - self.process.id() + utils::terminate( + &mut self.process, + format!("Pathfinder instance {:<7}", self.name), ); - - _ = Command::new("kill") - // It's supposed to be the default signal in `kill`, but let's be explicit. - .arg("-TERM") - .arg(self.process.id().to_string()) - .status(); - - // See if SIGTERM worked. - match self.process.try_wait() { - Ok(Some(status)) => { - println!( - "Pathfinder instance {:<7} (pid: {}) terminated with status: {status}", - self.name, - self.process.id() - ); - } - Ok(None) => match self.process.wait() { - Ok(status) => { - println!( - "Pathfinder instance {:<7} (pid: {}) terminated with status: {status}", - self.name, - self.process.id() - ); - } - Err(e) => { - eprintln!( - "Error waiting for Pathfinder instance {:<7} (pid: {}) to terminate: {e}", - self.name, - self.process.id(), - ); - if let Err(error) = self.process.kill() { - eprintln!( - "Error killing Pathfinder instance {:<7} (pid: {}): {error}", - self.name, - self.process.id(), - ); - } - } - }, - Err(e) => { - eprintln!( - "Error terminating Pathfinder instance {:<7} (pid: {}): {e}", - self.name, - self.process.id(), - ); - if let Err(error) = self.process.kill() { - eprintln!( - "Error killing Pathfinder instance {:<7} (pid: {}): {error}", - self.name, - self.process.id(), - ); - } - } - } - } - - pub fn enable_log_dump(enable: bool) { - DUMP_LOGS_ON_DROP.store(enable, std::sync::atomic::Ordering::Relaxed); } } -fn create_log_file(config: &Config, stdout_path: &Path) -> Result { - let stdout_file = OpenOptions::new() - .append(true) - .create(true) - .open(stdout_path) - .context(format!( - "Creating log file {} for Pathfinder instance {}", - stdout_path.display(), - config.name - ))?; - Ok(stdout_file) -} - impl Drop for PathfinderInstance { fn drop(&mut self) { self.terminate(); - - if DUMP_LOGS_ON_DROP.load(std::sync::atomic::Ordering::Relaxed) { - let stdout = std::fs::read_to_string(&self.stdout_path) - .unwrap_or("Error reading file".to_string()); - println!("Pathfinder instance {:<7} stdout log:\n{stdout}", self.name); - let stderr = std::fs::read_to_string(&self.stderr_path) - .unwrap_or("Error reading file".to_string()); - println!("Pathfinder instance {:<7} stderr log:\n{stderr}", self.name); - } } } -static DUMP_LOGS_ON_DROP: AtomicBool = AtomicBool::new(true); - impl Config { const NAMES: &'static [&'static str] = &[ "Alice", "Bob", "Charlie", "Dan", "Eve", "Frank", "Grace", "Heidi", @@ -417,7 +336,8 @@ impl Config { set_size: usize, pathfinder_bin: &Path, fixture_dir: &Path, - test_dir: &Path, + test_dir: PathBuf, + boot_db: Option, ) -> Vec { assert!( set_size <= Self::NAMES.len(), @@ -428,14 +348,17 @@ impl Config { .map(|i| Self { name: Self::NAMES[i], boot_port: None, + sync_enabled: false, my_validator_address: (i + 1) as u8, // The set is deduplicated when consensus task is started, so including the own // validator address is fine. validator_addresses: (1..=set_size as u8).collect::>(), - test_dir: test_dir.to_path_buf(), + test_dir: test_dir.clone(), pathfinder_bin: pathfinder_bin.to_path_buf(), fixture_dir: fixture_dir.to_path_buf(), inject_failure: None, + local_feeder_gateway_port: None, + boot_db: boot_db.clone(), }) .collect() } @@ -449,6 +372,20 @@ impl Config { self.boot_port = Some(port); self } + + pub fn with_sync_enabled(mut self) -> Self { + self.sync_enabled = true; + self + } + + pub fn with_local_feeder_gateway(mut self, port: u16) -> Self { + self.local_feeder_gateway_port = Some(port); + self + } + + pub fn db_dir(&self) -> PathBuf { + self.test_dir.join(format!("db-{}", self.name)) + } } /// A guard that aborts the task when dropped. @@ -468,20 +405,35 @@ impl From>> for AbortGuard { } } +pub struct MaybeRespawned( + Either<(AbortGuard, mpsc::Receiver), PathfinderInstance>, +); + +impl MaybeRespawned { + pub fn instance(self) -> Option { + match self.0 { + Either::Left((_, mut rx)) => rx.try_recv().ok(), + Either::Right(instance) => Some(instance), + } + } +} + /// Monitors `instance` for exit with non-zero exit code. If that happens, -/// respawns the instance with `config` and waits for it to be ready. The -/// respawned instance is not returned, but it will be kept alive until the end -/// of the test (i.e., until `test_timeout` is reached). +/// respawns the instance with `config` and waits for it to be ready. pub fn respawn_on_fail( + inject_failure: bool, mut instance: PathfinderInstance, config: Config, ready_poll_interval: Duration, ready_timeout: Duration, - test_timeout: Duration, -) -> AbortGuard { - let mut child_signal = signal(SignalKind::child()).unwrap(); +) -> MaybeRespawned { + if !inject_failure { + return MaybeRespawned(Either::Right(instance)); + } - tokio::spawn(async move { + let mut child_signal = signal(SignalKind::child()).unwrap(); + let (tx, rx) = mpsc::channel(1); + let abort_guard = tokio::spawn(async move { if child_signal.recv().await.is_some() { println!("Got SIGCHLD!"); match instance.exited_with_error() { @@ -494,8 +446,7 @@ pub fn respawn_on_fail( .wait_for_ready(ready_poll_interval, ready_timeout) .await?; println!("{} is ready again", instance.name()); - // Let the instance exist for the rest of the test. - tokio::time::sleep(test_timeout).await; + let _ = tx.send(instance).await; } Ok(false) => { println!("{} exited cleanly, not respawning", instance.name()); @@ -511,5 +462,7 @@ pub fn respawn_on_fail( Ok(()) }) - .into() + .into(); + + MaybeRespawned(Either::Left((abort_guard, rx))) } diff --git a/crates/pathfinder/tests/common/rpc_client.rs b/crates/pathfinder/tests/common/rpc_client.rs index 8b05deb587..95858447e3 100644 --- a/crates/pathfinder/tests/common/rpc_client.rs +++ b/crates/pathfinder/tests/common/rpc_client.rs @@ -2,8 +2,11 @@ use std::time::Duration; +use anyhow::Context as _; +use p2p::consensus::HeightAndRound; +use pathfinder_common::{consensus_info, TransactionHash}; use serde::Deserialize; -use tokio::sync::watch; +use tokio::sync::{mpsc, watch}; use tokio::task::JoinHandle; use tokio::time::sleep; @@ -16,12 +19,16 @@ pub fn wait_for_height( instance: &PathfinderInstance, height: u64, poll_interval: Duration, + next_hnr_tx: Option>, + err_tx: mpsc::Sender, ) -> JoinHandle<()> { tokio::spawn(wait_for_height_fut( instance.name(), instance.rpc_port_watch_rx().clone(), height, poll_interval, + next_hnr_tx, + err_tx, )) } @@ -32,7 +39,11 @@ async fn wait_for_height_fut( mut rpc_port_watch_rx: watch::Receiver<(u32, u16)>, height: u64, poll_interval: Duration, + next_hnr_tx: Option>, + error_tx: mpsc::Sender, ) { + let mut last_hnr = None; + loop { // Sleeping first actually makes sense here, because the node will likely not // have any decided heights immediately after the RPC server is ready. @@ -49,46 +60,330 @@ async fn wait_for_height_fut( continue; }; - let Ok(reply) = reqwest::Client::new() - .post(format!( - "http://127.0.0.1:{rpc_port}/rpc/pathfinder/unstable" - )) - .body(r#"{"jsonrpc":"2.0","id":0,"method":"pathfinder_consensusInfo","params":[]}"#) - .header("Content-Type", "application/json") - .send() - .await - else { - println!( - "Pathfinder instance {name:<7} (pid: {pid}) port {rpc_port} not responding yet" - ); - continue; + let highest_decided = match handle_reply( + get_consensus_info(rpc_port).await, + name, + pid, + rpc_port, + "consensus info", + error_tx.clone(), + ) + .await + { + HandleReplyResult::Process(ConsensusInfoOutput { + highest_decided, .. + }) => highest_decided, + HandleReplyResult::Continue => continue, + HandleReplyResult::Bail => return, }; - let Reply { - result: Height { - highest_decided_height, - }, - } = reply.json::().await.unwrap(); - println!( - "Pathfinder instance {name:<7} (pid: {pid}) port {rpc_port} decided height: \ - {highest_decided_height:?}" + "Pathfinder instance {name:<7} (pid: {pid}) port {rpc_port} decided h:r {}", + highest_decided + .as_ref() + .map(|info| format!("{}", HeightAndRound::new(info.height.get(), info.round))) + .unwrap_or("None".to_string()), ); - if let Some(highest_decided_height) = highest_decided_height { - if highest_decided_height >= height { + if let Some(highest_decided) = highest_decided { + let current = HeightAndRound::new(highest_decided.height.get(), highest_decided.round); + + if let Some(tx) = &next_hnr_tx { + if last_hnr.is_none() || last_hnr.as_ref() != Some(¤t) { + last_hnr = Some(current); + let _ = tx.send(current).await; + } + } + + if highest_decided.height.get() >= height { return; } } } } +pub fn wait_for_block_exists( + instance: &PathfinderInstance, + block_height: u64, + poll_interval: Duration, + disallow_reverted_txns: bool, + error_tx: mpsc::Sender, +) -> JoinHandle<()> { + tokio::spawn(wait_for_block_exists_fut( + instance.name(), + instance.rpc_port_watch_rx().clone(), + block_height, + poll_interval, + disallow_reverted_txns, + error_tx, + )) +} + +async fn wait_for_block_exists_fut( + name: &'static str, + mut rpc_port_watch_rx: watch::Receiver<(u32, u16)>, + block_height: u64, + poll_interval: Duration, + disallow_reverted_txns: bool, + // Propagates deserialization and unexpected reverted transaction errors back to the test. This + // way we can bail out earlier instead of waiting for the `utils::join_all` timeout, which will + // still mask the actual error. + error_tx: mpsc::Sender, +) { + loop { + sleep(poll_interval).await; + + // We're waiting for the rpc port to change from 0 on each iteriation, because + // in case of tests where the instance is terminated and then respawned the RPC + // port number will temporarily be reset to 0. + let (pid, rpc_port) = + if let Ok(borrowed) = rpc_port_watch_rx.wait_for(|port| *port != (0, 0)).await { + *borrowed + } else { + println!("Rpc port watch for {name} is closed"); + continue; + }; + + let block = match handle_reply( + get_latest_block_with_receipts(rpc_port).await, + name, + pid, + rpc_port, + "latest block", + error_tx.clone(), + ) + .await + { + HandleReplyResult::Process(block) => block, + HandleReplyResult::Continue => continue, + HandleReplyResult::Bail => return, + }; + + if disallow_reverted_txns { + let reverted_txns = block + .transactions + .iter() + .filter_map(|tx| { + matches!(tx.receipt.execution_status, ExecutionStatus::Reverted) + .then_some(tx.receipt.transaction_hash) + }) + .collect::>(); + if !reverted_txns.is_empty() { + error_tx + .send(anyhow::anyhow!( + "Unexpected reverted transactions in block {}: {reverted_txns:?}", + block.block_number + )) + .await + .unwrap(); + } + } + + if block.block_number < block_height { + println!( + "Pathfinder instance {name:<7} (pid: {pid}) port {rpc_port} has block {} < \ + {block_height}", + block.block_number + ); + } else { + println!( + "Pathfinder instance {name:<7} (pid: {pid}) port {rpc_port} has block \ + {block_height}", + ); + // Finally, success! + return; + } + } +} + +enum HandleReplyResult { + Process(T), + Continue, + Bail, +} + +async fn handle_reply( + reply: Result, reqwest::Error>, + name: &'static str, + pid: u32, + rpc_port: u16, + artifact_name: &'static str, + error_tx: mpsc::Sender, +) -> HandleReplyResult { + match reply { + Ok(JsonRpcReply::Success { result, .. }) => HandleReplyResult::Process(result), + Ok(JsonRpcReply::Error { .. }) => { + println!( + "Pathfinder instance {name:<7} (pid: {pid}) port {rpc_port} {artifact_name} \ + unavailable yet" + ); + // It seems like the node does not have this artifact available yet, but it + // might be available soon, so let's just wait. + HandleReplyResult::Continue + } + Err(error) if error.is_decode() => { + error_tx + .send(anyhow::Error::new(error).context(format!( + "Pathfinder instance {name:<7} (pid: {pid}) port {rpc_port} malformed RPC \ + {artifact_name} response" + ))) + .await + .unwrap(); + // We're can't fix the issue here, waiting won't work either, we're done + HandleReplyResult::Bail + } + Err(_) => { + // There's not much we can do here. Some of these maybe be send errors due to + // the node being in the process of being respawned, so let's just wait. + HandleReplyResult::Continue + } + } +} + +pub async fn get_consensus_info( + rpc_port: u16, +) -> Result, reqwest::Error> { + reqwest::Client::new() + .post(format!( + "http://127.0.0.1:{rpc_port}/rpc/pathfinder/unstable" + )) + .body(r#"{"jsonrpc":"2.0","id":0,"method":"pathfinder_consensusInfo","params":[]}"#) + .header("Content-Type", "application/json") + .send() + .await? + .json::>() + .await +} + +pub async fn get_cached_artifacts_info( + instance: &PathfinderInstance, + less_than_height: u64, +) -> anyhow::Result> { + let fut = async move { + let name = instance.name(); + let mut rpc_port_watch_rx = instance.rpc_port_watch_rx().clone(); + // If any of the nodes crashes we need to timeout otherwise the test will just + // hang forever. + let (pid, rpc_port) = + if let Ok(borrowed) = rpc_port_watch_rx.wait_for(|port| *port != (0, 0)).await { + *borrowed + } else { + panic!("Rpc port watch for {name} is closed"); + }; + + let mut cached = match get_consensus_info(rpc_port).await { + Ok(JsonRpcReply::Success { + result: ConsensusInfoOutput { cached, .. }, + .. + }) => cached, + Ok(JsonRpcReply::Error { .. }) => { + anyhow::bail!( + "Pathfinder instance {name:<7} (pid: {pid}) port {rpc_port} consensus info \ + unavailable yet" + ); + } + Err(error) => { + return Err(anyhow::Error::new(error).context(format!( + "Pathfinder instance {name:<7} (pid: {pid}) port {rpc_port} RPC client error" + ))); + } + }; + cached.retain(|CachedItem { height, .. }| *height < less_than_height); + Ok(cached) + }; + tokio::time::timeout(Duration::from_secs(10), fut) + .await + .context("Getting cached artifacts info timed out") + .flatten() +} + +#[derive(Deserialize)] +#[serde(untagged)] +pub enum JsonRpcReply { + Success { + #[serde(rename = "id")] + _id: u64, + #[serde(rename = "jsonrpc")] + _jsonrpc: serde_json::Value, + result: T, + }, + Error { + #[serde(rename = "id")] + _id: u64, + #[serde(rename = "jsonrpc")] + _jsonrpc: serde_json::Value, + #[serde(rename = "error")] + _error: serde_json::Value, + }, +} + +#[derive(Debug, Deserialize)] +pub struct ConsensusInfoOutput { + pub highest_decided: Option, + pub application_peer_scores: Vec, + pub cached: Vec, +} + +#[derive(Debug, Deserialize)] +pub struct ApplicationPeerScore { + #[serde(alias = "peer_id")] + pub _peer_id: String, + // `serde_json` does not correctly support deserializing f64 with the `arbitrary_precision` + // feature enabled directly, so we need to work around this limitation + pub score: serde_json::Value, +} + +#[derive(Debug, Deserialize)] +pub struct CachedItem { + pub height: u64, + #[serde(alias = "proposals")] + pub _proposals: Vec, + #[serde(alias = "blocks")] + pub _blocks: Vec, +} + +#[derive(Deserialize)] +struct Block { + block_number: u64, + transactions: Vec, +} + #[derive(Deserialize)] -struct Reply { - result: Height, +struct ReceiptAndTransaction { + receipt: Receipt, } #[derive(Deserialize)] -struct Height { - highest_decided_height: Option, +struct Receipt { + execution_status: ExecutionStatus, + transaction_hash: TransactionHash, +} + +#[derive(Deserialize)] +#[serde(rename_all = "SCREAMING_SNAKE_CASE")] +enum ExecutionStatus { + Succeeded, + Reverted, +} + +async fn get_latest_block_with_receipts( + rpc_port: u16, +) -> Result, reqwest::Error> { + reqwest::Client::new() + .post(format!("http://127.0.0.1:{rpc_port}")) + .body( + r#"{ + "jsonrpc": "2.0", + "id": 0, + "method": "starknet_getBlockWithReceipts", + "params": { + "block_id": "latest" + } + }"#, + ) + .header("Content-Type", "application/json") + .send() + .await? + .json::>() + .await } diff --git a/crates/pathfinder/tests/common/utils.rs b/crates/pathfinder/tests/common/utils.rs index 41fb3228e5..b1df7febf8 100644 --- a/crates/pathfinder/tests/common/utils.rs +++ b/crates/pathfinder/tests/common/utils.rs @@ -1,50 +1,70 @@ //! Test utilities for Pathfinder integration tests. -use std::path::PathBuf; +use std::fs::{File, OpenOptions}; +use std::io::ErrorKind; +use std::path::{Path, PathBuf}; +use std::process::{Child, Command}; use std::time::{Duration, Instant}; use anyhow::Context as _; -use tempfile::Builder; +use p2p_proto::common::Address; +use pathfinder_crypto::Felt; +use pathfinder_lib::devnet::{init_db, BootDb}; +use tempfile::TempDir; +use tokio::sync::mpsc; use tokio::task::{JoinError, JoinHandle}; use tokio::time::sleep; -use crate::common::pathfinder_instance::{Config, PathfinderInstance}; +use crate::common::pathfinder_instance::Config; /// This function does a few things at the beginning of an integration test: -/// - sets up dumping stdout and stderr logs of Pathfinder instances to the -/// test's stdout if the environment variable -/// `PATHFINDER_CONSENSUS_TEST_DUMP_CHILD_LOGS_ON_FAIL` is set, /// - creates temporary directory for test artifacts, /// - verifies that the Pathfinder binary and fixtures directory exist, /// - starts an [`std::time::Instant`] to measure test setup duration, /// - returns configuration for the number of nodes specified and the instant. -pub fn setup(num_instances: usize) -> anyhow::Result<(Vec, Instant)> { - PathfinderInstance::enable_log_dump( - std::env::var_os("PATHFINDER_CONSENSUS_TEST_DUMP_CHILD_LOGS_ON_FAIL").is_some(), - ); - +pub fn setup( + num_instances: usize, + init_devnet_db: bool, +) -> anyhow::Result<(Vec, u64, Instant)> { let stopwatch = Instant::now(); let pathfinder_bin = pathfinder_bin(); anyhow::ensure!(pathfinder_bin.exists(), "Pathfinder binary not found"); let fixture_dir = fixture_dir(); anyhow::ensure!(fixture_dir.exists(), "Fixture directory not found"); - let test_dir = Builder::new() - .disable_cleanup(true) - .tempdir() - .context("Creating temporary directory for test artifacts")?; - println!( - "Test artifacts will be stored in {}", - test_dir.path().display() - ); + + // CI uses `APP_TEMP_DIR` + let tmp_path = std::env::var("APP_TEMP_DIR") + .map(PathBuf::from) + .unwrap_or(std::env::temp_dir()); + let parent_dir = tmp_path.join("consensus-integration-tests"); + std::fs::create_dir_all(&parent_dir) + .context("Creating parent directory for all integration tests")?; + + let test_dir = TempDir::new_in(&parent_dir) + .context("Creating temporary directory for test artifacts")? + .keep(); + println!("Test artifacts will be stored in {}", test_dir.display()); + + let (boot_db, num_boot_blocks) = if init_devnet_db { + let BootDb { + db_file_path, + num_boot_blocks, + } = init_db(&test_dir, Address(Felt::ONE /* Alice */))?; + (Some(db_file_path), num_boot_blocks) + } else { + (None, 0) + }; Ok(( Config::for_set( num_instances, &pathfinder_bin, &fixture_dir, - test_dir.path(), + test_dir, + boot_db, ), + num_boot_blocks, stopwatch, )) } @@ -57,11 +77,13 @@ pub fn log_elapsed(stopwatch: Instant) { ); } -/// Waits for either all RPC client tasks to complete, the test timeout to -/// elapse, or for the user to interrupt the test with Ctrl-C. -pub async fn wait_for_test_end( +/// Waits for either all RPC client tasks to complete, the timeout to elapse, +/// for the user to interrupt with Ctrl-C, or the rpc client to encounter an +/// error. +pub async fn join_all( rpc_client_handles: Vec>, test_timeout: Duration, + mut err_rx: mpsc::Receiver, ) -> anyhow::Result<()> { tokio::select! { _ = sleep(test_timeout) => { @@ -69,10 +91,8 @@ pub async fn wait_for_test_end( Err(anyhow::anyhow!("Test timed out after {test_timeout:?}")) } - test_result = futures::future::join_all(rpc_client_handles) => { - test_result.into_iter().collect::, JoinError>>().context("Joining all RPC client tasks")?; - // Don't dump logs if the test succeeded. - PathfinderInstance::enable_log_dump(false); + join_result = futures::future::join_all(rpc_client_handles) => { + join_result.into_iter().collect::, JoinError>>().context("Joining all RPC client tasks")?; Ok(()) } @@ -80,6 +100,12 @@ pub async fn wait_for_test_end( eprintln!("Received Ctrl-C, terminating test early"); Err(anyhow::anyhow!("Test interrupted by user")) } + + err = err_rx.recv() => { + let err = err.expect("Error channel should not be closed"); + eprintln!("RPC client encountered an error: {err:#?}"); + Err(anyhow::anyhow!("RPC client encountered an error: {err:#?}")) + } } } @@ -88,18 +114,21 @@ fn pathfinder_bin() -> PathBuf { assert!(path.pop()); assert!(path.pop()); path.push("target"); - #[cfg(debug_assertions)] - { - path.push("debug"); - } - #[cfg(not(debug_assertions))] - { - path.push("release"); - } + path.push("debug"); path.push("pathfinder"); path } +pub fn feeder_gateway_bin() -> PathBuf { + let mut path = manifest_dir_path(); + assert!(path.pop()); + assert!(path.pop()); + path.push("target"); + path.push("debug"); + path.push("feeder-gateway"); + path +} + fn fixture_dir() -> PathBuf { let mut path = manifest_dir_path(); path.push("tests"); @@ -110,3 +139,99 @@ fn fixture_dir() -> PathBuf { fn manifest_dir_path() -> PathBuf { PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()) } + +pub fn create_log_file( + process_name: impl AsRef, + stdout_path: &Path, +) -> Result { + let stdout_file = OpenOptions::new() + .append(true) + .create(true) + .open(stdout_path) + .context(format!( + "Creating log file {} for {}", + stdout_path.display(), + process_name.as_ref() + ))?; + Ok(stdout_file) +} + +/// Terminates a child process gracefully using SIGTERM, and forcefully kills it +/// if necessary. +pub fn terminate(process: &mut Child, name: impl AsRef) { + let name = name.as_ref(); + println!("{name} (pid: {}) terminating...", process.id()); + + _ = Command::new("kill") + // It's supposed to be the default signal in `kill`, but let's be explicit. + .arg("-TERM") + .arg(process.id().to_string()) + .status(); + + // See if SIGTERM worked. + match process.try_wait() { + Ok(Some(status)) => { + println!( + "{name} (pid: {}) terminated with status: {status}", + process.id() + ); + } + Ok(None) => match process.wait() { + Ok(status) => { + println!( + "{name} (pid: {}) terminated with status: {status}", + process.id() + ); + } + Err(e) => { + eprintln!( + "Error waiting for {name} (pid: {}) to terminate: {e}", + process.id() + ); + if let Err(error) = process.kill() { + eprintln!("Error killing {name} (pid: {}): {error}", process.id(),); + } + } + }, + Err(e) => { + eprintln!("Error terminating {name} (pid: {}): {e}", process.id()); + if let Err(error) = process.kill() { + eprintln!("Error killing {name} (pid: {}): {error}", process.id(),); + } + } + } +} + +/// Waits for the port marker file to appear and reads the port from it. +/// Polls every `poll_interval`. +pub async fn wait_for_port( + pid: u32, + port_name: &str, + db_dir: &Path, + poll_interval: Duration, +) -> anyhow::Result { + let port_file = db_dir.join(format!("pid_{pid}_{port_name}_port")); + + loop { + match tokio::fs::read_to_string(&port_file).await { + Ok(port_str) => { + let port = port_str + .trim() + .parse::() + .context(format!("Parsing port value in {}", port_file.display()))?; + return Ok(port); + } + Err(e) if e.kind() == ErrorKind::NotFound => { + // File not found yet, continue polling. + } + Err(e) => { + return Err(anyhow::anyhow!( + "Error reading port file {}: {e}", + port_file.display() + )); + } + } + + sleep(poll_interval).await; + } +} diff --git a/crates/pathfinder/tests/consensus.rs b/crates/pathfinder/tests/consensus.rs index a2844a3cbf..709c26ba13 100644 --- a/crates/pathfinder/tests/consensus.rs +++ b/crates/pathfinder/tests/consensus.rs @@ -1,11 +1,12 @@ -//! Build pathfinder in debug: +//! Build pathfinder and simulated feeder gateway in debug: //! ``` //! cargo build -p pathfinder --bin pathfinder -F p2p -F consensus-integration-tests +//! cargo build -p feeder-gateway -F small_aggregate_filters --bin feeder-gateway //! ``` //! //! Run the test: //! ``` -//! PATHFINDER_TEST_ENABLE_PORT_MARKER_FILES=1 cargo nextest run --test consensus -p pathfinder --features p2p,consensus-integration-tests +//! PATHFINDER_TEST_ENABLE_MARKER_FILES=1 cargo nextest run --test consensus -p pathfinder --features p2p,consensus-integration-tests //! ``` //! //! # Important @@ -22,116 +23,809 @@ mod test { use std::time::Duration; use std::vec; - use futures::future::Either; + use futures::StreamExt; use pathfinder_lib::config::integration_testing::{InjectFailureConfig, InjectFailureTrigger}; use rstest::rstest; + use tokio::sync::mpsc; + use crate::common::feeder_gateway::FeederGateway; use crate::common::pathfinder_instance::{respawn_on_fail, PathfinderInstance}; - use crate::common::rpc_client::wait_for_height; + use crate::common::rpc_client::{ + get_cached_artifacts_info, + get_consensus_info, + wait_for_block_exists, + wait_for_height, + ApplicationPeerScore, + ConsensusInfoOutput, + JsonRpcReply, + }; use crate::common::utils; // TODO Test cases that should be supported by the integration tests: // - proposals: - // - [ ] non-empty proposals (L1 handlers + transactions that modify storage), + // - [x] non-empty proposals (transactions that modify storage): + // - Garbage L1-transaction handlers, that get reverted, but we get to test + // from clear genesis (no bootstrap devnet DB), exercised in the happy + // path scenario + // - Valid declare, deploy, and invoke transactions, exercised in all the + // other scenarios, thanks to a bootstrapped devnet DB // - [ ] empty proposals, which follow the spec, ie. no transaction batches: // - ProposalInit, - // - ProposalCommitment, - // - ProposalFin, - // - [x] consider supporting empty proposals with an empty transaction batch, - // not fully following the spec: - // - ProposalInit, - // - BlockInfo, - // - TransactionBatch([]), - // - (TransactionsFin cannot be sent in this case), - // - ProposalCommitment, // - ProposalFin, // - node set sizes: // - [x] 3 nodes, network stalls if 1 node fails, - // - [ ] 4 nodes, network continues if 1 node fails, catchup via sync - // mechanism is activated, + // - [x] 4 nodes, network continues if 1 node fails, catchup via sync + // mechanism is activated (`fourth_node_joins_late_can_catch_up` is + // sufficient here), // - [x] failure injection (tests recovery from crashes/terminations at // different stages), // - [ ] ??? any missing significant failure injection points ???. #[rstest] + // No bootstrap DB, all txns get reverted, testing the flow from clear genesis #[case::happy_path(None)] - // TODO Usually proposal parts at H=13 arrive before the local consensus engine emits a decided - // upon event for H=12. The network moves to H=13, while locally H=12 is uncommitted, so - // executing and thus committing H=13 locally is deferred indefinitely. With fully implemented - // proposal recovery, this should be resolved. - #[ignore = "TODO Determine why the test fails"] - #[case::fail_on_proposal_init_rx(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::ProposalInitRx }))] - #[ignore = "TODO Determine why the test fails"] - #[case::fail_on_block_info_rx(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::BlockInfoRx }))] - #[ignore = "TODO Determine why the test fails"] - #[case::fail_on_transaction_batch_rx(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::TransactionBatchRx }))] - #[ignore = "TransactionsFin is not currently present in fake proposals, so this test is the \ - same as the happy path right now."] - #[case::fail_on_transactions_fin_rx(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::TransactionsFinRx }))] - #[ignore = "TODO Determine why the test fails"] - #[case::fail_on_proposal_commitment_rx(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::ProposalCommitmentRx }))] - #[ignore = "TODO Determine why the test fails"] - #[case::fail_on_proposal_fin_rx(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::ProposalFinRx }))] - #[case::fail_on_entire_proposal_rx(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::EntireProposalRx }))] - #[case::fail_on_entire_proposal_persisted(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::EntireProposalPersisted }))] - #[ignore = "TODO Determine why the test fails"] - #[case::fail_on_prevote_rx(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::PrevoteRx }))] - #[ignore = "TODO Proposal recovery not fully implemented yet"] - #[case::fail_on_precommit_rx(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::PrecommitRx }))] - #[ignore = "TODO Proposal recovery not fully implemented yet"] - #[case::fail_on_proposal_decided(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::ProposalDecided }))] - #[case::fail_on_proposal_committed(Some(InjectFailureConfig { height: 13, trigger: InjectFailureTrigger::ProposalCommitted }))] + // Bootstrap DB, none of the transactions should get reverted + #[case::fail_on_proposal_init_rx(Some(InjectFailureConfig { height: 4, trigger: InjectFailureTrigger::ProposalInitRx }))] + #[case::fail_on_block_info_rx(Some(InjectFailureConfig { height: 4, trigger: InjectFailureTrigger::BlockInfoRx }))] + #[case::fail_on_transaction_batch_rx(Some(InjectFailureConfig { height: 4, trigger: InjectFailureTrigger::TransactionBatchRx }))] + #[case::fail_on_executed_transaction_count_rx(Some(InjectFailureConfig { height: 4, trigger: InjectFailureTrigger::ExecutedTransactionCountRx }))] + #[case::fail_on_proposal_fin_rx(Some(InjectFailureConfig { height: 4, trigger: InjectFailureTrigger::ProposalFinRx }))] + #[case::fail_on_proposal_finalized(Some(InjectFailureConfig { height: 4, trigger: InjectFailureTrigger::ProposalFinalized }))] + #[case::fail_on_prevote_rx(Some(InjectFailureConfig { height: 4, trigger: InjectFailureTrigger::PrevoteRx }))] + #[case::fail_on_precommit_rx(Some(InjectFailureConfig { height: 4, trigger: InjectFailureTrigger::PrecommitRx }))] + #[case::fail_on_proposal_decided(Some(InjectFailureConfig { height: 4, trigger: InjectFailureTrigger::ProposalDecided }))] + #[case::fail_on_proposal_committed(Some(InjectFailureConfig { height: 4, trigger: InjectFailureTrigger::ProposalCommitted }))] #[tokio::test] - async fn consensus_3_nodes( - #[case] inject_failure: Option, - ) -> anyhow::Result<()> { + async fn consensus_3_nodes_with_failures(#[case] inject_failure: Option) { const NUM_NODES: usize = 3; - // System contracts start to matter after block 10 - const HEIGHT: u64 = 15; const READY_TIMEOUT: Duration = Duration::from_secs(20); const TEST_TIMEOUT: Duration = Duration::from_secs(120); const POLL_READY: Duration = Duration::from_millis(500); const POLL_HEIGHT: Duration = Duration::from_secs(1); - let (configs, stopwatch) = utils::setup(NUM_NODES)?; - let mut configs = configs.into_iter(); + // IMPORTANT: + // Happy path is the only scenario which starts consensus from genesis at the + // expense of all transactions being reverted since they're random, invalid L1 + // handlers. We need this to be able to test starting completely from scratch + // without relying on any pre-initialized database state. + let disallow_reverted_txns = inject_failure.is_some(); + + let (configs, boot_height, stopwatch) = + utils::setup(NUM_NODES, disallow_reverted_txns).unwrap(); + + // System contracts start to matter after block 10 but we have a separate + // regression test for that, which checks that rollback at H>10 works correctly. + let target_height: u64 = boot_height + 5; - let alice = PathfinderInstance::spawn(configs.next().unwrap())?; - alice.wait_for_ready(POLL_READY, READY_TIMEOUT).await?; + let alice_cfg = configs.first().unwrap(); + let mut fgw = FeederGateway::spawn(alice_cfg).unwrap(); + fgw.wait_for_ready(POLL_READY, READY_TIMEOUT).await.unwrap(); + + // We want everybody to have sync enabled so that not only Alice, Bob, and + // Charlie decide upon the new blocks but also they are able to **commit the + // blocks to their main DBs**. The trick is that MOST OF THE TIME the FGw will + // not provide any meaningful data to the 3 nodes because it's feeding + // off of Alice's DB which means it'll always be lagging behind the + // nodes that achieve consensus. However in reality, the FGw, will be sometimes + // able to provide some blocks to Bob or Charlie faster than they themselves + // acquire a positive decision from their consensus engines. + // + // Additionally, dummy proposal creation relies on the parent block being + // committed to the main DB, so sync needs to be enabled for that as well. + let mut configs = configs.into_iter().map(|cfg| { + cfg.with_local_feeder_gateway(fgw.port()) + .with_sync_enabled() + }); + + let alice = PathfinderInstance::spawn(configs.next().unwrap()).unwrap(); + alice + .wait_for_ready(POLL_READY, READY_TIMEOUT) + .await + .unwrap(); let boot_port = alice.consensus_p2p_port(); let mut configs = configs.map(|cfg| cfg.with_boot_port(boot_port)); let bob_cfg = configs.next().unwrap().with_inject_failure(inject_failure); - let bob = PathfinderInstance::spawn(bob_cfg.clone())?; - let charlie = PathfinderInstance::spawn(configs.next().unwrap())?; + let bob = PathfinderInstance::spawn(bob_cfg.clone()).unwrap(); + let charlie = PathfinderInstance::spawn(configs.next().unwrap()).unwrap(); let (bob_rdy, charlie_rdy) = tokio::join!( bob.wait_for_ready(POLL_READY, READY_TIMEOUT), charlie.wait_for_ready(POLL_READY, READY_TIMEOUT) ); - bob_rdy?; - charlie_rdy?; + bob_rdy.unwrap(); + charlie_rdy.unwrap(); + + utils::log_elapsed(stopwatch); + + let (hnr_tx, hnr_rx) = mpsc::channel(target_height as usize * 3); + let hnr_rx = tokio_stream::wrappers::ReceiverStream::new(hnr_rx); + let (err_tx, err_rx) = mpsc::channel(6); + + let alice_decided = wait_for_height( + &alice, + target_height, + POLL_HEIGHT, + Some(hnr_tx), + err_tx.clone(), + ); + let bob_decided = wait_for_height(&bob, target_height, POLL_HEIGHT, None, err_tx.clone()); + let charlie_decided = + wait_for_height(&charlie, target_height, POLL_HEIGHT, None, err_tx.clone()); + let alice_committed = wait_for_block_exists( + &alice, + target_height, + POLL_HEIGHT, + disallow_reverted_txns, + err_tx.clone(), + ); + let bob_committed = wait_for_block_exists( + &bob, + target_height, + POLL_HEIGHT, + disallow_reverted_txns, + err_tx.clone(), + ); + let charlie_committed = wait_for_block_exists( + &charlie, + target_height, + POLL_HEIGHT, + disallow_reverted_txns, + err_tx.clone(), + ); + + let maybe_bob = respawn_on_fail( + inject_failure.is_some(), + bob, + bob_cfg, + POLL_READY, + READY_TIMEOUT, + ); + + // Wait for: the test to pass, timeout, user interruption, or bail out early if + // the RPC client encounters an error + utils::join_all( + vec![ + alice_decided, + bob_decided, + charlie_decided, + alice_committed, + bob_committed, + charlie_committed, + ], + TEST_TIMEOUT, + err_rx, + ) + .await + .unwrap(); + + let decided_hnrs = hnr_rx.collect::>().await; + if let Some(x) = decided_hnrs.iter().find(|hnr| hnr.round() > 0) { + println!("Network failed to recover in round 0 at (h:r): {x}"); + } + + let alice_artifacts = get_cached_artifacts_info(&alice, target_height) + .await + .unwrap(); + assert!( + alice_artifacts.is_empty(), + "Alice should not have leftover cached consensus data: {alice_artifacts:#?}" + ); + + if let Some(bob) = maybe_bob.instance() { + let bob_artifacts = get_cached_artifacts_info(&bob, target_height) + .await + .unwrap(); + assert!( + bob_artifacts.is_empty(), + "Bob should not have leftover cached consensus data after respawn: \ + {bob_artifacts:#?}" + ); + } + + let charlie_artifacts = get_cached_artifacts_info(&charlie, target_height) + .await + .unwrap(); + assert!( + charlie_artifacts.is_empty(), + "Charlie should not have leftover cached consensus data: {charlie_artifacts:#?}" + ); + } + + // This is not a rstest, because a) we want to keep the naming + // convention (because the CI pipeline uses `consensus_[34]_nodes` + // to group tests), and b) we don't normally want to run the test + // with just 3 nodes (because that often - although not always - + // fails). + #[tokio::test] + #[ignore] + async fn consensus_3_nodes_with_lost_vote() { + consensus_with_lost_vote(3).await; + } + + #[tokio::test] + async fn consensus_4_nodes_with_lost_vote() { + consensus_with_lost_vote(4).await; + } + + async fn consensus_with_lost_vote(num_nodes: usize) { + const READY_TIMEOUT: Duration = Duration::from_secs(20); + const TEST_TIMEOUT: Duration = Duration::from_secs(120); + const POLL_READY: Duration = Duration::from_millis(500); + const POLL_HEIGHT: Duration = Duration::from_secs(1); + + let disallow_reverted_txns = true; + let vote_lost = Some(InjectFailureConfig { + height: 4, + trigger: InjectFailureTrigger::CommittedVoteLost, + }); + let proposal_committed = Some(InjectFailureConfig { + height: 4, + trigger: InjectFailureTrigger::ProposalCommitted, + }); + + let (configs, boot_height, stopwatch) = + utils::setup(num_nodes, disallow_reverted_txns).unwrap(); + + let target_height: u64 = boot_height + 5; + + let alice_cfg = configs.first().unwrap(); + let mut fgw = FeederGateway::spawn(alice_cfg).unwrap(); + fgw.wait_for_ready(POLL_READY, READY_TIMEOUT).await.unwrap(); + + let mut configs = configs.into_iter().map(|cfg| { + cfg.with_local_feeder_gateway(fgw.port()) + .with_sync_enabled() + }); + + let alice_cfg = configs.next().unwrap().with_inject_failure(vote_lost); + let alice = PathfinderInstance::spawn(alice_cfg).unwrap(); + alice + .wait_for_ready(POLL_READY, READY_TIMEOUT) + .await + .unwrap(); + + let boot_port = alice.consensus_p2p_port(); + let mut configs = configs.map(|cfg| cfg.with_boot_port(boot_port)); + + let bob_cfg = configs + .next() + .unwrap() + .with_inject_failure(proposal_committed); + let bob = PathfinderInstance::spawn(bob_cfg.clone()).unwrap(); + + let charlie_cfg = configs.next().unwrap().with_inject_failure(vote_lost); + let charlie = PathfinderInstance::spawn(charlie_cfg).unwrap(); + + let maybe_dan = if num_nodes > 3 { + // Dan might as well process the vote - it's not enough... + let dan = PathfinderInstance::spawn(configs.next().unwrap()).unwrap(); + let (bob_rdy, charlie_rdy, dan_rdy) = tokio::join!( + bob.wait_for_ready(POLL_READY, READY_TIMEOUT), + charlie.wait_for_ready(POLL_READY, READY_TIMEOUT), + dan.wait_for_ready(POLL_READY, READY_TIMEOUT), + ); + bob_rdy.unwrap(); + charlie_rdy.unwrap(); + dan_rdy.unwrap(); + Some(dan) + } else { + let (bob_rdy, charlie_rdy) = tokio::join!( + bob.wait_for_ready(POLL_READY, READY_TIMEOUT), + charlie.wait_for_ready(POLL_READY, READY_TIMEOUT), + ); + bob_rdy.unwrap(); + charlie_rdy.unwrap(); + None + }; utils::log_elapsed(stopwatch); - // Use channels to send and update of the rpc port - let alice_client = wait_for_height(&alice, HEIGHT, POLL_HEIGHT); - let bob_client = wait_for_height(&bob, HEIGHT, POLL_HEIGHT); - let charlie_client = wait_for_height(&charlie, HEIGHT, POLL_HEIGHT); - - // Either to work around clippy: "manual implementation of `Option::map`" - let _maybe_guard = match inject_failure { - Some(_) => Either::Left(respawn_on_fail( - bob, - bob_cfg, - POLL_READY, - READY_TIMEOUT, - TEST_TIMEOUT, - )), - None => Either::Right(bob), + let (hnr_tx, hnr_rx) = mpsc::channel(target_height as usize * 3); + let hnr_rx = tokio_stream::wrappers::ReceiverStream::new(hnr_rx); + let (err_tx, err_rx) = mpsc::channel(6); + + let alice_decided = wait_for_height( + &alice, + target_height, + POLL_HEIGHT, + Some(hnr_tx), + err_tx.clone(), + ); + let bob_decided = wait_for_height(&bob, target_height, POLL_HEIGHT, None, err_tx.clone()); + let charlie_decided = + wait_for_height(&charlie, target_height, POLL_HEIGHT, None, err_tx.clone()); + + let maybe_dan_decided = if let Some(ref dan) = maybe_dan { + let dan_decided = + wait_for_height(dan, target_height, POLL_HEIGHT, None, err_tx.clone()); + Some(dan_decided) + } else { + None + }; + + let alice_committed = wait_for_block_exists( + &alice, + target_height, + POLL_HEIGHT, + disallow_reverted_txns, + err_tx.clone(), + ); + let bob_committed = wait_for_block_exists( + &bob, + target_height, + POLL_HEIGHT, + disallow_reverted_txns, + err_tx.clone(), + ); + let charlie_committed = wait_for_block_exists( + &charlie, + target_height, + POLL_HEIGHT, + disallow_reverted_txns, + err_tx.clone(), + ); + + let maybe_dan_committed = if let Some(ref dan) = maybe_dan { + let dan_committed = wait_for_block_exists( + dan, + target_height, + POLL_HEIGHT, + disallow_reverted_txns, + err_tx.clone(), + ); + Some(dan_committed) + } else { + None }; - utils::wait_for_test_end(vec![alice_client, bob_client, charlie_client], TEST_TIMEOUT).await + let maybe_bob = respawn_on_fail(true, bob, bob_cfg, POLL_READY, READY_TIMEOUT); + + // Wait for: the test to pass, timeout, user interruption, or bail out early if + // the RPC client encounters an error + let mut all_decided = vec![alice_decided, bob_decided, charlie_decided]; + if let Some(dan_decided) = maybe_dan_decided { + all_decided.push(dan_decided); + } + let mut all_committed = vec![alice_committed, bob_committed, charlie_committed]; + if let Some(dan_committed) = maybe_dan_committed { + all_committed.push(dan_committed); + } + all_decided.append(&mut all_committed); + utils::join_all(all_decided, TEST_TIMEOUT, err_rx) + .await + .unwrap(); + + let decided_hnrs = hnr_rx.collect::>().await; + if let Some(x) = decided_hnrs.iter().find(|hnr| hnr.round() > 0) { + println!("Network failed to recover in round 0 at (h:r): {x}"); + } + + let alice_artifacts = get_cached_artifacts_info(&alice, target_height) + .await + .unwrap(); + assert!( + alice_artifacts.is_empty(), + "Alice should not have leftover cached consensus data: {alice_artifacts:#?}" + ); + + if let Some(bob) = maybe_bob.instance() { + let bob_artifacts = get_cached_artifacts_info(&bob, target_height) + .await + .unwrap(); + assert!( + bob_artifacts.is_empty(), + "Bob should not have leftover cached consensus data after respawn: \ + {bob_artifacts:#?}" + ); + } + + let charlie_artifacts = get_cached_artifacts_info(&charlie, target_height) + .await + .unwrap(); + assert!( + charlie_artifacts.is_empty(), + "Charlie should not have leftover cached consensus data: {charlie_artifacts:#?}" + ); + + if let Some(dan) = maybe_dan { + let dan_artifacts = get_cached_artifacts_info(&dan, target_height) + .await + .unwrap(); + assert!( + dan_artifacts.is_empty(), + "Dan should not have leftover cached consensus data: {dan_artifacts:#?}" + ); + } + } + + #[tokio::test] + async fn consensus_3_nodes_fourth_node_joins_late_can_catch_up() { + const NUM_NODES: usize = 4; + const READY_TIMEOUT: Duration = Duration::from_secs(20); + const RUNUP_TIMEOUT: Duration = Duration::from_secs(60); + const CATCHUP_TIMEOUT: Duration = Duration::from_secs(60); + const POLL_READY: Duration = Duration::from_millis(500); + const POLL_HEIGHT: Duration = Duration::from_secs(1); + + let (configs, boot_height, stopwatch) = utils::setup(NUM_NODES, true).unwrap(); + + // System contracts start to matter after block 10 + let height_to_add_fourth_node: u64 = boot_height + 3; + let target_height: u64 = height_to_add_fourth_node + 2; + + let alice_cfg = configs.first().unwrap(); + let mut fgw = FeederGateway::spawn(alice_cfg).unwrap(); + fgw.wait_for_ready(POLL_READY, READY_TIMEOUT).await.unwrap(); + + // We want everybody to have sync enabled so that not only Alice, Bob, and + // Charlie decide upon the new blocks but also they are able to **commit the + // blocks to their main DBs**. The trick is that MOST OF THE TIME the FGw will + // not provide any meaningful data to the 3 nodes because it's feeding + // off of Alice's DB which means it'll always be lagging behind the + // nodes that achieve consensus. However in reality, the FGw, will be sometimes + // able to provide some blocks to Bob or Charlie faster than they themselves + // acquire a positive decision from their consensus engines. + // + // This means that initially Dan will be actually syncing from the FGw until he + // catches up with the other nodes, at which point he should be committing the + // consensus-decided blocks to his own main DB, before actually sync is able to + // get them from the FGw. + // + // Additionally, dummy proposal creation relies on the parent block being + // committed to the main DB, so sync needs to be enabled for that as well. + let mut configs = configs.into_iter().map(|cfg| { + cfg.with_local_feeder_gateway(fgw.port()) + .with_sync_enabled() + }); + let alice = PathfinderInstance::spawn(configs.next().unwrap()).unwrap(); + alice + .wait_for_ready(POLL_READY, READY_TIMEOUT) + .await + .unwrap(); + + let boot_port = alice.consensus_p2p_port(); + let mut configs = configs.map(|cfg| cfg.with_boot_port(boot_port)); + + let bob = PathfinderInstance::spawn(configs.next().unwrap()).unwrap(); + let charlie = PathfinderInstance::spawn(configs.next().unwrap()).unwrap(); + + let (bob_rdy, charlie_rdy) = tokio::join!( + bob.wait_for_ready(POLL_READY, READY_TIMEOUT), + charlie.wait_for_ready(POLL_READY, READY_TIMEOUT) + ); + bob_rdy.unwrap(); + charlie_rdy.unwrap(); + + utils::log_elapsed(stopwatch); + + let (err_tx, err_rx) = mpsc::channel(6); + + let alice_decided = wait_for_height( + &alice, + height_to_add_fourth_node, + POLL_HEIGHT, + None, + err_tx.clone(), + ); + let bob_decided = wait_for_height( + &bob, + height_to_add_fourth_node, + POLL_HEIGHT, + None, + err_tx.clone(), + ); + let charlie_decided = wait_for_height( + &charlie, + height_to_add_fourth_node, + POLL_HEIGHT, + None, + err_tx.clone(), + ); + let alice_committed = wait_for_block_exists( + &alice, + height_to_add_fourth_node, + POLL_HEIGHT, + true, + err_tx.clone(), + ); + let bob_committed = wait_for_block_exists( + &bob, + height_to_add_fourth_node, + POLL_HEIGHT, + true, + err_tx.clone(), + ); + let charlie_committed = wait_for_block_exists( + &charlie, + height_to_add_fourth_node, + POLL_HEIGHT, + true, + err_tx.clone(), + ); + + utils::join_all( + vec![ + alice_decided, + bob_decided, + charlie_decided, + alice_committed, + bob_committed, + charlie_committed, + ], + RUNUP_TIMEOUT, + err_rx, + ) + .await + .unwrap(); + + let dan_cfg = configs.next().unwrap().with_sync_enabled(); + + let dan = PathfinderInstance::spawn(dan_cfg.clone()).unwrap(); + dan.wait_for_ready(POLL_READY, READY_TIMEOUT).await.unwrap(); + + let (err_tx, err_rx) = mpsc::channel(8); + + let alice_decided = + wait_for_height(&alice, target_height, POLL_HEIGHT, None, err_tx.clone()); + let bob_decided = wait_for_height(&bob, target_height, POLL_HEIGHT, None, err_tx.clone()); + let charlie_decided = + wait_for_height(&charlie, target_height, POLL_HEIGHT, None, err_tx.clone()); + let dan_decided = wait_for_height(&dan, target_height, POLL_HEIGHT, None, err_tx.clone()); + let alice_committed = + wait_for_block_exists(&alice, target_height, POLL_HEIGHT, true, err_tx.clone()); + let bob_committed = + wait_for_block_exists(&bob, target_height, POLL_HEIGHT, true, err_tx.clone()); + let charlie_committed = + wait_for_block_exists(&charlie, target_height, POLL_HEIGHT, true, err_tx.clone()); + let dan_committed = + wait_for_block_exists(&dan, target_height, POLL_HEIGHT, true, err_tx.clone()); + + utils::join_all( + vec![ + alice_decided, + bob_decided, + charlie_decided, + dan_decided, + alice_committed, + bob_committed, + charlie_committed, + dan_committed, + ], + CATCHUP_TIMEOUT, + err_rx, + ) + .await + .unwrap(); + + let alice_artifacts = get_cached_artifacts_info(&alice, target_height) + .await + .unwrap(); + assert!( + alice_artifacts.is_empty(), + "Alice should not have leftover cached consensus data: {alice_artifacts:#?}" + ); + + let bob_artifacts = get_cached_artifacts_info(&bob, target_height) + .await + .unwrap(); + assert!( + bob_artifacts.is_empty(), + "Bob should not have leftover cached consensus data: {bob_artifacts:#?}" + ); + + let charlie_artifacts = get_cached_artifacts_info(&charlie, target_height) + .await + .unwrap(); + assert!( + charlie_artifacts.is_empty(), + "Charlie should not have leftover cached consensus data: {charlie_artifacts:#?}" + ); + + let dan_artifacts = get_cached_artifacts_info(&dan, target_height) + .await + .unwrap(); + assert!( + dan_artifacts.is_empty(), + "Dan should not have leftover cached consensus data: {dan_artifacts:#?}" + ); + } + + /// A slightly different failure scenario from + /// [consensus_3_nodes_with_failures]. We are not causing the process to + /// exit but instead forcing nodes to send outdated votes which leads to + /// them being punished by their peers (via peer score penalties). + #[tokio::test] + async fn consensus_3_nodes_outdated_votes_lead_to_peer_score_penalty() { + const NUM_NODES: usize = 3; + const READY_TIMEOUT: Duration = Duration::from_secs(20); + const RUNUP_TIMEOUT: Duration = Duration::from_secs(60); + const POLL_READY: Duration = Duration::from_millis(500); + const POLL_HEIGHT: Duration = Duration::from_secs(1); + + let (configs, boot_blocks, stopwatch) = utils::setup(NUM_NODES, true).unwrap(); + + let last_valid_height: u64 = boot_blocks + 5; + + let alice_cfg = configs.first().unwrap(); + let mut fgw = FeederGateway::spawn(alice_cfg).unwrap(); + fgw.wait_for_ready(POLL_READY, READY_TIMEOUT).await.unwrap(); + + let inject_failure = InjectFailureConfig { + // Starting from this height.. + height: last_valid_height + 1, + // ..send outdated votes. + trigger: InjectFailureTrigger::OutdatedVote, + }; + // Do this for all three nodes, one of them will be picked to send a proposal + // at last_valid_height + 1 and the other two will be the sabotaging nodes. + let mut configs = configs.into_iter().map(|cfg| { + cfg.with_inject_failure(Some(inject_failure)) + .with_local_feeder_gateway(fgw.port()) + .with_sync_enabled() + }); + + let alice = PathfinderInstance::spawn(configs.next().unwrap()).unwrap(); + alice + .wait_for_ready(POLL_READY, READY_TIMEOUT) + .await + .unwrap(); + + let boot_port = alice.consensus_p2p_port(); + let mut configs = configs.map(|cfg| cfg.with_boot_port(boot_port)); + + let bob = PathfinderInstance::spawn(configs.next().unwrap()).unwrap(); + let charlie = PathfinderInstance::spawn(configs.next().unwrap()).unwrap(); + + let (bob_rdy, charlie_rdy) = tokio::join!( + bob.wait_for_ready(POLL_READY, READY_TIMEOUT), + charlie.wait_for_ready(POLL_READY, READY_TIMEOUT) + ); + + bob_rdy.unwrap(); + charlie_rdy.unwrap(); + + utils::log_elapsed(stopwatch); + + let (err_tx, err_rx) = mpsc::channel(6); + + // Wait until all three nodes reach `LAST_VALID_HEIGHT`.. + let alice_decided = + wait_for_height(&alice, last_valid_height, POLL_HEIGHT, None, err_tx.clone()); + let bob_decided = + wait_for_height(&bob, last_valid_height, POLL_HEIGHT, None, err_tx.clone()); + let charlie_decided = wait_for_height( + &charlie, + last_valid_height, + POLL_HEIGHT, + None, + err_tx.clone(), + ); + let alice_committed = + wait_for_block_exists(&alice, last_valid_height, POLL_HEIGHT, true, err_tx.clone()); + let bob_committed = + wait_for_block_exists(&bob, last_valid_height, POLL_HEIGHT, true, err_tx.clone()); + let charlie_committed = wait_for_block_exists( + &charlie, + last_valid_height, + POLL_HEIGHT, + true, + err_tx.clone(), + ); + + utils::join_all( + vec![ + alice_decided, + bob_decided, + charlie_decided, + alice_committed, + bob_committed, + charlie_committed, + ], + RUNUP_TIMEOUT, + err_rx, + ) + .await + .unwrap(); + + let (err_tx, err_rx) = mpsc::channel(3); + + // ..then wait a bit more for the next height, which should never become decided + // upon because one of the nodes is sabotaging the consensus network (sending + // outdated votes) and getting punished by the other two nodes. + let alice_decided = wait_for_height( + &alice, + last_valid_height + 1, + POLL_HEIGHT, + None, + err_tx.clone(), + ); + let bob_decided = wait_for_height( + &bob, + last_valid_height + 1, + POLL_HEIGHT, + None, + err_tx.clone(), + ); + let charlie_decided = wait_for_height( + &charlie, + last_valid_height + 1, + POLL_HEIGHT, + None, + err_tx.clone(), + ); + + let err = utils::join_all( + vec![alice_decided, bob_decided, charlie_decided], + POLL_HEIGHT * 10, + err_rx, + ) + .await + .unwrap_err(); + assert!(err.to_string().contains("Test timed out")); + + let alice_peer_scores = get_peer_scores(&alice).await.unwrap(); + let bob_peer_scores = get_peer_scores(&bob).await.unwrap(); + let charlie_peer_scores = get_peer_scores(&charlie).await.unwrap(); + + let peer_score_penalty_applied = alice_peer_scores + .iter() + .any(|score| score.score.as_f64().unwrap() < 0.0) + || bob_peer_scores + .iter() + .any(|score| score.score.as_f64().unwrap() < 0.0) + || charlie_peer_scores + .iter() + .any(|score| score.score.as_f64().unwrap() < 0.0); + + assert!( + peer_score_penalty_applied, + "At least one node should have applied a peer score penalty for outdated votes" + ); + + let alice_artifacts = get_cached_artifacts_info(&alice, last_valid_height) + .await + .unwrap(); + assert!( + alice_artifacts.is_empty(), + "Alice should not have leftover cached consensus data: {alice_artifacts:#?}" + ); + + let bob_artifacts = get_cached_artifacts_info(&bob, last_valid_height) + .await + .unwrap(); + assert!( + bob_artifacts.is_empty(), + "Bob should not have leftover cached consensus data: {bob_artifacts:#?}" + ); + + let charlie_artifacts = get_cached_artifacts_info(&charlie, last_valid_height) + .await + .unwrap(); + assert!( + charlie_artifacts.is_empty(), + "Charlie should not have leftover cached consensus data: {charlie_artifacts:#?}" + ); + } + + async fn get_peer_scores( + instance: &PathfinderInstance, + ) -> anyhow::Result> { + let rpc_port = instance.rpc_port_watch().1.borrow().1; + + match get_consensus_info(rpc_port).await? { + JsonRpcReply::Success { + result: + ConsensusInfoOutput { + application_peer_scores, + .. + }, + .. + } => Ok(application_peer_scores), + JsonRpcReply::Error { _error, .. } => { + anyhow::bail!("{:#?}", serde_json::to_string(&_error)); + } + } } } diff --git a/crates/pathfinder/tests/integration_testing_cli.rs b/crates/pathfinder/tests/integration_testing_cli.rs index 5dfdc261dc..b5c3abf138 100644 --- a/crates/pathfinder/tests/integration_testing_cli.rs +++ b/crates/pathfinder/tests/integration_testing_cli.rs @@ -28,6 +28,7 @@ mod tests { ) -> anyhow::Result<()> { let mut command = Command::new(pathfinder_release_bin()); let command = command + .arg("node") .stdout(Stdio::piped()) .stderr(Stdio::piped()) .env("RUST_LOG", "pathfinder_lib=trace,pathfinder=trace") diff --git a/crates/retry/src/lib.rs b/crates/retry/src/lib.rs index 76761cd1a9..053814da61 100644 --- a/crates/retry/src/lib.rs +++ b/crates/retry/src/lib.rs @@ -114,12 +114,8 @@ impl From for MaybeLimited { #[cfg(not(test))] const FACTOR: u32 = 1000; - let backoff = ExponentialBackoff::from_millis(s.base_secs.get()).factor( - s.factor - .get() - .checked_mul(FACTOR as u64) - .unwrap_or(u64::MAX), - ); + let backoff = ExponentialBackoff::from_millis(s.base_secs.get()) + .factor(s.factor.get().saturating_mul(FACTOR as u64)); let backoff = match s.max_delay { Some(max_delay) => backoff.max_delay(max_delay), None => backoff, diff --git a/crates/rpc/Cargo.toml b/crates/rpc/Cargo.toml index 7998dd689a..853ab402c6 100644 --- a/crates/rpc/Cargo.toml +++ b/crates/rpc/Cargo.toml @@ -35,10 +35,7 @@ pathfinder-version = { path = "../version" } primitive-types = { workspace = true, features = ["serde"] } reqwest = { workspace = true } serde = { workspace = true, features = ["derive"] } -serde_json = { workspace = true, features = [ - "arbitrary_precision", - "raw_value", -] } +serde_json = { workspace = true, features = ["arbitrary_precision", "raw_value"] } serde_with = { workspace = true } starknet-gateway-client = { path = "../gateway-client" } starknet-gateway-test-fixtures = { path = "../gateway-test-fixtures" } @@ -48,13 +45,7 @@ starknet_api = { workspace = true } thiserror = { workspace = true } tokio = { workspace = true, features = ["test-util", "process"] } tower = { workspace = true, features = ["filter", "util", "limit", "timeout"] } -tower-http = { workspace = true, features = [ - "cors", - "limit", - "request-id", - "trace", - "util", -] } +tower-http = { workspace = true, features = ["cors", "limit", "request-id", "trace", "util"] } tracing = { workspace = true } util = { path = "../util" } zstd = { workspace = true } @@ -65,12 +56,9 @@ bitvec = { workspace = true } bytes = { workspace = true } fake = { workspace = true } flate2 = { workspace = true } -gateway-test-utils = { path = "../gateway-test-utils" } hex = { workspace = true } pathfinder-crypto = { path = "../crypto" } -pathfinder-storage = { path = "../storage", features = [ - "small_aggregate_filters", -] } +pathfinder-storage = { path = "../storage", features = ["small_aggregate_filters"] } pretty_assertions_sorted = { workspace = true } rayon = { workspace = true } rstest = { workspace = true } @@ -78,3 +66,4 @@ tempfile = { workspace = true } test-log = { workspace = true, features = ["trace"] } tokio-tungstenite = { workspace = true } tracing-subscriber = { workspace = true } +wiremock = { workspace = true } diff --git a/crates/rpc/fixtures/0.10.0/blocks/latest.json b/crates/rpc/fixtures/0.10.0/blocks/latest.json index 6f8222777c..b2502a4938 100644 --- a/crates/rpc/fixtures/0.10.0/blocks/latest.json +++ b/crates/rpc/fixtures/0.10.0/blocks/latest.json @@ -1,214 +1,201 @@ { - "block_hash":"0x6c6174657374", - "block_number":2, - "l1_da_mode":"CALLDATA", - "l1_data_gas_price":{ - "price_in_fri":"0x0", - "price_in_wei":"0x0" + "block_hash": "0x6c6174657374", + "block_number": 2, + "event_commitment": "0xec02", + "event_count": 2, + "l1_da_mode": "CALLDATA", + "l1_data_gas_price": { + "price_in_fri": "0x0", + "price_in_wei": "0x0" }, - "l1_gas_price":{ - "price_in_fri":"0x0", - "price_in_wei":"0x2" + "l1_gas_price": { + "price_in_fri": "0x0", + "price_in_wei": "0x2" }, - "l2_gas_price":{ - "price_in_fri":"0x0", - "price_in_wei":"0x0" + "l2_gas_price": { + "price_in_fri": "0x0", + "price_in_wei": "0x0" }, - "new_root":"0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", - "parent_hash":"0x626c6f636b2031", - "sequencer_address":"0x2", - "starknet_version":"", - "status":"ACCEPTED_ON_L2", - "timestamp":2, - "transactions":[ + "new_root": "0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", + "parent_hash": "0x626c6f636b2031", + "receipt_commitment": "0xdc02", + "sequencer_address": "0x2", + "starknet_version": "0.13.2", + "state_diff_commitment": "0xfc02", + "state_diff_length": 2, + "status": "ACCEPTED_ON_L2", + "timestamp": 2, + "transaction_commitment": "0xac02", + "transaction_count": 2, + "transactions": [ { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "l1_data_gas":0, - "l1_gas":0, - "l2_gas":0 + "events": [], + "execution_resources": { + "l1_data_gas": 0, + "l1_gas": 0, + "l2_gas": 0 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x74786e2033", - "type":"INVOKE" + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "transaction_hash": "0x74786e2033", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x636f6e74726163742031", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "type": "INVOKE", + "version": "0x0" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "l1_data_gas":0, - "l1_gas":0, - "l2_gas":0 + "events": [], + "execution_resources": { + "l1_data_gas": 0, + "l1_gas": 0, + "l2_gas": 0 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x74786e2034", - "type":"INVOKE" + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "transaction_hash": "0x74786e2034", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x0", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x0", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "type": "INVOKE", + "version": "0x0" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "l1_data_gas":0, - "l1_gas":0, - "l2_gas":0 + "events": [], + "execution_resources": { + "l1_data_gas": 0, + "l1_gas": 0, + "l2_gas": 0 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x74786e2035", - "type":"INVOKE" + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "transaction_hash": "0x74786e2035", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x636f6e74726163742031", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "type": "INVOKE", + "version": "0x0" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "FRI" }, - "events":[ - - ], - "execution_resources":{ - "l1_data_gas":0, - "l1_gas":0, - "l2_gas":0 + "events": [], + "execution_resources": { + "l1_data_gas": 0, + "l1_gas": 0, + "l2_gas": 0 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [ { - "from_address":"0xcafebabe", - "payload":[ + "from_address": "0xcafebabe", + "payload": [ "0x1", "0x2", "0x3" ], - "to_address":"0x0" + "to_address": "0x0" } ], - "transaction_hash":"0x74786e2036", - "type":"INVOKE" + "transaction_hash": "0x74786e2036", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "account_deployment_data": [], + "calldata": [], + "fee_data_availability_mode": "L1", + "nonce": "0x0", + "nonce_data_availability_mode": "L1", + "paymaster_data": [], + "resource_bounds": { + "l1_data_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l1_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l2_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "sender_address": "0x636f6e74726163742032202873696572726129", + "signature": [], + "tip": "0x0", + "type": "INVOKE", + "version": "0x3" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "l1_data_gas":0, - "l1_gas":0, - "l2_gas":0 + "events": [], + "execution_resources": { + "l1_data_gas": 0, + "l1_gas": 0, + "l2_gas": 0 }, - "execution_status":"REVERTED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "revert_reason":"Reverted because", - "transaction_hash":"0x74786e207265766572746564", - "type":"INVOKE" + "execution_status": "REVERTED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "revert_reason": "Reverted because", + "transaction_hash": "0x74786e207265766572746564", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x636f6e74726163742031", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "type": "INVOKE", + "version": "0x0" } } ] -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/0.10.0/blocks/latest_with_tx_hashes.json b/crates/rpc/fixtures/0.10.0/blocks/latest_with_tx_hashes.json index a9d4b53976..0dbf31ddd1 100644 --- a/crates/rpc/fixtures/0.10.0/blocks/latest_with_tx_hashes.json +++ b/crates/rpc/fixtures/0.10.0/blocks/latest_with_tx_hashes.json @@ -1,6 +1,8 @@ { "block_hash": "0x6c6174657374", "block_number": 2, + "event_commitment": "0xec02", + "event_count": 2, "l1_da_mode": "CALLDATA", "l1_data_gas_price": { "price_in_fri": "0x0", @@ -16,10 +18,15 @@ }, "new_root": "0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", "parent_hash": "0x626c6f636b2031", + "receipt_commitment": "0xdc02", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", + "state_diff_commitment": "0xfc02", + "state_diff_length": 2, "status": "ACCEPTED_ON_L2", "timestamp": 2, + "transaction_commitment": "0xac02", + "transaction_count": 2, "transactions": [ "0x74786e2033", "0x74786e2034", @@ -27,4 +34,4 @@ "0x74786e2036", "0x74786e207265766572746564" ] -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/0.10.0/blocks/latest_with_txs.json b/crates/rpc/fixtures/0.10.0/blocks/latest_with_txs.json index c0bd5c645d..53a78cf004 100644 --- a/crates/rpc/fixtures/0.10.0/blocks/latest_with_txs.json +++ b/crates/rpc/fixtures/0.10.0/blocks/latest_with_txs.json @@ -1,6 +1,8 @@ { "block_hash": "0x6c6174657374", "block_number": 2, + "event_commitment": "0xec02", + "event_count": 2, "l1_da_mode": "CALLDATA", "l1_data_gas_price": { "price_in_fri": "0x0", @@ -16,10 +18,15 @@ }, "new_root": "0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", "parent_hash": "0x626c6f636b2031", + "receipt_commitment": "0xdc02", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", + "state_diff_commitment": "0xfc02", + "state_diff_length": 2, "status": "ACCEPTED_ON_L2", "timestamp": 2, + "transaction_commitment": "0xac02", + "transaction_count": 2, "transactions": [ { "calldata": [], @@ -52,14 +59,32 @@ "version": "0x0" }, { + "account_deployment_data": [], "calldata": [], - "contract_address": "0x636f6e74726163742031", - "entry_point_selector": "0x0", - "max_fee": "0x0", + "fee_data_availability_mode": "L1", + "nonce": "0x0", + "nonce_data_availability_mode": "L1", + "paymaster_data": [], + "resource_bounds": { + "l1_data_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l1_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l2_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "sender_address": "0x636f6e74726163742032202873696572726129", "signature": [], + "tip": "0x0", "transaction_hash": "0x74786e2036", "type": "INVOKE", - "version": "0x0" + "version": "0x3" }, { "calldata": [], @@ -72,4 +97,4 @@ "version": "0x0" } ] -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/0.10.0/blocks/latest_with_txs_including_proof_facts.json b/crates/rpc/fixtures/0.10.0/blocks/latest_with_txs_including_proof_facts.json new file mode 100644 index 0000000000..4d434bd96a --- /dev/null +++ b/crates/rpc/fixtures/0.10.0/blocks/latest_with_txs_including_proof_facts.json @@ -0,0 +1,104 @@ +{ + "block_hash": "0x6c6174657374", + "block_number": 2, + "event_commitment": "0xec02", + "event_count": 2, + "l1_da_mode": "CALLDATA", + "l1_data_gas_price": { + "price_in_fri": "0x0", + "price_in_wei": "0x0" + }, + "l1_gas_price": { + "price_in_fri": "0x0", + "price_in_wei": "0x2" + }, + "l2_gas_price": { + "price_in_fri": "0x0", + "price_in_wei": "0x0" + }, + "new_root": "0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", + "parent_hash": "0x626c6f636b2031", + "receipt_commitment": "0xdc02", + "sequencer_address": "0x2", + "starknet_version": "0.13.2", + "state_diff_commitment": "0xfc02", + "state_diff_length": 2, + "status": "ACCEPTED_ON_L2", + "timestamp": 2, + "transaction_commitment": "0xac02", + "transaction_count": 2, + "transactions": [ + { + "calldata": [], + "contract_address": "0x636f6e74726163742031", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "transaction_hash": "0x74786e2033", + "type": "INVOKE", + "version": "0x0" + }, + { + "calldata": [], + "contract_address": "0x0", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "transaction_hash": "0x74786e2034", + "type": "INVOKE", + "version": "0x0" + }, + { + "calldata": [], + "contract_address": "0x636f6e74726163742031", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "transaction_hash": "0x74786e2035", + "type": "INVOKE", + "version": "0x0" + }, + { + "account_deployment_data": [], + "calldata": [], + "fee_data_availability_mode": "L1", + "nonce": "0x0", + "nonce_data_availability_mode": "L1", + "paymaster_data": [], + "proof_facts": [ + "0x70726f6f6620666163742031", + "0x70726f6f6620666163742032" + ], + "resource_bounds": { + "l1_data_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l1_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l2_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "sender_address": "0x636f6e74726163742032202873696572726129", + "signature": [], + "tip": "0x0", + "transaction_hash": "0x74786e2036", + "type": "INVOKE", + "version": "0x3" + }, + { + "calldata": [], + "contract_address": "0x636f6e74726163742031", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "transaction_hash": "0x74786e207265766572746564", + "type": "INVOKE", + "version": "0x0" + } + ] +} diff --git a/crates/rpc/fixtures/0.10.0/blocks/pending.json b/crates/rpc/fixtures/0.10.0/blocks/pending.json deleted file mode 100644 index 3a8ca65367..0000000000 --- a/crates/rpc/fixtures/0.10.0/blocks/pending.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "l1_da_mode": "CALLDATA", - "l1_data_gas_price": { - "price_in_fri": "0x7374726b206461746761737072696365", - "price_in_wei": "0x6461746761737072696365" - }, - "l1_gas_price": { - "price_in_fri": "0x7374726b20676173207072696365", - "price_in_wei": "0x676173207072696365" - }, - "l2_gas_price": { - "price_in_fri": "0x7374726b206c32676173207072696365", - "price_in_wei": "0x6c3220676173207072696365" - }, - "block_number": 3, - "sequencer_address": "0x70656e64696e672073657175656e6365722061646472657373", - "starknet_version": "0.11.0", - "timestamp": 1234567, - "transactions": [ - { - "receipt": { - "actual_fee": { - "amount": "0x0", - "unit": "WEI" - }, - "events": [ - { - "data": [], - "from_address": "0xabcddddddd", - "keys": [ - "0x70656e64696e67206b6579" - ] - }, - { - "data": [], - "from_address": "0xabcddddddd", - "keys": [ - "0x70656e64696e67206b6579", - "0x7365636f6e642070656e64696e67206b6579" - ] - }, - { - "data": [], - "from_address": "0xabcaaaaaaa", - "keys": [ - "0x70656e64696e67206b65792032" - ] - } - ], - "execution_resources": { - "l1_data_gas": 0, - "l1_gas": 0, - "l2_gas": 0 - }, - "execution_status": "SUCCEEDED", - "finality_status": "ACCEPTED_ON_L2", - "messages_sent": [], - "transaction_hash": "0x70656e64696e6720747820686173682030", - "type": "INVOKE" - }, - "transaction": { - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "type": "INVOKE", - "version": "0x0" - } - }, - { - "receipt": { - "actual_fee": { - "amount": "0x0", - "unit": "WEI" - }, - "contract_address": "0x1122355", - "events": [], - "execution_resources": { - "l1_data_gas": 0, - "l1_gas": 0, - "l2_gas": 0 - }, - "execution_status": "SUCCEEDED", - "finality_status": "ACCEPTED_ON_L2", - "messages_sent": [], - "transaction_hash": "0x70656e64696e6720747820686173682031", - "type": "DEPLOY" - }, - "transaction": { - "class_hash": "0x70656e64696e6720636c61737320686173682031", - "constructor_calldata": [], - "contract_address_salt": "0x73616c7479", - "type": "DEPLOY", - "version": "0x0" - } - }, - { - "receipt": { - "actual_fee": { - "amount": "0x0", - "unit": "WEI" - }, - "events": [], - "execution_resources": { - "l1_data_gas": 0, - "l1_gas": 0, - "l2_gas": 0 - }, - "execution_status": "REVERTED", - "finality_status": "ACCEPTED_ON_L2", - "messages_sent": [], - "revert_reason": "Reverted!", - "transaction_hash": "0x70656e64696e67207265766572746564", - "type": "INVOKE" - }, - "transaction": { - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "type": "INVOKE", - "version": "0x0" - } - } - ] -} diff --git a/crates/rpc/fixtures/0.10.0/blocks/pending_with_tx_hashes.json b/crates/rpc/fixtures/0.10.0/blocks/pending_with_tx_hashes.json deleted file mode 100644 index ab5d12dd4a..0000000000 --- a/crates/rpc/fixtures/0.10.0/blocks/pending_with_tx_hashes.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "l1_da_mode": "CALLDATA", - "l1_data_gas_price": { - "price_in_fri": "0x7374726b206461746761737072696365", - "price_in_wei": "0x6461746761737072696365" - }, - "l1_gas_price": { - "price_in_fri": "0x7374726b20676173207072696365", - "price_in_wei": "0x676173207072696365" - }, - "l2_gas_price": { - "price_in_fri": "0x7374726b206c32676173207072696365", - "price_in_wei": "0x6c3220676173207072696365" - }, - "block_number": 3, - "sequencer_address": "0x70656e64696e672073657175656e6365722061646472657373", - "starknet_version": "0.11.0", - "timestamp": 1234567, - "transactions": [ - "0x70656e64696e6720747820686173682030", - "0x70656e64696e6720747820686173682031", - "0x70656e64696e67207265766572746564" - ] -} diff --git a/crates/rpc/fixtures/0.10.0/blocks/pending_with_txs.json b/crates/rpc/fixtures/0.10.0/blocks/pending_with_txs.json deleted file mode 100644 index 5cb563bd94..0000000000 --- a/crates/rpc/fixtures/0.10.0/blocks/pending_with_txs.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "l1_da_mode": "CALLDATA", - "l1_data_gas_price": { - "price_in_fri": "0x7374726b206461746761737072696365", - "price_in_wei": "0x6461746761737072696365" - }, - "l1_gas_price": { - "price_in_fri": "0x7374726b20676173207072696365", - "price_in_wei": "0x676173207072696365" - }, - "l2_gas_price": { - "price_in_fri": "0x7374726b206c32676173207072696365", - "price_in_wei": "0x6c3220676173207072696365" - }, - "block_number": 3, - "sequencer_address": "0x70656e64696e672073657175656e6365722061646472657373", - "starknet_version": "0.11.0", - "timestamp": 1234567, - "transactions": [ - { - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "transaction_hash": "0x70656e64696e6720747820686173682030", - "type": "INVOKE", - "version": "0x0" - }, - { - "class_hash": "0x70656e64696e6720636c61737320686173682031", - "constructor_calldata": [], - "contract_address_salt": "0x73616c7479", - "transaction_hash": "0x70656e64696e6720747820686173682031", - "type": "DEPLOY", - "version": "0x0" - }, - { - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "transaction_hash": "0x70656e64696e67207265766572746564", - "type": "INVOKE", - "version": "0x0" - } - ] -} diff --git a/crates/rpc/fixtures/0.10.0/blocks/pre_confirmed.json b/crates/rpc/fixtures/0.10.0/blocks/pre_confirmed.json index 014aa0b0f6..cef21aca62 100644 --- a/crates/rpc/fixtures/0.10.0/blocks/pre_confirmed.json +++ b/crates/rpc/fixtures/0.10.0/blocks/pre_confirmed.json @@ -14,7 +14,7 @@ "price_in_wei": "0x6c3220676173207072696365" }, "sequencer_address": "0x707265636f6e6669726d65642073657175656e6365722061646472657373", - "starknet_version": "0.11.0", + "starknet_version": "0.13.2", "timestamp": 1234567, "transactions": [ { diff --git a/crates/rpc/fixtures/0.10.0/blocks/pre_confirmed_with_tx_hashes.json b/crates/rpc/fixtures/0.10.0/blocks/pre_confirmed_with_tx_hashes.json index 71e96604d1..4ff8f8032e 100644 --- a/crates/rpc/fixtures/0.10.0/blocks/pre_confirmed_with_tx_hashes.json +++ b/crates/rpc/fixtures/0.10.0/blocks/pre_confirmed_with_tx_hashes.json @@ -14,7 +14,7 @@ "price_in_wei": "0x6c3220676173207072696365" }, "sequencer_address": "0x707265636f6e6669726d65642073657175656e6365722061646472657373", - "starknet_version": "0.11.0", + "starknet_version": "0.13.2", "timestamp": 1234567, "transactions": [ "0x707265636f6e6669726d656420747820686173682030", diff --git a/crates/rpc/fixtures/0.10.0/blocks/pre_confirmed_with_txs.json b/crates/rpc/fixtures/0.10.0/blocks/pre_confirmed_with_txs.json index 16941069ed..a05eff1dc8 100644 --- a/crates/rpc/fixtures/0.10.0/blocks/pre_confirmed_with_txs.json +++ b/crates/rpc/fixtures/0.10.0/blocks/pre_confirmed_with_txs.json @@ -14,7 +14,7 @@ "price_in_wei": "0x6c3220676173207072696365" }, "sequencer_address": "0x707265636f6e6669726d65642073657175656e6365722061646472657373", - "starknet_version": "0.11.0", + "starknet_version": "0.13.2", "timestamp": 1234567, "transactions": [ { diff --git a/crates/rpc/fixtures/0.6.0/broadcasted_transactions.json b/crates/rpc/fixtures/0.10.0/broadcasted_transactions.json similarity index 91% rename from crates/rpc/fixtures/0.6.0/broadcasted_transactions.json rename to crates/rpc/fixtures/0.10.0/broadcasted_transactions.json index 5d2fb9c6c5..9e5f6030cd 100644 --- a/crates/rpc/fixtures/0.6.0/broadcasted_transactions.json +++ b/crates/rpc/fixtures/0.10.0/broadcasted_transactions.json @@ -65,6 +65,10 @@ ], "nonce": "0x81", "resource_bounds": { + "l1_data_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, "l1_gas": { "max_amount": "0x1111", "max_price_per_unit": "0x2222" @@ -150,6 +154,10 @@ ], "nonce": "0x8", "resource_bounds": { + "l1_data_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, "l1_gas": { "max_amount": "0x1111", "max_price_per_unit": "0x2222" @@ -173,7 +181,12 @@ "sender_address": "0xaaa", "calldata": [ "0xff" - ] + ], + "proof_facts": [ + "0xabc", + "0xdef" + ], + "proof": "CxY=" }, { "type": "DEPLOY_ACCOUNT", @@ -183,6 +196,10 @@ ], "nonce": "0x8", "resource_bounds": { + "l1_data_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, "l1_gas": { "max_amount": "0x1111", "max_price_per_unit": "0x2222" diff --git a/crates/rpc/fixtures/0.10.0/class_at/pending.json b/crates/rpc/fixtures/0.10.0/class_at/pending.json deleted file mode 100644 index b712fce74b..0000000000 --- a/crates/rpc/fixtures/0.10.0/class_at/pending.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "abi":[ - { - "inputs":[ - { - "name":"address", - "type":"felt" - }, - { - "name":"value", - "type":"felt" - } - ], - "name":"increase_value", - "outputs":[ - - ], - "type":"function" - }, - { - "inputs":[ - { - "name":"contract_address", - "type":"felt" - }, - { - "name":"address", - "type":"felt" - }, - { - "name":"value", - "type":"felt" - } - ], - "name":"call_increase_value", - "outputs":[ - - ], - "type":"function" - }, - { - "inputs":[ - { - "name":"address", - "type":"felt" - } - ], - "name":"get_value", - "outputs":[ - { - "name":"res", - "type":"felt" - } - ], - "type":"function" - } - ], - "entry_points_by_type":{ - "CONSTRUCTOR":[ - - ], - "EXTERNAL":[ - { - "offset":117, - "selector":"0x26813d396fdb198e9ead934e4f7a592a8b88a059e45ab0eb6ee53494e8d45b0" - }, - { - "offset":85, - "selector":"0x3033d3588abc2928b334742248e380daa139fc6b2bba31d609282d2c641a450" - }, - { - "offset":61, - "selector":"0x34c4c150632e67baf44fc50e9a685184d72a822510a26a66f72058b5e7b2892" - } - ], - "L1_HANDLER":[ - - ] - }, - "program":"H4sIAAAAAAAE/91de2/bSJL/Kgb/SnYcgW9SBuYPT+KdDS6PPduze7ggIGiJ8giRJa1EzSQX+LtfVb/YTTbJbpIKsLtYT2yKrK761buapL47eVke1g+nsjg6V58+XzoPp/WmXG/xL+eQbx+LbPF7sfjiwEfLvMzhJMf9GrpJ6rpeslqt8Me5hGMe+a/vpg94iP0U5GCYujE/H/516cEg9uJFvAiDeBUXSZj48HeQhPRD1/XxTCAzh58VPxjAQVwWD+byQR/OwoMP8sGAHVzIB0N2cEkPpj5nbQ60KWsJ+4jwEOH54iMQBRmLlYPmQkcgYLxKUNQkjiI/jkDohsgLoN4QGQ82eF4IxgKZZ0Sj+mgwewkwOk/COKK0K50QFfODXCd4UEEaucCDDa4falzrGWy1Mc9zQQ2uB1Twh+oM/nDF/zwXLNPi/wWlEboemgyxaaQnS+jiAdCLIiFZHg6qEuKZ+EMu98l/gd8czkMLXYmP2EGESDnIDbI6GISLcOFFbhz4RZw85KswXC0it5jncRp5abhM/Dz1/chzcz/O4xgszI3Sh6hIHvx0zlnwU1waf4AVJkfq5uxAtZo3Ob7LmKHgoU0sYflqtRBYgAMIT3XQbwkjeFYDLzyI3lFdfgYJWGBJiQQFMFytxiRQWQhTP4WzUNYlIkwAOANfNMK24OXHsDTGy4oFnzASuj6ihtwRtunB1MXY5gLblYeCcPxgRYQdVCl7k5vNiuaU9mwTtqgDOUbmFDE4FpXimNdTIgQHgIsebAHURdS0XowfVJRDatQGpsrORE1Ul08P5cLWTlg+sbWTBuqoCrSoHuMBGPBMEh6EEqaHwdSiVHWE1ELqBzVFDTUedr65RalnhtR41OWmxyJPiNfrLb01+YauG6CC8AcCBU8jNNLgQfwhhJnz6oTB4Ijn4Q8QobaJYrMDlSfouUvpcnBpZVZsOVuDVW1zepQLIRzat+oe06+2UgwQq9QKypBacd3WSEIzONjQBHYExcPpMVtvVzvnanvabC6d39fbEnqH744LnQJ0F4tFcTyuHzZFdlzs9qTJcI5lfvjyZ34oZot8fdjNFrunp912lm82OzSnro/ZSbD0YrcsnCvnqXjaHb59yvefL36+OBaPTwWsP8uXyxcvwQhXm92fWXnIF1/W28eM9i/A1F4cc66+O4+H3WnvXLmXzm61OhYl/Pp86RyKVXEotosiWy9RoOfnZ1jVMxKLSLAtSi7Z8dtxAdIdgSPyEZGd/KY5CUDZbLLFbot8l9h3LaiojEr2e75dboqDet4LLvvP/JfLC37Bvjz8DELMpL9twfEqcDwNOJJKzcSaZVlZPO0BzfjS/mIEkyozGHF1dlz/H5iQP4QE004GhnYojmAfYD1EcgvVzlan7aJc77bZsdgUi3J3cK4AZ2syTK3OVWQviWwTzlXIjTxtd94se8rX2ywDW1Z+/fOQ7/fF4cg+qf6cPRZl9ke+ORUZuBOYcnYoytNhK1n2dE7sgR66vNjJsn7OZtLcIwPnca5SIGt2Jch6LA+nBUSRZM7gnLej2a9swLn/pNkRrCd/LADafCkBy0xDhAz5tDNHDHArroihEUPmlgUMD1wEKFsigvmAuuncyEWUhRmGsLCZc+ouplbkudQg/A736pfMziD+PKzLwsAiyHlnNgkI1lOZBGGX2YQPqkmt9EqvFrHbMwucXLH0amYWTLPJgPVJTATeY2oVcUeYUCKtFH+rWAZWoQSo9XZxKPJjQSOvZADTxVrI3FydvqsrCjoYAtXxJJ7li/KUb1g2DgFJ0+sOj1X+DcG4LK5j2IegecOrSB4IQebu80uoakLIpGCQXSc2MkwIwaXzgqLMjiyxRPVspCq7ltNZFppH7VnI3rxQeVD3n93GAEZuY0HQa2MarloNLYZUoADed7FsbXHdbgwu5hV9ZbNx3WYNqDDDjetu0nMpsd4Y0DQQGU0YjCWpW5luiYYdJ5Cde9c4FJUxJyYgKME28TBggjGsl9DsrVdrqDqxj+NWPHv/7TWrz/Fw+W0PVb6zzZ+K4z6HORhcqTl1dn14hDr+u7M6bTYZng3dZet5l9h4PtCFgR7tJAAwttiReip8oqPw9sPr25vru5vsH9fvfrvJ7m7e3by+/3grMQu2ciwhpDNte+HcS0KY2fq+m7huFMxjP02TAH6d+3A49uM4ncPehRuEnhslge97XhrFceT6qT+PE9+L4iAI4OK4jaen/Wa9WJemKLyVzx+Fxi3tBqAR70OenTlqtbu3/3vz8a/Zu4+vr9/dtSOO+UynunyzgRkF8LosjuV6m5fr3RbspKramhMNNrK4dJht5Jt1fnRa1EB8DLRPe/+OdciK26IxYlCnAmBCJqsui03xmJdFhssjKG3Sta6qUjCTVc1adNnF7pCXuwM4Iu5F7xfOVQCJkcnA++U28FSCxg6tu0y2MSdfLmn38N0h6s04P8UGnZQnKGxzFizwVEG++xq0M+bk3Sf6z2AxNMxAwGQMdIeZmlyKx4JlEW/riHNdlyvwNHJAtyQIkxLPNaf/BQyXwwpNExTXfFQzRHIWN+xlZhfK0gotmAb7GoyG8QdB0sWfGrWMeCyOwmgf0gKlpaprVC+rWSj65Xcnr+anYqbKhqhhNScMASriwFAzMxN3Pi3yY/litb+8WIHv/OUvLz+DL1sThNqHEyT0Pq1g+vvThceovhxCE0ojHU2/ognTX2Z8YjQMC8FAifZjUtUxa2gJS6oAI5wufqxOm86Co4XaQLVETC2he+lwiala8v3FTxcvXnkvucygnOFC9wRNS6E5tYFCY5gltgjJRBV6RYUOpxEa8yf3RmjX8gOMAafxSQ3lgVgIv4QeRsWibgAD3bPH34eblGlytbStBtmBwPYaWTSNkRnmW0sU6lTPBUI8EQhFiY6mjalYPdhKz8gNlNrDtgoDTCjlEX1UJU413AegdUa5M1oKamILVE7DZKckzwaAP43eTSpHS/llkgPF73X9hEtP1H9pWvL021WgEB5uVywTTGJQlNa5oBQSY/FoIfBT8bTYf8OA0dbdkuKM79nT02f0H3AqVvs1u3fMzPVRKLQay0LqZZ3ia1kctvnGAYYxTiRQwzKK2q5WQ7S7n229QG5e/q06WZ1ERj1s74UKJPW8B6ojdpBx9UCjAurn3Sg2ZnLA0J2O+Yefb9q96phm7ScsoY1oHZfIEkK9T5MFFPxMpmNJdqifLx3RY+qIGfaqGPw66fDiHQTRQWssHKdjE1nAzypVXDrc92iIuhINKel8rJoAHWCNSnKsxA2C5xLdqjTViW7oRsa6rtM7l+BKOdqdlyVT8nkXncLAQ7WlehNlkqV0gJoEGWM0ZWLnQtKmxLGCUlSOpHaCBMqimH4Mo8OSaciiuGmnci74rMqax4LdUkXLma5Kw3MDMY7XlhqCVneBUTtNzjCmZYWUC2EOw7R4bOaiaimjfN9yusKh7AC6oNySsg3Z7EnUFYPsRIU12FpALeoyY5W5RBI35GhI6q7Y5IlWhxTUQtqw07zaxlNgM74SlqZpYrjMc9U8PcxVZiY20COaTOJs4okyhMS77pwk4ZaAjWB547kQXVXcWE6yC6Tq2BlNtLuliSrT1MYZlV53sNGdqzhNj4XKtsSg0Ad/fqJXba/5IlxqQlONMaP41HWNIpRsXTrXGxKkaouzAATUtZauP1tmEozMoJuo0RkSjWokehRuIg0nYeO4MCPnJoJtDvoX2jmzKTUsCb81Kflq4nUkARPR8PKBYvGwEYGoqlgsaljtB9XEMrFoE/lkOgPl7FWfaIEMwi5gxc2iFz816naHc4mux/dpYujbuxVDGO6ri2uaYRT1UdFEJZTAuZRhleKP5e4gbn6H0LZsuTen9e4VhYAI/81RHz+P3AFMM6L+LqDelSgF3VLVLb30Vh5Vb3TRrno/BRtipbWahrsJt+Rjk4ss0kMPue50anPxdDy1ZcwebthlMh/y6zSyfXlAXXZV/ThqZNs92lPlcgDvjaV5We/RPFr5mL/p02itLMh0pZYNJh3MruS6qAcGq8zfQ0u6LSWXbxnXS6zGsGGkbaIbbPxxkHmqQVekYfLK4TeqkEFj8PIz/BtcvLr4xO4/gCP0rouXznNrJLcQQr5ZeWJ8JNIT4vNJA5BHIelOb3agNAaqkC50PjjYegCdxhrnhGl6iJjFTm81lPA5wQCn8qcFpC1MY4wcaiNIc3IURBxh8hOn6S427SOWcEjneWrSQm/Tkw4YJKNCK97BF2nTcGMg1huRKK2BJoBVAbahaduUx6xf62WSnrDMsIhEudWiumu/DwBhhYJUQVNyh2OW6cra5hO3E4SfMVtIPb6hZquIpHPhHJ8tTJg81ITqnEPZTgPklUOpW7XfffAWZXakg/Z6wuvS5ExUsVaxDopWvtpAI++Dxb28MOCbxMCh1RQIgTdaoek3CgTr6M+JDYWDzwLmvU5vKbPylOiMsZl1dRK2loAgUoJTCk+qRbCCVbEpXw4vmeW5Ut0xkLS1omWCA+XVdQ+fiLy8WYB4w1Ia0bZxKu7zqhev1FnVQNfJlNc88DuoAF41hZAZCXldBvEv8/uupFj3WJjvg3rgOywvYU4jT25BN6w8rCjo9Y9DaqfKjT5QpR7kigHPkQZf+KRlPePRR7WucsnY9W9bnsLTgT1jJ8tr/qcPNyrYh440KgoTDTJ6CdoEIM+rntzhEchDl+FFiRKBYFwBvZY3YoChZx66Z75LA/GCxIXafXir00Z6WEZrnTK8EsFJ0VADMsDBAnLn1k8ft9gY6sTuzEJaIJHSGeQd0GQOsisOpllilxHA1irR1mzQlRjZDqUwFDzenXke7Mxz16HGMrSel8WjFtTblIlLQGiW8vStmDhxdAPWTmkolNooRKGUCiEMQ9xcehsv2RjJK0uw8/J8KAy0qjLbhKI6IZ2tBELR33BVZ4t8amChUKMPaa5k0T3cBaCiw1BfK7r3Uuqw6oySqtOkOKwuBK6xEdB6pmF44ySG2pOBwlHqFXQU9MHUQRJmtPKzHF80gKJkziiqqPTtM5bc44xIVzKZoYKaxQgWH4jZdjdLll4iQCSkrewlU5ok9Avl7iqgRRzUhUEUi+D9TYtK06iFoa+H0l04QXHP41TdSMTopjL7W9p+yDUo9ErUl3zjLipTQJ0pDRIwsTptemrHLgIyIII38w6vRvqWCjyEK3apzI/TGVz5viSGfTwx2xRbtDhdfc3PxUKmPkAFZrsukfaKg6EqM2yukDt9I52pJpBlkDZOhy2zc6yLdVKYpaB+2lZxDGxHRpv4uwcH1YRs87IEvLpJEjo7TpI3cbj97LGwaDg+E77aiwK4vfmD77rqyXSFs6MNUZgF39qzBkZcYycRt/mZdSyiL8zF71EQvPS+jUO2B3R+amLgnNwePhGDGN2Z1BT2NPWTlgZwG8Yqa9jrdIfanKhUMKOr8Ne7auuKrAY/RDxwQfKEXz3WdWVee2iqHud8qOBNta1cG5ddtjfRxRAzmee3ll0qzf5qS3e+nMPNa4oaJeMyp+u6STi57S9qajywK+TV/9MnyTUEDCsejB9KxVMjIw89R9wcZ0bVxt1juaanT/agd/EQSBIQn+fAHBXmOf6IsXIH/9IouB4WV9Dzw6hsddro+wMzqhOiQvOyBAuv1WDEZVKUdDPMsLecUZjQPCcEYBmiZB0Nw6BGoB0BJDe57PW6gGS77vmFtbOZvzTNnrTPjdZsjN9AF+vn0Lp+biEzUDvYaGLVjK/qZW4z8vacBn+0uO2d6avXQbRi9Yl+sK+ePXq630NuILiY0wi4UG2p4PLIFzXurBoQ/Uzq4ZqAoiwxTQnSGgPBEOPpWL9z5EoDeS23JDwMgweHQlpH65yL1LgACAidofJzV0u8y54XE46UNKNjxXHpj0lLaU0pMimIXBo6Xw6KnPJgXVfp2ChVpjVQSiMvp/LSfRfjFNfnMi+qd1kONJlMnSZOPNhouQMqx3dMs7dGg/50+wKumK/K7Wk/PW2XanqZ3KR1NqsGBLt6VtvLp+TrVtvBGnDELpR5cbAqBAU2ZubogHxMKw3NPaHUo7hbzGBliwayhRplkH/x8+yXdfnn+lj8ciJfBI15Qc6Cg2hcSq/Ld74iSbomq2FWtP+qMLl0vmb5dpmR17V1nYpTza/Z7tB/Jt5C+zX7anIqPkzXu7L0xoDIXHFUFgH1zeLjfhTOMgEF5Kc+kBGPfeOkFu0Wi2y/W2/L2c3i7/gvlJ+ysv41AR3UZPORSHt+omcRm5IReqFigvcuWx4mJprkN61q8GGmLcrzFkkImUwYxN/y4++jDEImoBjEoTieNvrXEUvaRC18bWhT4582/hEM1sPd+nGbl6fDuGDUoKIA81Qcj/lj0Sc0KU9PD9mXold0Kabr9q5bLGG5XpRZTr4vc/YGfr8mvyJbq9Nmw7+RxO5iRVAd56tm5N0Wf9LdUlyamiez5drJaCv7Q/GH2dlSvLSwh4ZjgUeuTps+OBqXKUBMbuAWWv4dHHwmOykIZBRiqCa0gUK4lybYEHvZSt8TUu7wXQmz6zdvbrNfPv724Q2qmSl4sdvKXzvzynPjxHMTfx65XpQEEfyWRr6bhr7rzcMocAN/7iZBErpu6EdRlKZplMIl8zCdYxQu88MXcod/Gxfvr/8nu7v/eHv960329v7mfYbFTDtDfoTvWSbEOsnmx2NxKDM/crOHNYl5RhA/5eXvs9q1VtjSB+uPs9fX795lrz9+uL+9fn1v8P0+AGkU+EkQJpHvu2Hih2nszb0kDVPS43RILJaErkH+1iO9kxBCsjVoL1ec5VD861SAVYCdLvL1YZcxWyGk9FrQEb1lZNTdAEhKe7C5AlU+jvqR0qnIG9cBRJA+TDj7gMIIZDkVBWB81SAZnABtBYMVxGa5VcCKjZ+cHckXonx3GldIyRzrWHBp8l1Cpl9Ig2mO95TZsdgUCwgYDfUga9JCmAlMz5WSY3fdbKgXpngAb3XaaPKCHRlFM2zGo5VeVgxixs410osEQXfmaOX9zc27m1+v728yEmn6v0DM97w4ieahG0NQCXw3Tv3Am8eJF3shzmfIQt3OLJZ852V/u/7w5t3NrUlkg7AWul6Uuv488dMw8sMkiuI09OdpHCRzz0vjOPF8YkHt6YJHlDdKXbQs9G/fIT7BS/OWsmpQXL95//Y+u/nHzQeToO75qZu48wCkj9wgiJJwnoRpd1rkct48rcubP4otyV2Wdl1dqxizcYjBE03uEMToAiXlsdc9ULd4oglRdKUfF0l+vbnPfnn38fV/ZR9+e/+LkUF7YZi66dwDFwqiyA9c1wuDNHH9IIxc303SngqFa7ha+v7t+5u7++v3fzdxp9Cfh3M3SAI/9uM4hGor9T1gI0qSNJn7CfwbeXDAzMyQCYwgIPk11IM3d3cGPCADGDuS1AvAupM0DKH4C1M3cL0kjlLP9eMQjcMgqBAGeJ1kzkLsQ/k5j4LYTd0onHth4iEK88T1AjdxYz/05n7qu25qwcfdzX//dvPhtRUWXjT3vTksE4Dcc6jYAIQoAKZSfx7Nw9jDj5CRKAxSfFOcISb3UBa//fXD9f1vtzcGKuFG6adx5Aeh6yaASOLFvp8k8Mc8MYWhKH/Z7BZfPpyeHooDOrZl7PlVJaAEoBGFpEr2dvJSsk6f1RRVMSk1rwMzdn0JUVSPQriC4qlAlZFgbBM/HVpHdo+eidHqKuS6UAw3+1qshZBiPw9omdlWmCbJ8hnrRlZQK0sFqVRhjRTtfv0EVUb+REalq9PGpsLkUlU0FIEmcAhBuTIEeS47pr1qMH9bMPWewy0aggy3oQYpBfQf7xwSPwzASWRjtBThqIuUssme3Ute55tNcbheLsHYSPixdxKVhCLROB9RCJ/FRWorCKVwL5wkcdQWGZE6tJQUwH+of9TYYegNcg89KUU0nJ0Uh6znBQNcc5OkED6RG+ceuy0Z4XAiilAjHUQlfR4Xqa/B1DxxGqlBzUUZZkx1lqnLKcD/WEepM8QwnEY6RkwRz3ZuOIm73GFlv12MTCcNKopg4xymTpubWWXMOE6DVEjH0aAfJQGTSrp7zgZ1V3MRoSEenSbJK811qJ0D1/ZJvI2YAv4PdZomRwzGieRj1GoCAoRowT80zdx/FVvcw5p2mYAizzhvkciexVEU+kIdGh/p3nEmXrmV9kjFkK4olSVAt3QnzN49NHQUoH+oZ1TMFLe8qxvkFDpCqlj8Bg60SyUUrqBjr2+iHPnZJqNiKeMMnMnc3Xx4k8Hw9Q63n+8/ZrCz0b+VEgYBzDlh5pfEaeAGYTCfu4k3j1MYBYZBAgM302kb3/i+vbl+YzLkc9107sbzIEjc2PWS2HVD3039OMaUQ2y4O7Pw9f55+/beZKroRylsYXhJ5PppErqRixLGcezDPNFwoHhXbJfvC3J/zf3unXf37Yh1OtrC6rSxGaW0EFJsbZ9/2+zypdF77ZF/fj4dgX3v3ErFPQxzF4XNpZ1pApAyeQjXfdvDZrijuwGUaFgXpe5ghzZ/BE/Ol0OQla5W4BwR+iWOpo/7CvFG0PefceuDbI4PDPoK/aERX0NEAdewCR24HTY0HlamMCItKKIL/Ujz6T/yzQmMvNvhpOg+cILL+PjnYV2S1WwjDgWDXn5+3V3yZ166YRlv3jgFyXh3h/FiWUhfJ/OZPqFbuQ6/F8RBt+rfoFeoz64Pj0NGghoiigLwc9ylRu47awqM8vxkozszMMxzbEwDOGZfjpLxHTPjoz7KJfTY+aojkji6S4MOYgry8uNAUDB2gj/eg1WubovydNiizi09WUtGEYvdvIO0O0XCcMzONTInCYKBIVnlHe+O/PjX7N3H19fv7pBbtvsFJgt9iQghaJHWSqfvl3GRagMD2FkbhTmnbfMEGUT9qpGjUSkSEto/g2uNByLfGWRGISKoD4QEVYyPzkKgZumUQaJ9aByiOrOUQ7EqDsV2UQyK55zrTuOfBBe6wpnAwXfKrLD97HjTjr29sBFtX9pYnTY2jQ9CXoV5cHSyFSAWGYtQ3aOY+cQv2QOZUyJknCRHQdRc5UwYRefAaMzkGFtrvgsi6vdLZxSagp+BIGLGxDiFbyJTAxV/xD8hj/hHlxcGHqeTsOvJXgOSqn+x+qaRBA0IybyNzZecjYGgtyYHCXNrvM+Bc+eoZpTdMgTJAlOjyGJkwv2fINP90LqmmJE9gjzzLynn4qeLhAdg53l49j7SHjY7FHQ0pGv1PKiqWHHAQ6dhbSBTH9rqNWkohbnhmESqswFpJo3VDE3h4+3TfrNerMuB7Ws7LUU22UTP30spTA1upXRUFKFYjO8eYkysrmm7IkVE2rh4jXywgurRPshrSdtEJ2gi6z2R/BUdn0gcsXibp0FaU3juccfVaWNT2mpJD4SDpzyMZswGWxqicRWtwrMojurua4Arm07eQmQeXqvpuRkIoSjVGu8f4pkpJKWab1Q6aOQjeXKaZDZjwbPhmHbIj3RhzsRAwNttVgLcFuwzgEyKqLqJryAC4vbt6rQZ7PMMP0J/cgxZlSZ6fQJMd5WmC6+SM5DoKqkGqrRgyiqNfic8AK0r0/xAbA4OLNMI+Xqd9gRbI7Db2PqcNr8TgkcaiYiS93syA89aaPIsPHeXCNJ83BeCD6roKMcTlXQaYgoMskWDIhfyA9Mr5jEVFrilQnYqRxatlKvRRZ1CRhZL8Fm9dmqEKs5TrlHmab3mN9ICYj882Ku0bSIVOC1XN0+vPvRbzAVYhXKego0y3eOXq9NmSPRWaQ8EBGMBjoYwsqmA1EP3NCUbZdrEQ0ehIi9wLmTE6NEgqelMMK3GvkpSo6/bDCZPajOmX33MHwU3pXwuoPu/AQxi41O+3mbHxY7cuZNl5M8Mos3+sCbp1f2autL/PE/6w+RXD2iJfRsgv80f6cOZ4iBssn/67uT7rDzkiy/r7WPGd64eD7vT3rmCBMPjEHc7sAuK3RULQ8zrlNF/d71kQVVYLPryZFRFcTcpVaF0A++ygGDgvLBVX7wShQG6UZMgD6jtJOOpyyhzGSuXU5UHoXSCIUkGNfbIrYFR/CjREYAGdqTBbDdpX30mAFOd2XRiOrLCPwz0bcQu1wxMAoxsTpoC2LEgjCO55DdGsTClq5aMERNkpbZOtTmQDJTs20rHZzgDpZTYUUyOchNUCblb0qBpcmbV1XRkRfDsD8k23Ir8YQCwRJfr26zoNkZBkDUupLpJh029BZBZtPlZINEPsAHZ8gVL+yJUTEvWwhxsuLXJpTZ0LYofiSy+mAvDe9CbIA2sV0c3rgdBmy+F+yEEpTDNA1jtO+aMPUCgqXEupOmbRkNJ8AjKdNRQCBMM1avs04lE1sOX/RC6Eq80nzC6wv7tNN9P2Oe7z1b+2k/X43QNGAZzr3cVUVvYsogvNmQFvv0w2JAVQdYOBXzDD5pDBGtpzUxobWK6QmtWMHjc1eJetzDgF4JU3RrihjXwAhImDcyNz0AZCjiPUe/Hw4htliSFtU3NdPDy81QM8/ALILx4BXThXwGG89wdhY2w4Cqs0f48kriGb+NI38O3jvTFqwtJEAr+SwsReAkYB5ejGxSJffK6VwwhsdQSKBlFuLqdDfYRdo2+XsbYfHyOT+L14WMph44wUbBrqEQoVepxKoFjarxmDi/yQH8cARLGZC2SoQ1ZEZ6m5dam2LZhN+alhhW7Pq/lUijEVKWxmssmyUr89hMWrtfPMNSDdWtIG0UBD0BWydCWshz/e2O0EXHmG8LaDBzYiC6HAxILdeXxhElgkOjKYPQFe1ueZdpjgdbw7XNMJuUbsAa+Be0z8G08vOrBWwNJMCiJS+vwXJJCGNCGkmEeH+Bzh5jE5w2XHxCiJH77CZ+HYUitfF9rRm6YX28XhyI/FvSrH2b01gM7dw148zHvBX8CwsR6QIxVsSlf9nkQlF714O25wWWtzquHwf6kYEVX1AgG0kuEeQvquW2w2qRH3JtpQgEWqXoLgwJZFnbyWJS21mG3msg//cDLhLnPwzZsU6MsxhpA/sNIehWXxIghm+EUzLinkxnFx5sxLnlew5pZYLKIHx5w1rCN5u3IwC9kmBevrIoce9qwhoCkN4sZkmdmLQzNxCzsQIH0y0zOwIj7SHPzACisO/9eRHTEB6VfeaXKFyGCqSFlnD16wtL9KboEhed+0uhEo+KgpGnRt3t+W0AX9mlnQwaURaqYnDJChLmYfuPn5+fn/wcT8KyIieoAAA==" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.10.0/class_hash/pending.json b/crates/rpc/fixtures/0.10.0/class_hash/pending.json deleted file mode 100644 index 37954f7fb1..0000000000 --- a/crates/rpc/fixtures/0.10.0/class_hash/pending.json +++ /dev/null @@ -1 +0,0 @@ -"0x70656e64696e6720636c61737320302068617368" \ No newline at end of file diff --git a/crates/rpc/fixtures/0.10.0/fee_estimates/declare_deploy_invoke_sierra_0_14_0.json b/crates/rpc/fixtures/0.10.0/fee_estimates/declare_deploy_invoke_sierra_0_14_0.json new file mode 100644 index 0000000000..02a7266730 --- /dev/null +++ b/crates/rpc/fixtures/0.10.0/fee_estimates/declare_deploy_invoke_sierra_0_14_0.json @@ -0,0 +1,42 @@ +[ + { + "l1_data_gas_consumed": "0xc0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x6c9", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0xf12", + "unit": "FRI" + }, + { + "l1_data_gas_consumed": "0xe0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x18", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0x1f0", + "unit": "FRI" + }, + { + "l1_data_gas_consumed": "0x80", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x0", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0xcb4e8", + "l2_gas_price": "0x1", + "overall_fee": "0xcb5e8", + "unit": "FRI" + }, + { + "l1_data_gas_consumed": "0x80", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x0", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0xcb4e8", + "l2_gas_price": "0x1", + "overall_fee": "0xcb5e8", + "unit": "FRI" + } +] diff --git a/crates/rpc/fixtures/0.10.0/fee_estimates/declare_deploy_invoke_sierra_0_14_1.json b/crates/rpc/fixtures/0.10.0/fee_estimates/declare_deploy_invoke_sierra_0_14_1.json new file mode 100644 index 0000000000..02a7266730 --- /dev/null +++ b/crates/rpc/fixtures/0.10.0/fee_estimates/declare_deploy_invoke_sierra_0_14_1.json @@ -0,0 +1,42 @@ +[ + { + "l1_data_gas_consumed": "0xc0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x6c9", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0xf12", + "unit": "FRI" + }, + { + "l1_data_gas_consumed": "0xe0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x18", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0x1f0", + "unit": "FRI" + }, + { + "l1_data_gas_consumed": "0x80", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x0", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0xcb4e8", + "l2_gas_price": "0x1", + "overall_fee": "0xcb5e8", + "unit": "FRI" + }, + { + "l1_data_gas_consumed": "0x80", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x0", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0xcb4e8", + "l2_gas_price": "0x1", + "overall_fee": "0xcb5e8", + "unit": "FRI" + } +] diff --git a/crates/rpc/fixtures/0.9.0/traces/multiple_pending_txs.json b/crates/rpc/fixtures/0.10.0/simulations/declare_and_deploy_integration.json similarity index 54% rename from crates/rpc/fixtures/0.9.0/traces/multiple_pending_txs.json rename to crates/rpc/fixtures/0.10.0/simulations/declare_and_deploy_integration.json index 536c292c92..f360658378 100644 --- a/crates/rpc/fixtures/0.9.0/traces/multiple_pending_txs.json +++ b/crates/rpc/fixtures/0.10.0/simulations/declare_and_deploy_integration.json @@ -1,22 +1,32 @@ [ { - "trace_root": { + "fee_estimation": { + "l1_data_gas_consumed": "0xc0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x7411", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0xe9a2", + "unit": "FRI" + }, + "transaction_trace": { "execution_resources": { "l1_data_gas": 192, - "l1_gas": 878, + "l1_gas": 29713, "l2_gas": 0 }, "fee_transfer_invocation": { "call_type": "CALL", "calldata": [ "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4ee", + "0xe9a2", "0x0" ], "caller_address": "0xc01", "calls": [], "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "contract_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", "entry_point_type": "EXTERNAL", "events": [ @@ -24,7 +34,7 @@ "data": [ "0xc01", "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4ee", + "0xe9a2", "0x0" ], "keys": [ @@ -46,12 +56,13 @@ "state_diff": { "declared_classes": [ { - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "class_hash": "0x51c9d88bbb051d24b9e718392d2a52b034bd825b1cf1011b1971bd316bb8c8e", "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" } ], "deployed_contracts": [], "deprecated_declared_classes": [], + "migrated_compiled_classes": [], "nonces": [ { "contract_address": "0xc01", @@ -61,15 +72,15 @@ "replaced_classes": [], "storage_diffs": [ { - "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", "storage_entries": [ { "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", - "value": "0xfffffffffffffffffffffffffb12" + "value": "0xffffffffffffffffffffffff165e" }, { "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", - "value": "0x4ee" + "value": "0xe9a2" } ] } @@ -79,7 +90,7 @@ "validate_invocation": { "call_type": "CALL", "calldata": [ - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + "0x51c9d88bbb051d24b9e718392d2a52b034bd825b1cf1011b1971bd316bb8c8e" ], "caller_address": "0x0", "calls": [], @@ -98,11 +109,20 @@ "0x56414c4944" ] } - }, - "transaction_hash": "0x548c629e4ee49b5280bb1363288d2e112974beaa2959c96500a9f0cbc41e5ee" + } }, { - "trace_root": { + "fee_estimation": { + "l1_data_gas_consumed": "0xe0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x19", + "l1_gas_price": "0x1", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0x1d9", + "unit": "WEI" + }, + "transaction_trace": { "execute_invocation": { "call_type": "CALL", "calldata": [ @@ -110,7 +130,7 @@ "0xc02", "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", "0x4", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x51c9d88bbb051d24b9e718392d2a52b034bd825b1cf1011b1971bd316bb8c8e", "0x0", "0x0", "0x0" @@ -120,7 +140,7 @@ { "call_type": "CALL", "calldata": [ - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x51c9d88bbb051d24b9e718392d2a52b034bd825b1cf1011b1971bd316bb8c8e", "0x0", "0x0", "0x0" @@ -132,8 +152,8 @@ "calldata": [], "caller_address": "0xc02", "calls": [], - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x51c9d88bbb051d24b9e718392d2a52b034bd825b1cf1011b1971bd316bb8c8e", + "contract_address": "0x53cab7050f44b6a50df4cce805554821902fde6298d839f6036847ec8917802", "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", "entry_point_type": "CONSTRUCTOR", "events": [], @@ -153,10 +173,10 @@ "events": [ { "data": [ - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0x53cab7050f44b6a50df4cce805554821902fde6298d839f6036847ec8917802", "0xc01", "0x0", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x51c9d88bbb051d24b9e718392d2a52b034bd825b1cf1011b1971bd316bb8c8e", "0x0", "0x0" ], @@ -173,7 +193,7 @@ "is_reverted": false, "messages": [], "result": [ - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + "0x53cab7050f44b6a50df4cce805554821902fde6298d839f6036847ec8917802" ] } ], @@ -183,7 +203,7 @@ "entry_point_type": "EXTERNAL", "events": [], "execution_resources": { - "l1_gas": 8, + "l1_gas": 10, "l2_gas": 0 }, "is_reverted": false, @@ -191,19 +211,19 @@ "result": [ "0x1", "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + "0x53cab7050f44b6a50df4cce805554821902fde6298d839f6036847ec8917802" ] }, "execution_resources": { "l1_data_gas": 224, - "l1_gas": 19, + "l1_gas": 25, "l2_gas": 0 }, "fee_transfer_invocation": { "call_type": "CALL", "calldata": [ "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d3", + "0x1d9", "0x0" ], "caller_address": "0xc01", @@ -217,7 +237,7 @@ "data": [ "0xc01", "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d3", + "0x1d9", "0x0" ], "keys": [ @@ -240,11 +260,12 @@ "declared_classes": [], "deployed_contracts": [ { - "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + "address": "0x53cab7050f44b6a50df4cce805554821902fde6298d839f6036847ec8917802", + "class_hash": "0x51c9d88bbb051d24b9e718392d2a52b034bd825b1cf1011b1971bd316bb8c8e" } ], "deprecated_declared_classes": [], + "migrated_compiled_classes": [], "nonces": [ { "contract_address": "0xc01", @@ -258,11 +279,11 @@ "storage_entries": [ { "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", - "value": "0xfffffffffffffffffffffffff93f" + "value": "0xfffffffffffffffffffffffffe27" }, { "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", - "value": "0x6c1" + "value": "0x1d9" } ] } @@ -276,7 +297,7 @@ "0xc02", "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", "0x4", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x51c9d88bbb051d24b9e718392d2a52b034bd825b1cf1011b1971bd316bb8c8e", "0x0", "0x0", "0x0" @@ -289,7 +310,7 @@ "entry_point_type": "EXTERNAL", "events": [], "execution_resources": { - "l1_gas": 1, + "l1_gas": 2, "l2_gas": 0 }, "is_reverted": false, @@ -298,155 +319,6 @@ "0x56414c4944" ] } - }, - "transaction_hash": "0x1cdd84a12e3582bd60acf7546d6e1a54e9706414f28cd3b2ce8a3d2eb5e4f73" - }, - { - "trace_root": { - "execute_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "0x0" - ], - "caller_address": "0x0", - "calls": [ - { - "call_type": "CALL", - "calldata": [], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "entry_point_selector": "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "l1_gas": 1, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x9" - ] - } - ], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "l1_gas": 4, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x1", - "0x1", - "0x9" - ] - }, - "execution_resources": { - "l1_data_gas": 128, - "l1_gas": 14, - "l2_gas": 0 - }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x10e", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x10e", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "l1_gas": 4, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x1" - ] - }, - "state_diff": { - "declared_classes": [], - "deployed_contracts": [], - "deprecated_declared_classes": [], - "nonces": [ - { - "contract_address": "0xc01", - "nonce": "0x3" - } - ], - "replaced_classes": [], - "storage_diffs": [ - { - "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "storage_entries": [ - { - "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", - "value": "0xfffffffffffffffffffffffff831" - }, - { - "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", - "value": "0x7cf" - } - ] - } - ] - }, - "type": "INVOKE", - "validate_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "0x0" - ], - "caller_address": "0x0", - "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "l1_gas": 1, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x56414c4944" - ] - } - }, - "transaction_hash": "0x2a973a52127349ccb6ecd72c31a7b1fc444a526643b4afe8a275a536075cb0e" + } } -] \ No newline at end of file +] diff --git a/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class.json b/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class.json index a5a260b435..b3e40d1734 100644 --- a/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class.json +++ b/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class.json @@ -53,6 +53,39 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb12" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4ee" + } + ] + } + ] + }, "type": "DECLARE", "validate_invocation": { "call_type": "CALL", @@ -223,6 +256,39 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff93f" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6c1" + } + ] + } + ] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -357,6 +423,34 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff831" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x7cf" + } + ] + } + ] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -487,6 +581,34 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x4" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffee4" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x11c" + } + ] + } + ] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -515,4 +637,4 @@ } } } -] \ No newline at end of file +] diff --git a/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json b/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json index ba8d79574b..9df5934e6a 100644 --- a/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json +++ b/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json @@ -53,6 +53,39 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb0f" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4f1" + } + ] + } + ] + }, "type": "DECLARE", "validate_invocation": { "call_type": "CALL", @@ -223,6 +256,39 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff938" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6c8" + } + ] + } + ] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -357,6 +423,34 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffff56d92" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0xa926e" + } + ] + } + ] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", diff --git a/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json b/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json index 7049630f81..dbee08d74c 100644 --- a/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json +++ b/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json @@ -1,388 +1,482 @@ [ - { - "fee_estimation": { - "l1_data_gas_consumed": "0xc0", - "l1_data_gas_price": "0x2", - "l1_gas_consumed": "0x372", - "l1_gas_price": "0x1", - "l2_gas_consumed": "0x0", - "l2_gas_price": "0x1", - "overall_fee": "0x4f2", - "unit": "WEI" + { + "fee_estimation": { + "l1_data_gas_consumed": "0xc0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x372", + "l1_gas_price": "0x1", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0x4f2", + "unit": "WEI" + }, + "transaction_trace": { + "execution_resources": { + "l1_data_gas": 192, + "l1_gas": 882, + "l2_gas": 0 + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x4f2", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x4f2", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "l1_gas": 4, + "l2_gas": 0 }, - "transaction_trace": { - "execution_resources": { - "l1_data_gas": 192, - "l1_gas": 882, - "l2_gas": 0 - }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4f2", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4f2", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "l1_gas": 4, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x1" - ] - }, - "type": "DECLARE", - "validate_invocation": { + "is_reverted": false, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb0e" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4f2" + } + ] + } + ] + }, + "type": "DECLARE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 1, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + }, + { + "fee_estimation": { + "l1_data_gas_consumed": "0xe0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x19", + "l1_gas_price": "0x1", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0x1d9", + "unit": "WEI" + }, + "transaction_trace": { + "execute_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0xc02", + "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "0x4", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0x0", + "calls": [ + { + "call_type": "CALL", + "calldata": [ + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0xc01", + "calls": [ + { "call_type": "CALL", - "calldata": [ - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" - ], - "caller_address": "0x0", + "calldata": [], + "caller_address": "0xc02", "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", - "entry_point_type": "EXTERNAL", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "entry_point_type": "CONSTRUCTOR", "events": [], "execution_resources": { - "l1_gas": 1, - "l2_gas": 0 + "l1_gas": 0, + "l2_gas": 0 }, "is_reverted": false, "messages": [], - "result": [ - "0x56414c4944" - ] - } - } - }, - { - "fee_estimation": { - "l1_data_gas_consumed": "0xe0", - "l1_data_gas_price": "0x2", - "l1_gas_consumed": "0x19", - "l1_gas_price": "0x1", - "l2_gas_consumed": "0x0", - "l2_gas_price": "0x1", - "overall_fee": "0x1d9", - "unit": "WEI" - }, - "transaction_trace": { - "execute_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0xc02", - "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "0x4", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" + "result": [] + } + ], + "class_hash": "0x6f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc", + "contract_address": "0xc02", + "entry_point_selector": "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0xc01", + "0x0", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0" ], - "caller_address": "0x0", - "calls": [ - { - "call_type": "CALL", - "calldata": [ - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0xc01", - "calls": [ - { - "call_type": "CALL", - "calldata": [], - "caller_address": "0xc02", - "calls": [], - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", - "entry_point_type": "CONSTRUCTOR", - "events": [], - "execution_resources": { - "l1_gas": 0, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [] - } - ], - "class_hash": "0x6f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc", - "contract_address": "0xc02", - "entry_point_selector": "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0xc01", - "0x0", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0" - ], - "keys": [ - "0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d" - ], - "order": 0 - } - ], - "execution_resources": { - "l1_gas": 5, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" - ] - } + "keys": [ + "0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d" ], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "l1_gas": 10, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x1", - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" - ] - }, + "order": 0 + } + ], "execution_resources": { - "l1_data_gas": 224, - "l1_gas": 25, - "l2_gas": 0 + "l1_gas": 5, + "l2_gas": 0 }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d9", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d9", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "l1_gas": 4, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x1" - ] - }, - "type": "INVOKE", - "validate_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0xc02", - "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "0x4", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0x0", - "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "l1_gas": 2, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x56414c4944" - ] - } - } - }, - { - "fee_estimation": { - "l1_data_gas_consumed": "0x80", - "l1_data_gas_price": "0x2", - "l1_gas_consumed": "0x0", - "l1_gas_price": "0x2", - "l2_gas_consumed": "0xc7eae", - "l2_gas_price": "0x1", - "overall_fee": "0xc7fae", - "unit": "FRI" + "is_reverted": false, + "messages": [], + "result": [ + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + ] + } + ], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 10, + "l2_gas": 0 }, - "transaction_trace": { - "execute_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "0x0" - ], - "caller_address": "0x0", - "calls": [ - { - "call_type": "CALL", - "calldata": [], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "entry_point_selector": "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "l1_gas": 0, - "l2_gas": 40000 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x9" - ] - } - ], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "l1_gas": 0, - "l2_gas": 201160 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x1", - "0x1", - "0x9" - ] - }, + "is_reverted": false, + "messages": [], + "result": [ + "0x1", + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + ] + }, + "execution_resources": { + "l1_data_gas": 224, + "l1_gas": 25, + "l2_gas": 0 + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x1d9", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x1d9", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "l1_gas": 4, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff935" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6cb" + } + ] + } + ] + }, + "type": "INVOKE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0xc02", + "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "0x4", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 2, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + }, + { + "fee_estimation": { + "l1_data_gas_consumed": "0x80", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x0", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0xc7eae", + "l2_gas_price": "0x1", + "overall_fee": "0xc7fae", + "unit": "FRI" + }, + "transaction_trace": { + "execute_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "0x0" + ], + "caller_address": "0x0", + "calls": [ + { + "call_type": "CALL", + "calldata": [], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "entry_point_selector": "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "entry_point_type": "EXTERNAL", + "events": [], "execution_resources": { - "l1_data_gas": 128, - "l1_gas": 0, - "l2_gas": 744420 - }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0xb5ce4", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0xb5ce4", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "l1_gas": 0, - "l2_gas": 190720 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x1" - ] + "l1_gas": 0, + "l2_gas": 40000 }, - "type": "INVOKE", - "validate_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "0x0" - ], - "caller_address": "0x0", - "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "l1_gas": 0, - "l2_gas": 42780 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x56414c4944" - ] - } - } + "is_reverted": false, + "messages": [], + "result": [ + "0x9" + ] + } + ], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 0, + "l2_gas": 201160 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x1", + "0x1", + "0x9" + ] + }, + "execution_resources": { + "l1_data_gas": 128, + "l1_gas": 0, + "l2_gas": 744420 + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xb5ce4", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xb5ce4", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "l1_gas": 0, + "l2_gas": 190720 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffff4a31c" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0xb5ce4" + } + ] + } + ] + }, + "type": "INVOKE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "0x0" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 0, + "l2_gas": 42780 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x56414c4944" + ] + } } + } ] diff --git a/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_fee_charge.json b/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_fee_charge.json index 8c52825f1c..9e539305be 100644 --- a/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_fee_charge.json +++ b/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_fee_charge.json @@ -16,6 +16,25 @@ "l1_gas": 878, "l2_gas": 0 }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [] + }, "type": "DECLARE", "validate_invocation": { "call_type": "CALL", @@ -149,6 +168,25 @@ "l1_gas": 19, "l2_gas": 0 }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -246,6 +284,20 @@ "l1_gas": 14, "l2_gas": 0 }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -339,6 +391,20 @@ "l1_gas": 14, "l2_gas": 0 }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x4" + } + ], + "replaced_classes": [], + "storage_diffs": [] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -367,4 +433,4 @@ } } } -] \ No newline at end of file +] diff --git a/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_validate.json b/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_validate.json index 6ab3815878..b95aa3eba9 100644 --- a/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_validate.json +++ b/crates/rpc/fixtures/0.10.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_validate.json @@ -53,6 +53,39 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb12" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4ee" + } + ] + } + ] + }, "type": "DECLARE" } }, @@ -201,6 +234,39 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff940" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6c0" + } + ] + } + ] + }, "type": "INVOKE" } }, @@ -306,6 +372,34 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff833" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x7cd" + } + ] + } + ] + }, "type": "INVOKE" } }, @@ -411,7 +505,35 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x4" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffee6" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x11a" + } + ] + } + ] + }, "type": "INVOKE" } } -] \ No newline at end of file +] diff --git a/crates/rpc/fixtures/0.10.0/simulations/simulate_transaction.json b/crates/rpc/fixtures/0.10.0/simulations/simulate_transaction.json new file mode 100644 index 0000000000..fa982b532f --- /dev/null +++ b/crates/rpc/fixtures/0.10.0/simulations/simulate_transaction.json @@ -0,0 +1,112 @@ +[ + { + "fee_estimation": { + "l1_data_gas_consumed": "0x160", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x15", + "l1_gas_price": "0x1", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0x2d5", + "unit": "WEI" + }, + "transaction_trace": { + "constructor_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "entry_point_type": "CONSTRUCTOR", + "events": [ + { + "data": [], + "keys": [ + "0x38f6a5b87c23cee6e7294bcc3302e95019f70f81586ff3cac38581f5ca96381", + "0x1" + ], + "order": 0 + } + ], + "execution_resources": { + "l1_gas": 2, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [] + }, + "execution_resources": { + "l1_data_gas": 352, + "l1_gas": 21, + "l2_gas": 0 + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978" + } + ], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "storage_entries": [ + { + "key": "0x81ba5d1f84a6a8f0e7ae24720a20f43f81d9ee6eed98fd524ba8d53a49416b", + "value": "0x1" + }, + { + "key": "0x1379ac0624b939ceb9dede92211d7db5ee174fe28be72245b0a1a2abd81c98f", + "value": "0x1" + }, + { + "key": "0x7e79bbb6be5d418acd50c88b675e697f6f7094e203c9d7e29c6ad6731f931dd", + "value": "0x1" + } + ] + } + ] + }, + "type": "DEPLOY_ACCOUNT", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "0x46c0d4abf0192a788aca261e58d7031576f7d8ea5229f452b0f23e691dd5971", + "0x1" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "entry_point_selector": "0x36fcbf06cd96843058359e1a75928beacfac10727dab22a3972f0af8aa92895", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 1, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + } +] diff --git a/crates/rpc/fixtures/0.10.0/simulations/simulate_transaction_with_return_initial_reads.json b/crates/rpc/fixtures/0.10.0/simulations/simulate_transaction_with_return_initial_reads.json new file mode 100644 index 0000000000..3dd620cd1c --- /dev/null +++ b/crates/rpc/fixtures/0.10.0/simulations/simulate_transaction_with_return_initial_reads.json @@ -0,0 +1,151 @@ +{ + "initial_reads": { + "class_hashes": [ + { + "class_hash": "0x0", + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232" + } + ], + "declared_contracts": [ + { + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "is_declared": true + } + ], + "nonces": [ + { + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "nonce": "0x0" + } + ], + "storage": [ + { + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "key": "0x81ba5d1f84a6a8f0e7ae24720a20f43f81d9ee6eed98fd524ba8d53a49416b", + "value": "0x0" + }, + { + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "key": "0x1379ac0624b939ceb9dede92211d7db5ee174fe28be72245b0a1a2abd81c98f", + "value": "0x0" + }, + { + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "key": "0x7e79bbb6be5d418acd50c88b675e697f6f7094e203c9d7e29c6ad6731f931dd", + "value": "0x0" + } + ] + }, + "simulated_transactions": [ + { + "fee_estimation": { + "l1_data_gas_consumed": "0x160", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x15", + "l1_gas_price": "0x1", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0x2d5", + "unit": "WEI" + }, + "transaction_trace": { + "constructor_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "entry_point_type": "CONSTRUCTOR", + "events": [ + { + "data": [], + "keys": [ + "0x38f6a5b87c23cee6e7294bcc3302e95019f70f81586ff3cac38581f5ca96381", + "0x1" + ], + "order": 0 + } + ], + "execution_resources": { + "l1_gas": 2, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [] + }, + "execution_resources": { + "l1_data_gas": 352, + "l1_gas": 21, + "l2_gas": 0 + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978" + } + ], + "deprecated_declared_classes": [], + "migrated_compiled_classes": [], + "nonces": [ + { + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "storage_entries": [ + { + "key": "0x81ba5d1f84a6a8f0e7ae24720a20f43f81d9ee6eed98fd524ba8d53a49416b", + "value": "0x1" + }, + { + "key": "0x1379ac0624b939ceb9dede92211d7db5ee174fe28be72245b0a1a2abd81c98f", + "value": "0x1" + }, + { + "key": "0x7e79bbb6be5d418acd50c88b675e697f6f7094e203c9d7e29c6ad6731f931dd", + "value": "0x1" + } + ] + } + ] + }, + "type": "DEPLOY_ACCOUNT", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "0x46c0d4abf0192a788aca261e58d7031576f7d8ea5229f452b0f23e691dd5971", + "0x1" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "entry_point_selector": "0x36fcbf06cd96843058359e1a75928beacfac10727dab22a3972f0af8aa92895", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 1, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + } + ] +} diff --git a/crates/rpc/fixtures/0.10.0/storage_at/latest.json b/crates/rpc/fixtures/0.10.0/storage_at/latest.json new file mode 100644 index 0000000000..8753a884df --- /dev/null +++ b/crates/rpc/fixtures/0.10.0/storage_at/latest.json @@ -0,0 +1 @@ +"0x73746f726167652076616c75652032" diff --git a/crates/rpc/fixtures/0.10.0/storage_at/latest_with_update_block.json b/crates/rpc/fixtures/0.10.0/storage_at/latest_with_update_block.json new file mode 100644 index 0000000000..b12680db58 --- /dev/null +++ b/crates/rpc/fixtures/0.10.0/storage_at/latest_with_update_block.json @@ -0,0 +1,4 @@ +{ + "last_update_block": 2, + "value": "0x73746f726167652076616c75652032" +} diff --git a/crates/rpc/fixtures/0.10.0/traces/multiple_pending_txs.json b/crates/rpc/fixtures/0.10.0/traces/multiple_pre_confirmed_txs.json similarity index 96% rename from crates/rpc/fixtures/0.10.0/traces/multiple_pending_txs.json rename to crates/rpc/fixtures/0.10.0/traces/multiple_pre_confirmed_txs.json index 5c745002ac..20bbbb8683 100644 --- a/crates/rpc/fixtures/0.10.0/traces/multiple_pending_txs.json +++ b/crates/rpc/fixtures/0.10.0/traces/multiple_pre_confirmed_txs.json @@ -3,14 +3,14 @@ "trace_root": { "execution_resources": { "l1_data_gas": 192, - "l1_gas": 878, + "l1_gas": 882, "l2_gas": 0 }, "fee_transfer_invocation": { "call_type": "CALL", "calldata": [ "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4ee", + "0x4f2", "0x0" ], "caller_address": "0xc01", @@ -24,7 +24,7 @@ "data": [ "0xc01", "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4ee", + "0x4f2", "0x0" ], "keys": [ @@ -50,9 +50,9 @@ "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" } ], - "migrated_compiled_classes": [], "deployed_contracts": [], "deprecated_declared_classes": [], + "migrated_compiled_classes": [], "nonces": [ { "contract_address": "0xc01", @@ -66,11 +66,11 @@ "storage_entries": [ { "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", - "value": "0xfffffffffffffffffffffffffb12" + "value": "0xfffffffffffffffffffffffffb0e" }, { "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", - "value": "0x4ee" + "value": "0x4f2" } ] } @@ -184,7 +184,7 @@ "entry_point_type": "EXTERNAL", "events": [], "execution_resources": { - "l1_gas": 8, + "l1_gas": 10, "l2_gas": 0 }, "is_reverted": false, @@ -197,14 +197,14 @@ }, "execution_resources": { "l1_data_gas": 224, - "l1_gas": 19, + "l1_gas": 25, "l2_gas": 0 }, "fee_transfer_invocation": { "call_type": "CALL", "calldata": [ "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d3", + "0x1d9", "0x0" ], "caller_address": "0xc01", @@ -218,7 +218,7 @@ "data": [ "0xc01", "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d3", + "0x1d9", "0x0" ], "keys": [ @@ -239,7 +239,6 @@ }, "state_diff": { "declared_classes": [], - "migrated_compiled_classes": [], "deployed_contracts": [ { "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", @@ -247,6 +246,7 @@ } ], "deprecated_declared_classes": [], + "migrated_compiled_classes": [], "nonces": [ { "contract_address": "0xc01", @@ -260,11 +260,11 @@ "storage_entries": [ { "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", - "value": "0xfffffffffffffffffffffffff93f" + "value": "0xfffffffffffffffffffffffff935" }, { "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", - "value": "0x6c1" + "value": "0x6cb" } ] } @@ -291,7 +291,7 @@ "entry_point_type": "EXTERNAL", "events": [], "execution_resources": { - "l1_gas": 1, + "l1_gas": 2, "l2_gas": 0 }, "is_reverted": false, @@ -342,7 +342,7 @@ "entry_point_type": "EXTERNAL", "events": [], "execution_resources": { - "l1_gas": 4, + "l1_gas": 6, "l2_gas": 0 }, "is_reverted": false, @@ -355,14 +355,14 @@ }, "execution_resources": { "l1_data_gas": 128, - "l1_gas": 14, + "l1_gas": 19, "l2_gas": 0 }, "fee_transfer_invocation": { "call_type": "CALL", "calldata": [ "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x10e", + "0x113", "0x0" ], "caller_address": "0xc01", @@ -376,7 +376,7 @@ "data": [ "0xc01", "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x10e", + "0x113", "0x0" ], "keys": [ @@ -397,9 +397,9 @@ }, "state_diff": { "declared_classes": [], - "migrated_compiled_classes": [], "deployed_contracts": [], "deprecated_declared_classes": [], + "migrated_compiled_classes": [], "nonces": [ { "contract_address": "0xc01", @@ -413,11 +413,11 @@ "storage_entries": [ { "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", - "value": "0xfffffffffffffffffffffffff831" + "value": "0xfffffffffffffffffffffffff822" }, { "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", - "value": "0x7cf" + "value": "0x7de" } ] } @@ -440,7 +440,7 @@ "entry_point_type": "EXTERNAL", "events": [], "execution_resources": { - "l1_gas": 1, + "l1_gas": 2, "l2_gas": 0 }, "is_reverted": false, diff --git a/crates/rpc/fixtures/0.10.0/traces/multiple_txs.json b/crates/rpc/fixtures/0.10.0/traces/multiple_txs.json index 5c745002ac..5ba25215d5 100644 --- a/crates/rpc/fixtures/0.10.0/traces/multiple_txs.json +++ b/crates/rpc/fixtures/0.10.0/traces/multiple_txs.json @@ -39,9 +39,7 @@ }, "is_reverted": false, "messages": [], - "result": [ - "0x1" - ] + "result": ["0x1"] }, "state_diff": { "declared_classes": [ @@ -95,9 +93,7 @@ }, "is_reverted": false, "messages": [], - "result": [ - "0x56414c4944" - ] + "result": ["0x56414c4944"] } }, "transaction_hash": "0x548c629e4ee49b5280bb1363288d2e112974beaa2959c96500a9f0cbc41e5ee" @@ -233,9 +229,7 @@ }, "is_reverted": false, "messages": [], - "result": [ - "0x1" - ] + "result": ["0x1"] }, "state_diff": { "declared_classes": [], @@ -296,9 +290,7 @@ }, "is_reverted": false, "messages": [], - "result": [ - "0x56414c4944" - ] + "result": ["0x56414c4944"] } }, "transaction_hash": "0x1cdd84a12e3582bd60acf7546d6e1a54e9706414f28cd3b2ce8a3d2eb5e4f73" @@ -331,9 +323,7 @@ }, "is_reverted": false, "messages": [], - "result": [ - "0x9" - ] + "result": ["0x9"] } ], "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", @@ -347,11 +337,7 @@ }, "is_reverted": false, "messages": [], - "result": [ - "0x1", - "0x1", - "0x9" - ] + "result": ["0x1", "0x1", "0x9"] }, "execution_resources": { "l1_data_gas": 128, @@ -391,9 +377,7 @@ }, "is_reverted": false, "messages": [], - "result": [ - "0x1" - ] + "result": ["0x1"] }, "state_diff": { "declared_classes": [], @@ -445,9 +429,7 @@ }, "is_reverted": false, "messages": [], - "result": [ - "0x56414c4944" - ] + "result": ["0x56414c4944"] } }, "transaction_hash": "0x2a973a52127349ccb6ecd72c31a7b1fc444a526643b4afe8a275a536075cb0e" diff --git a/crates/rpc/fixtures/0.10.0/traces/multiple_txs_with_initial_reads.json b/crates/rpc/fixtures/0.10.0/traces/multiple_txs_with_initial_reads.json new file mode 100644 index 0000000000..166112d73e --- /dev/null +++ b/crates/rpc/fixtures/0.10.0/traces/multiple_txs_with_initial_reads.json @@ -0,0 +1,515 @@ +{ + "traces": [ + { + "trace_root": { + "execution_resources": { + "l1_data_gas": 192, + "l1_gas": 878, + "l2_gas": 0 + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x4ee", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x4ee", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "l1_gas": 4, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": ["0x1"] + }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "migrated_compiled_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb12" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4ee" + } + ] + } + ] + }, + "type": "DECLARE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 1, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": ["0x56414c4944"] + } + }, + "transaction_hash": "0x548c629e4ee49b5280bb1363288d2e112974beaa2959c96500a9f0cbc41e5ee" + }, + { + "trace_root": { + "execute_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0xc02", + "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "0x4", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0x0", + "calls": [ + { + "call_type": "CALL", + "calldata": [ + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0xc01", + "calls": [ + { + "call_type": "CALL", + "calldata": [], + "caller_address": "0xc02", + "calls": [], + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "entry_point_type": "CONSTRUCTOR", + "events": [], + "execution_resources": { + "l1_gas": 0, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [] + } + ], + "class_hash": "0x6f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc", + "contract_address": "0xc02", + "entry_point_selector": "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0xc01", + "0x0", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0" + ], + "keys": [ + "0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d" + ], + "order": 0 + } + ], + "execution_resources": { + "l1_gas": 5, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + ] + } + ], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 8, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x1", + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + ] + }, + "execution_resources": { + "l1_data_gas": 224, + "l1_gas": 19, + "l2_gas": 0 + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x1d3", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x1d3", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "l1_gas": 4, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": ["0x1"] + }, + "state_diff": { + "declared_classes": [], + "migrated_compiled_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff93f" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6c1" + } + ] + } + ] + }, + "type": "INVOKE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0xc02", + "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "0x4", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 1, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": ["0x56414c4944"] + } + }, + "transaction_hash": "0x1cdd84a12e3582bd60acf7546d6e1a54e9706414f28cd3b2ce8a3d2eb5e4f73" + }, + { + "trace_root": { + "execute_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "0x0" + ], + "caller_address": "0x0", + "calls": [ + { + "call_type": "CALL", + "calldata": [], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "entry_point_selector": "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 1, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": ["0x9"] + } + ], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 4, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": ["0x1", "0x1", "0x9"] + }, + "execution_resources": { + "l1_data_gas": 128, + "l1_gas": 14, + "l2_gas": 0 + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x10e", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x10e", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "l1_gas": 4, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": ["0x1"] + }, + "state_diff": { + "declared_classes": [], + "migrated_compiled_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff831" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x7cf" + } + ] + } + ] + }, + "type": "INVOKE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "0x0" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 1, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": ["0x56414c4944"] + } + }, + "transaction_hash": "0x2a973a52127349ccb6ecd72c31a7b1fc444a526643b4afe8a275a536075cb0e" + } + ], + "initial_reads": { + "class_hashes": [ + { + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01" + }, + { + "class_hash": "0x6f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc", + "contract_address": "0xc02" + }, + { + "class_hash": "0x0", + "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + }, + { + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7" + } + ], + "declared_contracts": [ + { + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "is_declared": true + }, + { + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "is_declared": true + }, + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "is_declared": false + }, + { + "class_hash": "0x6f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc", + "is_declared": true + } + ], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x0" + } + ], + "storage": [ + { + "contract_address": "0xc01", + "key": "0x1379ac0624b939ceb9dede92211d7db5ee174fe28be72245b0a1a2abd81c98f", + "value": "0x0" + }, + { + "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "key": "0x1275130f95dda36bcbb6e9d28796c1d7e10b6e9fd5ed083e0ede4b12f613528", + "value": "0x9" + }, + { + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0x10000000000000000000000000000" + }, + { + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408f", + "value": "0x0" + }, + { + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x0" + }, + { + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9b", + "value": "0x0" + } + ] + } +} diff --git a/crates/rpc/fixtures/0.10.0/transactions/receipt_pending.json b/crates/rpc/fixtures/0.10.0/transactions/receipt_pending.json deleted file mode 100644 index 72d734c927..0000000000 --- a/crates/rpc/fixtures/0.10.0/transactions/receipt_pending.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "actual_fee": { - "amount": "0x0", - "unit": "WEI" - }, - "block_number": 3, - "events": [ - { - "data": [], - "from_address": "0xabcddddddd", - "keys": [ - "0x70656e64696e67206b6579" - ] - }, - { - "data": [], - "from_address": "0xabcddddddd", - "keys": [ - "0x70656e64696e67206b6579", - "0x7365636f6e642070656e64696e67206b6579" - ] - }, - { - "data": [], - "from_address": "0xabcaaaaaaa", - "keys": [ - "0x70656e64696e67206b65792032" - ] - } - ], - "execution_resources": { - "l1_data_gas": 0, - "l1_gas": 0, - "l2_gas": 0 - }, - "execution_status": "SUCCEEDED", - "finality_status": "ACCEPTED_ON_L2", - "messages_sent": [], - "transaction_hash": "0x70656e64696e6720747820686173682030", - "type": "INVOKE" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.10.0/transactions/receipt_pre_latest.json b/crates/rpc/fixtures/0.10.0/transactions/receipt_pre_latest.json index 34c738fb15..3d63b03f53 100644 --- a/crates/rpc/fixtures/0.10.0/transactions/receipt_pre_latest.json +++ b/crates/rpc/fixtures/0.10.0/transactions/receipt_pre_latest.json @@ -30,7 +30,7 @@ "l2_gas": 0 }, "execution_status": "SUCCEEDED", - "finality_status": "ACCEPTED_ON_L2", + "finality_status": "PRE_CONFIRMED", "messages_sent": [], "transaction_hash": "0x7072656c617465737420747820686173682030", "type": "INVOKE" diff --git a/crates/rpc/fixtures/0.10.0/transactions/receipt_reverted_pending.json b/crates/rpc/fixtures/0.10.0/transactions/receipt_reverted_preconfirmed.json similarity index 72% rename from crates/rpc/fixtures/0.10.0/transactions/receipt_reverted_pending.json rename to crates/rpc/fixtures/0.10.0/transactions/receipt_reverted_preconfirmed.json index d8f7f78820..ea3d80fd11 100644 --- a/crates/rpc/fixtures/0.10.0/transactions/receipt_reverted_pending.json +++ b/crates/rpc/fixtures/0.10.0/transactions/receipt_reverted_preconfirmed.json @@ -11,9 +11,9 @@ "l2_gas": 0 }, "execution_status": "REVERTED", - "finality_status": "ACCEPTED_ON_L2", + "finality_status": "PRE_CONFIRMED", "messages_sent": [], "revert_reason": "Reverted!", - "transaction_hash": "0x70656e64696e67207265766572746564", + "transaction_hash": "0x707265636f6e6669726d6564207265766572746564", "type": "INVOKE" -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/0.10.0/transactions/status_pending.json b/crates/rpc/fixtures/0.10.0/transactions/status_pending.json deleted file mode 100644 index 8cfefa0492..0000000000 --- a/crates/rpc/fixtures/0.10.0/transactions/status_pending.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "execution_status": "SUCCEEDED", - "finality_status": "ACCEPTED_ON_L2" -} diff --git a/crates/rpc/fixtures/0.10.0/transactions/status_pre_latest.json b/crates/rpc/fixtures/0.10.0/transactions/status_pre_latest.json index 8cfefa0492..40cf8fdd9a 100644 --- a/crates/rpc/fixtures/0.10.0/transactions/status_pre_latest.json +++ b/crates/rpc/fixtures/0.10.0/transactions/status_pre_latest.json @@ -1,4 +1,4 @@ { "execution_status": "SUCCEEDED", - "finality_status": "ACCEPTED_ON_L2" + "finality_status": "PRE_CONFIRMED" } diff --git a/crates/rpc/fixtures/0.10.0/transactions/status_reverted.json b/crates/rpc/fixtures/0.10.0/transactions/status_reverted.json index 845486464e..a8e59987d1 100644 --- a/crates/rpc/fixtures/0.10.0/transactions/status_reverted.json +++ b/crates/rpc/fixtures/0.10.0/transactions/status_reverted.json @@ -1,5 +1,5 @@ { "execution_status": "REVERTED", "failure_reason": "Reverted!", - "finality_status": "ACCEPTED_ON_L2" + "finality_status": "PRE_CONFIRMED" } diff --git a/crates/rpc/fixtures/0.10.0/transactions/txn_pending_reverted.json b/crates/rpc/fixtures/0.10.0/transactions/txn_pending_reverted.json deleted file mode 100644 index fb92c2312d..0000000000 --- a/crates/rpc/fixtures/0.10.0/transactions/txn_pending_reverted.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "transaction_hash": "0x70656e64696e67207265766572746564", - "type": "INVOKE", - "version": "0x0" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.6.0/transactions/txn_pending_hash_0.json b/crates/rpc/fixtures/0.10.0/transactions/txn_preconfirmed_reverted.json similarity index 50% rename from crates/rpc/fixtures/0.6.0/transactions/txn_pending_hash_0.json rename to crates/rpc/fixtures/0.10.0/transactions/txn_preconfirmed_reverted.json index 625b3fe314..af98031fc1 100644 --- a/crates/rpc/fixtures/0.6.0/transactions/txn_pending_hash_0.json +++ b/crates/rpc/fixtures/0.10.0/transactions/txn_preconfirmed_reverted.json @@ -1,10 +1,10 @@ { "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", + "contract_address": "0x707265636f6e6669726d656420636f6e747261637420616464722030", "entry_point_selector": "0x656e74727920706f696e742030", "max_fee": "0x0", "signature": [], - "transaction_hash": "0x70656e64696e6720747820686173682030", + "transaction_hash": "0x707265636f6e6669726d6564207265766572746564", "type": "INVOKE", "version": "0x0" -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/0.6.0/blocks/latest.json b/crates/rpc/fixtures/0.6.0/blocks/latest.json index f1f8ab20df..264f53cd6f 100644 --- a/crates/rpc/fixtures/0.6.0/blocks/latest.json +++ b/crates/rpc/fixtures/0.6.0/blocks/latest.json @@ -1,205 +1,181 @@ { - "block_hash":"0x6c6174657374", - "block_number":2, - "l1_gas_price":{ - "price_in_fri":"0x0", - "price_in_wei":"0x2" + "block_hash": "0x6c6174657374", + "block_number": 2, + "l1_gas_price": { + "price_in_fri": "0x0", + "price_in_wei": "0x2" }, - "new_root":"0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", - "parent_hash":"0x626c6f636b2031", - "sequencer_address":"0x2", - "starknet_version":"", - "status":"ACCEPTED_ON_L2", - "timestamp":2, - "transactions":[ + "new_root": "0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", + "parent_hash": "0x626c6f636b2031", + "sequencer_address": "0x2", + "starknet_version": "0.13.2", + "status": "ACCEPTED_ON_L2", + "timestamp": 2, + "transactions": [ { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "memory_holes":5, - "pedersen_builtin_applications":32, - "steps":10 + "events": [], + "execution_resources": { + "memory_holes": 5, + "pedersen_builtin_applications": 32, + "steps": 10 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x74786e2033", - "type":"INVOKE" + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "transaction_hash": "0x74786e2033", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x636f6e74726163742031", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "type": "INVOKE", + "version": "0x0" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "memory_holes":5, - "pedersen_builtin_applications":32, - "steps":10 + "events": [], + "execution_resources": { + "memory_holes": 5, + "pedersen_builtin_applications": 32, + "steps": 10 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x74786e2034", - "type":"INVOKE" + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "transaction_hash": "0x74786e2034", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x0", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x0", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "type": "INVOKE", + "version": "0x0" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "memory_holes":5, - "pedersen_builtin_applications":32, - "steps":10 + "events": [], + "execution_resources": { + "memory_holes": 5, + "pedersen_builtin_applications": 32, + "steps": 10 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x74786e2035", - "type":"INVOKE" + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "transaction_hash": "0x74786e2035", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x636f6e74726163742031", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "type": "INVOKE", + "version": "0x0" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "FRI" }, - "events":[ - - ], - "execution_resources":{ - "memory_holes":5, - "pedersen_builtin_applications":32, - "steps":10 + "events": [], + "execution_resources": { + "memory_holes": 5, + "pedersen_builtin_applications": 32, + "steps": 10 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [ { - "from_address":"0xcafebabe", - "payload":[ + "from_address": "0xcafebabe", + "payload": [ "0x1", "0x2", "0x3" ], - "to_address":"0x0" + "to_address": "0x0" } ], - "transaction_hash":"0x74786e2036", - "type":"INVOKE" + "transaction_hash": "0x74786e2036", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "account_deployment_data": [], + "calldata": [], + "fee_data_availability_mode": "L1", + "nonce": "0x0", + "nonce_data_availability_mode": "L1", + "paymaster_data": [], + "resource_bounds": { + "l1_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l2_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "sender_address": "0x636f6e74726163742032202873696572726129", + "signature": [], + "tip": "0x0", + "type": "INVOKE", + "version": "0x3" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "memory_holes":5, - "pedersen_builtin_applications":32, - "steps":10 + "events": [], + "execution_resources": { + "memory_holes": 5, + "pedersen_builtin_applications": 32, + "steps": 10 }, - "execution_status":"REVERTED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "revert_reason":"Reverted because", - "transaction_hash":"0x74786e207265766572746564", - "type":"INVOKE" + "execution_status": "REVERTED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "revert_reason": "Reverted because", + "transaction_hash": "0x74786e207265766572746564", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x636f6e74726163742031", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "type": "INVOKE", + "version": "0x0" } } ] -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/0.6.0/blocks/latest_with_tx_hashes.json b/crates/rpc/fixtures/0.6.0/blocks/latest_with_tx_hashes.json index 87b02c2387..1942e14e27 100644 --- a/crates/rpc/fixtures/0.6.0/blocks/latest_with_tx_hashes.json +++ b/crates/rpc/fixtures/0.6.0/blocks/latest_with_tx_hashes.json @@ -8,7 +8,7 @@ "new_root": "0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", "parent_hash": "0x626c6f636b2031", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", "status": "ACCEPTED_ON_L2", "timestamp": 2, "transactions": [ @@ -18,4 +18,4 @@ "0x74786e2036", "0x74786e207265766572746564" ] -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/0.6.0/blocks/latest_with_txs.json b/crates/rpc/fixtures/0.6.0/blocks/latest_with_txs.json index 8151f4cbfb..c6bd49d823 100644 --- a/crates/rpc/fixtures/0.6.0/blocks/latest_with_txs.json +++ b/crates/rpc/fixtures/0.6.0/blocks/latest_with_txs.json @@ -8,7 +8,7 @@ "new_root": "0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", "parent_hash": "0x626c6f636b2031", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", "status": "ACCEPTED_ON_L2", "timestamp": 2, "transactions": [ @@ -43,14 +43,28 @@ "version": "0x0" }, { + "account_deployment_data": [], "calldata": [], - "contract_address": "0x636f6e74726163742031", - "entry_point_selector": "0x0", - "max_fee": "0x0", + "fee_data_availability_mode": "L1", + "nonce": "0x0", + "nonce_data_availability_mode": "L1", + "paymaster_data": [], + "resource_bounds": { + "l1_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l2_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "sender_address": "0x636f6e74726163742032202873696572726129", "signature": [], + "tip": "0x0", "transaction_hash": "0x74786e2036", "type": "INVOKE", - "version": "0x0" + "version": "0x3" }, { "calldata": [], @@ -63,4 +77,4 @@ "version": "0x0" } ] -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/0.6.0/blocks/pending.json b/crates/rpc/fixtures/0.6.0/blocks/pending.json deleted file mode 100644 index 78a35b0b2b..0000000000 --- a/crates/rpc/fixtures/0.6.0/blocks/pending.json +++ /dev/null @@ -1,139 +0,0 @@ -{ - "l1_gas_price":{ - "price_in_fri":"0x7374726b20676173207072696365", - "price_in_wei":"0x676173207072696365" - }, - "parent_hash":"0x6c6174657374", - "sequencer_address":"0x70656e64696e672073657175656e6365722061646472657373", - "starknet_version":"0.11.0", - "timestamp":1234567, - "transactions":[ - { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" - }, - "events":[ - { - "data":[ - - ], - "from_address":"0xabcddddddd", - "keys":[ - "0x70656e64696e67206b6579" - ] - }, - { - "data":[ - - ], - "from_address":"0xabcddddddd", - "keys":[ - "0x70656e64696e67206b6579", - "0x7365636f6e642070656e64696e67206b6579" - ] - }, - { - "data":[ - - ], - "from_address":"0xabcaaaaaaa", - "keys":[ - "0x70656e64696e67206b65792032" - ] - } - ], - "execution_resources":{ - "steps":0 - }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x70656e64696e6720747820686173682030", - "type":"INVOKE" - }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector":"0x656e74727920706f696e742030", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" - } - }, - { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" - }, - "contract_address":"0x1122355", - "events":[ - - ], - "execution_resources":{ - "steps":0 - }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x70656e64696e6720747820686173682031", - "type":"DEPLOY" - }, - "transaction":{ - "class_hash":"0x70656e64696e6720636c61737320686173682031", - "constructor_calldata":[ - - ], - "contract_address_salt":"0x73616c7479", - "type":"DEPLOY", - "version":"0x0" - } - }, - { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" - }, - "events":[ - - ], - "execution_resources":{ - "steps":0 - }, - "execution_status":"REVERTED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "revert_reason":"Reverted!", - "transaction_hash":"0x70656e64696e67207265766572746564", - "type":"INVOKE" - }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector":"0x656e74727920706f696e742030", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" - } - } - ] -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.6.0/blocks/pending_with_tx_hashes.json b/crates/rpc/fixtures/0.6.0/blocks/pending_with_tx_hashes.json deleted file mode 100644 index 8534be5560..0000000000 --- a/crates/rpc/fixtures/0.6.0/blocks/pending_with_tx_hashes.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "l1_gas_price": { - "price_in_fri": "0x7374726b20676173207072696365", - "price_in_wei": "0x676173207072696365" - }, - "parent_hash": "0x6c6174657374", - "sequencer_address": "0x70656e64696e672073657175656e6365722061646472657373", - "starknet_version": "0.11.0", - "timestamp": 1234567, - "transactions": [ - "0x70656e64696e6720747820686173682030", - "0x70656e64696e6720747820686173682031", - "0x70656e64696e67207265766572746564" - ] -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.6.0/blocks/pending_with_txs.json b/crates/rpc/fixtures/0.6.0/blocks/pending_with_txs.json deleted file mode 100644 index 377620bd25..0000000000 --- a/crates/rpc/fixtures/0.6.0/blocks/pending_with_txs.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "l1_gas_price": { - "price_in_fri": "0x7374726b20676173207072696365", - "price_in_wei": "0x676173207072696365" - }, - "parent_hash": "0x6c6174657374", - "sequencer_address": "0x70656e64696e672073657175656e6365722061646472657373", - "starknet_version": "0.11.0", - "timestamp": 1234567, - "transactions": [ - { - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "transaction_hash": "0x70656e64696e6720747820686173682030", - "type": "INVOKE", - "version": "0x0" - }, - { - "class_hash": "0x70656e64696e6720636c61737320686173682031", - "constructor_calldata": [], - "contract_address_salt": "0x73616c7479", - "transaction_hash": "0x70656e64696e6720747820686173682031", - "type": "DEPLOY", - "version": "0x0" - }, - { - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "transaction_hash": "0x70656e64696e67207265766572746564", - "type": "INVOKE", - "version": "0x0" - } - ] -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.6.0/blocks/pre_confirmed.json b/crates/rpc/fixtures/0.6.0/blocks/pre_confirmed.json index e3fb466a7b..8eb431468f 100644 --- a/crates/rpc/fixtures/0.6.0/blocks/pre_confirmed.json +++ b/crates/rpc/fixtures/0.6.0/blocks/pre_confirmed.json @@ -5,7 +5,7 @@ }, "parent_hash": "0x6c6174657374", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", "timestamp": 2, "transactions": [] } diff --git a/crates/rpc/fixtures/0.6.0/blocks/pre_confirmed_with_tx_hashes.json b/crates/rpc/fixtures/0.6.0/blocks/pre_confirmed_with_tx_hashes.json index 0ba7a3f947..b6858b5c87 100644 --- a/crates/rpc/fixtures/0.6.0/blocks/pre_confirmed_with_tx_hashes.json +++ b/crates/rpc/fixtures/0.6.0/blocks/pre_confirmed_with_tx_hashes.json @@ -5,7 +5,7 @@ }, "parent_hash": "0x6c6174657374", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", "timestamp": 2, "transactions": [] } diff --git a/crates/rpc/fixtures/0.6.0/blocks/pre_confirmed_with_txs.json b/crates/rpc/fixtures/0.6.0/blocks/pre_confirmed_with_txs.json index e3fb466a7b..8eb431468f 100644 --- a/crates/rpc/fixtures/0.6.0/blocks/pre_confirmed_with_txs.json +++ b/crates/rpc/fixtures/0.6.0/blocks/pre_confirmed_with_txs.json @@ -5,7 +5,7 @@ }, "parent_hash": "0x6c6174657374", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", "timestamp": 2, "transactions": [] } diff --git a/crates/rpc/fixtures/0.6.0/class_at/pending.json b/crates/rpc/fixtures/0.6.0/class_at/pending.json deleted file mode 100644 index b712fce74b..0000000000 --- a/crates/rpc/fixtures/0.6.0/class_at/pending.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "abi":[ - { - "inputs":[ - { - "name":"address", - "type":"felt" - }, - { - "name":"value", - "type":"felt" - } - ], - "name":"increase_value", - "outputs":[ - - ], - "type":"function" - }, - { - "inputs":[ - { - "name":"contract_address", - "type":"felt" - }, - { - "name":"address", - "type":"felt" - }, - { - "name":"value", - "type":"felt" - } - ], - "name":"call_increase_value", - "outputs":[ - - ], - "type":"function" - }, - { - "inputs":[ - { - "name":"address", - "type":"felt" - } - ], - "name":"get_value", - "outputs":[ - { - "name":"res", - "type":"felt" - } - ], - "type":"function" - } - ], - "entry_points_by_type":{ - "CONSTRUCTOR":[ - - ], - "EXTERNAL":[ - { - "offset":117, - "selector":"0x26813d396fdb198e9ead934e4f7a592a8b88a059e45ab0eb6ee53494e8d45b0" - }, - { - "offset":85, - "selector":"0x3033d3588abc2928b334742248e380daa139fc6b2bba31d609282d2c641a450" - }, - { - "offset":61, - "selector":"0x34c4c150632e67baf44fc50e9a685184d72a822510a26a66f72058b5e7b2892" - } - ], - "L1_HANDLER":[ - - ] - }, - "program":"H4sIAAAAAAAE/91de2/bSJL/Kgb/SnYcgW9SBuYPT+KdDS6PPduze7ggIGiJ8giRJa1EzSQX+LtfVb/YTTbJbpIKsLtYT2yKrK761buapL47eVke1g+nsjg6V58+XzoPp/WmXG/xL+eQbx+LbPF7sfjiwEfLvMzhJMf9GrpJ6rpeslqt8Me5hGMe+a/vpg94iP0U5GCYujE/H/516cEg9uJFvAiDeBUXSZj48HeQhPRD1/XxTCAzh58VPxjAQVwWD+byQR/OwoMP8sGAHVzIB0N2cEkPpj5nbQ60KWsJ+4jwEOH54iMQBRmLlYPmQkcgYLxKUNQkjiI/jkDohsgLoN4QGQ82eF4IxgKZZ0Sj+mgwewkwOk/COKK0K50QFfODXCd4UEEaucCDDa4falzrGWy1Mc9zQQ2uB1Twh+oM/nDF/zwXLNPi/wWlEboemgyxaaQnS+jiAdCLIiFZHg6qEuKZ+EMu98l/gd8czkMLXYmP2EGESDnIDbI6GISLcOFFbhz4RZw85KswXC0it5jncRp5abhM/Dz1/chzcz/O4xgszI3Sh6hIHvx0zlnwU1waf4AVJkfq5uxAtZo3Ob7LmKHgoU0sYflqtRBYgAMIT3XQbwkjeFYDLzyI3lFdfgYJWGBJiQQFMFytxiRQWQhTP4WzUNYlIkwAOANfNMK24OXHsDTGy4oFnzASuj6ihtwRtunB1MXY5gLblYeCcPxgRYQdVCl7k5vNiuaU9mwTtqgDOUbmFDE4FpXimNdTIgQHgIsebAHURdS0XowfVJRDatQGpsrORE1Ul08P5cLWTlg+sbWTBuqoCrSoHuMBGPBMEh6EEqaHwdSiVHWE1ELqBzVFDTUedr65RalnhtR41OWmxyJPiNfrLb01+YauG6CC8AcCBU8jNNLgQfwhhJnz6oTB4Ijn4Q8QobaJYrMDlSfouUvpcnBpZVZsOVuDVW1zepQLIRzat+oe06+2UgwQq9QKypBacd3WSEIzONjQBHYExcPpMVtvVzvnanvabC6d39fbEnqH744LnQJ0F4tFcTyuHzZFdlzs9qTJcI5lfvjyZ34oZot8fdjNFrunp912lm82OzSnro/ZSbD0YrcsnCvnqXjaHb59yvefL36+OBaPTwWsP8uXyxcvwQhXm92fWXnIF1/W28eM9i/A1F4cc66+O4+H3WnvXLmXzm61OhYl/Pp86RyKVXEotosiWy9RoOfnZ1jVMxKLSLAtSi7Z8dtxAdIdgSPyEZGd/KY5CUDZbLLFbot8l9h3LaiojEr2e75dboqDet4LLvvP/JfLC37Bvjz8DELMpL9twfEqcDwNOJJKzcSaZVlZPO0BzfjS/mIEkyozGHF1dlz/H5iQP4QE004GhnYojmAfYD1EcgvVzlan7aJc77bZsdgUi3J3cK4AZ2syTK3OVWQviWwTzlXIjTxtd94se8rX2ywDW1Z+/fOQ7/fF4cg+qf6cPRZl9ke+ORUZuBOYcnYoytNhK1n2dE7sgR66vNjJsn7OZtLcIwPnca5SIGt2Jch6LA+nBUSRZM7gnLej2a9swLn/pNkRrCd/LADafCkBy0xDhAz5tDNHDHArroihEUPmlgUMD1wEKFsigvmAuuncyEWUhRmGsLCZc+ouplbkudQg/A736pfMziD+PKzLwsAiyHlnNgkI1lOZBGGX2YQPqkmt9EqvFrHbMwucXLH0amYWTLPJgPVJTATeY2oVcUeYUCKtFH+rWAZWoQSo9XZxKPJjQSOvZADTxVrI3FydvqsrCjoYAtXxJJ7li/KUb1g2DgFJ0+sOj1X+DcG4LK5j2IegecOrSB4IQebu80uoakLIpGCQXSc2MkwIwaXzgqLMjiyxRPVspCq7ltNZFppH7VnI3rxQeVD3n93GAEZuY0HQa2MarloNLYZUoADed7FsbXHdbgwu5hV9ZbNx3WYNqDDDjetu0nMpsd4Y0DQQGU0YjCWpW5luiYYdJ5Cde9c4FJUxJyYgKME28TBggjGsl9DsrVdrqDqxj+NWPHv/7TWrz/Fw+W0PVb6zzZ+K4z6HORhcqTl1dn14hDr+u7M6bTYZng3dZet5l9h4PtCFgR7tJAAwttiReip8oqPw9sPr25vru5vsH9fvfrvJ7m7e3by+/3grMQu2ciwhpDNte+HcS0KY2fq+m7huFMxjP02TAH6d+3A49uM4ncPehRuEnhslge97XhrFceT6qT+PE9+L4iAI4OK4jaen/Wa9WJemKLyVzx+Fxi3tBqAR70OenTlqtbu3/3vz8a/Zu4+vr9/dtSOO+UynunyzgRkF8LosjuV6m5fr3RbspKramhMNNrK4dJht5Jt1fnRa1EB8DLRPe/+OdciK26IxYlCnAmBCJqsui03xmJdFhssjKG3Sta6qUjCTVc1adNnF7pCXuwM4Iu5F7xfOVQCJkcnA++U28FSCxg6tu0y2MSdfLmn38N0h6s04P8UGnZQnKGxzFizwVEG++xq0M+bk3Sf6z2AxNMxAwGQMdIeZmlyKx4JlEW/riHNdlyvwNHJAtyQIkxLPNaf/BQyXwwpNExTXfFQzRHIWN+xlZhfK0gotmAb7GoyG8QdB0sWfGrWMeCyOwmgf0gKlpaprVC+rWSj65Xcnr+anYqbKhqhhNScMASriwFAzMxN3Pi3yY/litb+8WIHv/OUvLz+DL1sThNqHEyT0Pq1g+vvThceovhxCE0ojHU2/ognTX2Z8YjQMC8FAifZjUtUxa2gJS6oAI5wufqxOm86Co4XaQLVETC2he+lwiala8v3FTxcvXnkvucygnOFC9wRNS6E5tYFCY5gltgjJRBV6RYUOpxEa8yf3RmjX8gOMAafxSQ3lgVgIv4QeRsWibgAD3bPH34eblGlytbStBtmBwPYaWTSNkRnmW0sU6lTPBUI8EQhFiY6mjalYPdhKz8gNlNrDtgoDTCjlEX1UJU413AegdUa5M1oKamILVE7DZKckzwaAP43eTSpHS/llkgPF73X9hEtP1H9pWvL021WgEB5uVywTTGJQlNa5oBQSY/FoIfBT8bTYf8OA0dbdkuKM79nT02f0H3AqVvs1u3fMzPVRKLQay0LqZZ3ia1kctvnGAYYxTiRQwzKK2q5WQ7S7n229QG5e/q06WZ1ERj1s74UKJPW8B6ojdpBx9UCjAurn3Sg2ZnLA0J2O+Yefb9q96phm7ScsoY1oHZfIEkK9T5MFFPxMpmNJdqifLx3RY+qIGfaqGPw66fDiHQTRQWssHKdjE1nAzypVXDrc92iIuhINKel8rJoAHWCNSnKsxA2C5xLdqjTViW7oRsa6rtM7l+BKOdqdlyVT8nkXncLAQ7WlehNlkqV0gJoEGWM0ZWLnQtKmxLGCUlSOpHaCBMqimH4Mo8OSaciiuGmnci74rMqax4LdUkXLma5Kw3MDMY7XlhqCVneBUTtNzjCmZYWUC2EOw7R4bOaiaimjfN9yusKh7AC6oNySsg3Z7EnUFYPsRIU12FpALeoyY5W5RBI35GhI6q7Y5IlWhxTUQtqw07zaxlNgM74SlqZpYrjMc9U8PcxVZiY20COaTOJs4okyhMS77pwk4ZaAjWB547kQXVXcWE6yC6Tq2BlNtLuliSrT1MYZlV53sNGdqzhNj4XKtsSg0Ad/fqJXba/5IlxqQlONMaP41HWNIpRsXTrXGxKkaouzAATUtZauP1tmEozMoJuo0RkSjWokehRuIg0nYeO4MCPnJoJtDvoX2jmzKTUsCb81Kflq4nUkARPR8PKBYvGwEYGoqlgsaljtB9XEMrFoE/lkOgPl7FWfaIEMwi5gxc2iFz816naHc4mux/dpYujbuxVDGO6ri2uaYRT1UdFEJZTAuZRhleKP5e4gbn6H0LZsuTen9e4VhYAI/81RHz+P3AFMM6L+LqDelSgF3VLVLb30Vh5Vb3TRrno/BRtipbWahrsJt+Rjk4ss0kMPue50anPxdDy1ZcwebthlMh/y6zSyfXlAXXZV/ThqZNs92lPlcgDvjaV5We/RPFr5mL/p02itLMh0pZYNJh3MruS6qAcGq8zfQ0u6LSWXbxnXS6zGsGGkbaIbbPxxkHmqQVekYfLK4TeqkEFj8PIz/BtcvLr4xO4/gCP0rouXznNrJLcQQr5ZeWJ8JNIT4vNJA5BHIelOb3agNAaqkC50PjjYegCdxhrnhGl6iJjFTm81lPA5wQCn8qcFpC1MY4wcaiNIc3IURBxh8hOn6S427SOWcEjneWrSQm/Tkw4YJKNCK97BF2nTcGMg1huRKK2BJoBVAbahaduUx6xf62WSnrDMsIhEudWiumu/DwBhhYJUQVNyh2OW6cra5hO3E4SfMVtIPb6hZquIpHPhHJ8tTJg81ITqnEPZTgPklUOpW7XfffAWZXakg/Z6wuvS5ExUsVaxDopWvtpAI++Dxb28MOCbxMCh1RQIgTdaoek3CgTr6M+JDYWDzwLmvU5vKbPylOiMsZl1dRK2loAgUoJTCk+qRbCCVbEpXw4vmeW5Ut0xkLS1omWCA+XVdQ+fiLy8WYB4w1Ia0bZxKu7zqhev1FnVQNfJlNc88DuoAF41hZAZCXldBvEv8/uupFj3WJjvg3rgOywvYU4jT25BN6w8rCjo9Y9DaqfKjT5QpR7kigHPkQZf+KRlPePRR7WucsnY9W9bnsLTgT1jJ8tr/qcPNyrYh440KgoTDTJ6CdoEIM+rntzhEchDl+FFiRKBYFwBvZY3YoChZx66Z75LA/GCxIXafXir00Z6WEZrnTK8EsFJ0VADMsDBAnLn1k8ft9gY6sTuzEJaIJHSGeQd0GQOsisOpllilxHA1irR1mzQlRjZDqUwFDzenXke7Mxz16HGMrSel8WjFtTblIlLQGiW8vStmDhxdAPWTmkolNooRKGUCiEMQ9xcehsv2RjJK0uw8/J8KAy0qjLbhKI6IZ2tBELR33BVZ4t8amChUKMPaa5k0T3cBaCiw1BfK7r3Uuqw6oySqtOkOKwuBK6xEdB6pmF44ySG2pOBwlHqFXQU9MHUQRJmtPKzHF80gKJkziiqqPTtM5bc44xIVzKZoYKaxQgWH4jZdjdLll4iQCSkrewlU5ok9Avl7iqgRRzUhUEUi+D9TYtK06iFoa+H0l04QXHP41TdSMTopjL7W9p+yDUo9ErUl3zjLipTQJ0pDRIwsTptemrHLgIyIII38w6vRvqWCjyEK3apzI/TGVz5viSGfTwx2xRbtDhdfc3PxUKmPkAFZrsukfaKg6EqM2yukDt9I52pJpBlkDZOhy2zc6yLdVKYpaB+2lZxDGxHRpv4uwcH1YRs87IEvLpJEjo7TpI3cbj97LGwaDg+E77aiwK4vfmD77rqyXSFs6MNUZgF39qzBkZcYycRt/mZdSyiL8zF71EQvPS+jUO2B3R+amLgnNwePhGDGN2Z1BT2NPWTlgZwG8Yqa9jrdIfanKhUMKOr8Ne7auuKrAY/RDxwQfKEXz3WdWVee2iqHud8qOBNta1cG5ddtjfRxRAzmee3ll0qzf5qS3e+nMPNa4oaJeMyp+u6STi57S9qajywK+TV/9MnyTUEDCsejB9KxVMjIw89R9wcZ0bVxt1juaanT/agd/EQSBIQn+fAHBXmOf6IsXIH/9IouB4WV9Dzw6hsddro+wMzqhOiQvOyBAuv1WDEZVKUdDPMsLecUZjQPCcEYBmiZB0Nw6BGoB0BJDe57PW6gGS77vmFtbOZvzTNnrTPjdZsjN9AF+vn0Lp+biEzUDvYaGLVjK/qZW4z8vacBn+0uO2d6avXQbRi9Yl+sK+ePXq630NuILiY0wi4UG2p4PLIFzXurBoQ/Uzq4ZqAoiwxTQnSGgPBEOPpWL9z5EoDeS23JDwMgweHQlpH65yL1LgACAidofJzV0u8y54XE46UNKNjxXHpj0lLaU0pMimIXBo6Xw6KnPJgXVfp2ChVpjVQSiMvp/LSfRfjFNfnMi+qd1kONJlMnSZOPNhouQMqx3dMs7dGg/50+wKumK/K7Wk/PW2XanqZ3KR1NqsGBLt6VtvLp+TrVtvBGnDELpR5cbAqBAU2ZubogHxMKw3NPaHUo7hbzGBliwayhRplkH/x8+yXdfnn+lj8ciJfBI15Qc6Cg2hcSq/Ld74iSbomq2FWtP+qMLl0vmb5dpmR17V1nYpTza/Z7tB/Jt5C+zX7anIqPkzXu7L0xoDIXHFUFgH1zeLjfhTOMgEF5Kc+kBGPfeOkFu0Wi2y/W2/L2c3i7/gvlJ+ysv41AR3UZPORSHt+omcRm5IReqFigvcuWx4mJprkN61q8GGmLcrzFkkImUwYxN/y4++jDEImoBjEoTieNvrXEUvaRC18bWhT4582/hEM1sPd+nGbl6fDuGDUoKIA81Qcj/lj0Sc0KU9PD9mXold0Kabr9q5bLGG5XpRZTr4vc/YGfr8mvyJbq9Nmw7+RxO5iRVAd56tm5N0Wf9LdUlyamiez5drJaCv7Q/GH2dlSvLSwh4ZjgUeuTps+OBqXKUBMbuAWWv4dHHwmOykIZBRiqCa0gUK4lybYEHvZSt8TUu7wXQmz6zdvbrNfPv724Q2qmSl4sdvKXzvzynPjxHMTfx65XpQEEfyWRr6bhr7rzcMocAN/7iZBErpu6EdRlKZplMIl8zCdYxQu88MXcod/Gxfvr/8nu7v/eHv960329v7mfYbFTDtDfoTvWSbEOsnmx2NxKDM/crOHNYl5RhA/5eXvs9q1VtjSB+uPs9fX795lrz9+uL+9fn1v8P0+AGkU+EkQJpHvu2Hih2nszb0kDVPS43RILJaErkH+1iO9kxBCsjVoL1ec5VD861SAVYCdLvL1YZcxWyGk9FrQEb1lZNTdAEhKe7C5AlU+jvqR0qnIG9cBRJA+TDj7gMIIZDkVBWB81SAZnABtBYMVxGa5VcCKjZ+cHckXonx3GldIyRzrWHBp8l1Cpl9Ig2mO95TZsdgUCwgYDfUga9JCmAlMz5WSY3fdbKgXpngAb3XaaPKCHRlFM2zGo5VeVgxixs410osEQXfmaOX9zc27m1+v728yEmn6v0DM97w4ieahG0NQCXw3Tv3Am8eJF3shzmfIQt3OLJZ852V/u/7w5t3NrUlkg7AWul6Uuv488dMw8sMkiuI09OdpHCRzz0vjOPF8YkHt6YJHlDdKXbQs9G/fIT7BS/OWsmpQXL95//Y+u/nHzQeToO75qZu48wCkj9wgiJJwnoRpd1rkct48rcubP4otyV2Wdl1dqxizcYjBE03uEMToAiXlsdc9ULd4oglRdKUfF0l+vbnPfnn38fV/ZR9+e/+LkUF7YZi66dwDFwqiyA9c1wuDNHH9IIxc303SngqFa7ha+v7t+5u7++v3fzdxp9Cfh3M3SAI/9uM4hGor9T1gI0qSNJn7CfwbeXDAzMyQCYwgIPk11IM3d3cGPCADGDuS1AvAupM0DKH4C1M3cL0kjlLP9eMQjcMgqBAGeJ1kzkLsQ/k5j4LYTd0onHth4iEK88T1AjdxYz/05n7qu25qwcfdzX//dvPhtRUWXjT3vTksE4Dcc6jYAIQoAKZSfx7Nw9jDj5CRKAxSfFOcISb3UBa//fXD9f1vtzcGKuFG6adx5Aeh6yaASOLFvp8k8Mc8MYWhKH/Z7BZfPpyeHooDOrZl7PlVJaAEoBGFpEr2dvJSsk6f1RRVMSk1rwMzdn0JUVSPQriC4qlAlZFgbBM/HVpHdo+eidHqKuS6UAw3+1qshZBiPw9omdlWmCbJ8hnrRlZQK0sFqVRhjRTtfv0EVUb+REalq9PGpsLkUlU0FIEmcAhBuTIEeS47pr1qMH9bMPWewy0aggy3oQYpBfQf7xwSPwzASWRjtBThqIuUssme3Ute55tNcbheLsHYSPixdxKVhCLROB9RCJ/FRWorCKVwL5wkcdQWGZE6tJQUwH+of9TYYegNcg89KUU0nJ0Uh6znBQNcc5OkED6RG+ceuy0Z4XAiilAjHUQlfR4Xqa/B1DxxGqlBzUUZZkx1lqnLKcD/WEepM8QwnEY6RkwRz3ZuOIm73GFlv12MTCcNKopg4xymTpubWWXMOE6DVEjH0aAfJQGTSrp7zgZ1V3MRoSEenSbJK811qJ0D1/ZJvI2YAv4PdZomRwzGieRj1GoCAoRowT80zdx/FVvcw5p2mYAizzhvkciexVEU+kIdGh/p3nEmXrmV9kjFkK4olSVAt3QnzN49NHQUoH+oZ1TMFLe8qxvkFDpCqlj8Bg60SyUUrqBjr2+iHPnZJqNiKeMMnMnc3Xx4k8Hw9Q63n+8/ZrCz0b+VEgYBzDlh5pfEaeAGYTCfu4k3j1MYBYZBAgM302kb3/i+vbl+YzLkc9107sbzIEjc2PWS2HVD3039OMaUQ2y4O7Pw9f55+/beZKroRylsYXhJ5PppErqRixLGcezDPNFwoHhXbJfvC3J/zf3unXf37Yh1OtrC6rSxGaW0EFJsbZ9/2+zypdF77ZF/fj4dgX3v3ErFPQxzF4XNpZ1pApAyeQjXfdvDZrijuwGUaFgXpe5ghzZ/BE/Ol0OQla5W4BwR+iWOpo/7CvFG0PefceuDbI4PDPoK/aERX0NEAdewCR24HTY0HlamMCItKKIL/Ujz6T/yzQmMvNvhpOg+cILL+PjnYV2S1WwjDgWDXn5+3V3yZ166YRlv3jgFyXh3h/FiWUhfJ/OZPqFbuQ6/F8RBt+rfoFeoz64Pj0NGghoiigLwc9ylRu47awqM8vxkozszMMxzbEwDOGZfjpLxHTPjoz7KJfTY+aojkji6S4MOYgry8uNAUDB2gj/eg1WubovydNiizi09WUtGEYvdvIO0O0XCcMzONTInCYKBIVnlHe+O/PjX7N3H19fv7pBbtvsFJgt9iQghaJHWSqfvl3GRagMD2FkbhTmnbfMEGUT9qpGjUSkSEto/g2uNByLfGWRGISKoD4QEVYyPzkKgZumUQaJ9aByiOrOUQ7EqDsV2UQyK55zrTuOfBBe6wpnAwXfKrLD97HjTjr29sBFtX9pYnTY2jQ9CXoV5cHSyFSAWGYtQ3aOY+cQv2QOZUyJknCRHQdRc5UwYRefAaMzkGFtrvgsi6vdLZxSagp+BIGLGxDiFbyJTAxV/xD8hj/hHlxcGHqeTsOvJXgOSqn+x+qaRBA0IybyNzZecjYGgtyYHCXNrvM+Bc+eoZpTdMgTJAlOjyGJkwv2fINP90LqmmJE9gjzzLynn4qeLhAdg53l49j7SHjY7FHQ0pGv1PKiqWHHAQ6dhbSBTH9rqNWkohbnhmESqswFpJo3VDE3h4+3TfrNerMuB7Ws7LUU22UTP30spTA1upXRUFKFYjO8eYkysrmm7IkVE2rh4jXywgurRPshrSdtEJ2gi6z2R/BUdn0gcsXibp0FaU3juccfVaWNT2mpJD4SDpzyMZswGWxqicRWtwrMojurua4Arm07eQmQeXqvpuRkIoSjVGu8f4pkpJKWab1Q6aOQjeXKaZDZjwbPhmHbIj3RhzsRAwNttVgLcFuwzgEyKqLqJryAC4vbt6rQZ7PMMP0J/cgxZlSZ6fQJMd5WmC6+SM5DoKqkGqrRgyiqNfic8AK0r0/xAbA4OLNMI+Xqd9gRbI7Db2PqcNr8TgkcaiYiS93syA89aaPIsPHeXCNJ83BeCD6roKMcTlXQaYgoMskWDIhfyA9Mr5jEVFrilQnYqRxatlKvRRZ1CRhZL8Fm9dmqEKs5TrlHmab3mN9ICYj882Ku0bSIVOC1XN0+vPvRbzAVYhXKego0y3eOXq9NmSPRWaQ8EBGMBjoYwsqmA1EP3NCUbZdrEQ0ehIi9wLmTE6NEgqelMMK3GvkpSo6/bDCZPajOmX33MHwU3pXwuoPu/AQxi41O+3mbHxY7cuZNl5M8Mos3+sCbp1f2autL/PE/6w+RXD2iJfRsgv80f6cOZ4iBssn/67uT7rDzkiy/r7WPGd64eD7vT3rmCBMPjEHc7sAuK3RULQ8zrlNF/d71kQVVYLPryZFRFcTcpVaF0A++ygGDgvLBVX7wShQG6UZMgD6jtJOOpyyhzGSuXU5UHoXSCIUkGNfbIrYFR/CjREYAGdqTBbDdpX30mAFOd2XRiOrLCPwz0bcQu1wxMAoxsTpoC2LEgjCO55DdGsTClq5aMERNkpbZOtTmQDJTs20rHZzgDpZTYUUyOchNUCblb0qBpcmbV1XRkRfDsD8k23Ir8YQCwRJfr26zoNkZBkDUupLpJh029BZBZtPlZINEPsAHZ8gVL+yJUTEvWwhxsuLXJpTZ0LYofiSy+mAvDe9CbIA2sV0c3rgdBmy+F+yEEpTDNA1jtO+aMPUCgqXEupOmbRkNJ8AjKdNRQCBMM1avs04lE1sOX/RC6Eq80nzC6wv7tNN9P2Oe7z1b+2k/X43QNGAZzr3cVUVvYsogvNmQFvv0w2JAVQdYOBXzDD5pDBGtpzUxobWK6QmtWMHjc1eJetzDgF4JU3RrihjXwAhImDcyNz0AZCjiPUe/Hw4htliSFtU3NdPDy81QM8/ALILx4BXThXwGG89wdhY2w4Cqs0f48kriGb+NI38O3jvTFqwtJEAr+SwsReAkYB5ejGxSJffK6VwwhsdQSKBlFuLqdDfYRdo2+XsbYfHyOT+L14WMph44wUbBrqEQoVepxKoFjarxmDi/yQH8cARLGZC2SoQ1ZEZ6m5dam2LZhN+alhhW7Pq/lUijEVKWxmssmyUr89hMWrtfPMNSDdWtIG0UBD0BWydCWshz/e2O0EXHmG8LaDBzYiC6HAxILdeXxhElgkOjKYPQFe1ueZdpjgdbw7XNMJuUbsAa+Be0z8G08vOrBWwNJMCiJS+vwXJJCGNCGkmEeH+Bzh5jE5w2XHxCiJH77CZ+HYUitfF9rRm6YX28XhyI/FvSrH2b01gM7dw148zHvBX8CwsR6QIxVsSlf9nkQlF714O25wWWtzquHwf6kYEVX1AgG0kuEeQvquW2w2qRH3JtpQgEWqXoLgwJZFnbyWJS21mG3msg//cDLhLnPwzZsU6MsxhpA/sNIehWXxIghm+EUzLinkxnFx5sxLnlew5pZYLKIHx5w1rCN5u3IwC9kmBevrIoce9qwhoCkN4sZkmdmLQzNxCzsQIH0y0zOwIj7SHPzACisO/9eRHTEB6VfeaXKFyGCqSFlnD16wtL9KboEhed+0uhEo+KgpGnRt3t+W0AX9mlnQwaURaqYnDJChLmYfuPn5+fn/wcT8KyIieoAAA==" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.6.0/class_hash/pending.json b/crates/rpc/fixtures/0.6.0/class_hash/pending.json deleted file mode 100644 index 37954f7fb1..0000000000 --- a/crates/rpc/fixtures/0.6.0/class_hash/pending.json +++ /dev/null @@ -1 +0,0 @@ -"0x70656e64696e6720636c61737320302068617368" \ No newline at end of file diff --git a/crates/rpc/fixtures/0.6.0/fee_estimates/declare_deploy_invoke_sierra_0_14_0.json b/crates/rpc/fixtures/0.6.0/fee_estimates/declare_deploy_invoke_sierra_0_14_0.json new file mode 100644 index 0000000000..4d2561dd71 --- /dev/null +++ b/crates/rpc/fixtures/0.6.0/fee_estimates/declare_deploy_invoke_sierra_0_14_0.json @@ -0,0 +1,26 @@ +[ + { + "gas_consumed": "0x6c9", + "gas_price": "0x2", + "overall_fee": "0xf12", + "unit": "FRI" + }, + { + "gas_consumed": "0x18", + "gas_price": "0x2", + "overall_fee": "0x1f0", + "unit": "FRI" + }, + { + "gas_consumed": "0x0", + "gas_price": "0x2", + "overall_fee": "0xcb5e8", + "unit": "FRI" + }, + { + "gas_consumed": "0x0", + "gas_price": "0x2", + "overall_fee": "0xcb5e8", + "unit": "FRI" + } +] diff --git a/crates/rpc/fixtures/0.6.0/fee_estimates/declare_deploy_invoke_sierra_0_14_1.json b/crates/rpc/fixtures/0.6.0/fee_estimates/declare_deploy_invoke_sierra_0_14_1.json new file mode 100644 index 0000000000..4d2561dd71 --- /dev/null +++ b/crates/rpc/fixtures/0.6.0/fee_estimates/declare_deploy_invoke_sierra_0_14_1.json @@ -0,0 +1,26 @@ +[ + { + "gas_consumed": "0x6c9", + "gas_price": "0x2", + "overall_fee": "0xf12", + "unit": "FRI" + }, + { + "gas_consumed": "0x18", + "gas_price": "0x2", + "overall_fee": "0x1f0", + "unit": "FRI" + }, + { + "gas_consumed": "0x0", + "gas_price": "0x2", + "overall_fee": "0xcb5e8", + "unit": "FRI" + }, + { + "gas_consumed": "0x0", + "gas_price": "0x2", + "overall_fee": "0xcb5e8", + "unit": "FRI" + } +] diff --git a/crates/rpc/fixtures/0.6.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json b/crates/rpc/fixtures/0.6.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json index 6a44da108d..4beb4302e1 100644 --- a/crates/rpc/fixtures/0.6.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json +++ b/crates/rpc/fixtures/0.6.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json @@ -1,356 +1,447 @@ [ - { - "fee_estimation": { - "gas_consumed": "0x371", - "gas_price": "0x1", - "overall_fee": "0x4f1", - "unit": "WEI" - }, - "transaction_trace": { - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4f1", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4f1", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 31, - "steps": 1370 - }, - "messages": [], - "result": [ - "0x1" - ] - }, - "type": "DECLARE", - "validate_invocation": { - "call_type": "CALL", - "calldata": [ - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" - ], - "caller_address": "0x0", - "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "steps": 0 - }, - "messages": [], - "result": [ - "0x56414c4944" - ] - } - } + { + "fee_estimation": { + "gas_consumed": "0x371", + "gas_price": "0x1", + "overall_fee": "0x4f1", + "unit": "WEI" }, - { - "fee_estimation": { - "gas_consumed": "0x17", - "gas_price": "0x1", - "overall_fee": "0x1d7", - "unit": "WEI" + "transaction_trace": { + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x4f1", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x4f1", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "memory_holes": 59, + "pedersen_builtin_applications": 4, + "range_check_builtin_applications": 31, + "steps": 1370 }, - "transaction_trace": { - "execute_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0xc02", - "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "0x4", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0x0", - "calls": [ - { - "call_type": "CALL", - "calldata": [ - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0xc01", - "calls": [ - { - "call_type": "CALL", - "calldata": [], - "caller_address": "0xc02", - "calls": [], - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", - "entry_point_type": "CONSTRUCTOR", - "events": [], - "execution_resources": { - "steps": 0 - }, - "messages": [], - "result": [] - } - ], - "class_hash": "0x6f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc", - "contract_address": "0xc02", - "entry_point_selector": "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0xc01", - "0x0", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0" - ], - "keys": [ - "0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 2, - "pedersen_builtin_applications": 7, - "range_check_builtin_applications": 22, - "steps": 1382 - }, - "messages": [], - "result": [ - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" - ] - } - ], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "memory_holes": 2, - "pedersen_builtin_applications": 7, - "range_check_builtin_applications": 22, - "steps": 1382 - }, - "messages": [], - "result": [ - "0x1", - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" - ] - }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d7", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d7", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 31, - "steps": 1370 - }, - "messages": [], - "result": [ - "0x1" - ] - }, - "type": "INVOKE", - "validate_invocation": { + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb0f" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4f1" + } + ] + } + ] + }, + "type": "DECLARE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "steps": 0 + }, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + }, + { + "fee_estimation": { + "gas_consumed": "0x17", + "gas_price": "0x1", + "overall_fee": "0x1d7", + "unit": "WEI" + }, + "transaction_trace": { + "execute_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0xc02", + "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "0x4", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0x0", + "calls": [ + { + "call_type": "CALL", + "calldata": [ + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0xc01", + "calls": [ + { "call_type": "CALL", - "calldata": [ - "0x1", - "0xc02", - "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "0x4", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0x0", + "calldata": [], + "caller_address": "0xc02", "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "entry_point_type": "EXTERNAL", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "entry_point_type": "CONSTRUCTOR", "events": [], "execution_resources": { - "steps": 0 + "steps": 0 }, "messages": [], - "result": [ - "0x56414c4944" - ] - } - } - }, - { - "fee_estimation": { - "gas_consumed": "0x0", - "gas_price": "0x2", - "overall_fee": "0xba0f9", - "unit": "FRI" - }, - "transaction_trace": { - "execute_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "0x0" + "result": [] + } + ], + "class_hash": "0x6f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc", + "contract_address": "0xc02", + "entry_point_selector": "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0xc01", + "0x0", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0" ], - "caller_address": "0x0", - "calls": [ - { - "call_type": "CALL", - "calldata": [], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "entry_point_selector": "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "range_check_builtin_applications": 3, - "steps": 165 - }, - "messages": [], - "result": [ - "0x9" - ] - } + "keys": [ + "0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d" ], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "range_check_builtin_applications": 3, - "steps": 165 - }, - "messages": [], - "result": [ - "0x1", - "0x1", - "0x9" - ] + "order": 0 + } + ], + "execution_resources": { + "memory_holes": 2, + "pedersen_builtin_applications": 7, + "range_check_builtin_applications": 22, + "steps": 1382 }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0xa926e", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0xa926e", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 31, - "steps": 1370 - }, - "messages": [], - "result": [ - "0x1" - ] + "messages": [], + "result": [ + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + ] + } + ], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "memory_holes": 2, + "pedersen_builtin_applications": 7, + "range_check_builtin_applications": 22, + "steps": 1382 + }, + "messages": [], + "result": [ + "0x1", + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + ] + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x1d7", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x1d7", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "memory_holes": 59, + "pedersen_builtin_applications": 4, + "range_check_builtin_applications": 31, + "steps": 1370 + }, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff938" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6c8" + } + ] + } + ] + }, + "type": "INVOKE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0xc02", + "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "0x4", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "steps": 0 + }, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + }, + { + "fee_estimation": { + "gas_consumed": "0x0", + "gas_price": "0x2", + "overall_fee": "0xba0f9", + "unit": "FRI" + }, + "transaction_trace": { + "execute_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "0x0" + ], + "caller_address": "0x0", + "calls": [ + { + "call_type": "CALL", + "calldata": [], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "entry_point_selector": "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "range_check_builtin_applications": 3, + "steps": 165 }, - "type": "INVOKE", - "validate_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "0x0" - ], - "caller_address": "0x0", - "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "steps": 0 - }, - "messages": [], - "result": [ - "0x56414c4944" - ] - } - } + "messages": [], + "result": [ + "0x9" + ] + } + ], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "range_check_builtin_applications": 3, + "steps": 165 + }, + "messages": [], + "result": [ + "0x1", + "0x1", + "0x9" + ] + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xa926e", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xa926e", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "memory_holes": 59, + "pedersen_builtin_applications": 4, + "range_check_builtin_applications": 31, + "steps": 1370 + }, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffff56d92" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0xa926e" + } + ] + } + ] + }, + "type": "INVOKE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "0x0" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "steps": 0 + }, + "messages": [], + "result": [ + "0x56414c4944" + ] + } } + } ] diff --git a/crates/rpc/fixtures/0.6.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json b/crates/rpc/fixtures/0.6.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json index dfa4297e65..65d9f1237f 100644 --- a/crates/rpc/fixtures/0.6.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json +++ b/crates/rpc/fixtures/0.6.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json @@ -1,356 +1,447 @@ [ - { - "fee_estimation": { - "gas_consumed": "0x372", - "gas_price": "0x1", - "overall_fee": "0x4f2", - "unit": "WEI" - }, - "transaction_trace": { - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4f2", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4f2", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 32, - "steps": 1455 - }, - "messages": [], - "result": [ - "0x1" - ] - }, - "type": "DECLARE", - "validate_invocation": { - "call_type": "CALL", - "calldata": [ - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" - ], - "caller_address": "0x0", - "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "steps": 0 - }, - "messages": [], - "result": [ - "0x56414c4944" - ] - } - } + { + "fee_estimation": { + "gas_consumed": "0x372", + "gas_price": "0x1", + "overall_fee": "0x4f2", + "unit": "WEI" }, - { - "fee_estimation": { - "gas_consumed": "0x19", - "gas_price": "0x1", - "overall_fee": "0x1d9", - "unit": "WEI" + "transaction_trace": { + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x4f2", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x4f2", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "memory_holes": 59, + "pedersen_builtin_applications": 4, + "range_check_builtin_applications": 32, + "steps": 1455 }, - "transaction_trace": { - "execute_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0xc02", - "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "0x4", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0x0", - "calls": [ - { - "call_type": "CALL", - "calldata": [ - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0xc01", - "calls": [ - { - "call_type": "CALL", - "calldata": [], - "caller_address": "0xc02", - "calls": [], - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", - "entry_point_type": "CONSTRUCTOR", - "events": [], - "execution_resources": { - "steps": 0 - }, - "messages": [], - "result": [] - } - ], - "class_hash": "0x6f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc", - "contract_address": "0xc02", - "entry_point_selector": "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0xc01", - "0x0", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0" - ], - "keys": [ - "0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 2, - "pedersen_builtin_applications": 7, - "range_check_builtin_applications": 26, - "steps": 1484 - }, - "messages": [], - "result": [ - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" - ] - } - ], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "memory_holes": 2, - "pedersen_builtin_applications": 7, - "range_check_builtin_applications": 26, - "steps": 1484 - }, - "messages": [], - "result": [ - "0x1", - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" - ] - }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d9", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d9", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 32, - "steps": 1455 - }, - "messages": [], - "result": [ - "0x1" - ] - }, - "type": "INVOKE", - "validate_invocation": { + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb0e" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4f2" + } + ] + } + ] + }, + "type": "DECLARE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "steps": 0 + }, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + }, + { + "fee_estimation": { + "gas_consumed": "0x19", + "gas_price": "0x1", + "overall_fee": "0x1d9", + "unit": "WEI" + }, + "transaction_trace": { + "execute_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0xc02", + "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "0x4", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0x0", + "calls": [ + { + "call_type": "CALL", + "calldata": [ + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0xc01", + "calls": [ + { "call_type": "CALL", - "calldata": [ - "0x1", - "0xc02", - "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "0x4", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0x0", + "calldata": [], + "caller_address": "0xc02", "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "entry_point_type": "EXTERNAL", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "entry_point_type": "CONSTRUCTOR", "events": [], "execution_resources": { - "steps": 0 + "steps": 0 }, "messages": [], - "result": [ - "0x56414c4944" - ] - } - } - }, - { - "fee_estimation": { - "gas_consumed": "0x0", - "gas_price": "0x2", - "overall_fee": "0xc7fae", - "unit": "FRI" - }, - "transaction_trace": { - "execute_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "0x0" + "result": [] + } + ], + "class_hash": "0x6f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc", + "contract_address": "0xc02", + "entry_point_selector": "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0xc01", + "0x0", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0" ], - "caller_address": "0x0", - "calls": [ - { - "call_type": "CALL", - "calldata": [], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "entry_point_selector": "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "range_check_builtin_applications": 3, - "steps": 168 - }, - "messages": [], - "result": [ - "0x9" - ] - } + "keys": [ + "0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d" ], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "range_check_builtin_applications": 3, - "steps": 168 - }, - "messages": [], - "result": [ - "0x1", - "0x1", - "0x9" - ] + "order": 0 + } + ], + "execution_resources": { + "memory_holes": 2, + "pedersen_builtin_applications": 7, + "range_check_builtin_applications": 26, + "steps": 1484 }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0xb5ce4", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0xb5ce4", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 32, - "steps": 1455 - }, - "messages": [], - "result": [ - "0x1" - ] + "messages": [], + "result": [ + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + ] + } + ], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "memory_holes": 2, + "pedersen_builtin_applications": 7, + "range_check_builtin_applications": 26, + "steps": 1484 + }, + "messages": [], + "result": [ + "0x1", + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + ] + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x1d9", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x1d9", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "memory_holes": 59, + "pedersen_builtin_applications": 4, + "range_check_builtin_applications": 32, + "steps": 1455 + }, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff935" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6cb" + } + ] + } + ] + }, + "type": "INVOKE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0xc02", + "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "0x4", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "steps": 0 + }, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + }, + { + "fee_estimation": { + "gas_consumed": "0x0", + "gas_price": "0x2", + "overall_fee": "0xc7fae", + "unit": "FRI" + }, + "transaction_trace": { + "execute_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "0x0" + ], + "caller_address": "0x0", + "calls": [ + { + "call_type": "CALL", + "calldata": [], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "entry_point_selector": "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "range_check_builtin_applications": 3, + "steps": 168 }, - "type": "INVOKE", - "validate_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "0x0" - ], - "caller_address": "0x0", - "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "steps": 0 - }, - "messages": [], - "result": [ - "0x56414c4944" - ] - } - } + "messages": [], + "result": [ + "0x9" + ] + } + ], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "range_check_builtin_applications": 3, + "steps": 168 + }, + "messages": [], + "result": [ + "0x1", + "0x1", + "0x9" + ] + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xb5ce4", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xb5ce4", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "memory_holes": 59, + "pedersen_builtin_applications": 4, + "range_check_builtin_applications": 32, + "steps": 1455 + }, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffff4a31c" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0xb5ce4" + } + ] + } + ] + }, + "type": "INVOKE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "0x0" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "steps": 0 + }, + "messages": [], + "result": [ + "0x56414c4944" + ] + } } + } ] diff --git a/crates/rpc/fixtures/0.6.0/traces/multiple_pending_txs.json b/crates/rpc/fixtures/0.6.0/traces/multiple_pending_txs.json deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/crates/rpc/fixtures/0.6.0/traces/multiple_pre_confirmed_txs.json b/crates/rpc/fixtures/0.6.0/traces/multiple_pre_confirmed_txs.json new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/crates/rpc/fixtures/0.6.0/traces/multiple_pre_confirmed_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/rpc/fixtures/0.6.0/transactions/receipt_pending.json b/crates/rpc/fixtures/0.6.0/transactions/receipt_pending.json deleted file mode 100644 index 99760f414c..0000000000 --- a/crates/rpc/fixtures/0.6.0/transactions/receipt_pending.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "actual_fee": { - "amount": "0x0", - "unit": "WEI" - }, - "events": [ - { - "data": [], - "from_address": "0xabcddddddd", - "keys": [ - "0x70656e64696e67206b6579" - ] - }, - { - "data": [], - "from_address": "0xabcddddddd", - "keys": [ - "0x70656e64696e67206b6579", - "0x7365636f6e642070656e64696e67206b6579" - ] - }, - { - "data": [], - "from_address": "0xabcaaaaaaa", - "keys": [ - "0x70656e64696e67206b65792032" - ] - } - ], - "execution_resources": { - "steps": 0 - }, - "execution_status": "SUCCEEDED", - "finality_status": "ACCEPTED_ON_L2", - "messages_sent": [], - "transaction_hash": "0x70656e64696e6720747820686173682030", - "type": "INVOKE" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.6.0/transactions/receipt_reverted_pending.json b/crates/rpc/fixtures/0.6.0/transactions/receipt_reverted_pending.json deleted file mode 100644 index 419d941c63..0000000000 --- a/crates/rpc/fixtures/0.6.0/transactions/receipt_reverted_pending.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "actual_fee": { - "amount": "0x0", - "unit": "WEI" - }, - "events": [], - "execution_resources": { - "steps": 0 - }, - "execution_status": "REVERTED", - "finality_status": "ACCEPTED_ON_L2", - "messages_sent": [], - "revert_reason": "Reverted!", - "transaction_hash": "0x70656e64696e67207265766572746564", - "type": "INVOKE" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.6.0/transactions/receipt_reverted_preconfirmed.json b/crates/rpc/fixtures/0.6.0/transactions/receipt_reverted_preconfirmed.json new file mode 100644 index 0000000000..926c7ac288 --- /dev/null +++ b/crates/rpc/fixtures/0.6.0/transactions/receipt_reverted_preconfirmed.json @@ -0,0 +1 @@ +"pre-0.9 json rpc doesn't have access to pre-confirmed data" diff --git a/crates/rpc/fixtures/0.6.0/transactions/status_pending.json b/crates/rpc/fixtures/0.6.0/transactions/status_pending.json deleted file mode 100644 index 8cfefa0492..0000000000 --- a/crates/rpc/fixtures/0.6.0/transactions/status_pending.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "execution_status": "SUCCEEDED", - "finality_status": "ACCEPTED_ON_L2" -} diff --git a/crates/rpc/fixtures/0.6.0/transactions/status_reverted.json b/crates/rpc/fixtures/0.6.0/transactions/status_reverted.json index 6b6cc60aa7..926c7ac288 100644 --- a/crates/rpc/fixtures/0.6.0/transactions/status_reverted.json +++ b/crates/rpc/fixtures/0.6.0/transactions/status_reverted.json @@ -1,4 +1 @@ -{ - "execution_status": "REVERTED", - "finality_status": "ACCEPTED_ON_L2" -} \ No newline at end of file +"pre-0.9 json rpc doesn't have access to pre-confirmed data" diff --git a/crates/rpc/fixtures/0.6.0/transactions/txn_pending_reverted.json b/crates/rpc/fixtures/0.6.0/transactions/txn_pending_reverted.json deleted file mode 100644 index fb92c2312d..0000000000 --- a/crates/rpc/fixtures/0.6.0/transactions/txn_pending_reverted.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "transaction_hash": "0x70656e64696e67207265766572746564", - "type": "INVOKE", - "version": "0x0" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.6.0/transactions/txn_preconfirmed_reverted.json b/crates/rpc/fixtures/0.6.0/transactions/txn_preconfirmed_reverted.json new file mode 100644 index 0000000000..926c7ac288 --- /dev/null +++ b/crates/rpc/fixtures/0.6.0/transactions/txn_preconfirmed_reverted.json @@ -0,0 +1 @@ +"pre-0.9 json rpc doesn't have access to pre-confirmed data" diff --git a/crates/rpc/fixtures/0.7.0/blocks/latest.json b/crates/rpc/fixtures/0.7.0/blocks/latest.json index c6657042d5..3e5760c6ab 100644 --- a/crates/rpc/fixtures/0.7.0/blocks/latest.json +++ b/crates/rpc/fixtures/0.7.0/blocks/latest.json @@ -1,235 +1,211 @@ { - "block_hash":"0x6c6174657374", - "block_number":2, - "l1_da_mode":"CALLDATA", - "l1_data_gas_price":{ - "price_in_fri":"0x0", - "price_in_wei":"0x0" + "block_hash": "0x6c6174657374", + "block_number": 2, + "l1_da_mode": "CALLDATA", + "l1_data_gas_price": { + "price_in_fri": "0x0", + "price_in_wei": "0x0" }, - "l1_gas_price":{ - "price_in_fri":"0x0", - "price_in_wei":"0x2" + "l1_gas_price": { + "price_in_fri": "0x0", + "price_in_wei": "0x2" }, - "new_root":"0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", - "parent_hash":"0x626c6f636b2031", - "sequencer_address":"0x2", - "starknet_version":"", - "status":"ACCEPTED_ON_L2", - "timestamp":2, - "transactions":[ + "new_root": "0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", + "parent_hash": "0x626c6f636b2031", + "sequencer_address": "0x2", + "starknet_version": "0.13.2", + "status": "ACCEPTED_ON_L2", + "timestamp": 2, + "transactions": [ { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "data_availability":{ - "l1_data_gas":0, - "l1_gas":0 + "events": [], + "execution_resources": { + "data_availability": { + "l1_data_gas": 0, + "l1_gas": 0 }, - "memory_holes":5, - "pedersen_builtin_applications":32, - "steps":10 + "memory_holes": 5, + "pedersen_builtin_applications": 32, + "steps": 10 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x74786e2033", - "type":"INVOKE" + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "transaction_hash": "0x74786e2033", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "transaction_hash":"0x74786e2033", - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x636f6e74726163742031", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "transaction_hash": "0x74786e2033", + "type": "INVOKE", + "version": "0x0" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "data_availability":{ - "l1_data_gas":0, - "l1_gas":0 + "events": [], + "execution_resources": { + "data_availability": { + "l1_data_gas": 0, + "l1_gas": 0 }, - "memory_holes":5, - "pedersen_builtin_applications":32, - "steps":10 + "memory_holes": 5, + "pedersen_builtin_applications": 32, + "steps": 10 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x74786e2034", - "type":"INVOKE" + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "transaction_hash": "0x74786e2034", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x0", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "transaction_hash":"0x74786e2034", - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x0", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "transaction_hash": "0x74786e2034", + "type": "INVOKE", + "version": "0x0" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "data_availability":{ - "l1_data_gas":0, - "l1_gas":0 + "events": [], + "execution_resources": { + "data_availability": { + "l1_data_gas": 0, + "l1_gas": 0 }, - "memory_holes":5, - "pedersen_builtin_applications":32, - "steps":10 + "memory_holes": 5, + "pedersen_builtin_applications": 32, + "steps": 10 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x74786e2035", - "type":"INVOKE" + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "transaction_hash": "0x74786e2035", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "transaction_hash":"0x74786e2035", - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x636f6e74726163742031", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "transaction_hash": "0x74786e2035", + "type": "INVOKE", + "version": "0x0" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "FRI" }, - "events":[ - - ], - "execution_resources":{ - "data_availability":{ - "l1_data_gas":0, - "l1_gas":0 + "events": [], + "execution_resources": { + "data_availability": { + "l1_data_gas": 0, + "l1_gas": 0 }, - "memory_holes":5, - "pedersen_builtin_applications":32, - "steps":10 + "memory_holes": 5, + "pedersen_builtin_applications": 32, + "steps": 10 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [ { - "from_address":"0xcafebabe", - "payload":[ + "from_address": "0xcafebabe", + "payload": [ "0x1", "0x2", "0x3" ], - "to_address":"0x0" + "to_address": "0x0" } ], - "transaction_hash":"0x74786e2036", - "type":"INVOKE" + "transaction_hash": "0x74786e2036", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "transaction_hash":"0x74786e2036", - "type":"INVOKE", - "version":"0x0" + "transaction": { + "account_deployment_data": [], + "calldata": [], + "fee_data_availability_mode": "L1", + "nonce": "0x0", + "nonce_data_availability_mode": "L1", + "paymaster_data": [], + "resource_bounds": { + "l1_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l2_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "sender_address": "0x636f6e74726163742032202873696572726129", + "signature": [], + "tip": "0x0", + "transaction_hash": "0x74786e2036", + "type": "INVOKE", + "version": "0x3" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "data_availability":{ - "l1_data_gas":0, - "l1_gas":0 + "events": [], + "execution_resources": { + "data_availability": { + "l1_data_gas": 0, + "l1_gas": 0 }, - "memory_holes":5, - "pedersen_builtin_applications":32, - "steps":10 + "memory_holes": 5, + "pedersen_builtin_applications": 32, + "steps": 10 }, - "execution_status":"REVERTED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "revert_reason":"Reverted because", - "transaction_hash":"0x74786e207265766572746564", - "type":"INVOKE" + "execution_status": "REVERTED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "revert_reason": "Reverted because", + "transaction_hash": "0x74786e207265766572746564", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "transaction_hash":"0x74786e207265766572746564", - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x636f6e74726163742031", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "transaction_hash": "0x74786e207265766572746564", + "type": "INVOKE", + "version": "0x0" } } ] -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/0.7.0/blocks/latest_with_tx_hashes.json b/crates/rpc/fixtures/0.7.0/blocks/latest_with_tx_hashes.json index 0d17f8004c..8cb997f6b0 100644 --- a/crates/rpc/fixtures/0.7.0/blocks/latest_with_tx_hashes.json +++ b/crates/rpc/fixtures/0.7.0/blocks/latest_with_tx_hashes.json @@ -13,7 +13,7 @@ "new_root": "0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", "parent_hash": "0x626c6f636b2031", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", "status": "ACCEPTED_ON_L2", "timestamp": 2, "transactions": [ @@ -23,4 +23,4 @@ "0x74786e2036", "0x74786e207265766572746564" ] -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/0.7.0/blocks/latest_with_txs.json b/crates/rpc/fixtures/0.7.0/blocks/latest_with_txs.json index cdb3364d48..8ade58b3bb 100644 --- a/crates/rpc/fixtures/0.7.0/blocks/latest_with_txs.json +++ b/crates/rpc/fixtures/0.7.0/blocks/latest_with_txs.json @@ -13,7 +13,7 @@ "new_root": "0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", "parent_hash": "0x626c6f636b2031", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", "status": "ACCEPTED_ON_L2", "timestamp": 2, "transactions": [ @@ -48,14 +48,28 @@ "version": "0x0" }, { + "account_deployment_data": [], "calldata": [], - "contract_address": "0x636f6e74726163742031", - "entry_point_selector": "0x0", - "max_fee": "0x0", + "fee_data_availability_mode": "L1", + "nonce": "0x0", + "nonce_data_availability_mode": "L1", + "paymaster_data": [], + "resource_bounds": { + "l1_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l2_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "sender_address": "0x636f6e74726163742032202873696572726129", "signature": [], + "tip": "0x0", "transaction_hash": "0x74786e2036", "type": "INVOKE", - "version": "0x0" + "version": "0x3" }, { "calldata": [], @@ -68,4 +82,4 @@ "version": "0x0" } ] -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/0.7.0/blocks/pending.json b/crates/rpc/fixtures/0.7.0/blocks/pending.json deleted file mode 100644 index 349769b6b0..0000000000 --- a/crates/rpc/fixtures/0.7.0/blocks/pending.json +++ /dev/null @@ -1,159 +0,0 @@ -{ - "l1_da_mode":"CALLDATA", - "l1_data_gas_price":{ - "price_in_fri":"0x7374726b206461746761737072696365", - "price_in_wei":"0x6461746761737072696365" - }, - "l1_gas_price":{ - "price_in_fri":"0x7374726b20676173207072696365", - "price_in_wei":"0x676173207072696365" - }, - "parent_hash":"0x6c6174657374", - "sequencer_address":"0x70656e64696e672073657175656e6365722061646472657373", - "starknet_version":"0.11.0", - "timestamp":1234567, - "transactions":[ - { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" - }, - "events":[ - { - "data":[ - - ], - "from_address":"0xabcddddddd", - "keys":[ - "0x70656e64696e67206b6579" - ] - }, - { - "data":[ - - ], - "from_address":"0xabcddddddd", - "keys":[ - "0x70656e64696e67206b6579", - "0x7365636f6e642070656e64696e67206b6579" - ] - }, - { - "data":[ - - ], - "from_address":"0xabcaaaaaaa", - "keys":[ - "0x70656e64696e67206b65792032" - ] - } - ], - "execution_resources":{ - "data_availability":{ - "l1_data_gas":0, - "l1_gas":0 - }, - "steps":0 - }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x70656e64696e6720747820686173682030", - "type":"INVOKE" - }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector":"0x656e74727920706f696e742030", - "max_fee":"0x0", - "signature":[ - - ], - "transaction_hash":"0x70656e64696e6720747820686173682030", - "type":"INVOKE", - "version":"0x0" - } - }, - { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" - }, - "contract_address":"0x1122355", - "events":[ - - ], - "execution_resources":{ - "data_availability":{ - "l1_data_gas":0, - "l1_gas":0 - }, - "steps":0 - }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x70656e64696e6720747820686173682031", - "type":"DEPLOY" - }, - "transaction":{ - "class_hash":"0x70656e64696e6720636c61737320686173682031", - "constructor_calldata":[ - - ], - "contract_address_salt":"0x73616c7479", - "transaction_hash":"0x70656e64696e6720747820686173682031", - "type":"DEPLOY", - "version":"0x0" - } - }, - { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" - }, - "events":[ - - ], - "execution_resources":{ - "data_availability":{ - "l1_data_gas":0, - "l1_gas":0 - }, - "steps":0 - }, - "execution_status":"REVERTED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "revert_reason":"Reverted!", - "transaction_hash":"0x70656e64696e67207265766572746564", - "type":"INVOKE" - }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector":"0x656e74727920706f696e742030", - "max_fee":"0x0", - "signature":[ - - ], - "transaction_hash":"0x70656e64696e67207265766572746564", - "type":"INVOKE", - "version":"0x0" - } - } - ] -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.7.0/blocks/pending_with_tx_hashes.json b/crates/rpc/fixtures/0.7.0/blocks/pending_with_tx_hashes.json deleted file mode 100644 index 34435821bd..0000000000 --- a/crates/rpc/fixtures/0.7.0/blocks/pending_with_tx_hashes.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "l1_da_mode": "CALLDATA", - "l1_data_gas_price": { - "price_in_fri": "0x7374726b206461746761737072696365", - "price_in_wei": "0x6461746761737072696365" - }, - "l1_gas_price": { - "price_in_fri": "0x7374726b20676173207072696365", - "price_in_wei": "0x676173207072696365" - }, - "parent_hash": "0x6c6174657374", - "sequencer_address": "0x70656e64696e672073657175656e6365722061646472657373", - "starknet_version": "0.11.0", - "timestamp": 1234567, - "transactions": [ - "0x70656e64696e6720747820686173682030", - "0x70656e64696e6720747820686173682031", - "0x70656e64696e67207265766572746564" - ] -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.7.0/blocks/pending_with_txs.json b/crates/rpc/fixtures/0.7.0/blocks/pending_with_txs.json deleted file mode 100644 index a23437ee5a..0000000000 --- a/crates/rpc/fixtures/0.7.0/blocks/pending_with_txs.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "l1_da_mode": "CALLDATA", - "l1_data_gas_price": { - "price_in_fri": "0x7374726b206461746761737072696365", - "price_in_wei": "0x6461746761737072696365" - }, - "l1_gas_price": { - "price_in_fri": "0x7374726b20676173207072696365", - "price_in_wei": "0x676173207072696365" - }, - "parent_hash": "0x6c6174657374", - "sequencer_address": "0x70656e64696e672073657175656e6365722061646472657373", - "starknet_version": "0.11.0", - "timestamp": 1234567, - "transactions": [ - { - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "transaction_hash": "0x70656e64696e6720747820686173682030", - "type": "INVOKE", - "version": "0x0" - }, - { - "class_hash": "0x70656e64696e6720636c61737320686173682031", - "constructor_calldata": [], - "contract_address_salt": "0x73616c7479", - "transaction_hash": "0x70656e64696e6720747820686173682031", - "type": "DEPLOY", - "version": "0x0" - }, - { - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "transaction_hash": "0x70656e64696e67207265766572746564", - "type": "INVOKE", - "version": "0x0" - } - ] -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.7.0/blocks/pre_confirmed.json b/crates/rpc/fixtures/0.7.0/blocks/pre_confirmed.json index 7de003cb57..d7a8cea13b 100644 --- a/crates/rpc/fixtures/0.7.0/blocks/pre_confirmed.json +++ b/crates/rpc/fixtures/0.7.0/blocks/pre_confirmed.json @@ -10,7 +10,7 @@ }, "parent_hash": "0x6c6174657374", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", "timestamp": 2, "transactions": [] } diff --git a/crates/rpc/fixtures/0.7.0/blocks/pre_confirmed_with_tx_hashes.json b/crates/rpc/fixtures/0.7.0/blocks/pre_confirmed_with_tx_hashes.json index 8977adc169..a860db3431 100644 --- a/crates/rpc/fixtures/0.7.0/blocks/pre_confirmed_with_tx_hashes.json +++ b/crates/rpc/fixtures/0.7.0/blocks/pre_confirmed_with_tx_hashes.json @@ -10,7 +10,7 @@ }, "parent_hash": "0x6c6174657374", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", "timestamp": 2, "transactions": [] } diff --git a/crates/rpc/fixtures/0.7.0/blocks/pre_confirmed_with_txs.json b/crates/rpc/fixtures/0.7.0/blocks/pre_confirmed_with_txs.json index 7de003cb57..d7a8cea13b 100644 --- a/crates/rpc/fixtures/0.7.0/blocks/pre_confirmed_with_txs.json +++ b/crates/rpc/fixtures/0.7.0/blocks/pre_confirmed_with_txs.json @@ -10,7 +10,7 @@ }, "parent_hash": "0x6c6174657374", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", "timestamp": 2, "transactions": [] } diff --git a/crates/rpc/fixtures/0.7.0/class_at/pending.json b/crates/rpc/fixtures/0.7.0/class_at/pending.json deleted file mode 100644 index b712fce74b..0000000000 --- a/crates/rpc/fixtures/0.7.0/class_at/pending.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "abi":[ - { - "inputs":[ - { - "name":"address", - "type":"felt" - }, - { - "name":"value", - "type":"felt" - } - ], - "name":"increase_value", - "outputs":[ - - ], - "type":"function" - }, - { - "inputs":[ - { - "name":"contract_address", - "type":"felt" - }, - { - "name":"address", - "type":"felt" - }, - { - "name":"value", - "type":"felt" - } - ], - "name":"call_increase_value", - "outputs":[ - - ], - "type":"function" - }, - { - "inputs":[ - { - "name":"address", - "type":"felt" - } - ], - "name":"get_value", - "outputs":[ - { - "name":"res", - "type":"felt" - } - ], - "type":"function" - } - ], - "entry_points_by_type":{ - "CONSTRUCTOR":[ - - ], - "EXTERNAL":[ - { - "offset":117, - "selector":"0x26813d396fdb198e9ead934e4f7a592a8b88a059e45ab0eb6ee53494e8d45b0" - }, - { - "offset":85, - "selector":"0x3033d3588abc2928b334742248e380daa139fc6b2bba31d609282d2c641a450" - }, - { - "offset":61, - "selector":"0x34c4c150632e67baf44fc50e9a685184d72a822510a26a66f72058b5e7b2892" - } - ], - "L1_HANDLER":[ - - ] - }, - "program":"H4sIAAAAAAAE/91de2/bSJL/Kgb/SnYcgW9SBuYPT+KdDS6PPduze7ggIGiJ8giRJa1EzSQX+LtfVb/YTTbJbpIKsLtYT2yKrK761buapL47eVke1g+nsjg6V58+XzoPp/WmXG/xL+eQbx+LbPF7sfjiwEfLvMzhJMf9GrpJ6rpeslqt8Me5hGMe+a/vpg94iP0U5GCYujE/H/516cEg9uJFvAiDeBUXSZj48HeQhPRD1/XxTCAzh58VPxjAQVwWD+byQR/OwoMP8sGAHVzIB0N2cEkPpj5nbQ60KWsJ+4jwEOH54iMQBRmLlYPmQkcgYLxKUNQkjiI/jkDohsgLoN4QGQ82eF4IxgKZZ0Sj+mgwewkwOk/COKK0K50QFfODXCd4UEEaucCDDa4falzrGWy1Mc9zQQ2uB1Twh+oM/nDF/zwXLNPi/wWlEboemgyxaaQnS+jiAdCLIiFZHg6qEuKZ+EMu98l/gd8czkMLXYmP2EGESDnIDbI6GISLcOFFbhz4RZw85KswXC0it5jncRp5abhM/Dz1/chzcz/O4xgszI3Sh6hIHvx0zlnwU1waf4AVJkfq5uxAtZo3Ob7LmKHgoU0sYflqtRBYgAMIT3XQbwkjeFYDLzyI3lFdfgYJWGBJiQQFMFytxiRQWQhTP4WzUNYlIkwAOANfNMK24OXHsDTGy4oFnzASuj6ihtwRtunB1MXY5gLblYeCcPxgRYQdVCl7k5vNiuaU9mwTtqgDOUbmFDE4FpXimNdTIgQHgIsebAHURdS0XowfVJRDatQGpsrORE1Ul08P5cLWTlg+sbWTBuqoCrSoHuMBGPBMEh6EEqaHwdSiVHWE1ELqBzVFDTUedr65RalnhtR41OWmxyJPiNfrLb01+YauG6CC8AcCBU8jNNLgQfwhhJnz6oTB4Ijn4Q8QobaJYrMDlSfouUvpcnBpZVZsOVuDVW1zepQLIRzat+oe06+2UgwQq9QKypBacd3WSEIzONjQBHYExcPpMVtvVzvnanvabC6d39fbEnqH744LnQJ0F4tFcTyuHzZFdlzs9qTJcI5lfvjyZ34oZot8fdjNFrunp912lm82OzSnro/ZSbD0YrcsnCvnqXjaHb59yvefL36+OBaPTwWsP8uXyxcvwQhXm92fWXnIF1/W28eM9i/A1F4cc66+O4+H3WnvXLmXzm61OhYl/Pp86RyKVXEotosiWy9RoOfnZ1jVMxKLSLAtSi7Z8dtxAdIdgSPyEZGd/KY5CUDZbLLFbot8l9h3LaiojEr2e75dboqDet4LLvvP/JfLC37Bvjz8DELMpL9twfEqcDwNOJJKzcSaZVlZPO0BzfjS/mIEkyozGHF1dlz/H5iQP4QE004GhnYojmAfYD1EcgvVzlan7aJc77bZsdgUi3J3cK4AZ2syTK3OVWQviWwTzlXIjTxtd94se8rX2ywDW1Z+/fOQ7/fF4cg+qf6cPRZl9ke+ORUZuBOYcnYoytNhK1n2dE7sgR66vNjJsn7OZtLcIwPnca5SIGt2Jch6LA+nBUSRZM7gnLej2a9swLn/pNkRrCd/LADafCkBy0xDhAz5tDNHDHArroihEUPmlgUMD1wEKFsigvmAuuncyEWUhRmGsLCZc+ouplbkudQg/A736pfMziD+PKzLwsAiyHlnNgkI1lOZBGGX2YQPqkmt9EqvFrHbMwucXLH0amYWTLPJgPVJTATeY2oVcUeYUCKtFH+rWAZWoQSo9XZxKPJjQSOvZADTxVrI3FydvqsrCjoYAtXxJJ7li/KUb1g2DgFJ0+sOj1X+DcG4LK5j2IegecOrSB4IQebu80uoakLIpGCQXSc2MkwIwaXzgqLMjiyxRPVspCq7ltNZFppH7VnI3rxQeVD3n93GAEZuY0HQa2MarloNLYZUoADed7FsbXHdbgwu5hV9ZbNx3WYNqDDDjetu0nMpsd4Y0DQQGU0YjCWpW5luiYYdJ5Cde9c4FJUxJyYgKME28TBggjGsl9DsrVdrqDqxj+NWPHv/7TWrz/Fw+W0PVb6zzZ+K4z6HORhcqTl1dn14hDr+u7M6bTYZng3dZet5l9h4PtCFgR7tJAAwttiReip8oqPw9sPr25vru5vsH9fvfrvJ7m7e3by+/3grMQu2ciwhpDNte+HcS0KY2fq+m7huFMxjP02TAH6d+3A49uM4ncPehRuEnhslge97XhrFceT6qT+PE9+L4iAI4OK4jaen/Wa9WJemKLyVzx+Fxi3tBqAR70OenTlqtbu3/3vz8a/Zu4+vr9/dtSOO+UynunyzgRkF8LosjuV6m5fr3RbspKramhMNNrK4dJht5Jt1fnRa1EB8DLRPe/+OdciK26IxYlCnAmBCJqsui03xmJdFhssjKG3Sta6qUjCTVc1adNnF7pCXuwM4Iu5F7xfOVQCJkcnA++U28FSCxg6tu0y2MSdfLmn38N0h6s04P8UGnZQnKGxzFizwVEG++xq0M+bk3Sf6z2AxNMxAwGQMdIeZmlyKx4JlEW/riHNdlyvwNHJAtyQIkxLPNaf/BQyXwwpNExTXfFQzRHIWN+xlZhfK0gotmAb7GoyG8QdB0sWfGrWMeCyOwmgf0gKlpaprVC+rWSj65Xcnr+anYqbKhqhhNScMASriwFAzMxN3Pi3yY/litb+8WIHv/OUvLz+DL1sThNqHEyT0Pq1g+vvThceovhxCE0ojHU2/ognTX2Z8YjQMC8FAifZjUtUxa2gJS6oAI5wufqxOm86Co4XaQLVETC2he+lwiala8v3FTxcvXnkvucygnOFC9wRNS6E5tYFCY5gltgjJRBV6RYUOpxEa8yf3RmjX8gOMAafxSQ3lgVgIv4QeRsWibgAD3bPH34eblGlytbStBtmBwPYaWTSNkRnmW0sU6lTPBUI8EQhFiY6mjalYPdhKz8gNlNrDtgoDTCjlEX1UJU413AegdUa5M1oKamILVE7DZKckzwaAP43eTSpHS/llkgPF73X9hEtP1H9pWvL021WgEB5uVywTTGJQlNa5oBQSY/FoIfBT8bTYf8OA0dbdkuKM79nT02f0H3AqVvs1u3fMzPVRKLQay0LqZZ3ia1kctvnGAYYxTiRQwzKK2q5WQ7S7n229QG5e/q06WZ1ERj1s74UKJPW8B6ojdpBx9UCjAurn3Sg2ZnLA0J2O+Yefb9q96phm7ScsoY1oHZfIEkK9T5MFFPxMpmNJdqifLx3RY+qIGfaqGPw66fDiHQTRQWssHKdjE1nAzypVXDrc92iIuhINKel8rJoAHWCNSnKsxA2C5xLdqjTViW7oRsa6rtM7l+BKOdqdlyVT8nkXncLAQ7WlehNlkqV0gJoEGWM0ZWLnQtKmxLGCUlSOpHaCBMqimH4Mo8OSaciiuGmnci74rMqax4LdUkXLma5Kw3MDMY7XlhqCVneBUTtNzjCmZYWUC2EOw7R4bOaiaimjfN9yusKh7AC6oNySsg3Z7EnUFYPsRIU12FpALeoyY5W5RBI35GhI6q7Y5IlWhxTUQtqw07zaxlNgM74SlqZpYrjMc9U8PcxVZiY20COaTOJs4okyhMS77pwk4ZaAjWB547kQXVXcWE6yC6Tq2BlNtLuliSrT1MYZlV53sNGdqzhNj4XKtsSg0Ad/fqJXba/5IlxqQlONMaP41HWNIpRsXTrXGxKkaouzAATUtZauP1tmEozMoJuo0RkSjWokehRuIg0nYeO4MCPnJoJtDvoX2jmzKTUsCb81Kflq4nUkARPR8PKBYvGwEYGoqlgsaljtB9XEMrFoE/lkOgPl7FWfaIEMwi5gxc2iFz816naHc4mux/dpYujbuxVDGO6ri2uaYRT1UdFEJZTAuZRhleKP5e4gbn6H0LZsuTen9e4VhYAI/81RHz+P3AFMM6L+LqDelSgF3VLVLb30Vh5Vb3TRrno/BRtipbWahrsJt+Rjk4ss0kMPue50anPxdDy1ZcwebthlMh/y6zSyfXlAXXZV/ThqZNs92lPlcgDvjaV5We/RPFr5mL/p02itLMh0pZYNJh3MruS6qAcGq8zfQ0u6LSWXbxnXS6zGsGGkbaIbbPxxkHmqQVekYfLK4TeqkEFj8PIz/BtcvLr4xO4/gCP0rouXznNrJLcQQr5ZeWJ8JNIT4vNJA5BHIelOb3agNAaqkC50PjjYegCdxhrnhGl6iJjFTm81lPA5wQCn8qcFpC1MY4wcaiNIc3IURBxh8hOn6S427SOWcEjneWrSQm/Tkw4YJKNCK97BF2nTcGMg1huRKK2BJoBVAbahaduUx6xf62WSnrDMsIhEudWiumu/DwBhhYJUQVNyh2OW6cra5hO3E4SfMVtIPb6hZquIpHPhHJ8tTJg81ITqnEPZTgPklUOpW7XfffAWZXakg/Z6wuvS5ExUsVaxDopWvtpAI++Dxb28MOCbxMCh1RQIgTdaoek3CgTr6M+JDYWDzwLmvU5vKbPylOiMsZl1dRK2loAgUoJTCk+qRbCCVbEpXw4vmeW5Ut0xkLS1omWCA+XVdQ+fiLy8WYB4w1Ia0bZxKu7zqhev1FnVQNfJlNc88DuoAF41hZAZCXldBvEv8/uupFj3WJjvg3rgOywvYU4jT25BN6w8rCjo9Y9DaqfKjT5QpR7kigHPkQZf+KRlPePRR7WucsnY9W9bnsLTgT1jJ8tr/qcPNyrYh440KgoTDTJ6CdoEIM+rntzhEchDl+FFiRKBYFwBvZY3YoChZx66Z75LA/GCxIXafXir00Z6WEZrnTK8EsFJ0VADMsDBAnLn1k8ft9gY6sTuzEJaIJHSGeQd0GQOsisOpllilxHA1irR1mzQlRjZDqUwFDzenXke7Mxz16HGMrSel8WjFtTblIlLQGiW8vStmDhxdAPWTmkolNooRKGUCiEMQ9xcehsv2RjJK0uw8/J8KAy0qjLbhKI6IZ2tBELR33BVZ4t8amChUKMPaa5k0T3cBaCiw1BfK7r3Uuqw6oySqtOkOKwuBK6xEdB6pmF44ySG2pOBwlHqFXQU9MHUQRJmtPKzHF80gKJkziiqqPTtM5bc44xIVzKZoYKaxQgWH4jZdjdLll4iQCSkrewlU5ok9Avl7iqgRRzUhUEUi+D9TYtK06iFoa+H0l04QXHP41TdSMTopjL7W9p+yDUo9ErUl3zjLipTQJ0pDRIwsTptemrHLgIyIII38w6vRvqWCjyEK3apzI/TGVz5viSGfTwx2xRbtDhdfc3PxUKmPkAFZrsukfaKg6EqM2yukDt9I52pJpBlkDZOhy2zc6yLdVKYpaB+2lZxDGxHRpv4uwcH1YRs87IEvLpJEjo7TpI3cbj97LGwaDg+E77aiwK4vfmD77rqyXSFs6MNUZgF39qzBkZcYycRt/mZdSyiL8zF71EQvPS+jUO2B3R+amLgnNwePhGDGN2Z1BT2NPWTlgZwG8Yqa9jrdIfanKhUMKOr8Ne7auuKrAY/RDxwQfKEXz3WdWVee2iqHud8qOBNta1cG5ddtjfRxRAzmee3ll0qzf5qS3e+nMPNa4oaJeMyp+u6STi57S9qajywK+TV/9MnyTUEDCsejB9KxVMjIw89R9wcZ0bVxt1juaanT/agd/EQSBIQn+fAHBXmOf6IsXIH/9IouB4WV9Dzw6hsddro+wMzqhOiQvOyBAuv1WDEZVKUdDPMsLecUZjQPCcEYBmiZB0Nw6BGoB0BJDe57PW6gGS77vmFtbOZvzTNnrTPjdZsjN9AF+vn0Lp+biEzUDvYaGLVjK/qZW4z8vacBn+0uO2d6avXQbRi9Yl+sK+ePXq630NuILiY0wi4UG2p4PLIFzXurBoQ/Uzq4ZqAoiwxTQnSGgPBEOPpWL9z5EoDeS23JDwMgweHQlpH65yL1LgACAidofJzV0u8y54XE46UNKNjxXHpj0lLaU0pMimIXBo6Xw6KnPJgXVfp2ChVpjVQSiMvp/LSfRfjFNfnMi+qd1kONJlMnSZOPNhouQMqx3dMs7dGg/50+wKumK/K7Wk/PW2XanqZ3KR1NqsGBLt6VtvLp+TrVtvBGnDELpR5cbAqBAU2ZubogHxMKw3NPaHUo7hbzGBliwayhRplkH/x8+yXdfnn+lj8ciJfBI15Qc6Cg2hcSq/Ld74iSbomq2FWtP+qMLl0vmb5dpmR17V1nYpTza/Z7tB/Jt5C+zX7anIqPkzXu7L0xoDIXHFUFgH1zeLjfhTOMgEF5Kc+kBGPfeOkFu0Wi2y/W2/L2c3i7/gvlJ+ysv41AR3UZPORSHt+omcRm5IReqFigvcuWx4mJprkN61q8GGmLcrzFkkImUwYxN/y4++jDEImoBjEoTieNvrXEUvaRC18bWhT4582/hEM1sPd+nGbl6fDuGDUoKIA81Qcj/lj0Sc0KU9PD9mXold0Kabr9q5bLGG5XpRZTr4vc/YGfr8mvyJbq9Nmw7+RxO5iRVAd56tm5N0Wf9LdUlyamiez5drJaCv7Q/GH2dlSvLSwh4ZjgUeuTps+OBqXKUBMbuAWWv4dHHwmOykIZBRiqCa0gUK4lybYEHvZSt8TUu7wXQmz6zdvbrNfPv724Q2qmSl4sdvKXzvzynPjxHMTfx65XpQEEfyWRr6bhr7rzcMocAN/7iZBErpu6EdRlKZplMIl8zCdYxQu88MXcod/Gxfvr/8nu7v/eHv960329v7mfYbFTDtDfoTvWSbEOsnmx2NxKDM/crOHNYl5RhA/5eXvs9q1VtjSB+uPs9fX795lrz9+uL+9fn1v8P0+AGkU+EkQJpHvu2Hih2nszb0kDVPS43RILJaErkH+1iO9kxBCsjVoL1ec5VD861SAVYCdLvL1YZcxWyGk9FrQEb1lZNTdAEhKe7C5AlU+jvqR0qnIG9cBRJA+TDj7gMIIZDkVBWB81SAZnABtBYMVxGa5VcCKjZ+cHckXonx3GldIyRzrWHBp8l1Cpl9Ig2mO95TZsdgUCwgYDfUga9JCmAlMz5WSY3fdbKgXpngAb3XaaPKCHRlFM2zGo5VeVgxixs410osEQXfmaOX9zc27m1+v728yEmn6v0DM97w4ieahG0NQCXw3Tv3Am8eJF3shzmfIQt3OLJZ852V/u/7w5t3NrUlkg7AWul6Uuv488dMw8sMkiuI09OdpHCRzz0vjOPF8YkHt6YJHlDdKXbQs9G/fIT7BS/OWsmpQXL95//Y+u/nHzQeToO75qZu48wCkj9wgiJJwnoRpd1rkct48rcubP4otyV2Wdl1dqxizcYjBE03uEMToAiXlsdc9ULd4oglRdKUfF0l+vbnPfnn38fV/ZR9+e/+LkUF7YZi66dwDFwqiyA9c1wuDNHH9IIxc303SngqFa7ha+v7t+5u7++v3fzdxp9Cfh3M3SAI/9uM4hGor9T1gI0qSNJn7CfwbeXDAzMyQCYwgIPk11IM3d3cGPCADGDuS1AvAupM0DKH4C1M3cL0kjlLP9eMQjcMgqBAGeJ1kzkLsQ/k5j4LYTd0onHth4iEK88T1AjdxYz/05n7qu25qwcfdzX//dvPhtRUWXjT3vTksE4Dcc6jYAIQoAKZSfx7Nw9jDj5CRKAxSfFOcISb3UBa//fXD9f1vtzcGKuFG6adx5Aeh6yaASOLFvp8k8Mc8MYWhKH/Z7BZfPpyeHooDOrZl7PlVJaAEoBGFpEr2dvJSsk6f1RRVMSk1rwMzdn0JUVSPQriC4qlAlZFgbBM/HVpHdo+eidHqKuS6UAw3+1qshZBiPw9omdlWmCbJ8hnrRlZQK0sFqVRhjRTtfv0EVUb+REalq9PGpsLkUlU0FIEmcAhBuTIEeS47pr1qMH9bMPWewy0aggy3oQYpBfQf7xwSPwzASWRjtBThqIuUssme3Ute55tNcbheLsHYSPixdxKVhCLROB9RCJ/FRWorCKVwL5wkcdQWGZE6tJQUwH+of9TYYegNcg89KUU0nJ0Uh6znBQNcc5OkED6RG+ceuy0Z4XAiilAjHUQlfR4Xqa/B1DxxGqlBzUUZZkx1lqnLKcD/WEepM8QwnEY6RkwRz3ZuOIm73GFlv12MTCcNKopg4xymTpubWWXMOE6DVEjH0aAfJQGTSrp7zgZ1V3MRoSEenSbJK811qJ0D1/ZJvI2YAv4PdZomRwzGieRj1GoCAoRowT80zdx/FVvcw5p2mYAizzhvkciexVEU+kIdGh/p3nEmXrmV9kjFkK4olSVAt3QnzN49NHQUoH+oZ1TMFLe8qxvkFDpCqlj8Bg60SyUUrqBjr2+iHPnZJqNiKeMMnMnc3Xx4k8Hw9Q63n+8/ZrCz0b+VEgYBzDlh5pfEaeAGYTCfu4k3j1MYBYZBAgM302kb3/i+vbl+YzLkc9107sbzIEjc2PWS2HVD3039OMaUQ2y4O7Pw9f55+/beZKroRylsYXhJ5PppErqRixLGcezDPNFwoHhXbJfvC3J/zf3unXf37Yh1OtrC6rSxGaW0EFJsbZ9/2+zypdF77ZF/fj4dgX3v3ErFPQxzF4XNpZ1pApAyeQjXfdvDZrijuwGUaFgXpe5ghzZ/BE/Ol0OQla5W4BwR+iWOpo/7CvFG0PefceuDbI4PDPoK/aERX0NEAdewCR24HTY0HlamMCItKKIL/Ujz6T/yzQmMvNvhpOg+cILL+PjnYV2S1WwjDgWDXn5+3V3yZ166YRlv3jgFyXh3h/FiWUhfJ/OZPqFbuQ6/F8RBt+rfoFeoz64Pj0NGghoiigLwc9ylRu47awqM8vxkozszMMxzbEwDOGZfjpLxHTPjoz7KJfTY+aojkji6S4MOYgry8uNAUDB2gj/eg1WubovydNiizi09WUtGEYvdvIO0O0XCcMzONTInCYKBIVnlHe+O/PjX7N3H19fv7pBbtvsFJgt9iQghaJHWSqfvl3GRagMD2FkbhTmnbfMEGUT9qpGjUSkSEto/g2uNByLfGWRGISKoD4QEVYyPzkKgZumUQaJ9aByiOrOUQ7EqDsV2UQyK55zrTuOfBBe6wpnAwXfKrLD97HjTjr29sBFtX9pYnTY2jQ9CXoV5cHSyFSAWGYtQ3aOY+cQv2QOZUyJknCRHQdRc5UwYRefAaMzkGFtrvgsi6vdLZxSagp+BIGLGxDiFbyJTAxV/xD8hj/hHlxcGHqeTsOvJXgOSqn+x+qaRBA0IybyNzZecjYGgtyYHCXNrvM+Bc+eoZpTdMgTJAlOjyGJkwv2fINP90LqmmJE9gjzzLynn4qeLhAdg53l49j7SHjY7FHQ0pGv1PKiqWHHAQ6dhbSBTH9rqNWkohbnhmESqswFpJo3VDE3h4+3TfrNerMuB7Ws7LUU22UTP30spTA1upXRUFKFYjO8eYkysrmm7IkVE2rh4jXywgurRPshrSdtEJ2gi6z2R/BUdn0gcsXibp0FaU3juccfVaWNT2mpJD4SDpzyMZswGWxqicRWtwrMojurua4Arm07eQmQeXqvpuRkIoSjVGu8f4pkpJKWab1Q6aOQjeXKaZDZjwbPhmHbIj3RhzsRAwNttVgLcFuwzgEyKqLqJryAC4vbt6rQZ7PMMP0J/cgxZlSZ6fQJMd5WmC6+SM5DoKqkGqrRgyiqNfic8AK0r0/xAbA4OLNMI+Xqd9gRbI7Db2PqcNr8TgkcaiYiS93syA89aaPIsPHeXCNJ83BeCD6roKMcTlXQaYgoMskWDIhfyA9Mr5jEVFrilQnYqRxatlKvRRZ1CRhZL8Fm9dmqEKs5TrlHmab3mN9ICYj882Ku0bSIVOC1XN0+vPvRbzAVYhXKego0y3eOXq9NmSPRWaQ8EBGMBjoYwsqmA1EP3NCUbZdrEQ0ehIi9wLmTE6NEgqelMMK3GvkpSo6/bDCZPajOmX33MHwU3pXwuoPu/AQxi41O+3mbHxY7cuZNl5M8Mos3+sCbp1f2autL/PE/6w+RXD2iJfRsgv80f6cOZ4iBssn/67uT7rDzkiy/r7WPGd64eD7vT3rmCBMPjEHc7sAuK3RULQ8zrlNF/d71kQVVYLPryZFRFcTcpVaF0A++ygGDgvLBVX7wShQG6UZMgD6jtJOOpyyhzGSuXU5UHoXSCIUkGNfbIrYFR/CjREYAGdqTBbDdpX30mAFOd2XRiOrLCPwz0bcQu1wxMAoxsTpoC2LEgjCO55DdGsTClq5aMERNkpbZOtTmQDJTs20rHZzgDpZTYUUyOchNUCblb0qBpcmbV1XRkRfDsD8k23Ir8YQCwRJfr26zoNkZBkDUupLpJh029BZBZtPlZINEPsAHZ8gVL+yJUTEvWwhxsuLXJpTZ0LYofiSy+mAvDe9CbIA2sV0c3rgdBmy+F+yEEpTDNA1jtO+aMPUCgqXEupOmbRkNJ8AjKdNRQCBMM1avs04lE1sOX/RC6Eq80nzC6wv7tNN9P2Oe7z1b+2k/X43QNGAZzr3cVUVvYsogvNmQFvv0w2JAVQdYOBXzDD5pDBGtpzUxobWK6QmtWMHjc1eJetzDgF4JU3RrihjXwAhImDcyNz0AZCjiPUe/Hw4htliSFtU3NdPDy81QM8/ALILx4BXThXwGG89wdhY2w4Cqs0f48kriGb+NI38O3jvTFqwtJEAr+SwsReAkYB5ejGxSJffK6VwwhsdQSKBlFuLqdDfYRdo2+XsbYfHyOT+L14WMph44wUbBrqEQoVepxKoFjarxmDi/yQH8cARLGZC2SoQ1ZEZ6m5dam2LZhN+alhhW7Pq/lUijEVKWxmssmyUr89hMWrtfPMNSDdWtIG0UBD0BWydCWshz/e2O0EXHmG8LaDBzYiC6HAxILdeXxhElgkOjKYPQFe1ueZdpjgdbw7XNMJuUbsAa+Be0z8G08vOrBWwNJMCiJS+vwXJJCGNCGkmEeH+Bzh5jE5w2XHxCiJH77CZ+HYUitfF9rRm6YX28XhyI/FvSrH2b01gM7dw148zHvBX8CwsR6QIxVsSlf9nkQlF714O25wWWtzquHwf6kYEVX1AgG0kuEeQvquW2w2qRH3JtpQgEWqXoLgwJZFnbyWJS21mG3msg//cDLhLnPwzZsU6MsxhpA/sNIehWXxIghm+EUzLinkxnFx5sxLnlew5pZYLKIHx5w1rCN5u3IwC9kmBevrIoce9qwhoCkN4sZkmdmLQzNxCzsQIH0y0zOwIj7SHPzACisO/9eRHTEB6VfeaXKFyGCqSFlnD16wtL9KboEhed+0uhEo+KgpGnRt3t+W0AX9mlnQwaURaqYnDJChLmYfuPn5+fn/wcT8KyIieoAAA==" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.7.0/class_hash/pending.json b/crates/rpc/fixtures/0.7.0/class_hash/pending.json deleted file mode 100644 index 37954f7fb1..0000000000 --- a/crates/rpc/fixtures/0.7.0/class_hash/pending.json +++ /dev/null @@ -1 +0,0 @@ -"0x70656e64696e6720636c61737320302068617368" \ No newline at end of file diff --git a/crates/rpc/fixtures/0.7.0/fee_estimates/declare_deploy_invoke_sierra_0_14_0.json b/crates/rpc/fixtures/0.7.0/fee_estimates/declare_deploy_invoke_sierra_0_14_0.json new file mode 100644 index 0000000000..075ec555a9 --- /dev/null +++ b/crates/rpc/fixtures/0.7.0/fee_estimates/declare_deploy_invoke_sierra_0_14_0.json @@ -0,0 +1,34 @@ +[ + { + "data_gas_consumed": "0xc0", + "data_gas_price": "0x2", + "gas_consumed": "0x6c9", + "gas_price": "0x2", + "overall_fee": "0xf12", + "unit": "FRI" + }, + { + "data_gas_consumed": "0xe0", + "data_gas_price": "0x2", + "gas_consumed": "0x18", + "gas_price": "0x2", + "overall_fee": "0x1f0", + "unit": "FRI" + }, + { + "data_gas_consumed": "0x80", + "data_gas_price": "0x2", + "gas_consumed": "0x0", + "gas_price": "0x2", + "overall_fee": "0xcb5e8", + "unit": "FRI" + }, + { + "data_gas_consumed": "0x80", + "data_gas_price": "0x2", + "gas_consumed": "0x0", + "gas_price": "0x2", + "overall_fee": "0xcb5e8", + "unit": "FRI" + } +] diff --git a/crates/rpc/fixtures/0.7.0/fee_estimates/declare_deploy_invoke_sierra_0_14_1.json b/crates/rpc/fixtures/0.7.0/fee_estimates/declare_deploy_invoke_sierra_0_14_1.json new file mode 100644 index 0000000000..075ec555a9 --- /dev/null +++ b/crates/rpc/fixtures/0.7.0/fee_estimates/declare_deploy_invoke_sierra_0_14_1.json @@ -0,0 +1,34 @@ +[ + { + "data_gas_consumed": "0xc0", + "data_gas_price": "0x2", + "gas_consumed": "0x6c9", + "gas_price": "0x2", + "overall_fee": "0xf12", + "unit": "FRI" + }, + { + "data_gas_consumed": "0xe0", + "data_gas_price": "0x2", + "gas_consumed": "0x18", + "gas_price": "0x2", + "overall_fee": "0x1f0", + "unit": "FRI" + }, + { + "data_gas_consumed": "0x80", + "data_gas_price": "0x2", + "gas_consumed": "0x0", + "gas_price": "0x2", + "overall_fee": "0xcb5e8", + "unit": "FRI" + }, + { + "data_gas_consumed": "0x80", + "data_gas_price": "0x2", + "gas_consumed": "0x0", + "gas_price": "0x2", + "overall_fee": "0xcb5e8", + "unit": "FRI" + } +] diff --git a/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class.json b/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class.json index 1deb883e6d..95b7885f97 100644 --- a/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class.json +++ b/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class.json @@ -57,6 +57,38 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb12" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4ee" + } + ] + } + ] + }, "type": "DECLARE", "validate_invocation": { "call_type": "CALL", @@ -231,6 +263,38 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff93f" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6c1" + } + ] + } + ] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -368,6 +432,33 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff831" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x7cf" + } + ] + } + ] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -501,6 +592,33 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x4" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffee4" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x11c" + } + ] + } + ] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -529,4 +647,4 @@ } } } -] \ No newline at end of file +] diff --git a/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json b/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json index 7b2d62f11a..4d19f541fe 100644 --- a/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json +++ b/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json @@ -1,392 +1,483 @@ [ - { - "fee_estimation": { - "data_gas_consumed": "0xc0", - "data_gas_price": "0x2", - "gas_consumed": "0x371", - "gas_price": "0x1", - "overall_fee": "0x4f1", - "unit": "WEI" + { + "fee_estimation": { + "data_gas_consumed": "0xc0", + "data_gas_price": "0x2", + "gas_consumed": "0x371", + "gas_price": "0x1", + "overall_fee": "0x4f1", + "unit": "WEI" + }, + "transaction_trace": { + "execution_resources": { + "data_availability": { + "l1_data_gas": 192, + "l1_gas": 0 }, - "transaction_trace": { - "execution_resources": { - "data_availability": { - "l1_data_gas": 192, - "l1_gas": 0 - }, - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 31, - "steps": 1370 - }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4f1", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4f1", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 31, - "steps": 1370 - }, - "messages": [], - "result": [ - "0x1" - ] - }, - "type": "DECLARE", - "validate_invocation": { + "memory_holes": 59, + "pedersen_builtin_applications": 4, + "range_check_builtin_applications": 31, + "steps": 1370 + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x4f1", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x4f1", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "memory_holes": 59, + "pedersen_builtin_applications": 4, + "range_check_builtin_applications": 31, + "steps": 1370 + }, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb0f" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4f1" + } + ] + } + ] + }, + "type": "DECLARE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "steps": 0 + }, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + }, + { + "fee_estimation": { + "data_gas_consumed": "0xe0", + "data_gas_price": "0x2", + "gas_consumed": "0x17", + "gas_price": "0x1", + "overall_fee": "0x1d7", + "unit": "WEI" + }, + "transaction_trace": { + "execute_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0xc02", + "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "0x4", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0x0", + "calls": [ + { + "call_type": "CALL", + "calldata": [ + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0xc01", + "calls": [ + { "call_type": "CALL", - "calldata": [ - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" - ], - "caller_address": "0x0", + "calldata": [], + "caller_address": "0xc02", "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", - "entry_point_type": "EXTERNAL", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "entry_point_type": "CONSTRUCTOR", "events": [], "execution_resources": { - "steps": 0 + "steps": 0 }, "messages": [], - "result": [ - "0x56414c4944" - ] - } - } - }, - { - "fee_estimation": { - "data_gas_consumed": "0xe0", - "data_gas_price": "0x2", - "gas_consumed": "0x17", - "gas_price": "0x1", - "overall_fee": "0x1d7", - "unit": "WEI" - }, - "transaction_trace": { - "execute_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0xc02", - "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "0x4", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" + "result": [] + } + ], + "class_hash": "0x6f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc", + "contract_address": "0xc02", + "entry_point_selector": "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0xc01", + "0x0", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0" ], - "caller_address": "0x0", - "calls": [ - { - "call_type": "CALL", - "calldata": [ - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0xc01", - "calls": [ - { - "call_type": "CALL", - "calldata": [], - "caller_address": "0xc02", - "calls": [], - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", - "entry_point_type": "CONSTRUCTOR", - "events": [], - "execution_resources": { - "steps": 0 - }, - "messages": [], - "result": [] - } - ], - "class_hash": "0x6f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc", - "contract_address": "0xc02", - "entry_point_selector": "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0xc01", - "0x0", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0" - ], - "keys": [ - "0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 2, - "pedersen_builtin_applications": 7, - "range_check_builtin_applications": 22, - "steps": 1382 - }, - "messages": [], - "result": [ - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" - ] - } + "keys": [ + "0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d" ], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "memory_holes": 2, - "pedersen_builtin_applications": 7, - "range_check_builtin_applications": 22, - "steps": 1382 - }, - "messages": [], - "result": [ - "0x1", - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" - ] - }, + "order": 0 + } + ], "execution_resources": { - "data_availability": { - "l1_data_gas": 224, - "l1_gas": 0 - }, - "memory_holes": 61, - "pedersen_builtin_applications": 11, - "range_check_builtin_applications": 53, - "steps": 2752 + "memory_holes": 2, + "pedersen_builtin_applications": 7, + "range_check_builtin_applications": 22, + "steps": 1382 }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d7", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d7", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 31, - "steps": 1370 - }, - "messages": [], - "result": [ - "0x1" - ] - }, - "type": "INVOKE", - "validate_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0xc02", - "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "0x4", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0x0", - "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "steps": 0 - }, - "messages": [], - "result": [ - "0x56414c4944" - ] - } - } - }, - { - "fee_estimation": { - "data_gas_consumed": "0x80", - "data_gas_price": "0x2", - "gas_consumed": "0x0", - "gas_price": "0x2", - "overall_fee": "0xba0f9", - "unit": "FRI" + "messages": [], + "result": [ + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + ] + } + ], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "memory_holes": 2, + "pedersen_builtin_applications": 7, + "range_check_builtin_applications": 22, + "steps": 1382 }, - "transaction_trace": { - "execute_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "0x0" - ], - "caller_address": "0x0", - "calls": [ - { - "call_type": "CALL", - "calldata": [], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "entry_point_selector": "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "range_check_builtin_applications": 3, - "steps": 165 - }, - "messages": [], - "result": [ - "0x9" - ] - } - ], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "range_check_builtin_applications": 3, - "steps": 165 - }, - "messages": [], - "result": [ - "0x1", - "0x1", - "0x9" - ] - }, + "messages": [], + "result": [ + "0x1", + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + ] + }, + "execution_resources": { + "data_availability": { + "l1_data_gas": 224, + "l1_gas": 0 + }, + "memory_holes": 61, + "pedersen_builtin_applications": 11, + "range_check_builtin_applications": 53, + "steps": 2752 + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x1d7", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x1d7", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "memory_holes": 59, + "pedersen_builtin_applications": 4, + "range_check_builtin_applications": 31, + "steps": 1370 + }, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff938" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6c8" + } + ] + } + ] + }, + "type": "INVOKE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0xc02", + "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "0x4", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "steps": 0 + }, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + }, + { + "fee_estimation": { + "data_gas_consumed": "0x80", + "data_gas_price": "0x2", + "gas_consumed": "0x0", + "gas_price": "0x2", + "overall_fee": "0xba0f9", + "unit": "FRI" + }, + "transaction_trace": { + "execute_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "0x0" + ], + "caller_address": "0x0", + "calls": [ + { + "call_type": "CALL", + "calldata": [], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "entry_point_selector": "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "entry_point_type": "EXTERNAL", + "events": [], "execution_resources": { - "data_availability": { - "l1_data_gas": 128, - "l1_gas": 0 - }, - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 34, - "steps": 1535 + "range_check_builtin_applications": 3, + "steps": 165 }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0xa926e", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0xa926e", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 31, - "steps": 1370 - }, - "messages": [], - "result": [ - "0x1" - ] - }, - "type": "INVOKE", - "validate_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "0x0" - ], - "caller_address": "0x0", - "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "steps": 0 - }, - "messages": [], - "result": [ - "0x56414c4944" - ] - } - } + "messages": [], + "result": [ + "0x9" + ] + } + ], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "range_check_builtin_applications": 3, + "steps": 165 + }, + "messages": [], + "result": [ + "0x1", + "0x1", + "0x9" + ] + }, + "execution_resources": { + "data_availability": { + "l1_data_gas": 128, + "l1_gas": 0 + }, + "memory_holes": 59, + "pedersen_builtin_applications": 4, + "range_check_builtin_applications": 34, + "steps": 1535 + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xa926e", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xa926e", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "memory_holes": 59, + "pedersen_builtin_applications": 4, + "range_check_builtin_applications": 31, + "steps": 1370 + }, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffff56d92" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0xa926e" + } + ] + } + ] + }, + "type": "INVOKE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "0x0" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "steps": 0 + }, + "messages": [], + "result": [ + "0x56414c4944" + ] + } } + } ] diff --git a/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json b/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json index b27ce67fef..8179f2fdfd 100644 --- a/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json +++ b/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json @@ -1,392 +1,483 @@ [ - { - "fee_estimation": { - "data_gas_consumed": "0xc0", - "data_gas_price": "0x2", - "gas_consumed": "0x372", - "gas_price": "0x1", - "overall_fee": "0x4f2", - "unit": "WEI" + { + "fee_estimation": { + "data_gas_consumed": "0xc0", + "data_gas_price": "0x2", + "gas_consumed": "0x372", + "gas_price": "0x1", + "overall_fee": "0x4f2", + "unit": "WEI" + }, + "transaction_trace": { + "execution_resources": { + "data_availability": { + "l1_data_gas": 192, + "l1_gas": 0 }, - "transaction_trace": { - "execution_resources": { - "data_availability": { - "l1_data_gas": 192, - "l1_gas": 0 - }, - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 32, - "steps": 1455 - }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4f2", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4f2", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 32, - "steps": 1455 - }, - "messages": [], - "result": [ - "0x1" - ] - }, - "type": "DECLARE", - "validate_invocation": { + "memory_holes": 59, + "pedersen_builtin_applications": 4, + "range_check_builtin_applications": 32, + "steps": 1455 + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x4f2", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x4f2", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "memory_holes": 59, + "pedersen_builtin_applications": 4, + "range_check_builtin_applications": 32, + "steps": 1455 + }, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb0e" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4f2" + } + ] + } + ] + }, + "type": "DECLARE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "steps": 0 + }, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + }, + { + "fee_estimation": { + "data_gas_consumed": "0xe0", + "data_gas_price": "0x2", + "gas_consumed": "0x19", + "gas_price": "0x1", + "overall_fee": "0x1d9", + "unit": "WEI" + }, + "transaction_trace": { + "execute_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0xc02", + "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "0x4", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0x0", + "calls": [ + { + "call_type": "CALL", + "calldata": [ + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0xc01", + "calls": [ + { "call_type": "CALL", - "calldata": [ - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" - ], - "caller_address": "0x0", + "calldata": [], + "caller_address": "0xc02", "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", - "entry_point_type": "EXTERNAL", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "entry_point_type": "CONSTRUCTOR", "events": [], "execution_resources": { - "steps": 0 + "steps": 0 }, "messages": [], - "result": [ - "0x56414c4944" - ] - } - } - }, - { - "fee_estimation": { - "data_gas_consumed": "0xe0", - "data_gas_price": "0x2", - "gas_consumed": "0x19", - "gas_price": "0x1", - "overall_fee": "0x1d9", - "unit": "WEI" - }, - "transaction_trace": { - "execute_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0xc02", - "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "0x4", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" + "result": [] + } + ], + "class_hash": "0x6f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc", + "contract_address": "0xc02", + "entry_point_selector": "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0xc01", + "0x0", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0" ], - "caller_address": "0x0", - "calls": [ - { - "call_type": "CALL", - "calldata": [ - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0xc01", - "calls": [ - { - "call_type": "CALL", - "calldata": [], - "caller_address": "0xc02", - "calls": [], - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", - "entry_point_type": "CONSTRUCTOR", - "events": [], - "execution_resources": { - "steps": 0 - }, - "messages": [], - "result": [] - } - ], - "class_hash": "0x6f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc", - "contract_address": "0xc02", - "entry_point_selector": "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0xc01", - "0x0", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0" - ], - "keys": [ - "0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 2, - "pedersen_builtin_applications": 7, - "range_check_builtin_applications": 26, - "steps": 1484 - }, - "messages": [], - "result": [ - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" - ] - } + "keys": [ + "0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d" ], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "memory_holes": 2, - "pedersen_builtin_applications": 7, - "range_check_builtin_applications": 26, - "steps": 1484 - }, - "messages": [], - "result": [ - "0x1", - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" - ] - }, + "order": 0 + } + ], "execution_resources": { - "data_availability": { - "l1_data_gas": 224, - "l1_gas": 0 - }, - "memory_holes": 61, - "pedersen_builtin_applications": 11, - "range_check_builtin_applications": 58, - "steps": 2939 + "memory_holes": 2, + "pedersen_builtin_applications": 7, + "range_check_builtin_applications": 26, + "steps": 1484 }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d9", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d9", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 32, - "steps": 1455 - }, - "messages": [], - "result": [ - "0x1" - ] - }, - "type": "INVOKE", - "validate_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0xc02", - "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "0x4", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0x0", - "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "steps": 0 - }, - "messages": [], - "result": [ - "0x56414c4944" - ] - } - } - }, - { - "fee_estimation": { - "data_gas_consumed": "0x80", - "data_gas_price": "0x2", - "gas_consumed": "0x0", - "gas_price": "0x2", - "overall_fee": "0xc7fae", - "unit": "FRI" + "messages": [], + "result": [ + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + ] + } + ], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "memory_holes": 2, + "pedersen_builtin_applications": 7, + "range_check_builtin_applications": 26, + "steps": 1484 }, - "transaction_trace": { - "execute_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "0x0" - ], - "caller_address": "0x0", - "calls": [ - { - "call_type": "CALL", - "calldata": [], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "entry_point_selector": "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "range_check_builtin_applications": 3, - "steps": 168 - }, - "messages": [], - "result": [ - "0x9" - ] - } - ], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "range_check_builtin_applications": 3, - "steps": 168 - }, - "messages": [], - "result": [ - "0x1", - "0x1", - "0x9" - ] - }, + "messages": [], + "result": [ + "0x1", + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + ] + }, + "execution_resources": { + "data_availability": { + "l1_data_gas": 224, + "l1_gas": 0 + }, + "memory_holes": 61, + "pedersen_builtin_applications": 11, + "range_check_builtin_applications": 58, + "steps": 2939 + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x1d9", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x1d9", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "memory_holes": 59, + "pedersen_builtin_applications": 4, + "range_check_builtin_applications": 32, + "steps": 1455 + }, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff935" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6cb" + } + ] + } + ] + }, + "type": "INVOKE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0xc02", + "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "0x4", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "steps": 0 + }, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + }, + { + "fee_estimation": { + "data_gas_consumed": "0x80", + "data_gas_price": "0x2", + "gas_consumed": "0x0", + "gas_price": "0x2", + "overall_fee": "0xc7fae", + "unit": "FRI" + }, + "transaction_trace": { + "execute_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "0x0" + ], + "caller_address": "0x0", + "calls": [ + { + "call_type": "CALL", + "calldata": [], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "entry_point_selector": "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "entry_point_type": "EXTERNAL", + "events": [], "execution_resources": { - "data_availability": { - "l1_data_gas": 128, - "l1_gas": 0 - }, - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 35, - "steps": 1623 + "range_check_builtin_applications": 3, + "steps": 168 }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0xb5ce4", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0xb5ce4", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 32, - "steps": 1455 - }, - "messages": [], - "result": [ - "0x1" - ] - }, - "type": "INVOKE", - "validate_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "0x0" - ], - "caller_address": "0x0", - "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "steps": 0 - }, - "messages": [], - "result": [ - "0x56414c4944" - ] - } - } + "messages": [], + "result": [ + "0x9" + ] + } + ], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "range_check_builtin_applications": 3, + "steps": 168 + }, + "messages": [], + "result": [ + "0x1", + "0x1", + "0x9" + ] + }, + "execution_resources": { + "data_availability": { + "l1_data_gas": 128, + "l1_gas": 0 + }, + "memory_holes": 59, + "pedersen_builtin_applications": 4, + "range_check_builtin_applications": 35, + "steps": 1623 + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xb5ce4", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xb5ce4", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "memory_holes": 59, + "pedersen_builtin_applications": 4, + "range_check_builtin_applications": 32, + "steps": 1455 + }, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffff4a31c" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0xb5ce4" + } + ] + } + ] + }, + "type": "INVOKE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "0x0" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "steps": 0 + }, + "messages": [], + "result": [ + "0x56414c4944" + ] + } } + } ] diff --git a/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_fee_charge.json b/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_fee_charge.json index d92adaa558..9b51a78cf6 100644 --- a/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_fee_charge.json +++ b/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_fee_charge.json @@ -18,6 +18,24 @@ "range_check_builtin_applications": 4, "steps": 203 }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [] + }, "type": "DECLARE", "validate_invocation": { "call_type": "CALL", @@ -154,6 +172,24 @@ "range_check_builtin_applications": 80, "steps": 2915 }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -252,6 +288,19 @@ "range_check_builtin_applications": 60, "steps": 1818 }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -346,6 +395,19 @@ "range_check_builtin_applications": 60, "steps": 1818 }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x4" + } + ], + "replaced_classes": [], + "storage_diffs": [] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -374,4 +436,4 @@ } } } -] \ No newline at end of file +] diff --git a/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_validate.json b/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_validate.json index 5d5d35258d..99e0301034 100644 --- a/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_validate.json +++ b/crates/rpc/fixtures/0.7.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_validate.json @@ -57,6 +57,38 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb12" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4ee" + } + ] + } + ] + }, "type": "DECLARE" } }, @@ -209,6 +241,38 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff940" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6c0" + } + ] + } + ] + }, "type": "INVOKE" } }, @@ -317,6 +381,33 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff833" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x7cd" + } + ] + } + ] + }, "type": "INVOKE" } }, @@ -425,7 +516,34 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x4" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffee6" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x11a" + } + ] + } + ] + }, "type": "INVOKE" } } -] \ No newline at end of file +] diff --git a/crates/rpc/fixtures/0.7.0/simulations/simulate_transaction.json b/crates/rpc/fixtures/0.7.0/simulations/simulate_transaction.json new file mode 100644 index 0000000000..e79e72419c --- /dev/null +++ b/crates/rpc/fixtures/0.7.0/simulations/simulate_transaction.json @@ -0,0 +1,114 @@ +[ + { + "fee_estimation": { + "data_gas_consumed": "0x160", + "data_gas_price": "0x2", + "gas_consumed": "0x15", + "gas_price": "0x1", + "overall_fee": "0x2d5", + "unit": "WEI" + }, + "transaction_trace": { + "constructor_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "entry_point_type": "CONSTRUCTOR", + "events": [ + { + "data": [], + "keys": [ + "0x38f6a5b87c23cee6e7294bcc3302e95019f70f81586ff3cac38581f5ca96381", + "0x1" + ], + "order": 0 + } + ], + "execution_resources": { + "pedersen_builtin_applications": 2, + "range_check_builtin_applications": 8, + "steps": 312 + }, + "messages": [], + "result": [] + }, + "execution_resources": { + "data_availability": { + "l1_data_gas": 352, + "l1_gas": 0 + }, + "memory_holes": 1, + "pedersen_builtin_applications": 2, + "range_check_builtin_applications": 10, + "steps": 447 + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "storage_entries": [ + { + "key": "0x81ba5d1f84a6a8f0e7ae24720a20f43f81d9ee6eed98fd524ba8d53a49416b", + "value": "0x1" + }, + { + "key": "0x1379ac0624b939ceb9dede92211d7db5ee174fe28be72245b0a1a2abd81c98f", + "value": "0x1" + }, + { + "key": "0x7e79bbb6be5d418acd50c88b675e697f6f7094e203c9d7e29c6ad6731f931dd", + "value": "0x1" + } + ] + } + ] + }, + "type": "DEPLOY_ACCOUNT", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "0x46c0d4abf0192a788aca261e58d7031576f7d8ea5229f452b0f23e691dd5971", + "0x1" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "entry_point_selector": "0x36fcbf06cd96843058359e1a75928beacfac10727dab22a3972f0af8aa92895", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "memory_holes": 1, + "range_check_builtin_applications": 2, + "steps": 135 + }, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + } +] diff --git a/crates/rpc/fixtures/0.7.0/traces/multiple_pending_txs.json b/crates/rpc/fixtures/0.7.0/traces/multiple_pending_txs.json deleted file mode 100644 index c6cbcd6667..0000000000 --- a/crates/rpc/fixtures/0.7.0/traces/multiple_pending_txs.json +++ /dev/null @@ -1,469 +0,0 @@ -[ - { - "trace_root": { - "execution_resources": { - "data_availability": { - "l1_data_gas": 192, - "l1_gas": 0 - }, - "memory_holes": 60, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 35, - "steps": 1557 - }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4ee", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4ee", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 31, - "steps": 1354 - }, - "messages": [], - "result": [ - "0x1" - ] - }, - "state_diff": { - "declared_classes": [ - { - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" - } - ], - "deployed_contracts": [], - "deprecated_declared_classes": [], - "nonces": [ - { - "contract_address": "0xc01", - "nonce": "0x1" - } - ], - "replaced_classes": [], - "storage_diffs": [ - { - "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "storage_entries": [ - { - "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", - "value": "0xfffffffffffffffffffffffffb12" - }, - { - "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", - "value": "0x4ee" - } - ] - } - ] - }, - "type": "DECLARE", - "validate_invocation": { - "call_type": "CALL", - "calldata": [ - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" - ], - "caller_address": "0x0", - "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "memory_holes": 1, - "range_check_builtin_applications": 4, - "steps": 203 - }, - "messages": [], - "result": [ - "0x56414c4944" - ] - } - }, - "transaction_hash": "0x548c629e4ee49b5280bb1363288d2e112974beaa2959c96500a9f0cbc41e5ee" - }, - { - "trace_root": { - "execute_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0xc02", - "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "0x4", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0x0", - "calls": [ - { - "call_type": "CALL", - "calldata": [ - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0xc01", - "calls": [ - { - "call_type": "CALL", - "calldata": [], - "caller_address": "0xc02", - "calls": [], - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", - "entry_point_type": "CONSTRUCTOR", - "events": [], - "execution_resources": { - "steps": 0 - }, - "messages": [], - "result": [] - } - ], - "class_hash": "0x6f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc", - "contract_address": "0xc02", - "entry_point_selector": "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0xc01", - "0x0", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0" - ], - "keys": [ - "0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 2, - "pedersen_builtin_applications": 7, - "range_check_builtin_applications": 23, - "steps": 1262 - }, - "messages": [], - "result": [ - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" - ] - } - ], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "memory_holes": 20, - "pedersen_builtin_applications": 7, - "range_check_builtin_applications": 66, - "steps": 2574 - }, - "messages": [], - "result": [ - "0x1", - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" - ] - }, - "execution_resources": { - "data_availability": { - "l1_data_gas": 224, - "l1_gas": 0 - }, - "memory_holes": 83, - "pedersen_builtin_applications": 11, - "range_check_builtin_applications": 111, - "steps": 4269 - }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d3", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d3", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 31, - "steps": 1354 - }, - "messages": [], - "result": [ - "0x1" - ] - }, - "state_diff": { - "declared_classes": [], - "deployed_contracts": [ - { - "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" - } - ], - "deprecated_declared_classes": [], - "nonces": [ - { - "contract_address": "0xc01", - "nonce": "0x2" - } - ], - "replaced_classes": [], - "storage_diffs": [ - { - "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "storage_entries": [ - { - "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", - "value": "0xfffffffffffffffffffffffff93f" - }, - { - "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", - "value": "0x6c1" - } - ] - } - ] - }, - "type": "INVOKE", - "validate_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0xc02", - "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "0x4", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0x0", - "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "memory_holes": 4, - "range_check_builtin_applications": 14, - "steps": 341 - }, - "messages": [], - "result": [ - "0x56414c4944" - ] - } - }, - "transaction_hash": "0x1cdd84a12e3582bd60acf7546d6e1a54e9706414f28cd3b2ce8a3d2eb5e4f73" - }, - { - "trace_root": { - "execute_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "0x0" - ], - "caller_address": "0x0", - "calls": [ - { - "call_type": "CALL", - "calldata": [], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "entry_point_selector": "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "range_check_builtin_applications": 3, - "steps": 165 - }, - "messages": [], - "result": [ - "0x9" - ] - } - ], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "memory_holes": 18, - "range_check_builtin_applications": 46, - "steps": 1477 - }, - "messages": [], - "result": [ - "0x1", - "0x1", - "0x9" - ] - }, - "execution_resources": { - "data_availability": { - "l1_data_gas": 128, - "l1_gas": 0 - }, - "memory_holes": 81, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 91, - "steps": 3172 - }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x10e", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x10e", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "memory_holes": 59, - "pedersen_builtin_applications": 4, - "range_check_builtin_applications": 31, - "steps": 1354 - }, - "messages": [], - "result": [ - "0x1" - ] - }, - "state_diff": { - "declared_classes": [], - "deployed_contracts": [], - "deprecated_declared_classes": [], - "nonces": [ - { - "contract_address": "0xc01", - "nonce": "0x3" - } - ], - "replaced_classes": [], - "storage_diffs": [ - { - "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "storage_entries": [ - { - "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", - "value": "0xfffffffffffffffffffffffff831" - }, - { - "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", - "value": "0x7cf" - } - ] - } - ] - }, - "type": "INVOKE", - "validate_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "0x0" - ], - "caller_address": "0x0", - "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "memory_holes": 4, - "range_check_builtin_applications": 14, - "steps": 341 - }, - "messages": [], - "result": [ - "0x56414c4944" - ] - } - }, - "transaction_hash": "0x2a973a52127349ccb6ecd72c31a7b1fc444a526643b4afe8a275a536075cb0e" - } -] \ No newline at end of file diff --git a/crates/rpc/fixtures/0.7.0/traces/multiple_pre_confirmed_txs.json b/crates/rpc/fixtures/0.7.0/traces/multiple_pre_confirmed_txs.json new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/crates/rpc/fixtures/0.7.0/traces/multiple_pre_confirmed_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/rpc/fixtures/0.7.0/transactions/receipt_pending.json b/crates/rpc/fixtures/0.7.0/transactions/receipt_pending.json deleted file mode 100644 index 165ba030dc..0000000000 --- a/crates/rpc/fixtures/0.7.0/transactions/receipt_pending.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "actual_fee": { - "amount": "0x0", - "unit": "WEI" - }, - "events": [ - { - "data": [], - "from_address": "0xabcddddddd", - "keys": [ - "0x70656e64696e67206b6579" - ] - }, - { - "data": [], - "from_address": "0xabcddddddd", - "keys": [ - "0x70656e64696e67206b6579", - "0x7365636f6e642070656e64696e67206b6579" - ] - }, - { - "data": [], - "from_address": "0xabcaaaaaaa", - "keys": [ - "0x70656e64696e67206b65792032" - ] - } - ], - "execution_resources": { - "data_availability": { - "l1_data_gas": 0, - "l1_gas": 0 - }, - "steps": 0 - }, - "execution_status": "SUCCEEDED", - "finality_status": "ACCEPTED_ON_L2", - "messages_sent": [], - "transaction_hash": "0x70656e64696e6720747820686173682030", - "type": "INVOKE" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.7.0/transactions/receipt_reverted_pending.json b/crates/rpc/fixtures/0.7.0/transactions/receipt_reverted_pending.json deleted file mode 100644 index 9c99e466f9..0000000000 --- a/crates/rpc/fixtures/0.7.0/transactions/receipt_reverted_pending.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "actual_fee": { - "amount": "0x0", - "unit": "WEI" - }, - "events": [], - "execution_resources": { - "data_availability": { - "l1_data_gas": 0, - "l1_gas": 0 - }, - "steps": 0 - }, - "execution_status": "REVERTED", - "finality_status": "ACCEPTED_ON_L2", - "messages_sent": [], - "revert_reason": "Reverted!", - "transaction_hash": "0x70656e64696e67207265766572746564", - "type": "INVOKE" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.7.0/transactions/receipt_reverted_preconfirmed.json b/crates/rpc/fixtures/0.7.0/transactions/receipt_reverted_preconfirmed.json new file mode 100644 index 0000000000..926c7ac288 --- /dev/null +++ b/crates/rpc/fixtures/0.7.0/transactions/receipt_reverted_preconfirmed.json @@ -0,0 +1 @@ +"pre-0.9 json rpc doesn't have access to pre-confirmed data" diff --git a/crates/rpc/fixtures/0.7.0/transactions/status_pending.json b/crates/rpc/fixtures/0.7.0/transactions/status_pending.json deleted file mode 100644 index 8cfefa0492..0000000000 --- a/crates/rpc/fixtures/0.7.0/transactions/status_pending.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "execution_status": "SUCCEEDED", - "finality_status": "ACCEPTED_ON_L2" -} diff --git a/crates/rpc/fixtures/0.7.0/transactions/status_reverted.json b/crates/rpc/fixtures/0.7.0/transactions/status_reverted.json index 6b6cc60aa7..926c7ac288 100644 --- a/crates/rpc/fixtures/0.7.0/transactions/status_reverted.json +++ b/crates/rpc/fixtures/0.7.0/transactions/status_reverted.json @@ -1,4 +1 @@ -{ - "execution_status": "REVERTED", - "finality_status": "ACCEPTED_ON_L2" -} \ No newline at end of file +"pre-0.9 json rpc doesn't have access to pre-confirmed data" diff --git a/crates/rpc/fixtures/0.7.0/transactions/txn_pending_hash_0.json b/crates/rpc/fixtures/0.7.0/transactions/txn_pending_hash_0.json deleted file mode 100644 index 625b3fe314..0000000000 --- a/crates/rpc/fixtures/0.7.0/transactions/txn_pending_hash_0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "transaction_hash": "0x70656e64696e6720747820686173682030", - "type": "INVOKE", - "version": "0x0" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.7.0/transactions/txn_pending_reverted.json b/crates/rpc/fixtures/0.7.0/transactions/txn_pending_reverted.json deleted file mode 100644 index fb92c2312d..0000000000 --- a/crates/rpc/fixtures/0.7.0/transactions/txn_pending_reverted.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "transaction_hash": "0x70656e64696e67207265766572746564", - "type": "INVOKE", - "version": "0x0" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.7.0/transactions/txn_preconfirmed_reverted.json b/crates/rpc/fixtures/0.7.0/transactions/txn_preconfirmed_reverted.json new file mode 100644 index 0000000000..926c7ac288 --- /dev/null +++ b/crates/rpc/fixtures/0.7.0/transactions/txn_preconfirmed_reverted.json @@ -0,0 +1 @@ +"pre-0.9 json rpc doesn't have access to pre-confirmed data" diff --git a/crates/rpc/fixtures/0.8.0/blocks/latest.json b/crates/rpc/fixtures/0.8.0/blocks/latest.json index 6f8222777c..5a0f4a7a2a 100644 --- a/crates/rpc/fixtures/0.8.0/blocks/latest.json +++ b/crates/rpc/fixtures/0.8.0/blocks/latest.json @@ -1,214 +1,194 @@ { - "block_hash":"0x6c6174657374", - "block_number":2, - "l1_da_mode":"CALLDATA", - "l1_data_gas_price":{ - "price_in_fri":"0x0", - "price_in_wei":"0x0" + "block_hash": "0x6c6174657374", + "block_number": 2, + "l1_da_mode": "CALLDATA", + "l1_data_gas_price": { + "price_in_fri": "0x0", + "price_in_wei": "0x0" }, - "l1_gas_price":{ - "price_in_fri":"0x0", - "price_in_wei":"0x2" + "l1_gas_price": { + "price_in_fri": "0x0", + "price_in_wei": "0x2" }, - "l2_gas_price":{ - "price_in_fri":"0x0", - "price_in_wei":"0x0" + "l2_gas_price": { + "price_in_fri": "0x0", + "price_in_wei": "0x0" }, - "new_root":"0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", - "parent_hash":"0x626c6f636b2031", - "sequencer_address":"0x2", - "starknet_version":"", - "status":"ACCEPTED_ON_L2", - "timestamp":2, - "transactions":[ + "new_root": "0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", + "parent_hash": "0x626c6f636b2031", + "sequencer_address": "0x2", + "starknet_version": "0.13.2", + "status": "ACCEPTED_ON_L2", + "timestamp": 2, + "transactions": [ { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "l1_data_gas":0, - "l1_gas":0, - "l2_gas":0 + "events": [], + "execution_resources": { + "l1_data_gas": 0, + "l1_gas": 0, + "l2_gas": 0 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x74786e2033", - "type":"INVOKE" + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "transaction_hash": "0x74786e2033", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x636f6e74726163742031", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "type": "INVOKE", + "version": "0x0" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "l1_data_gas":0, - "l1_gas":0, - "l2_gas":0 + "events": [], + "execution_resources": { + "l1_data_gas": 0, + "l1_gas": 0, + "l2_gas": 0 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x74786e2034", - "type":"INVOKE" + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "transaction_hash": "0x74786e2034", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x0", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x0", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "type": "INVOKE", + "version": "0x0" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "l1_data_gas":0, - "l1_gas":0, - "l2_gas":0 + "events": [], + "execution_resources": { + "l1_data_gas": 0, + "l1_gas": 0, + "l2_gas": 0 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x74786e2035", - "type":"INVOKE" + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "transaction_hash": "0x74786e2035", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x636f6e74726163742031", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "type": "INVOKE", + "version": "0x0" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "FRI" }, - "events":[ - - ], - "execution_resources":{ - "l1_data_gas":0, - "l1_gas":0, - "l2_gas":0 + "events": [], + "execution_resources": { + "l1_data_gas": 0, + "l1_gas": 0, + "l2_gas": 0 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [ { - "from_address":"0xcafebabe", - "payload":[ + "from_address": "0xcafebabe", + "payload": [ "0x1", "0x2", "0x3" ], - "to_address":"0x0" + "to_address": "0x0" } ], - "transaction_hash":"0x74786e2036", - "type":"INVOKE" + "transaction_hash": "0x74786e2036", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "account_deployment_data": [], + "calldata": [], + "fee_data_availability_mode": "L1", + "nonce": "0x0", + "nonce_data_availability_mode": "L1", + "paymaster_data": [], + "resource_bounds": { + "l1_data_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l1_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l2_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "sender_address": "0x636f6e74726163742032202873696572726129", + "signature": [], + "tip": "0x0", + "type": "INVOKE", + "version": "0x3" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "l1_data_gas":0, - "l1_gas":0, - "l2_gas":0 + "events": [], + "execution_resources": { + "l1_data_gas": 0, + "l1_gas": 0, + "l2_gas": 0 }, - "execution_status":"REVERTED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "revert_reason":"Reverted because", - "transaction_hash":"0x74786e207265766572746564", - "type":"INVOKE" + "execution_status": "REVERTED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "revert_reason": "Reverted because", + "transaction_hash": "0x74786e207265766572746564", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x636f6e74726163742031", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "type": "INVOKE", + "version": "0x0" } } ] -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/0.8.0/blocks/latest_with_tx_hashes.json b/crates/rpc/fixtures/0.8.0/blocks/latest_with_tx_hashes.json index a9d4b53976..2b51c15576 100644 --- a/crates/rpc/fixtures/0.8.0/blocks/latest_with_tx_hashes.json +++ b/crates/rpc/fixtures/0.8.0/blocks/latest_with_tx_hashes.json @@ -17,7 +17,7 @@ "new_root": "0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", "parent_hash": "0x626c6f636b2031", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", "status": "ACCEPTED_ON_L2", "timestamp": 2, "transactions": [ @@ -27,4 +27,4 @@ "0x74786e2036", "0x74786e207265766572746564" ] -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/0.8.0/blocks/latest_with_txs.json b/crates/rpc/fixtures/0.8.0/blocks/latest_with_txs.json index c0bd5c645d..c96d2944df 100644 --- a/crates/rpc/fixtures/0.8.0/blocks/latest_with_txs.json +++ b/crates/rpc/fixtures/0.8.0/blocks/latest_with_txs.json @@ -17,7 +17,7 @@ "new_root": "0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", "parent_hash": "0x626c6f636b2031", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", "status": "ACCEPTED_ON_L2", "timestamp": 2, "transactions": [ @@ -52,14 +52,32 @@ "version": "0x0" }, { + "account_deployment_data": [], "calldata": [], - "contract_address": "0x636f6e74726163742031", - "entry_point_selector": "0x0", - "max_fee": "0x0", + "fee_data_availability_mode": "L1", + "nonce": "0x0", + "nonce_data_availability_mode": "L1", + "paymaster_data": [], + "resource_bounds": { + "l1_data_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l1_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l2_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "sender_address": "0x636f6e74726163742032202873696572726129", "signature": [], + "tip": "0x0", "transaction_hash": "0x74786e2036", "type": "INVOKE", - "version": "0x0" + "version": "0x3" }, { "calldata": [], @@ -72,4 +90,4 @@ "version": "0x0" } ] -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/0.8.0/blocks/pending.json b/crates/rpc/fixtures/0.8.0/blocks/pending.json deleted file mode 100644 index c1bc4b1fd4..0000000000 --- a/crates/rpc/fixtures/0.8.0/blocks/pending.json +++ /dev/null @@ -1,154 +0,0 @@ -{ - "l1_da_mode":"CALLDATA", - "l1_data_gas_price":{ - "price_in_fri":"0x7374726b206461746761737072696365", - "price_in_wei":"0x6461746761737072696365" - }, - "l1_gas_price":{ - "price_in_fri":"0x7374726b20676173207072696365", - "price_in_wei":"0x676173207072696365" - }, - "l2_gas_price":{ - "price_in_fri":"0x7374726b206c32676173207072696365", - "price_in_wei":"0x6c3220676173207072696365" - }, - "parent_hash":"0x6c6174657374", - "sequencer_address":"0x70656e64696e672073657175656e6365722061646472657373", - "starknet_version":"0.11.0", - "timestamp":1234567, - "transactions":[ - { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" - }, - "events":[ - { - "data":[ - - ], - "from_address":"0xabcddddddd", - "keys":[ - "0x70656e64696e67206b6579" - ] - }, - { - "data":[ - - ], - "from_address":"0xabcddddddd", - "keys":[ - "0x70656e64696e67206b6579", - "0x7365636f6e642070656e64696e67206b6579" - ] - }, - { - "data":[ - - ], - "from_address":"0xabcaaaaaaa", - "keys":[ - "0x70656e64696e67206b65792032" - ] - } - ], - "execution_resources":{ - "l1_data_gas":0, - "l1_gas":0, - "l2_gas":0 - }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x70656e64696e6720747820686173682030", - "type":"INVOKE" - }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector":"0x656e74727920706f696e742030", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" - } - }, - { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" - }, - "contract_address":"0x1122355", - "events":[ - - ], - "execution_resources":{ - "l1_data_gas":0, - "l1_gas":0, - "l2_gas":0 - }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x70656e64696e6720747820686173682031", - "type":"DEPLOY" - }, - "transaction":{ - "class_hash":"0x70656e64696e6720636c61737320686173682031", - "constructor_calldata":[ - - ], - "contract_address_salt":"0x73616c7479", - "type":"DEPLOY", - "version":"0x0" - } - }, - { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" - }, - "events":[ - - ], - "execution_resources":{ - "l1_data_gas":0, - "l1_gas":0, - "l2_gas":0 - }, - "execution_status":"REVERTED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "revert_reason":"Reverted!", - "transaction_hash":"0x70656e64696e67207265766572746564", - "type":"INVOKE" - }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector":"0x656e74727920706f696e742030", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" - } - } - ] -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.8.0/blocks/pending_with_tx_hashes.json b/crates/rpc/fixtures/0.8.0/blocks/pending_with_tx_hashes.json deleted file mode 100644 index c126f7ad9f..0000000000 --- a/crates/rpc/fixtures/0.8.0/blocks/pending_with_tx_hashes.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "l1_da_mode": "CALLDATA", - "l1_data_gas_price": { - "price_in_fri": "0x7374726b206461746761737072696365", - "price_in_wei": "0x6461746761737072696365" - }, - "l1_gas_price": { - "price_in_fri": "0x7374726b20676173207072696365", - "price_in_wei": "0x676173207072696365" - }, - "l2_gas_price": { - "price_in_fri": "0x7374726b206c32676173207072696365", - "price_in_wei": "0x6c3220676173207072696365" - }, - "parent_hash": "0x6c6174657374", - "sequencer_address": "0x70656e64696e672073657175656e6365722061646472657373", - "starknet_version": "0.11.0", - "timestamp": 1234567, - "transactions": [ - "0x70656e64696e6720747820686173682030", - "0x70656e64696e6720747820686173682031", - "0x70656e64696e67207265766572746564" - ] -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.8.0/blocks/pending_with_txs.json b/crates/rpc/fixtures/0.8.0/blocks/pending_with_txs.json deleted file mode 100644 index 4ed6bb554e..0000000000 --- a/crates/rpc/fixtures/0.8.0/blocks/pending_with_txs.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "l1_da_mode": "CALLDATA", - "l1_data_gas_price": { - "price_in_fri": "0x7374726b206461746761737072696365", - "price_in_wei": "0x6461746761737072696365" - }, - "l1_gas_price": { - "price_in_fri": "0x7374726b20676173207072696365", - "price_in_wei": "0x676173207072696365" - }, - "l2_gas_price": { - "price_in_fri": "0x7374726b206c32676173207072696365", - "price_in_wei": "0x6c3220676173207072696365" - }, - "parent_hash": "0x6c6174657374", - "sequencer_address": "0x70656e64696e672073657175656e6365722061646472657373", - "starknet_version": "0.11.0", - "timestamp": 1234567, - "transactions": [ - { - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "transaction_hash": "0x70656e64696e6720747820686173682030", - "type": "INVOKE", - "version": "0x0" - }, - { - "class_hash": "0x70656e64696e6720636c61737320686173682031", - "constructor_calldata": [], - "contract_address_salt": "0x73616c7479", - "transaction_hash": "0x70656e64696e6720747820686173682031", - "type": "DEPLOY", - "version": "0x0" - }, - { - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "transaction_hash": "0x70656e64696e67207265766572746564", - "type": "INVOKE", - "version": "0x0" - } - ] -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.8.0/blocks/pre_confirmed.json b/crates/rpc/fixtures/0.8.0/blocks/pre_confirmed.json index 7a89dc5c49..40a66d65d2 100644 --- a/crates/rpc/fixtures/0.8.0/blocks/pre_confirmed.json +++ b/crates/rpc/fixtures/0.8.0/blocks/pre_confirmed.json @@ -14,7 +14,7 @@ }, "parent_hash": "0x6c6174657374", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", "timestamp": 2, "transactions": [] } diff --git a/crates/rpc/fixtures/0.8.0/blocks/pre_confirmed_with_tx_hashes.json b/crates/rpc/fixtures/0.8.0/blocks/pre_confirmed_with_tx_hashes.json index 78bec60667..56d57c18c1 100644 --- a/crates/rpc/fixtures/0.8.0/blocks/pre_confirmed_with_tx_hashes.json +++ b/crates/rpc/fixtures/0.8.0/blocks/pre_confirmed_with_tx_hashes.json @@ -14,7 +14,7 @@ }, "parent_hash": "0x6c6174657374", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", "timestamp": 2, "transactions": [] } diff --git a/crates/rpc/fixtures/0.8.0/blocks/pre_confirmed_with_txs.json b/crates/rpc/fixtures/0.8.0/blocks/pre_confirmed_with_txs.json index 7a89dc5c49..40a66d65d2 100644 --- a/crates/rpc/fixtures/0.8.0/blocks/pre_confirmed_with_txs.json +++ b/crates/rpc/fixtures/0.8.0/blocks/pre_confirmed_with_txs.json @@ -14,7 +14,7 @@ }, "parent_hash": "0x6c6174657374", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", "timestamp": 2, "transactions": [] } diff --git a/crates/rpc/fixtures/0.8.0/class_at/pending.json b/crates/rpc/fixtures/0.8.0/class_at/pending.json deleted file mode 100644 index b712fce74b..0000000000 --- a/crates/rpc/fixtures/0.8.0/class_at/pending.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "abi":[ - { - "inputs":[ - { - "name":"address", - "type":"felt" - }, - { - "name":"value", - "type":"felt" - } - ], - "name":"increase_value", - "outputs":[ - - ], - "type":"function" - }, - { - "inputs":[ - { - "name":"contract_address", - "type":"felt" - }, - { - "name":"address", - "type":"felt" - }, - { - "name":"value", - "type":"felt" - } - ], - "name":"call_increase_value", - "outputs":[ - - ], - "type":"function" - }, - { - "inputs":[ - { - "name":"address", - "type":"felt" - } - ], - "name":"get_value", - "outputs":[ - { - "name":"res", - "type":"felt" - } - ], - "type":"function" - } - ], - "entry_points_by_type":{ - "CONSTRUCTOR":[ - - ], - "EXTERNAL":[ - { - "offset":117, - "selector":"0x26813d396fdb198e9ead934e4f7a592a8b88a059e45ab0eb6ee53494e8d45b0" - }, - { - "offset":85, - "selector":"0x3033d3588abc2928b334742248e380daa139fc6b2bba31d609282d2c641a450" - }, - { - "offset":61, - "selector":"0x34c4c150632e67baf44fc50e9a685184d72a822510a26a66f72058b5e7b2892" - } - ], - "L1_HANDLER":[ - - ] - }, - "program":"H4sIAAAAAAAE/91de2/bSJL/Kgb/SnYcgW9SBuYPT+KdDS6PPduze7ggIGiJ8giRJa1EzSQX+LtfVb/YTTbJbpIKsLtYT2yKrK761buapL47eVke1g+nsjg6V58+XzoPp/WmXG/xL+eQbx+LbPF7sfjiwEfLvMzhJMf9GrpJ6rpeslqt8Me5hGMe+a/vpg94iP0U5GCYujE/H/516cEg9uJFvAiDeBUXSZj48HeQhPRD1/XxTCAzh58VPxjAQVwWD+byQR/OwoMP8sGAHVzIB0N2cEkPpj5nbQ60KWsJ+4jwEOH54iMQBRmLlYPmQkcgYLxKUNQkjiI/jkDohsgLoN4QGQ82eF4IxgKZZ0Sj+mgwewkwOk/COKK0K50QFfODXCd4UEEaucCDDa4falzrGWy1Mc9zQQ2uB1Twh+oM/nDF/zwXLNPi/wWlEboemgyxaaQnS+jiAdCLIiFZHg6qEuKZ+EMu98l/gd8czkMLXYmP2EGESDnIDbI6GISLcOFFbhz4RZw85KswXC0it5jncRp5abhM/Dz1/chzcz/O4xgszI3Sh6hIHvx0zlnwU1waf4AVJkfq5uxAtZo3Ob7LmKHgoU0sYflqtRBYgAMIT3XQbwkjeFYDLzyI3lFdfgYJWGBJiQQFMFytxiRQWQhTP4WzUNYlIkwAOANfNMK24OXHsDTGy4oFnzASuj6ihtwRtunB1MXY5gLblYeCcPxgRYQdVCl7k5vNiuaU9mwTtqgDOUbmFDE4FpXimNdTIgQHgIsebAHURdS0XowfVJRDatQGpsrORE1Ul08P5cLWTlg+sbWTBuqoCrSoHuMBGPBMEh6EEqaHwdSiVHWE1ELqBzVFDTUedr65RalnhtR41OWmxyJPiNfrLb01+YauG6CC8AcCBU8jNNLgQfwhhJnz6oTB4Ijn4Q8QobaJYrMDlSfouUvpcnBpZVZsOVuDVW1zepQLIRzat+oe06+2UgwQq9QKypBacd3WSEIzONjQBHYExcPpMVtvVzvnanvabC6d39fbEnqH744LnQJ0F4tFcTyuHzZFdlzs9qTJcI5lfvjyZ34oZot8fdjNFrunp912lm82OzSnro/ZSbD0YrcsnCvnqXjaHb59yvefL36+OBaPTwWsP8uXyxcvwQhXm92fWXnIF1/W28eM9i/A1F4cc66+O4+H3WnvXLmXzm61OhYl/Pp86RyKVXEotosiWy9RoOfnZ1jVMxKLSLAtSi7Z8dtxAdIdgSPyEZGd/KY5CUDZbLLFbot8l9h3LaiojEr2e75dboqDet4LLvvP/JfLC37Bvjz8DELMpL9twfEqcDwNOJJKzcSaZVlZPO0BzfjS/mIEkyozGHF1dlz/H5iQP4QE004GhnYojmAfYD1EcgvVzlan7aJc77bZsdgUi3J3cK4AZ2syTK3OVWQviWwTzlXIjTxtd94se8rX2ywDW1Z+/fOQ7/fF4cg+qf6cPRZl9ke+ORUZuBOYcnYoytNhK1n2dE7sgR66vNjJsn7OZtLcIwPnca5SIGt2Jch6LA+nBUSRZM7gnLej2a9swLn/pNkRrCd/LADafCkBy0xDhAz5tDNHDHArroihEUPmlgUMD1wEKFsigvmAuuncyEWUhRmGsLCZc+ouplbkudQg/A736pfMziD+PKzLwsAiyHlnNgkI1lOZBGGX2YQPqkmt9EqvFrHbMwucXLH0amYWTLPJgPVJTATeY2oVcUeYUCKtFH+rWAZWoQSo9XZxKPJjQSOvZADTxVrI3FydvqsrCjoYAtXxJJ7li/KUb1g2DgFJ0+sOj1X+DcG4LK5j2IegecOrSB4IQebu80uoakLIpGCQXSc2MkwIwaXzgqLMjiyxRPVspCq7ltNZFppH7VnI3rxQeVD3n93GAEZuY0HQa2MarloNLYZUoADed7FsbXHdbgwu5hV9ZbNx3WYNqDDDjetu0nMpsd4Y0DQQGU0YjCWpW5luiYYdJ5Cde9c4FJUxJyYgKME28TBggjGsl9DsrVdrqDqxj+NWPHv/7TWrz/Fw+W0PVb6zzZ+K4z6HORhcqTl1dn14hDr+u7M6bTYZng3dZet5l9h4PtCFgR7tJAAwttiReip8oqPw9sPr25vru5vsH9fvfrvJ7m7e3by+/3grMQu2ciwhpDNte+HcS0KY2fq+m7huFMxjP02TAH6d+3A49uM4ncPehRuEnhslge97XhrFceT6qT+PE9+L4iAI4OK4jaen/Wa9WJemKLyVzx+Fxi3tBqAR70OenTlqtbu3/3vz8a/Zu4+vr9/dtSOO+UynunyzgRkF8LosjuV6m5fr3RbspKramhMNNrK4dJht5Jt1fnRa1EB8DLRPe/+OdciK26IxYlCnAmBCJqsui03xmJdFhssjKG3Sta6qUjCTVc1adNnF7pCXuwM4Iu5F7xfOVQCJkcnA++U28FSCxg6tu0y2MSdfLmn38N0h6s04P8UGnZQnKGxzFizwVEG++xq0M+bk3Sf6z2AxNMxAwGQMdIeZmlyKx4JlEW/riHNdlyvwNHJAtyQIkxLPNaf/BQyXwwpNExTXfFQzRHIWN+xlZhfK0gotmAb7GoyG8QdB0sWfGrWMeCyOwmgf0gKlpaprVC+rWSj65Xcnr+anYqbKhqhhNScMASriwFAzMxN3Pi3yY/litb+8WIHv/OUvLz+DL1sThNqHEyT0Pq1g+vvThceovhxCE0ojHU2/ognTX2Z8YjQMC8FAifZjUtUxa2gJS6oAI5wufqxOm86Co4XaQLVETC2he+lwiala8v3FTxcvXnkvucygnOFC9wRNS6E5tYFCY5gltgjJRBV6RYUOpxEa8yf3RmjX8gOMAafxSQ3lgVgIv4QeRsWibgAD3bPH34eblGlytbStBtmBwPYaWTSNkRnmW0sU6lTPBUI8EQhFiY6mjalYPdhKz8gNlNrDtgoDTCjlEX1UJU413AegdUa5M1oKamILVE7DZKckzwaAP43eTSpHS/llkgPF73X9hEtP1H9pWvL021WgEB5uVywTTGJQlNa5oBQSY/FoIfBT8bTYf8OA0dbdkuKM79nT02f0H3AqVvs1u3fMzPVRKLQay0LqZZ3ia1kctvnGAYYxTiRQwzKK2q5WQ7S7n229QG5e/q06WZ1ERj1s74UKJPW8B6ojdpBx9UCjAurn3Sg2ZnLA0J2O+Yefb9q96phm7ScsoY1oHZfIEkK9T5MFFPxMpmNJdqifLx3RY+qIGfaqGPw66fDiHQTRQWssHKdjE1nAzypVXDrc92iIuhINKel8rJoAHWCNSnKsxA2C5xLdqjTViW7oRsa6rtM7l+BKOdqdlyVT8nkXncLAQ7WlehNlkqV0gJoEGWM0ZWLnQtKmxLGCUlSOpHaCBMqimH4Mo8OSaciiuGmnci74rMqax4LdUkXLma5Kw3MDMY7XlhqCVneBUTtNzjCmZYWUC2EOw7R4bOaiaimjfN9yusKh7AC6oNySsg3Z7EnUFYPsRIU12FpALeoyY5W5RBI35GhI6q7Y5IlWhxTUQtqw07zaxlNgM74SlqZpYrjMc9U8PcxVZiY20COaTOJs4okyhMS77pwk4ZaAjWB547kQXVXcWE6yC6Tq2BlNtLuliSrT1MYZlV53sNGdqzhNj4XKtsSg0Ad/fqJXba/5IlxqQlONMaP41HWNIpRsXTrXGxKkaouzAATUtZauP1tmEozMoJuo0RkSjWokehRuIg0nYeO4MCPnJoJtDvoX2jmzKTUsCb81Kflq4nUkARPR8PKBYvGwEYGoqlgsaljtB9XEMrFoE/lkOgPl7FWfaIEMwi5gxc2iFz816naHc4mux/dpYujbuxVDGO6ri2uaYRT1UdFEJZTAuZRhleKP5e4gbn6H0LZsuTen9e4VhYAI/81RHz+P3AFMM6L+LqDelSgF3VLVLb30Vh5Vb3TRrno/BRtipbWahrsJt+Rjk4ss0kMPue50anPxdDy1ZcwebthlMh/y6zSyfXlAXXZV/ThqZNs92lPlcgDvjaV5We/RPFr5mL/p02itLMh0pZYNJh3MruS6qAcGq8zfQ0u6LSWXbxnXS6zGsGGkbaIbbPxxkHmqQVekYfLK4TeqkEFj8PIz/BtcvLr4xO4/gCP0rouXznNrJLcQQr5ZeWJ8JNIT4vNJA5BHIelOb3agNAaqkC50PjjYegCdxhrnhGl6iJjFTm81lPA5wQCn8qcFpC1MY4wcaiNIc3IURBxh8hOn6S427SOWcEjneWrSQm/Tkw4YJKNCK97BF2nTcGMg1huRKK2BJoBVAbahaduUx6xf62WSnrDMsIhEudWiumu/DwBhhYJUQVNyh2OW6cra5hO3E4SfMVtIPb6hZquIpHPhHJ8tTJg81ITqnEPZTgPklUOpW7XfffAWZXakg/Z6wuvS5ExUsVaxDopWvtpAI++Dxb28MOCbxMCh1RQIgTdaoek3CgTr6M+JDYWDzwLmvU5vKbPylOiMsZl1dRK2loAgUoJTCk+qRbCCVbEpXw4vmeW5Ut0xkLS1omWCA+XVdQ+fiLy8WYB4w1Ia0bZxKu7zqhev1FnVQNfJlNc88DuoAF41hZAZCXldBvEv8/uupFj3WJjvg3rgOywvYU4jT25BN6w8rCjo9Y9DaqfKjT5QpR7kigHPkQZf+KRlPePRR7WucsnY9W9bnsLTgT1jJ8tr/qcPNyrYh440KgoTDTJ6CdoEIM+rntzhEchDl+FFiRKBYFwBvZY3YoChZx66Z75LA/GCxIXafXir00Z6WEZrnTK8EsFJ0VADMsDBAnLn1k8ft9gY6sTuzEJaIJHSGeQd0GQOsisOpllilxHA1irR1mzQlRjZDqUwFDzenXke7Mxz16HGMrSel8WjFtTblIlLQGiW8vStmDhxdAPWTmkolNooRKGUCiEMQ9xcehsv2RjJK0uw8/J8KAy0qjLbhKI6IZ2tBELR33BVZ4t8amChUKMPaa5k0T3cBaCiw1BfK7r3Uuqw6oySqtOkOKwuBK6xEdB6pmF44ySG2pOBwlHqFXQU9MHUQRJmtPKzHF80gKJkziiqqPTtM5bc44xIVzKZoYKaxQgWH4jZdjdLll4iQCSkrewlU5ok9Avl7iqgRRzUhUEUi+D9TYtK06iFoa+H0l04QXHP41TdSMTopjL7W9p+yDUo9ErUl3zjLipTQJ0pDRIwsTptemrHLgIyIII38w6vRvqWCjyEK3apzI/TGVz5viSGfTwx2xRbtDhdfc3PxUKmPkAFZrsukfaKg6EqM2yukDt9I52pJpBlkDZOhy2zc6yLdVKYpaB+2lZxDGxHRpv4uwcH1YRs87IEvLpJEjo7TpI3cbj97LGwaDg+E77aiwK4vfmD77rqyXSFs6MNUZgF39qzBkZcYycRt/mZdSyiL8zF71EQvPS+jUO2B3R+amLgnNwePhGDGN2Z1BT2NPWTlgZwG8Yqa9jrdIfanKhUMKOr8Ne7auuKrAY/RDxwQfKEXz3WdWVee2iqHud8qOBNta1cG5ddtjfRxRAzmee3ll0qzf5qS3e+nMPNa4oaJeMyp+u6STi57S9qajywK+TV/9MnyTUEDCsejB9KxVMjIw89R9wcZ0bVxt1juaanT/agd/EQSBIQn+fAHBXmOf6IsXIH/9IouB4WV9Dzw6hsddro+wMzqhOiQvOyBAuv1WDEZVKUdDPMsLecUZjQPCcEYBmiZB0Nw6BGoB0BJDe57PW6gGS77vmFtbOZvzTNnrTPjdZsjN9AF+vn0Lp+biEzUDvYaGLVjK/qZW4z8vacBn+0uO2d6avXQbRi9Yl+sK+ePXq630NuILiY0wi4UG2p4PLIFzXurBoQ/Uzq4ZqAoiwxTQnSGgPBEOPpWL9z5EoDeS23JDwMgweHQlpH65yL1LgACAidofJzV0u8y54XE46UNKNjxXHpj0lLaU0pMimIXBo6Xw6KnPJgXVfp2ChVpjVQSiMvp/LSfRfjFNfnMi+qd1kONJlMnSZOPNhouQMqx3dMs7dGg/50+wKumK/K7Wk/PW2XanqZ3KR1NqsGBLt6VtvLp+TrVtvBGnDELpR5cbAqBAU2ZubogHxMKw3NPaHUo7hbzGBliwayhRplkH/x8+yXdfnn+lj8ciJfBI15Qc6Cg2hcSq/Ld74iSbomq2FWtP+qMLl0vmb5dpmR17V1nYpTza/Z7tB/Jt5C+zX7anIqPkzXu7L0xoDIXHFUFgH1zeLjfhTOMgEF5Kc+kBGPfeOkFu0Wi2y/W2/L2c3i7/gvlJ+ysv41AR3UZPORSHt+omcRm5IReqFigvcuWx4mJprkN61q8GGmLcrzFkkImUwYxN/y4++jDEImoBjEoTieNvrXEUvaRC18bWhT4582/hEM1sPd+nGbl6fDuGDUoKIA81Qcj/lj0Sc0KU9PD9mXold0Kabr9q5bLGG5XpRZTr4vc/YGfr8mvyJbq9Nmw7+RxO5iRVAd56tm5N0Wf9LdUlyamiez5drJaCv7Q/GH2dlSvLSwh4ZjgUeuTps+OBqXKUBMbuAWWv4dHHwmOykIZBRiqCa0gUK4lybYEHvZSt8TUu7wXQmz6zdvbrNfPv724Q2qmSl4sdvKXzvzynPjxHMTfx65XpQEEfyWRr6bhr7rzcMocAN/7iZBErpu6EdRlKZplMIl8zCdYxQu88MXcod/Gxfvr/8nu7v/eHv960329v7mfYbFTDtDfoTvWSbEOsnmx2NxKDM/crOHNYl5RhA/5eXvs9q1VtjSB+uPs9fX795lrz9+uL+9fn1v8P0+AGkU+EkQJpHvu2Hih2nszb0kDVPS43RILJaErkH+1iO9kxBCsjVoL1ec5VD861SAVYCdLvL1YZcxWyGk9FrQEb1lZNTdAEhKe7C5AlU+jvqR0qnIG9cBRJA+TDj7gMIIZDkVBWB81SAZnABtBYMVxGa5VcCKjZ+cHckXonx3GldIyRzrWHBp8l1Cpl9Ig2mO95TZsdgUCwgYDfUga9JCmAlMz5WSY3fdbKgXpngAb3XaaPKCHRlFM2zGo5VeVgxixs410osEQXfmaOX9zc27m1+v728yEmn6v0DM97w4ieahG0NQCXw3Tv3Am8eJF3shzmfIQt3OLJZ852V/u/7w5t3NrUlkg7AWul6Uuv488dMw8sMkiuI09OdpHCRzz0vjOPF8YkHt6YJHlDdKXbQs9G/fIT7BS/OWsmpQXL95//Y+u/nHzQeToO75qZu48wCkj9wgiJJwnoRpd1rkct48rcubP4otyV2Wdl1dqxizcYjBE03uEMToAiXlsdc9ULd4oglRdKUfF0l+vbnPfnn38fV/ZR9+e/+LkUF7YZi66dwDFwqiyA9c1wuDNHH9IIxc303SngqFa7ha+v7t+5u7++v3fzdxp9Cfh3M3SAI/9uM4hGor9T1gI0qSNJn7CfwbeXDAzMyQCYwgIPk11IM3d3cGPCADGDuS1AvAupM0DKH4C1M3cL0kjlLP9eMQjcMgqBAGeJ1kzkLsQ/k5j4LYTd0onHth4iEK88T1AjdxYz/05n7qu25qwcfdzX//dvPhtRUWXjT3vTksE4Dcc6jYAIQoAKZSfx7Nw9jDj5CRKAxSfFOcISb3UBa//fXD9f1vtzcGKuFG6adx5Aeh6yaASOLFvp8k8Mc8MYWhKH/Z7BZfPpyeHooDOrZl7PlVJaAEoBGFpEr2dvJSsk6f1RRVMSk1rwMzdn0JUVSPQriC4qlAlZFgbBM/HVpHdo+eidHqKuS6UAw3+1qshZBiPw9omdlWmCbJ8hnrRlZQK0sFqVRhjRTtfv0EVUb+REalq9PGpsLkUlU0FIEmcAhBuTIEeS47pr1qMH9bMPWewy0aggy3oQYpBfQf7xwSPwzASWRjtBThqIuUssme3Ute55tNcbheLsHYSPixdxKVhCLROB9RCJ/FRWorCKVwL5wkcdQWGZE6tJQUwH+of9TYYegNcg89KUU0nJ0Uh6znBQNcc5OkED6RG+ceuy0Z4XAiilAjHUQlfR4Xqa/B1DxxGqlBzUUZZkx1lqnLKcD/WEepM8QwnEY6RkwRz3ZuOIm73GFlv12MTCcNKopg4xymTpubWWXMOE6DVEjH0aAfJQGTSrp7zgZ1V3MRoSEenSbJK811qJ0D1/ZJvI2YAv4PdZomRwzGieRj1GoCAoRowT80zdx/FVvcw5p2mYAizzhvkciexVEU+kIdGh/p3nEmXrmV9kjFkK4olSVAt3QnzN49NHQUoH+oZ1TMFLe8qxvkFDpCqlj8Bg60SyUUrqBjr2+iHPnZJqNiKeMMnMnc3Xx4k8Hw9Q63n+8/ZrCz0b+VEgYBzDlh5pfEaeAGYTCfu4k3j1MYBYZBAgM302kb3/i+vbl+YzLkc9107sbzIEjc2PWS2HVD3039OMaUQ2y4O7Pw9f55+/beZKroRylsYXhJ5PppErqRixLGcezDPNFwoHhXbJfvC3J/zf3unXf37Yh1OtrC6rSxGaW0EFJsbZ9/2+zypdF77ZF/fj4dgX3v3ErFPQxzF4XNpZ1pApAyeQjXfdvDZrijuwGUaFgXpe5ghzZ/BE/Ol0OQla5W4BwR+iWOpo/7CvFG0PefceuDbI4PDPoK/aERX0NEAdewCR24HTY0HlamMCItKKIL/Ujz6T/yzQmMvNvhpOg+cILL+PjnYV2S1WwjDgWDXn5+3V3yZ166YRlv3jgFyXh3h/FiWUhfJ/OZPqFbuQ6/F8RBt+rfoFeoz64Pj0NGghoiigLwc9ylRu47awqM8vxkozszMMxzbEwDOGZfjpLxHTPjoz7KJfTY+aojkji6S4MOYgry8uNAUDB2gj/eg1WubovydNiizi09WUtGEYvdvIO0O0XCcMzONTInCYKBIVnlHe+O/PjX7N3H19fv7pBbtvsFJgt9iQghaJHWSqfvl3GRagMD2FkbhTmnbfMEGUT9qpGjUSkSEto/g2uNByLfGWRGISKoD4QEVYyPzkKgZumUQaJ9aByiOrOUQ7EqDsV2UQyK55zrTuOfBBe6wpnAwXfKrLD97HjTjr29sBFtX9pYnTY2jQ9CXoV5cHSyFSAWGYtQ3aOY+cQv2QOZUyJknCRHQdRc5UwYRefAaMzkGFtrvgsi6vdLZxSagp+BIGLGxDiFbyJTAxV/xD8hj/hHlxcGHqeTsOvJXgOSqn+x+qaRBA0IybyNzZecjYGgtyYHCXNrvM+Bc+eoZpTdMgTJAlOjyGJkwv2fINP90LqmmJE9gjzzLynn4qeLhAdg53l49j7SHjY7FHQ0pGv1PKiqWHHAQ6dhbSBTH9rqNWkohbnhmESqswFpJo3VDE3h4+3TfrNerMuB7Ws7LUU22UTP30spTA1upXRUFKFYjO8eYkysrmm7IkVE2rh4jXywgurRPshrSdtEJ2gi6z2R/BUdn0gcsXibp0FaU3juccfVaWNT2mpJD4SDpzyMZswGWxqicRWtwrMojurua4Arm07eQmQeXqvpuRkIoSjVGu8f4pkpJKWab1Q6aOQjeXKaZDZjwbPhmHbIj3RhzsRAwNttVgLcFuwzgEyKqLqJryAC4vbt6rQZ7PMMP0J/cgxZlSZ6fQJMd5WmC6+SM5DoKqkGqrRgyiqNfic8AK0r0/xAbA4OLNMI+Xqd9gRbI7Db2PqcNr8TgkcaiYiS93syA89aaPIsPHeXCNJ83BeCD6roKMcTlXQaYgoMskWDIhfyA9Mr5jEVFrilQnYqRxatlKvRRZ1CRhZL8Fm9dmqEKs5TrlHmab3mN9ICYj882Ku0bSIVOC1XN0+vPvRbzAVYhXKego0y3eOXq9NmSPRWaQ8EBGMBjoYwsqmA1EP3NCUbZdrEQ0ehIi9wLmTE6NEgqelMMK3GvkpSo6/bDCZPajOmX33MHwU3pXwuoPu/AQxi41O+3mbHxY7cuZNl5M8Mos3+sCbp1f2autL/PE/6w+RXD2iJfRsgv80f6cOZ4iBssn/67uT7rDzkiy/r7WPGd64eD7vT3rmCBMPjEHc7sAuK3RULQ8zrlNF/d71kQVVYLPryZFRFcTcpVaF0A++ygGDgvLBVX7wShQG6UZMgD6jtJOOpyyhzGSuXU5UHoXSCIUkGNfbIrYFR/CjREYAGdqTBbDdpX30mAFOd2XRiOrLCPwz0bcQu1wxMAoxsTpoC2LEgjCO55DdGsTClq5aMERNkpbZOtTmQDJTs20rHZzgDpZTYUUyOchNUCblb0qBpcmbV1XRkRfDsD8k23Ir8YQCwRJfr26zoNkZBkDUupLpJh029BZBZtPlZINEPsAHZ8gVL+yJUTEvWwhxsuLXJpTZ0LYofiSy+mAvDe9CbIA2sV0c3rgdBmy+F+yEEpTDNA1jtO+aMPUCgqXEupOmbRkNJ8AjKdNRQCBMM1avs04lE1sOX/RC6Eq80nzC6wv7tNN9P2Oe7z1b+2k/X43QNGAZzr3cVUVvYsogvNmQFvv0w2JAVQdYOBXzDD5pDBGtpzUxobWK6QmtWMHjc1eJetzDgF4JU3RrihjXwAhImDcyNz0AZCjiPUe/Hw4htliSFtU3NdPDy81QM8/ALILx4BXThXwGG89wdhY2w4Cqs0f48kriGb+NI38O3jvTFqwtJEAr+SwsReAkYB5ejGxSJffK6VwwhsdQSKBlFuLqdDfYRdo2+XsbYfHyOT+L14WMph44wUbBrqEQoVepxKoFjarxmDi/yQH8cARLGZC2SoQ1ZEZ6m5dam2LZhN+alhhW7Pq/lUijEVKWxmssmyUr89hMWrtfPMNSDdWtIG0UBD0BWydCWshz/e2O0EXHmG8LaDBzYiC6HAxILdeXxhElgkOjKYPQFe1ueZdpjgdbw7XNMJuUbsAa+Be0z8G08vOrBWwNJMCiJS+vwXJJCGNCGkmEeH+Bzh5jE5w2XHxCiJH77CZ+HYUitfF9rRm6YX28XhyI/FvSrH2b01gM7dw148zHvBX8CwsR6QIxVsSlf9nkQlF714O25wWWtzquHwf6kYEVX1AgG0kuEeQvquW2w2qRH3JtpQgEWqXoLgwJZFnbyWJS21mG3msg//cDLhLnPwzZsU6MsxhpA/sNIehWXxIghm+EUzLinkxnFx5sxLnlew5pZYLKIHx5w1rCN5u3IwC9kmBevrIoce9qwhoCkN4sZkmdmLQzNxCzsQIH0y0zOwIj7SHPzACisO/9eRHTEB6VfeaXKFyGCqSFlnD16wtL9KboEhed+0uhEo+KgpGnRt3t+W0AX9mlnQwaURaqYnDJChLmYfuPn5+fn/wcT8KyIieoAAA==" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.8.0/class_hash/pending.json b/crates/rpc/fixtures/0.8.0/class_hash/pending.json deleted file mode 100644 index 37954f7fb1..0000000000 --- a/crates/rpc/fixtures/0.8.0/class_hash/pending.json +++ /dev/null @@ -1 +0,0 @@ -"0x70656e64696e6720636c61737320302068617368" \ No newline at end of file diff --git a/crates/rpc/fixtures/0.8.0/fee_estimates/declare_deploy_invoke_sierra_0_14_0.json b/crates/rpc/fixtures/0.8.0/fee_estimates/declare_deploy_invoke_sierra_0_14_0.json new file mode 100644 index 0000000000..02a7266730 --- /dev/null +++ b/crates/rpc/fixtures/0.8.0/fee_estimates/declare_deploy_invoke_sierra_0_14_0.json @@ -0,0 +1,42 @@ +[ + { + "l1_data_gas_consumed": "0xc0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x6c9", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0xf12", + "unit": "FRI" + }, + { + "l1_data_gas_consumed": "0xe0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x18", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0x1f0", + "unit": "FRI" + }, + { + "l1_data_gas_consumed": "0x80", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x0", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0xcb4e8", + "l2_gas_price": "0x1", + "overall_fee": "0xcb5e8", + "unit": "FRI" + }, + { + "l1_data_gas_consumed": "0x80", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x0", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0xcb4e8", + "l2_gas_price": "0x1", + "overall_fee": "0xcb5e8", + "unit": "FRI" + } +] diff --git a/crates/rpc/fixtures/0.8.0/fee_estimates/declare_deploy_invoke_sierra_0_14_1.json b/crates/rpc/fixtures/0.8.0/fee_estimates/declare_deploy_invoke_sierra_0_14_1.json new file mode 100644 index 0000000000..02a7266730 --- /dev/null +++ b/crates/rpc/fixtures/0.8.0/fee_estimates/declare_deploy_invoke_sierra_0_14_1.json @@ -0,0 +1,42 @@ +[ + { + "l1_data_gas_consumed": "0xc0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x6c9", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0xf12", + "unit": "FRI" + }, + { + "l1_data_gas_consumed": "0xe0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x18", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0x1f0", + "unit": "FRI" + }, + { + "l1_data_gas_consumed": "0x80", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x0", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0xcb4e8", + "l2_gas_price": "0x1", + "overall_fee": "0xcb5e8", + "unit": "FRI" + }, + { + "l1_data_gas_consumed": "0x80", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x0", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0xcb4e8", + "l2_gas_price": "0x1", + "overall_fee": "0xcb5e8", + "unit": "FRI" + } +] diff --git a/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class.json b/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class.json index a5a260b435..29149af797 100644 --- a/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class.json +++ b/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class.json @@ -53,6 +53,38 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb12" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4ee" + } + ] + } + ] + }, "type": "DECLARE", "validate_invocation": { "call_type": "CALL", @@ -223,6 +255,38 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff93f" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6c1" + } + ] + } + ] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -357,6 +421,33 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff831" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x7cf" + } + ] + } + ] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -487,6 +578,33 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x4" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffee4" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x11c" + } + ] + } + ] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -515,4 +633,4 @@ } } } -] \ No newline at end of file +] diff --git a/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json b/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json index ba8d79574b..c7ef4a6c68 100644 --- a/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json +++ b/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json @@ -53,6 +53,38 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb0f" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4f1" + } + ] + } + ] + }, "type": "DECLARE", "validate_invocation": { "call_type": "CALL", @@ -223,6 +255,38 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff938" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6c8" + } + ] + } + ] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -357,6 +421,33 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffff56d92" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0xa926e" + } + ] + } + ] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", diff --git a/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json b/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json index 7049630f81..e0aef4efd6 100644 --- a/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json +++ b/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json @@ -1,388 +1,479 @@ [ - { - "fee_estimation": { - "l1_data_gas_consumed": "0xc0", - "l1_data_gas_price": "0x2", - "l1_gas_consumed": "0x372", - "l1_gas_price": "0x1", - "l2_gas_consumed": "0x0", - "l2_gas_price": "0x1", - "overall_fee": "0x4f2", - "unit": "WEI" + { + "fee_estimation": { + "l1_data_gas_consumed": "0xc0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x372", + "l1_gas_price": "0x1", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0x4f2", + "unit": "WEI" + }, + "transaction_trace": { + "execution_resources": { + "l1_data_gas": 192, + "l1_gas": 882, + "l2_gas": 0 + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x4f2", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x4f2", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "l1_gas": 4, + "l2_gas": 0 }, - "transaction_trace": { - "execution_resources": { - "l1_data_gas": 192, - "l1_gas": 882, - "l2_gas": 0 - }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4f2", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4f2", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "l1_gas": 4, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x1" - ] - }, - "type": "DECLARE", - "validate_invocation": { + "is_reverted": false, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb0e" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4f2" + } + ] + } + ] + }, + "type": "DECLARE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 1, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + }, + { + "fee_estimation": { + "l1_data_gas_consumed": "0xe0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x19", + "l1_gas_price": "0x1", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0x1d9", + "unit": "WEI" + }, + "transaction_trace": { + "execute_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0xc02", + "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "0x4", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0x0", + "calls": [ + { + "call_type": "CALL", + "calldata": [ + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0xc01", + "calls": [ + { "call_type": "CALL", - "calldata": [ - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" - ], - "caller_address": "0x0", + "calldata": [], + "caller_address": "0xc02", "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", - "entry_point_type": "EXTERNAL", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "entry_point_type": "CONSTRUCTOR", "events": [], "execution_resources": { - "l1_gas": 1, - "l2_gas": 0 + "l1_gas": 0, + "l2_gas": 0 }, "is_reverted": false, "messages": [], - "result": [ - "0x56414c4944" - ] - } - } - }, - { - "fee_estimation": { - "l1_data_gas_consumed": "0xe0", - "l1_data_gas_price": "0x2", - "l1_gas_consumed": "0x19", - "l1_gas_price": "0x1", - "l2_gas_consumed": "0x0", - "l2_gas_price": "0x1", - "overall_fee": "0x1d9", - "unit": "WEI" - }, - "transaction_trace": { - "execute_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0xc02", - "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "0x4", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" + "result": [] + } + ], + "class_hash": "0x6f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc", + "contract_address": "0xc02", + "entry_point_selector": "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0xc01", + "0x0", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0" ], - "caller_address": "0x0", - "calls": [ - { - "call_type": "CALL", - "calldata": [ - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0xc01", - "calls": [ - { - "call_type": "CALL", - "calldata": [], - "caller_address": "0xc02", - "calls": [], - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", - "entry_point_type": "CONSTRUCTOR", - "events": [], - "execution_resources": { - "l1_gas": 0, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [] - } - ], - "class_hash": "0x6f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc", - "contract_address": "0xc02", - "entry_point_selector": "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0xc01", - "0x0", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0" - ], - "keys": [ - "0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d" - ], - "order": 0 - } - ], - "execution_resources": { - "l1_gas": 5, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" - ] - } + "keys": [ + "0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d" ], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "l1_gas": 10, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x1", - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" - ] - }, + "order": 0 + } + ], "execution_resources": { - "l1_data_gas": 224, - "l1_gas": 25, - "l2_gas": 0 + "l1_gas": 5, + "l2_gas": 0 }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d9", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d9", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "l1_gas": 4, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x1" - ] - }, - "type": "INVOKE", - "validate_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0xc02", - "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "0x4", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0x0", - "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "l1_gas": 2, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x56414c4944" - ] - } - } - }, - { - "fee_estimation": { - "l1_data_gas_consumed": "0x80", - "l1_data_gas_price": "0x2", - "l1_gas_consumed": "0x0", - "l1_gas_price": "0x2", - "l2_gas_consumed": "0xc7eae", - "l2_gas_price": "0x1", - "overall_fee": "0xc7fae", - "unit": "FRI" + "is_reverted": false, + "messages": [], + "result": [ + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + ] + } + ], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 10, + "l2_gas": 0 }, - "transaction_trace": { - "execute_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "0x0" - ], - "caller_address": "0x0", - "calls": [ - { - "call_type": "CALL", - "calldata": [], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "entry_point_selector": "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "l1_gas": 0, - "l2_gas": 40000 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x9" - ] - } - ], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "l1_gas": 0, - "l2_gas": 201160 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x1", - "0x1", - "0x9" - ] - }, + "is_reverted": false, + "messages": [], + "result": [ + "0x1", + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + ] + }, + "execution_resources": { + "l1_data_gas": 224, + "l1_gas": 25, + "l2_gas": 0 + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x1d9", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x1d9", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "l1_gas": 4, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff935" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6cb" + } + ] + } + ] + }, + "type": "INVOKE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0xc02", + "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "0x4", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 2, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + }, + { + "fee_estimation": { + "l1_data_gas_consumed": "0x80", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x0", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0xc7eae", + "l2_gas_price": "0x1", + "overall_fee": "0xc7fae", + "unit": "FRI" + }, + "transaction_trace": { + "execute_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "0x0" + ], + "caller_address": "0x0", + "calls": [ + { + "call_type": "CALL", + "calldata": [], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "entry_point_selector": "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "entry_point_type": "EXTERNAL", + "events": [], "execution_resources": { - "l1_data_gas": 128, - "l1_gas": 0, - "l2_gas": 744420 - }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0xb5ce4", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0xb5ce4", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "l1_gas": 0, - "l2_gas": 190720 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x1" - ] + "l1_gas": 0, + "l2_gas": 40000 }, - "type": "INVOKE", - "validate_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "0x0" - ], - "caller_address": "0x0", - "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "l1_gas": 0, - "l2_gas": 42780 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x56414c4944" - ] - } - } + "is_reverted": false, + "messages": [], + "result": [ + "0x9" + ] + } + ], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 0, + "l2_gas": 201160 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x1", + "0x1", + "0x9" + ] + }, + "execution_resources": { + "l1_data_gas": 128, + "l1_gas": 0, + "l2_gas": 744420 + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xb5ce4", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xb5ce4", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "l1_gas": 0, + "l2_gas": 190720 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffff4a31c" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0xb5ce4" + } + ] + } + ] + }, + "type": "INVOKE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "0x0" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 0, + "l2_gas": 42780 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x56414c4944" + ] + } } + } ] diff --git a/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_fee_charge.json b/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_fee_charge.json index 8c52825f1c..760d410089 100644 --- a/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_fee_charge.json +++ b/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_fee_charge.json @@ -16,6 +16,24 @@ "l1_gas": 878, "l2_gas": 0 }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [] + }, "type": "DECLARE", "validate_invocation": { "call_type": "CALL", @@ -149,6 +167,24 @@ "l1_gas": 19, "l2_gas": 0 }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -246,6 +282,19 @@ "l1_gas": 14, "l2_gas": 0 }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -339,6 +388,19 @@ "l1_gas": 14, "l2_gas": 0 }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x4" + } + ], + "replaced_classes": [], + "storage_diffs": [] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -367,4 +429,4 @@ } } } -] \ No newline at end of file +] diff --git a/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_validate.json b/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_validate.json index 6ab3815878..2d8b5421df 100644 --- a/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_validate.json +++ b/crates/rpc/fixtures/0.8.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_validate.json @@ -53,6 +53,38 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb12" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4ee" + } + ] + } + ] + }, "type": "DECLARE" } }, @@ -201,6 +233,38 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff940" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6c0" + } + ] + } + ] + }, "type": "INVOKE" } }, @@ -306,6 +370,33 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff833" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x7cd" + } + ] + } + ] + }, "type": "INVOKE" } }, @@ -411,7 +502,34 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x4" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffee6" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x11a" + } + ] + } + ] + }, "type": "INVOKE" } } -] \ No newline at end of file +] diff --git a/crates/rpc/fixtures/0.8.0/simulations/simulate_transaction.json b/crates/rpc/fixtures/0.8.0/simulations/simulate_transaction.json new file mode 100644 index 0000000000..9c3648e662 --- /dev/null +++ b/crates/rpc/fixtures/0.8.0/simulations/simulate_transaction.json @@ -0,0 +1,111 @@ +[ + { + "fee_estimation": { + "l1_data_gas_consumed": "0x160", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x15", + "l1_gas_price": "0x1", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0x2d5", + "unit": "WEI" + }, + "transaction_trace": { + "constructor_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "entry_point_type": "CONSTRUCTOR", + "events": [ + { + "data": [], + "keys": [ + "0x38f6a5b87c23cee6e7294bcc3302e95019f70f81586ff3cac38581f5ca96381", + "0x1" + ], + "order": 0 + } + ], + "execution_resources": { + "l1_gas": 2, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [] + }, + "execution_resources": { + "l1_data_gas": 352, + "l1_gas": 21, + "l2_gas": 0 + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "storage_entries": [ + { + "key": "0x81ba5d1f84a6a8f0e7ae24720a20f43f81d9ee6eed98fd524ba8d53a49416b", + "value": "0x1" + }, + { + "key": "0x1379ac0624b939ceb9dede92211d7db5ee174fe28be72245b0a1a2abd81c98f", + "value": "0x1" + }, + { + "key": "0x7e79bbb6be5d418acd50c88b675e697f6f7094e203c9d7e29c6ad6731f931dd", + "value": "0x1" + } + ] + } + ] + }, + "type": "DEPLOY_ACCOUNT", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "0x46c0d4abf0192a788aca261e58d7031576f7d8ea5229f452b0f23e691dd5971", + "0x1" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "entry_point_selector": "0x36fcbf06cd96843058359e1a75928beacfac10727dab22a3972f0af8aa92895", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 1, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + } +] diff --git a/crates/rpc/fixtures/0.8.0/traces/multiple_pre_confirmed_txs.json b/crates/rpc/fixtures/0.8.0/traces/multiple_pre_confirmed_txs.json new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/crates/rpc/fixtures/0.8.0/traces/multiple_pre_confirmed_txs.json @@ -0,0 +1 @@ +[] diff --git a/crates/rpc/fixtures/0.8.0/transactions/receipt_pending.json b/crates/rpc/fixtures/0.8.0/transactions/receipt_pending.json deleted file mode 100644 index 16c25f8d8f..0000000000 --- a/crates/rpc/fixtures/0.8.0/transactions/receipt_pending.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "actual_fee": { - "amount": "0x0", - "unit": "WEI" - }, - "events": [ - { - "data": [], - "from_address": "0xabcddddddd", - "keys": [ - "0x70656e64696e67206b6579" - ] - }, - { - "data": [], - "from_address": "0xabcddddddd", - "keys": [ - "0x70656e64696e67206b6579", - "0x7365636f6e642070656e64696e67206b6579" - ] - }, - { - "data": [], - "from_address": "0xabcaaaaaaa", - "keys": [ - "0x70656e64696e67206b65792032" - ] - } - ], - "execution_resources": { - "l1_data_gas": 0, - "l1_gas": 0, - "l2_gas": 0 - }, - "execution_status": "SUCCEEDED", - "finality_status": "ACCEPTED_ON_L2", - "messages_sent": [], - "transaction_hash": "0x70656e64696e6720747820686173682030", - "type": "INVOKE" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.8.0/transactions/receipt_reverted_pending.json b/crates/rpc/fixtures/0.8.0/transactions/receipt_reverted_pending.json deleted file mode 100644 index 9db51d9cc6..0000000000 --- a/crates/rpc/fixtures/0.8.0/transactions/receipt_reverted_pending.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "actual_fee": { - "amount": "0x0", - "unit": "WEI" - }, - "events": [], - "execution_resources": { - "l1_data_gas": 0, - "l1_gas": 0, - "l2_gas": 0 - }, - "execution_status": "REVERTED", - "finality_status": "ACCEPTED_ON_L2", - "messages_sent": [], - "revert_reason": "Reverted!", - "transaction_hash": "0x70656e64696e67207265766572746564", - "type": "INVOKE" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.8.0/transactions/receipt_reverted_preconfirmed.json b/crates/rpc/fixtures/0.8.0/transactions/receipt_reverted_preconfirmed.json new file mode 100644 index 0000000000..926c7ac288 --- /dev/null +++ b/crates/rpc/fixtures/0.8.0/transactions/receipt_reverted_preconfirmed.json @@ -0,0 +1 @@ +"pre-0.9 json rpc doesn't have access to pre-confirmed data" diff --git a/crates/rpc/fixtures/0.8.0/transactions/status_pending.json b/crates/rpc/fixtures/0.8.0/transactions/status_pending.json deleted file mode 100644 index 8cfefa0492..0000000000 --- a/crates/rpc/fixtures/0.8.0/transactions/status_pending.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "execution_status": "SUCCEEDED", - "finality_status": "ACCEPTED_ON_L2" -} diff --git a/crates/rpc/fixtures/0.8.0/transactions/status_reverted.json b/crates/rpc/fixtures/0.8.0/transactions/status_reverted.json index a5d02998d9..926c7ac288 100644 --- a/crates/rpc/fixtures/0.8.0/transactions/status_reverted.json +++ b/crates/rpc/fixtures/0.8.0/transactions/status_reverted.json @@ -1,5 +1 @@ -{ - "execution_status": "REVERTED", - "failure_reason": "Reverted!", - "finality_status": "ACCEPTED_ON_L2" -} \ No newline at end of file +"pre-0.9 json rpc doesn't have access to pre-confirmed data" diff --git a/crates/rpc/fixtures/0.8.0/transactions/txn_pending_hash_0.json b/crates/rpc/fixtures/0.8.0/transactions/txn_pending_hash_0.json deleted file mode 100644 index 625b3fe314..0000000000 --- a/crates/rpc/fixtures/0.8.0/transactions/txn_pending_hash_0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "transaction_hash": "0x70656e64696e6720747820686173682030", - "type": "INVOKE", - "version": "0x0" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.8.0/transactions/txn_pending_reverted.json b/crates/rpc/fixtures/0.8.0/transactions/txn_pending_reverted.json deleted file mode 100644 index fb92c2312d..0000000000 --- a/crates/rpc/fixtures/0.8.0/transactions/txn_pending_reverted.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "transaction_hash": "0x70656e64696e67207265766572746564", - "type": "INVOKE", - "version": "0x0" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.8.0/transactions/txn_preconfirmed_reverted.json b/crates/rpc/fixtures/0.8.0/transactions/txn_preconfirmed_reverted.json new file mode 100644 index 0000000000..926c7ac288 --- /dev/null +++ b/crates/rpc/fixtures/0.8.0/transactions/txn_preconfirmed_reverted.json @@ -0,0 +1 @@ +"pre-0.9 json rpc doesn't have access to pre-confirmed data" diff --git a/crates/rpc/fixtures/0.9.0/blocks/latest.json b/crates/rpc/fixtures/0.9.0/blocks/latest.json index 6f8222777c..5a0f4a7a2a 100644 --- a/crates/rpc/fixtures/0.9.0/blocks/latest.json +++ b/crates/rpc/fixtures/0.9.0/blocks/latest.json @@ -1,214 +1,194 @@ { - "block_hash":"0x6c6174657374", - "block_number":2, - "l1_da_mode":"CALLDATA", - "l1_data_gas_price":{ - "price_in_fri":"0x0", - "price_in_wei":"0x0" + "block_hash": "0x6c6174657374", + "block_number": 2, + "l1_da_mode": "CALLDATA", + "l1_data_gas_price": { + "price_in_fri": "0x0", + "price_in_wei": "0x0" }, - "l1_gas_price":{ - "price_in_fri":"0x0", - "price_in_wei":"0x2" + "l1_gas_price": { + "price_in_fri": "0x0", + "price_in_wei": "0x2" }, - "l2_gas_price":{ - "price_in_fri":"0x0", - "price_in_wei":"0x0" + "l2_gas_price": { + "price_in_fri": "0x0", + "price_in_wei": "0x0" }, - "new_root":"0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", - "parent_hash":"0x626c6f636b2031", - "sequencer_address":"0x2", - "starknet_version":"", - "status":"ACCEPTED_ON_L2", - "timestamp":2, - "transactions":[ + "new_root": "0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", + "parent_hash": "0x626c6f636b2031", + "sequencer_address": "0x2", + "starknet_version": "0.13.2", + "status": "ACCEPTED_ON_L2", + "timestamp": 2, + "transactions": [ { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "l1_data_gas":0, - "l1_gas":0, - "l2_gas":0 + "events": [], + "execution_resources": { + "l1_data_gas": 0, + "l1_gas": 0, + "l2_gas": 0 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x74786e2033", - "type":"INVOKE" + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "transaction_hash": "0x74786e2033", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x636f6e74726163742031", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "type": "INVOKE", + "version": "0x0" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "l1_data_gas":0, - "l1_gas":0, - "l2_gas":0 + "events": [], + "execution_resources": { + "l1_data_gas": 0, + "l1_gas": 0, + "l2_gas": 0 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x74786e2034", - "type":"INVOKE" + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "transaction_hash": "0x74786e2034", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x0", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x0", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "type": "INVOKE", + "version": "0x0" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "l1_data_gas":0, - "l1_gas":0, - "l2_gas":0 + "events": [], + "execution_resources": { + "l1_data_gas": 0, + "l1_gas": 0, + "l2_gas": 0 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "transaction_hash":"0x74786e2035", - "type":"INVOKE" + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "transaction_hash": "0x74786e2035", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x636f6e74726163742031", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "type": "INVOKE", + "version": "0x0" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "FRI" }, - "events":[ - - ], - "execution_resources":{ - "l1_data_gas":0, - "l1_gas":0, - "l2_gas":0 + "events": [], + "execution_resources": { + "l1_data_gas": 0, + "l1_gas": 0, + "l2_gas": 0 }, - "execution_status":"SUCCEEDED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ + "execution_status": "SUCCEEDED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [ { - "from_address":"0xcafebabe", - "payload":[ + "from_address": "0xcafebabe", + "payload": [ "0x1", "0x2", "0x3" ], - "to_address":"0x0" + "to_address": "0x0" } ], - "transaction_hash":"0x74786e2036", - "type":"INVOKE" + "transaction_hash": "0x74786e2036", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "account_deployment_data": [], + "calldata": [], + "fee_data_availability_mode": "L1", + "nonce": "0x0", + "nonce_data_availability_mode": "L1", + "paymaster_data": [], + "resource_bounds": { + "l1_data_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l1_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l2_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "sender_address": "0x636f6e74726163742032202873696572726129", + "signature": [], + "tip": "0x0", + "type": "INVOKE", + "version": "0x3" } }, { - "receipt":{ - "actual_fee":{ - "amount":"0x0", - "unit":"WEI" + "receipt": { + "actual_fee": { + "amount": "0x0", + "unit": "WEI" }, - "events":[ - - ], - "execution_resources":{ - "l1_data_gas":0, - "l1_gas":0, - "l2_gas":0 + "events": [], + "execution_resources": { + "l1_data_gas": 0, + "l1_gas": 0, + "l2_gas": 0 }, - "execution_status":"REVERTED", - "finality_status":"ACCEPTED_ON_L2", - "messages_sent":[ - - ], - "revert_reason":"Reverted because", - "transaction_hash":"0x74786e207265766572746564", - "type":"INVOKE" + "execution_status": "REVERTED", + "finality_status": "ACCEPTED_ON_L2", + "messages_sent": [], + "revert_reason": "Reverted because", + "transaction_hash": "0x74786e207265766572746564", + "type": "INVOKE" }, - "transaction":{ - "calldata":[ - - ], - "contract_address":"0x636f6e74726163742031", - "entry_point_selector":"0x0", - "max_fee":"0x0", - "signature":[ - - ], - "type":"INVOKE", - "version":"0x0" + "transaction": { + "calldata": [], + "contract_address": "0x636f6e74726163742031", + "entry_point_selector": "0x0", + "max_fee": "0x0", + "signature": [], + "type": "INVOKE", + "version": "0x0" } } ] -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/0.9.0/blocks/latest_with_tx_hashes.json b/crates/rpc/fixtures/0.9.0/blocks/latest_with_tx_hashes.json index a9d4b53976..2b51c15576 100644 --- a/crates/rpc/fixtures/0.9.0/blocks/latest_with_tx_hashes.json +++ b/crates/rpc/fixtures/0.9.0/blocks/latest_with_tx_hashes.json @@ -17,7 +17,7 @@ "new_root": "0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", "parent_hash": "0x626c6f636b2031", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", "status": "ACCEPTED_ON_L2", "timestamp": 2, "transactions": [ @@ -27,4 +27,4 @@ "0x74786e2036", "0x74786e207265766572746564" ] -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/0.9.0/blocks/latest_with_txs.json b/crates/rpc/fixtures/0.9.0/blocks/latest_with_txs.json index c0bd5c645d..c96d2944df 100644 --- a/crates/rpc/fixtures/0.9.0/blocks/latest_with_txs.json +++ b/crates/rpc/fixtures/0.9.0/blocks/latest_with_txs.json @@ -17,7 +17,7 @@ "new_root": "0x57b695c82af81429fdc8966088b0196105dfb5aa22b54cbc86fc95dc3b3ece1", "parent_hash": "0x626c6f636b2031", "sequencer_address": "0x2", - "starknet_version": "", + "starknet_version": "0.13.2", "status": "ACCEPTED_ON_L2", "timestamp": 2, "transactions": [ @@ -52,14 +52,32 @@ "version": "0x0" }, { + "account_deployment_data": [], "calldata": [], - "contract_address": "0x636f6e74726163742031", - "entry_point_selector": "0x0", - "max_fee": "0x0", + "fee_data_availability_mode": "L1", + "nonce": "0x0", + "nonce_data_availability_mode": "L1", + "paymaster_data": [], + "resource_bounds": { + "l1_data_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l1_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l2_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, + "sender_address": "0x636f6e74726163742032202873696572726129", "signature": [], + "tip": "0x0", "transaction_hash": "0x74786e2036", "type": "INVOKE", - "version": "0x0" + "version": "0x3" }, { "calldata": [], @@ -72,4 +90,4 @@ "version": "0x0" } ] -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/0.9.0/blocks/pending.json b/crates/rpc/fixtures/0.9.0/blocks/pending.json deleted file mode 100644 index 3a8ca65367..0000000000 --- a/crates/rpc/fixtures/0.9.0/blocks/pending.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "l1_da_mode": "CALLDATA", - "l1_data_gas_price": { - "price_in_fri": "0x7374726b206461746761737072696365", - "price_in_wei": "0x6461746761737072696365" - }, - "l1_gas_price": { - "price_in_fri": "0x7374726b20676173207072696365", - "price_in_wei": "0x676173207072696365" - }, - "l2_gas_price": { - "price_in_fri": "0x7374726b206c32676173207072696365", - "price_in_wei": "0x6c3220676173207072696365" - }, - "block_number": 3, - "sequencer_address": "0x70656e64696e672073657175656e6365722061646472657373", - "starknet_version": "0.11.0", - "timestamp": 1234567, - "transactions": [ - { - "receipt": { - "actual_fee": { - "amount": "0x0", - "unit": "WEI" - }, - "events": [ - { - "data": [], - "from_address": "0xabcddddddd", - "keys": [ - "0x70656e64696e67206b6579" - ] - }, - { - "data": [], - "from_address": "0xabcddddddd", - "keys": [ - "0x70656e64696e67206b6579", - "0x7365636f6e642070656e64696e67206b6579" - ] - }, - { - "data": [], - "from_address": "0xabcaaaaaaa", - "keys": [ - "0x70656e64696e67206b65792032" - ] - } - ], - "execution_resources": { - "l1_data_gas": 0, - "l1_gas": 0, - "l2_gas": 0 - }, - "execution_status": "SUCCEEDED", - "finality_status": "ACCEPTED_ON_L2", - "messages_sent": [], - "transaction_hash": "0x70656e64696e6720747820686173682030", - "type": "INVOKE" - }, - "transaction": { - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "type": "INVOKE", - "version": "0x0" - } - }, - { - "receipt": { - "actual_fee": { - "amount": "0x0", - "unit": "WEI" - }, - "contract_address": "0x1122355", - "events": [], - "execution_resources": { - "l1_data_gas": 0, - "l1_gas": 0, - "l2_gas": 0 - }, - "execution_status": "SUCCEEDED", - "finality_status": "ACCEPTED_ON_L2", - "messages_sent": [], - "transaction_hash": "0x70656e64696e6720747820686173682031", - "type": "DEPLOY" - }, - "transaction": { - "class_hash": "0x70656e64696e6720636c61737320686173682031", - "constructor_calldata": [], - "contract_address_salt": "0x73616c7479", - "type": "DEPLOY", - "version": "0x0" - } - }, - { - "receipt": { - "actual_fee": { - "amount": "0x0", - "unit": "WEI" - }, - "events": [], - "execution_resources": { - "l1_data_gas": 0, - "l1_gas": 0, - "l2_gas": 0 - }, - "execution_status": "REVERTED", - "finality_status": "ACCEPTED_ON_L2", - "messages_sent": [], - "revert_reason": "Reverted!", - "transaction_hash": "0x70656e64696e67207265766572746564", - "type": "INVOKE" - }, - "transaction": { - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "type": "INVOKE", - "version": "0x0" - } - } - ] -} diff --git a/crates/rpc/fixtures/0.9.0/blocks/pending_with_tx_hashes.json b/crates/rpc/fixtures/0.9.0/blocks/pending_with_tx_hashes.json deleted file mode 100644 index ab5d12dd4a..0000000000 --- a/crates/rpc/fixtures/0.9.0/blocks/pending_with_tx_hashes.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "l1_da_mode": "CALLDATA", - "l1_data_gas_price": { - "price_in_fri": "0x7374726b206461746761737072696365", - "price_in_wei": "0x6461746761737072696365" - }, - "l1_gas_price": { - "price_in_fri": "0x7374726b20676173207072696365", - "price_in_wei": "0x676173207072696365" - }, - "l2_gas_price": { - "price_in_fri": "0x7374726b206c32676173207072696365", - "price_in_wei": "0x6c3220676173207072696365" - }, - "block_number": 3, - "sequencer_address": "0x70656e64696e672073657175656e6365722061646472657373", - "starknet_version": "0.11.0", - "timestamp": 1234567, - "transactions": [ - "0x70656e64696e6720747820686173682030", - "0x70656e64696e6720747820686173682031", - "0x70656e64696e67207265766572746564" - ] -} diff --git a/crates/rpc/fixtures/0.9.0/blocks/pending_with_txs.json b/crates/rpc/fixtures/0.9.0/blocks/pending_with_txs.json deleted file mode 100644 index 5cb563bd94..0000000000 --- a/crates/rpc/fixtures/0.9.0/blocks/pending_with_txs.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "l1_da_mode": "CALLDATA", - "l1_data_gas_price": { - "price_in_fri": "0x7374726b206461746761737072696365", - "price_in_wei": "0x6461746761737072696365" - }, - "l1_gas_price": { - "price_in_fri": "0x7374726b20676173207072696365", - "price_in_wei": "0x676173207072696365" - }, - "l2_gas_price": { - "price_in_fri": "0x7374726b206c32676173207072696365", - "price_in_wei": "0x6c3220676173207072696365" - }, - "block_number": 3, - "sequencer_address": "0x70656e64696e672073657175656e6365722061646472657373", - "starknet_version": "0.11.0", - "timestamp": 1234567, - "transactions": [ - { - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "transaction_hash": "0x70656e64696e6720747820686173682030", - "type": "INVOKE", - "version": "0x0" - }, - { - "class_hash": "0x70656e64696e6720636c61737320686173682031", - "constructor_calldata": [], - "contract_address_salt": "0x73616c7479", - "transaction_hash": "0x70656e64696e6720747820686173682031", - "type": "DEPLOY", - "version": "0x0" - }, - { - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "transaction_hash": "0x70656e64696e67207265766572746564", - "type": "INVOKE", - "version": "0x0" - } - ] -} diff --git a/crates/rpc/fixtures/0.9.0/blocks/pre_confirmed.json b/crates/rpc/fixtures/0.9.0/blocks/pre_confirmed.json index 014aa0b0f6..cef21aca62 100644 --- a/crates/rpc/fixtures/0.9.0/blocks/pre_confirmed.json +++ b/crates/rpc/fixtures/0.9.0/blocks/pre_confirmed.json @@ -14,7 +14,7 @@ "price_in_wei": "0x6c3220676173207072696365" }, "sequencer_address": "0x707265636f6e6669726d65642073657175656e6365722061646472657373", - "starknet_version": "0.11.0", + "starknet_version": "0.13.2", "timestamp": 1234567, "transactions": [ { diff --git a/crates/rpc/fixtures/0.9.0/blocks/pre_confirmed_with_tx_hashes.json b/crates/rpc/fixtures/0.9.0/blocks/pre_confirmed_with_tx_hashes.json index 71e96604d1..4ff8f8032e 100644 --- a/crates/rpc/fixtures/0.9.0/blocks/pre_confirmed_with_tx_hashes.json +++ b/crates/rpc/fixtures/0.9.0/blocks/pre_confirmed_with_tx_hashes.json @@ -14,7 +14,7 @@ "price_in_wei": "0x6c3220676173207072696365" }, "sequencer_address": "0x707265636f6e6669726d65642073657175656e6365722061646472657373", - "starknet_version": "0.11.0", + "starknet_version": "0.13.2", "timestamp": 1234567, "transactions": [ "0x707265636f6e6669726d656420747820686173682030", diff --git a/crates/rpc/fixtures/0.9.0/blocks/pre_confirmed_with_txs.json b/crates/rpc/fixtures/0.9.0/blocks/pre_confirmed_with_txs.json index 16941069ed..a05eff1dc8 100644 --- a/crates/rpc/fixtures/0.9.0/blocks/pre_confirmed_with_txs.json +++ b/crates/rpc/fixtures/0.9.0/blocks/pre_confirmed_with_txs.json @@ -14,7 +14,7 @@ "price_in_wei": "0x6c3220676173207072696365" }, "sequencer_address": "0x707265636f6e6669726d65642073657175656e6365722061646472657373", - "starknet_version": "0.11.0", + "starknet_version": "0.13.2", "timestamp": 1234567, "transactions": [ { diff --git a/crates/rpc/fixtures/0.9.0/class_at/pending.json b/crates/rpc/fixtures/0.9.0/class_at/pending.json deleted file mode 100644 index b712fce74b..0000000000 --- a/crates/rpc/fixtures/0.9.0/class_at/pending.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "abi":[ - { - "inputs":[ - { - "name":"address", - "type":"felt" - }, - { - "name":"value", - "type":"felt" - } - ], - "name":"increase_value", - "outputs":[ - - ], - "type":"function" - }, - { - "inputs":[ - { - "name":"contract_address", - "type":"felt" - }, - { - "name":"address", - "type":"felt" - }, - { - "name":"value", - "type":"felt" - } - ], - "name":"call_increase_value", - "outputs":[ - - ], - "type":"function" - }, - { - "inputs":[ - { - "name":"address", - "type":"felt" - } - ], - "name":"get_value", - "outputs":[ - { - "name":"res", - "type":"felt" - } - ], - "type":"function" - } - ], - "entry_points_by_type":{ - "CONSTRUCTOR":[ - - ], - "EXTERNAL":[ - { - "offset":117, - "selector":"0x26813d396fdb198e9ead934e4f7a592a8b88a059e45ab0eb6ee53494e8d45b0" - }, - { - "offset":85, - "selector":"0x3033d3588abc2928b334742248e380daa139fc6b2bba31d609282d2c641a450" - }, - { - "offset":61, - "selector":"0x34c4c150632e67baf44fc50e9a685184d72a822510a26a66f72058b5e7b2892" - } - ], - "L1_HANDLER":[ - - ] - }, - "program":"H4sIAAAAAAAE/91de2/bSJL/Kgb/SnYcgW9SBuYPT+KdDS6PPduze7ggIGiJ8giRJa1EzSQX+LtfVb/YTTbJbpIKsLtYT2yKrK761buapL47eVke1g+nsjg6V58+XzoPp/WmXG/xL+eQbx+LbPF7sfjiwEfLvMzhJMf9GrpJ6rpeslqt8Me5hGMe+a/vpg94iP0U5GCYujE/H/516cEg9uJFvAiDeBUXSZj48HeQhPRD1/XxTCAzh58VPxjAQVwWD+byQR/OwoMP8sGAHVzIB0N2cEkPpj5nbQ60KWsJ+4jwEOH54iMQBRmLlYPmQkcgYLxKUNQkjiI/jkDohsgLoN4QGQ82eF4IxgKZZ0Sj+mgwewkwOk/COKK0K50QFfODXCd4UEEaucCDDa4falzrGWy1Mc9zQQ2uB1Twh+oM/nDF/zwXLNPi/wWlEboemgyxaaQnS+jiAdCLIiFZHg6qEuKZ+EMu98l/gd8czkMLXYmP2EGESDnIDbI6GISLcOFFbhz4RZw85KswXC0it5jncRp5abhM/Dz1/chzcz/O4xgszI3Sh6hIHvx0zlnwU1waf4AVJkfq5uxAtZo3Ob7LmKHgoU0sYflqtRBYgAMIT3XQbwkjeFYDLzyI3lFdfgYJWGBJiQQFMFytxiRQWQhTP4WzUNYlIkwAOANfNMK24OXHsDTGy4oFnzASuj6ihtwRtunB1MXY5gLblYeCcPxgRYQdVCl7k5vNiuaU9mwTtqgDOUbmFDE4FpXimNdTIgQHgIsebAHURdS0XowfVJRDatQGpsrORE1Ul08P5cLWTlg+sbWTBuqoCrSoHuMBGPBMEh6EEqaHwdSiVHWE1ELqBzVFDTUedr65RalnhtR41OWmxyJPiNfrLb01+YauG6CC8AcCBU8jNNLgQfwhhJnz6oTB4Ijn4Q8QobaJYrMDlSfouUvpcnBpZVZsOVuDVW1zepQLIRzat+oe06+2UgwQq9QKypBacd3WSEIzONjQBHYExcPpMVtvVzvnanvabC6d39fbEnqH744LnQJ0F4tFcTyuHzZFdlzs9qTJcI5lfvjyZ34oZot8fdjNFrunp912lm82OzSnro/ZSbD0YrcsnCvnqXjaHb59yvefL36+OBaPTwWsP8uXyxcvwQhXm92fWXnIF1/W28eM9i/A1F4cc66+O4+H3WnvXLmXzm61OhYl/Pp86RyKVXEotosiWy9RoOfnZ1jVMxKLSLAtSi7Z8dtxAdIdgSPyEZGd/KY5CUDZbLLFbot8l9h3LaiojEr2e75dboqDet4LLvvP/JfLC37Bvjz8DELMpL9twfEqcDwNOJJKzcSaZVlZPO0BzfjS/mIEkyozGHF1dlz/H5iQP4QE004GhnYojmAfYD1EcgvVzlan7aJc77bZsdgUi3J3cK4AZ2syTK3OVWQviWwTzlXIjTxtd94se8rX2ywDW1Z+/fOQ7/fF4cg+qf6cPRZl9ke+ORUZuBOYcnYoytNhK1n2dE7sgR66vNjJsn7OZtLcIwPnca5SIGt2Jch6LA+nBUSRZM7gnLej2a9swLn/pNkRrCd/LADafCkBy0xDhAz5tDNHDHArroihEUPmlgUMD1wEKFsigvmAuuncyEWUhRmGsLCZc+ouplbkudQg/A736pfMziD+PKzLwsAiyHlnNgkI1lOZBGGX2YQPqkmt9EqvFrHbMwucXLH0amYWTLPJgPVJTATeY2oVcUeYUCKtFH+rWAZWoQSo9XZxKPJjQSOvZADTxVrI3FydvqsrCjoYAtXxJJ7li/KUb1g2DgFJ0+sOj1X+DcG4LK5j2IegecOrSB4IQebu80uoakLIpGCQXSc2MkwIwaXzgqLMjiyxRPVspCq7ltNZFppH7VnI3rxQeVD3n93GAEZuY0HQa2MarloNLYZUoADed7FsbXHdbgwu5hV9ZbNx3WYNqDDDjetu0nMpsd4Y0DQQGU0YjCWpW5luiYYdJ5Cde9c4FJUxJyYgKME28TBggjGsl9DsrVdrqDqxj+NWPHv/7TWrz/Fw+W0PVb6zzZ+K4z6HORhcqTl1dn14hDr+u7M6bTYZng3dZet5l9h4PtCFgR7tJAAwttiReip8oqPw9sPr25vru5vsH9fvfrvJ7m7e3by+/3grMQu2ciwhpDNte+HcS0KY2fq+m7huFMxjP02TAH6d+3A49uM4ncPehRuEnhslge97XhrFceT6qT+PE9+L4iAI4OK4jaen/Wa9WJemKLyVzx+Fxi3tBqAR70OenTlqtbu3/3vz8a/Zu4+vr9/dtSOO+UynunyzgRkF8LosjuV6m5fr3RbspKramhMNNrK4dJht5Jt1fnRa1EB8DLRPe/+OdciK26IxYlCnAmBCJqsui03xmJdFhssjKG3Sta6qUjCTVc1adNnF7pCXuwM4Iu5F7xfOVQCJkcnA++U28FSCxg6tu0y2MSdfLmn38N0h6s04P8UGnZQnKGxzFizwVEG++xq0M+bk3Sf6z2AxNMxAwGQMdIeZmlyKx4JlEW/riHNdlyvwNHJAtyQIkxLPNaf/BQyXwwpNExTXfFQzRHIWN+xlZhfK0gotmAb7GoyG8QdB0sWfGrWMeCyOwmgf0gKlpaprVC+rWSj65Xcnr+anYqbKhqhhNScMASriwFAzMxN3Pi3yY/litb+8WIHv/OUvLz+DL1sThNqHEyT0Pq1g+vvThceovhxCE0ojHU2/ognTX2Z8YjQMC8FAifZjUtUxa2gJS6oAI5wufqxOm86Co4XaQLVETC2he+lwiala8v3FTxcvXnkvucygnOFC9wRNS6E5tYFCY5gltgjJRBV6RYUOpxEa8yf3RmjX8gOMAafxSQ3lgVgIv4QeRsWibgAD3bPH34eblGlytbStBtmBwPYaWTSNkRnmW0sU6lTPBUI8EQhFiY6mjalYPdhKz8gNlNrDtgoDTCjlEX1UJU413AegdUa5M1oKamILVE7DZKckzwaAP43eTSpHS/llkgPF73X9hEtP1H9pWvL021WgEB5uVywTTGJQlNa5oBQSY/FoIfBT8bTYf8OA0dbdkuKM79nT02f0H3AqVvs1u3fMzPVRKLQay0LqZZ3ia1kctvnGAYYxTiRQwzKK2q5WQ7S7n229QG5e/q06WZ1ERj1s74UKJPW8B6ojdpBx9UCjAurn3Sg2ZnLA0J2O+Yefb9q96phm7ScsoY1oHZfIEkK9T5MFFPxMpmNJdqifLx3RY+qIGfaqGPw66fDiHQTRQWssHKdjE1nAzypVXDrc92iIuhINKel8rJoAHWCNSnKsxA2C5xLdqjTViW7oRsa6rtM7l+BKOdqdlyVT8nkXncLAQ7WlehNlkqV0gJoEGWM0ZWLnQtKmxLGCUlSOpHaCBMqimH4Mo8OSaciiuGmnci74rMqax4LdUkXLma5Kw3MDMY7XlhqCVneBUTtNzjCmZYWUC2EOw7R4bOaiaimjfN9yusKh7AC6oNySsg3Z7EnUFYPsRIU12FpALeoyY5W5RBI35GhI6q7Y5IlWhxTUQtqw07zaxlNgM74SlqZpYrjMc9U8PcxVZiY20COaTOJs4okyhMS77pwk4ZaAjWB547kQXVXcWE6yC6Tq2BlNtLuliSrT1MYZlV53sNGdqzhNj4XKtsSg0Ad/fqJXba/5IlxqQlONMaP41HWNIpRsXTrXGxKkaouzAATUtZauP1tmEozMoJuo0RkSjWokehRuIg0nYeO4MCPnJoJtDvoX2jmzKTUsCb81Kflq4nUkARPR8PKBYvGwEYGoqlgsaljtB9XEMrFoE/lkOgPl7FWfaIEMwi5gxc2iFz816naHc4mux/dpYujbuxVDGO6ri2uaYRT1UdFEJZTAuZRhleKP5e4gbn6H0LZsuTen9e4VhYAI/81RHz+P3AFMM6L+LqDelSgF3VLVLb30Vh5Vb3TRrno/BRtipbWahrsJt+Rjk4ss0kMPue50anPxdDy1ZcwebthlMh/y6zSyfXlAXXZV/ThqZNs92lPlcgDvjaV5We/RPFr5mL/p02itLMh0pZYNJh3MruS6qAcGq8zfQ0u6LSWXbxnXS6zGsGGkbaIbbPxxkHmqQVekYfLK4TeqkEFj8PIz/BtcvLr4xO4/gCP0rouXznNrJLcQQr5ZeWJ8JNIT4vNJA5BHIelOb3agNAaqkC50PjjYegCdxhrnhGl6iJjFTm81lPA5wQCn8qcFpC1MY4wcaiNIc3IURBxh8hOn6S427SOWcEjneWrSQm/Tkw4YJKNCK97BF2nTcGMg1huRKK2BJoBVAbahaduUx6xf62WSnrDMsIhEudWiumu/DwBhhYJUQVNyh2OW6cra5hO3E4SfMVtIPb6hZquIpHPhHJ8tTJg81ITqnEPZTgPklUOpW7XfffAWZXakg/Z6wuvS5ExUsVaxDopWvtpAI++Dxb28MOCbxMCh1RQIgTdaoek3CgTr6M+JDYWDzwLmvU5vKbPylOiMsZl1dRK2loAgUoJTCk+qRbCCVbEpXw4vmeW5Ut0xkLS1omWCA+XVdQ+fiLy8WYB4w1Ia0bZxKu7zqhev1FnVQNfJlNc88DuoAF41hZAZCXldBvEv8/uupFj3WJjvg3rgOywvYU4jT25BN6w8rCjo9Y9DaqfKjT5QpR7kigHPkQZf+KRlPePRR7WucsnY9W9bnsLTgT1jJ8tr/qcPNyrYh440KgoTDTJ6CdoEIM+rntzhEchDl+FFiRKBYFwBvZY3YoChZx66Z75LA/GCxIXafXir00Z6WEZrnTK8EsFJ0VADMsDBAnLn1k8ft9gY6sTuzEJaIJHSGeQd0GQOsisOpllilxHA1irR1mzQlRjZDqUwFDzenXke7Mxz16HGMrSel8WjFtTblIlLQGiW8vStmDhxdAPWTmkolNooRKGUCiEMQ9xcehsv2RjJK0uw8/J8KAy0qjLbhKI6IZ2tBELR33BVZ4t8amChUKMPaa5k0T3cBaCiw1BfK7r3Uuqw6oySqtOkOKwuBK6xEdB6pmF44ySG2pOBwlHqFXQU9MHUQRJmtPKzHF80gKJkziiqqPTtM5bc44xIVzKZoYKaxQgWH4jZdjdLll4iQCSkrewlU5ok9Avl7iqgRRzUhUEUi+D9TYtK06iFoa+H0l04QXHP41TdSMTopjL7W9p+yDUo9ErUl3zjLipTQJ0pDRIwsTptemrHLgIyIII38w6vRvqWCjyEK3apzI/TGVz5viSGfTwx2xRbtDhdfc3PxUKmPkAFZrsukfaKg6EqM2yukDt9I52pJpBlkDZOhy2zc6yLdVKYpaB+2lZxDGxHRpv4uwcH1YRs87IEvLpJEjo7TpI3cbj97LGwaDg+E77aiwK4vfmD77rqyXSFs6MNUZgF39qzBkZcYycRt/mZdSyiL8zF71EQvPS+jUO2B3R+amLgnNwePhGDGN2Z1BT2NPWTlgZwG8Yqa9jrdIfanKhUMKOr8Ne7auuKrAY/RDxwQfKEXz3WdWVee2iqHud8qOBNta1cG5ddtjfRxRAzmee3ll0qzf5qS3e+nMPNa4oaJeMyp+u6STi57S9qajywK+TV/9MnyTUEDCsejB9KxVMjIw89R9wcZ0bVxt1juaanT/agd/EQSBIQn+fAHBXmOf6IsXIH/9IouB4WV9Dzw6hsddro+wMzqhOiQvOyBAuv1WDEZVKUdDPMsLecUZjQPCcEYBmiZB0Nw6BGoB0BJDe57PW6gGS77vmFtbOZvzTNnrTPjdZsjN9AF+vn0Lp+biEzUDvYaGLVjK/qZW4z8vacBn+0uO2d6avXQbRi9Yl+sK+ePXq630NuILiY0wi4UG2p4PLIFzXurBoQ/Uzq4ZqAoiwxTQnSGgPBEOPpWL9z5EoDeS23JDwMgweHQlpH65yL1LgACAidofJzV0u8y54XE46UNKNjxXHpj0lLaU0pMimIXBo6Xw6KnPJgXVfp2ChVpjVQSiMvp/LSfRfjFNfnMi+qd1kONJlMnSZOPNhouQMqx3dMs7dGg/50+wKumK/K7Wk/PW2XanqZ3KR1NqsGBLt6VtvLp+TrVtvBGnDELpR5cbAqBAU2ZubogHxMKw3NPaHUo7hbzGBliwayhRplkH/x8+yXdfnn+lj8ciJfBI15Qc6Cg2hcSq/Ld74iSbomq2FWtP+qMLl0vmb5dpmR17V1nYpTza/Z7tB/Jt5C+zX7anIqPkzXu7L0xoDIXHFUFgH1zeLjfhTOMgEF5Kc+kBGPfeOkFu0Wi2y/W2/L2c3i7/gvlJ+ysv41AR3UZPORSHt+omcRm5IReqFigvcuWx4mJprkN61q8GGmLcrzFkkImUwYxN/y4++jDEImoBjEoTieNvrXEUvaRC18bWhT4582/hEM1sPd+nGbl6fDuGDUoKIA81Qcj/lj0Sc0KU9PD9mXold0Kabr9q5bLGG5XpRZTr4vc/YGfr8mvyJbq9Nmw7+RxO5iRVAd56tm5N0Wf9LdUlyamiez5drJaCv7Q/GH2dlSvLSwh4ZjgUeuTps+OBqXKUBMbuAWWv4dHHwmOykIZBRiqCa0gUK4lybYEHvZSt8TUu7wXQmz6zdvbrNfPv724Q2qmSl4sdvKXzvzynPjxHMTfx65XpQEEfyWRr6bhr7rzcMocAN/7iZBErpu6EdRlKZplMIl8zCdYxQu88MXcod/Gxfvr/8nu7v/eHv960329v7mfYbFTDtDfoTvWSbEOsnmx2NxKDM/crOHNYl5RhA/5eXvs9q1VtjSB+uPs9fX795lrz9+uL+9fn1v8P0+AGkU+EkQJpHvu2Hih2nszb0kDVPS43RILJaErkH+1iO9kxBCsjVoL1ec5VD861SAVYCdLvL1YZcxWyGk9FrQEb1lZNTdAEhKe7C5AlU+jvqR0qnIG9cBRJA+TDj7gMIIZDkVBWB81SAZnABtBYMVxGa5VcCKjZ+cHckXonx3GldIyRzrWHBp8l1Cpl9Ig2mO95TZsdgUCwgYDfUga9JCmAlMz5WSY3fdbKgXpngAb3XaaPKCHRlFM2zGo5VeVgxixs410osEQXfmaOX9zc27m1+v728yEmn6v0DM97w4ieahG0NQCXw3Tv3Am8eJF3shzmfIQt3OLJZ852V/u/7w5t3NrUlkg7AWul6Uuv488dMw8sMkiuI09OdpHCRzz0vjOPF8YkHt6YJHlDdKXbQs9G/fIT7BS/OWsmpQXL95//Y+u/nHzQeToO75qZu48wCkj9wgiJJwnoRpd1rkct48rcubP4otyV2Wdl1dqxizcYjBE03uEMToAiXlsdc9ULd4oglRdKUfF0l+vbnPfnn38fV/ZR9+e/+LkUF7YZi66dwDFwqiyA9c1wuDNHH9IIxc303SngqFa7ha+v7t+5u7++v3fzdxp9Cfh3M3SAI/9uM4hGor9T1gI0qSNJn7CfwbeXDAzMyQCYwgIPk11IM3d3cGPCADGDuS1AvAupM0DKH4C1M3cL0kjlLP9eMQjcMgqBAGeJ1kzkLsQ/k5j4LYTd0onHth4iEK88T1AjdxYz/05n7qu25qwcfdzX//dvPhtRUWXjT3vTksE4Dcc6jYAIQoAKZSfx7Nw9jDj5CRKAxSfFOcISb3UBa//fXD9f1vtzcGKuFG6adx5Aeh6yaASOLFvp8k8Mc8MYWhKH/Z7BZfPpyeHooDOrZl7PlVJaAEoBGFpEr2dvJSsk6f1RRVMSk1rwMzdn0JUVSPQriC4qlAlZFgbBM/HVpHdo+eidHqKuS6UAw3+1qshZBiPw9omdlWmCbJ8hnrRlZQK0sFqVRhjRTtfv0EVUb+REalq9PGpsLkUlU0FIEmcAhBuTIEeS47pr1qMH9bMPWewy0aggy3oQYpBfQf7xwSPwzASWRjtBThqIuUssme3Ute55tNcbheLsHYSPixdxKVhCLROB9RCJ/FRWorCKVwL5wkcdQWGZE6tJQUwH+of9TYYegNcg89KUU0nJ0Uh6znBQNcc5OkED6RG+ceuy0Z4XAiilAjHUQlfR4Xqa/B1DxxGqlBzUUZZkx1lqnLKcD/WEepM8QwnEY6RkwRz3ZuOIm73GFlv12MTCcNKopg4xymTpubWWXMOE6DVEjH0aAfJQGTSrp7zgZ1V3MRoSEenSbJK811qJ0D1/ZJvI2YAv4PdZomRwzGieRj1GoCAoRowT80zdx/FVvcw5p2mYAizzhvkciexVEU+kIdGh/p3nEmXrmV9kjFkK4olSVAt3QnzN49NHQUoH+oZ1TMFLe8qxvkFDpCqlj8Bg60SyUUrqBjr2+iHPnZJqNiKeMMnMnc3Xx4k8Hw9Q63n+8/ZrCz0b+VEgYBzDlh5pfEaeAGYTCfu4k3j1MYBYZBAgM302kb3/i+vbl+YzLkc9107sbzIEjc2PWS2HVD3039OMaUQ2y4O7Pw9f55+/beZKroRylsYXhJ5PppErqRixLGcezDPNFwoHhXbJfvC3J/zf3unXf37Yh1OtrC6rSxGaW0EFJsbZ9/2+zypdF77ZF/fj4dgX3v3ErFPQxzF4XNpZ1pApAyeQjXfdvDZrijuwGUaFgXpe5ghzZ/BE/Ol0OQla5W4BwR+iWOpo/7CvFG0PefceuDbI4PDPoK/aERX0NEAdewCR24HTY0HlamMCItKKIL/Ujz6T/yzQmMvNvhpOg+cILL+PjnYV2S1WwjDgWDXn5+3V3yZ166YRlv3jgFyXh3h/FiWUhfJ/OZPqFbuQ6/F8RBt+rfoFeoz64Pj0NGghoiigLwc9ylRu47awqM8vxkozszMMxzbEwDOGZfjpLxHTPjoz7KJfTY+aojkji6S4MOYgry8uNAUDB2gj/eg1WubovydNiizi09WUtGEYvdvIO0O0XCcMzONTInCYKBIVnlHe+O/PjX7N3H19fv7pBbtvsFJgt9iQghaJHWSqfvl3GRagMD2FkbhTmnbfMEGUT9qpGjUSkSEto/g2uNByLfGWRGISKoD4QEVYyPzkKgZumUQaJ9aByiOrOUQ7EqDsV2UQyK55zrTuOfBBe6wpnAwXfKrLD97HjTjr29sBFtX9pYnTY2jQ9CXoV5cHSyFSAWGYtQ3aOY+cQv2QOZUyJknCRHQdRc5UwYRefAaMzkGFtrvgsi6vdLZxSagp+BIGLGxDiFbyJTAxV/xD8hj/hHlxcGHqeTsOvJXgOSqn+x+qaRBA0IybyNzZecjYGgtyYHCXNrvM+Bc+eoZpTdMgTJAlOjyGJkwv2fINP90LqmmJE9gjzzLynn4qeLhAdg53l49j7SHjY7FHQ0pGv1PKiqWHHAQ6dhbSBTH9rqNWkohbnhmESqswFpJo3VDE3h4+3TfrNerMuB7Ws7LUU22UTP30spTA1upXRUFKFYjO8eYkysrmm7IkVE2rh4jXywgurRPshrSdtEJ2gi6z2R/BUdn0gcsXibp0FaU3juccfVaWNT2mpJD4SDpzyMZswGWxqicRWtwrMojurua4Arm07eQmQeXqvpuRkIoSjVGu8f4pkpJKWab1Q6aOQjeXKaZDZjwbPhmHbIj3RhzsRAwNttVgLcFuwzgEyKqLqJryAC4vbt6rQZ7PMMP0J/cgxZlSZ6fQJMd5WmC6+SM5DoKqkGqrRgyiqNfic8AK0r0/xAbA4OLNMI+Xqd9gRbI7Db2PqcNr8TgkcaiYiS93syA89aaPIsPHeXCNJ83BeCD6roKMcTlXQaYgoMskWDIhfyA9Mr5jEVFrilQnYqRxatlKvRRZ1CRhZL8Fm9dmqEKs5TrlHmab3mN9ICYj882Ku0bSIVOC1XN0+vPvRbzAVYhXKego0y3eOXq9NmSPRWaQ8EBGMBjoYwsqmA1EP3NCUbZdrEQ0ehIi9wLmTE6NEgqelMMK3GvkpSo6/bDCZPajOmX33MHwU3pXwuoPu/AQxi41O+3mbHxY7cuZNl5M8Mos3+sCbp1f2autL/PE/6w+RXD2iJfRsgv80f6cOZ4iBssn/67uT7rDzkiy/r7WPGd64eD7vT3rmCBMPjEHc7sAuK3RULQ8zrlNF/d71kQVVYLPryZFRFcTcpVaF0A++ygGDgvLBVX7wShQG6UZMgD6jtJOOpyyhzGSuXU5UHoXSCIUkGNfbIrYFR/CjREYAGdqTBbDdpX30mAFOd2XRiOrLCPwz0bcQu1wxMAoxsTpoC2LEgjCO55DdGsTClq5aMERNkpbZOtTmQDJTs20rHZzgDpZTYUUyOchNUCblb0qBpcmbV1XRkRfDsD8k23Ir8YQCwRJfr26zoNkZBkDUupLpJh029BZBZtPlZINEPsAHZ8gVL+yJUTEvWwhxsuLXJpTZ0LYofiSy+mAvDe9CbIA2sV0c3rgdBmy+F+yEEpTDNA1jtO+aMPUCgqXEupOmbRkNJ8AjKdNRQCBMM1avs04lE1sOX/RC6Eq80nzC6wv7tNN9P2Oe7z1b+2k/X43QNGAZzr3cVUVvYsogvNmQFvv0w2JAVQdYOBXzDD5pDBGtpzUxobWK6QmtWMHjc1eJetzDgF4JU3RrihjXwAhImDcyNz0AZCjiPUe/Hw4htliSFtU3NdPDy81QM8/ALILx4BXThXwGG89wdhY2w4Cqs0f48kriGb+NI38O3jvTFqwtJEAr+SwsReAkYB5ejGxSJffK6VwwhsdQSKBlFuLqdDfYRdo2+XsbYfHyOT+L14WMph44wUbBrqEQoVepxKoFjarxmDi/yQH8cARLGZC2SoQ1ZEZ6m5dam2LZhN+alhhW7Pq/lUijEVKWxmssmyUr89hMWrtfPMNSDdWtIG0UBD0BWydCWshz/e2O0EXHmG8LaDBzYiC6HAxILdeXxhElgkOjKYPQFe1ueZdpjgdbw7XNMJuUbsAa+Be0z8G08vOrBWwNJMCiJS+vwXJJCGNCGkmEeH+Bzh5jE5w2XHxCiJH77CZ+HYUitfF9rRm6YX28XhyI/FvSrH2b01gM7dw148zHvBX8CwsR6QIxVsSlf9nkQlF714O25wWWtzquHwf6kYEVX1AgG0kuEeQvquW2w2qRH3JtpQgEWqXoLgwJZFnbyWJS21mG3msg//cDLhLnPwzZsU6MsxhpA/sNIehWXxIghm+EUzLinkxnFx5sxLnlew5pZYLKIHx5w1rCN5u3IwC9kmBevrIoce9qwhoCkN4sZkmdmLQzNxCzsQIH0y0zOwIj7SHPzACisO/9eRHTEB6VfeaXKFyGCqSFlnD16wtL9KboEhed+0uhEo+KgpGnRt3t+W0AX9mlnQwaURaqYnDJChLmYfuPn5+fn/wcT8KyIieoAAA==" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.9.0/class_hash/pending.json b/crates/rpc/fixtures/0.9.0/class_hash/pending.json deleted file mode 100644 index 37954f7fb1..0000000000 --- a/crates/rpc/fixtures/0.9.0/class_hash/pending.json +++ /dev/null @@ -1 +0,0 @@ -"0x70656e64696e6720636c61737320302068617368" \ No newline at end of file diff --git a/crates/rpc/fixtures/0.9.0/fee_estimates/declare_deploy_invoke_sierra_0_14_0.json b/crates/rpc/fixtures/0.9.0/fee_estimates/declare_deploy_invoke_sierra_0_14_0.json new file mode 100644 index 0000000000..02a7266730 --- /dev/null +++ b/crates/rpc/fixtures/0.9.0/fee_estimates/declare_deploy_invoke_sierra_0_14_0.json @@ -0,0 +1,42 @@ +[ + { + "l1_data_gas_consumed": "0xc0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x6c9", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0xf12", + "unit": "FRI" + }, + { + "l1_data_gas_consumed": "0xe0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x18", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0x1f0", + "unit": "FRI" + }, + { + "l1_data_gas_consumed": "0x80", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x0", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0xcb4e8", + "l2_gas_price": "0x1", + "overall_fee": "0xcb5e8", + "unit": "FRI" + }, + { + "l1_data_gas_consumed": "0x80", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x0", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0xcb4e8", + "l2_gas_price": "0x1", + "overall_fee": "0xcb5e8", + "unit": "FRI" + } +] diff --git a/crates/rpc/fixtures/0.9.0/fee_estimates/declare_deploy_invoke_sierra_0_14_1.json b/crates/rpc/fixtures/0.9.0/fee_estimates/declare_deploy_invoke_sierra_0_14_1.json new file mode 100644 index 0000000000..02a7266730 --- /dev/null +++ b/crates/rpc/fixtures/0.9.0/fee_estimates/declare_deploy_invoke_sierra_0_14_1.json @@ -0,0 +1,42 @@ +[ + { + "l1_data_gas_consumed": "0xc0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x6c9", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0xf12", + "unit": "FRI" + }, + { + "l1_data_gas_consumed": "0xe0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x18", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0x1f0", + "unit": "FRI" + }, + { + "l1_data_gas_consumed": "0x80", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x0", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0xcb4e8", + "l2_gas_price": "0x1", + "overall_fee": "0xcb5e8", + "unit": "FRI" + }, + { + "l1_data_gas_consumed": "0x80", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x0", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0xcb4e8", + "l2_gas_price": "0x1", + "overall_fee": "0xcb5e8", + "unit": "FRI" + } +] diff --git a/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class.json b/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class.json index a5a260b435..29149af797 100644 --- a/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class.json +++ b/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class.json @@ -53,6 +53,38 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb12" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4ee" + } + ] + } + ] + }, "type": "DECLARE", "validate_invocation": { "call_type": "CALL", @@ -223,6 +255,38 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff93f" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6c1" + } + ] + } + ] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -357,6 +421,33 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff831" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x7cf" + } + ] + } + ] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -487,6 +578,33 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x4" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffee4" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x11c" + } + ] + } + ] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -515,4 +633,4 @@ } } } -] \ No newline at end of file +] diff --git a/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json b/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json index ba8d79574b..c7ef4a6c68 100644 --- a/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json +++ b/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_13_4.json @@ -53,6 +53,38 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb0f" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4f1" + } + ] + } + ] + }, "type": "DECLARE", "validate_invocation": { "call_type": "CALL", @@ -223,6 +255,38 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff938" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6c8" + } + ] + } + ] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -357,6 +421,33 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffff56d92" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0xa926e" + } + ] + } + ] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", diff --git a/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json b/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json index 7049630f81..e0aef4efd6 100644 --- a/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json +++ b/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class_starknet_0_14_0.json @@ -1,388 +1,479 @@ [ - { - "fee_estimation": { - "l1_data_gas_consumed": "0xc0", - "l1_data_gas_price": "0x2", - "l1_gas_consumed": "0x372", - "l1_gas_price": "0x1", - "l2_gas_consumed": "0x0", - "l2_gas_price": "0x1", - "overall_fee": "0x4f2", - "unit": "WEI" + { + "fee_estimation": { + "l1_data_gas_consumed": "0xc0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x372", + "l1_gas_price": "0x1", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0x4f2", + "unit": "WEI" + }, + "transaction_trace": { + "execution_resources": { + "l1_data_gas": 192, + "l1_gas": 882, + "l2_gas": 0 + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x4f2", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x4f2", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "l1_gas": 4, + "l2_gas": 0 }, - "transaction_trace": { - "execution_resources": { - "l1_data_gas": 192, - "l1_gas": 882, - "l2_gas": 0 - }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4f2", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4f2", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "l1_gas": 4, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x1" - ] - }, - "type": "DECLARE", - "validate_invocation": { + "is_reverted": false, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb0e" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4f2" + } + ] + } + ] + }, + "type": "DECLARE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 1, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + }, + { + "fee_estimation": { + "l1_data_gas_consumed": "0xe0", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x19", + "l1_gas_price": "0x1", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0x1d9", + "unit": "WEI" + }, + "transaction_trace": { + "execute_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0xc02", + "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "0x4", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0x0", + "calls": [ + { + "call_type": "CALL", + "calldata": [ + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0xc01", + "calls": [ + { "call_type": "CALL", - "calldata": [ - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" - ], - "caller_address": "0x0", + "calldata": [], + "caller_address": "0xc02", "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x289da278a8dc833409cabfdad1581e8e7d40e42dcaed693fa4008dcdb4963b3", - "entry_point_type": "EXTERNAL", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "entry_point_type": "CONSTRUCTOR", "events": [], "execution_resources": { - "l1_gas": 1, - "l2_gas": 0 + "l1_gas": 0, + "l2_gas": 0 }, "is_reverted": false, "messages": [], - "result": [ - "0x56414c4944" - ] - } - } - }, - { - "fee_estimation": { - "l1_data_gas_consumed": "0xe0", - "l1_data_gas_price": "0x2", - "l1_gas_consumed": "0x19", - "l1_gas_price": "0x1", - "l2_gas_consumed": "0x0", - "l2_gas_price": "0x1", - "overall_fee": "0x1d9", - "unit": "WEI" - }, - "transaction_trace": { - "execute_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0xc02", - "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "0x4", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" + "result": [] + } + ], + "class_hash": "0x6f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc", + "contract_address": "0xc02", + "entry_point_selector": "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0xc01", + "0x0", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0" ], - "caller_address": "0x0", - "calls": [ - { - "call_type": "CALL", - "calldata": [ - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0xc01", - "calls": [ - { - "call_type": "CALL", - "calldata": [], - "caller_address": "0xc02", - "calls": [], - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", - "entry_point_type": "CONSTRUCTOR", - "events": [], - "execution_resources": { - "l1_gas": 0, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [] - } - ], - "class_hash": "0x6f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc", - "contract_address": "0xc02", - "entry_point_selector": "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0xc01", - "0x0", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0" - ], - "keys": [ - "0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d" - ], - "order": 0 - } - ], - "execution_resources": { - "l1_gas": 5, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" - ] - } + "keys": [ + "0x26b160f10156dea0639bec90696772c640b9706a47f5b8c52ea1abe5858b34d" ], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "l1_gas": 10, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x1", - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" - ] - }, + "order": 0 + } + ], "execution_resources": { - "l1_data_gas": 224, - "l1_gas": 25, - "l2_gas": 0 + "l1_gas": 5, + "l2_gas": 0 }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d9", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d9", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "l1_gas": 4, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x1" - ] - }, - "type": "INVOKE", - "validate_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0xc02", - "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", - "0x4", - "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "0x0", - "0x0", - "0x0" - ], - "caller_address": "0x0", - "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "l1_gas": 2, - "l2_gas": 0 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x56414c4944" - ] - } - } - }, - { - "fee_estimation": { - "l1_data_gas_consumed": "0x80", - "l1_data_gas_price": "0x2", - "l1_gas_consumed": "0x0", - "l1_gas_price": "0x2", - "l2_gas_consumed": "0xc7eae", - "l2_gas_price": "0x1", - "overall_fee": "0xc7fae", - "unit": "FRI" + "is_reverted": false, + "messages": [], + "result": [ + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + ] + } + ], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 10, + "l2_gas": 0 }, - "transaction_trace": { - "execute_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "0x0" - ], - "caller_address": "0x0", - "calls": [ - { - "call_type": "CALL", - "calldata": [], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", - "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "entry_point_selector": "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "l1_gas": 0, - "l2_gas": 40000 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x9" - ] - } - ], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "l1_gas": 0, - "l2_gas": 201160 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x1", - "0x1", - "0x9" - ] - }, + "is_reverted": false, + "messages": [], + "result": [ + "0x1", + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7" + ] + }, + "execution_resources": { + "l1_data_gas": 224, + "l1_gas": 25, + "l2_gas": 0 + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x1d9", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0x1d9", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "l1_gas": 4, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff935" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6cb" + } + ] + } + ] + }, + "type": "INVOKE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0xc02", + "0x1987cbd17808b9a23693d4de7e246a443cfe37e6e7fbaeabd7d7e6532b07c3d", + "0x4", + "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "0x0", + "0x0", + "0x0" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 2, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + }, + { + "fee_estimation": { + "l1_data_gas_consumed": "0x80", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x0", + "l1_gas_price": "0x2", + "l2_gas_consumed": "0xc7eae", + "l2_gas_price": "0x1", + "overall_fee": "0xc7fae", + "unit": "FRI" + }, + "transaction_trace": { + "execute_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "0x0" + ], + "caller_address": "0x0", + "calls": [ + { + "call_type": "CALL", + "calldata": [], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "contract_address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "entry_point_selector": "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "entry_point_type": "EXTERNAL", + "events": [], "execution_resources": { - "l1_data_gas": 128, - "l1_gas": 0, - "l2_gas": 744420 - }, - "fee_transfer_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0xb5ce4", - "0x0" - ], - "caller_address": "0xc01", - "calls": [], - "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", - "contract_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", - "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", - "entry_point_type": "EXTERNAL", - "events": [ - { - "data": [ - "0xc01", - "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0xb5ce4", - "0x0" - ], - "keys": [ - "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" - ], - "order": 0 - } - ], - "execution_resources": { - "l1_gas": 0, - "l2_gas": 190720 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x1" - ] + "l1_gas": 0, + "l2_gas": 40000 }, - "type": "INVOKE", - "validate_invocation": { - "call_type": "CALL", - "calldata": [ - "0x1", - "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", - "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", - "0x0" - ], - "caller_address": "0x0", - "calls": [], - "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", - "contract_address": "0xc01", - "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", - "entry_point_type": "EXTERNAL", - "events": [], - "execution_resources": { - "l1_gas": 0, - "l2_gas": 42780 - }, - "is_reverted": false, - "messages": [], - "result": [ - "0x56414c4944" - ] - } - } + "is_reverted": false, + "messages": [], + "result": [ + "0x9" + ] + } + ], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 0, + "l2_gas": 201160 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x1", + "0x1", + "0x9" + ] + }, + "execution_resources": { + "l1_data_gas": 128, + "l1_gas": 0, + "l2_gas": 744420 + }, + "fee_transfer_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xb5ce4", + "0x0" + ], + "caller_address": "0xc01", + "calls": [], + "class_hash": "0x13dbe991273192b5573c526cddc27a27decb8525b44536cb0f57b5b2c089b51", + "contract_address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "entry_point_selector": "0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e", + "entry_point_type": "EXTERNAL", + "events": [ + { + "data": [ + "0xc01", + "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", + "0xb5ce4", + "0x0" + ], + "keys": [ + "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9" + ], + "order": 0 + } + ], + "execution_resources": { + "l1_gas": 0, + "l2_gas": 190720 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x1" + ] + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffff4a31c" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0xb5ce4" + } + ] + } + ] + }, + "type": "INVOKE", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1", + "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "0x3c8e49f80f188aa594216c470baf9428ed7dbef7af8f907328bee96696b878", + "0x0" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xc01", + "entry_point_selector": "0x162da33a4585851fe8d3af3c2a9c60b557814e221e0d4f30ff0b2189d9c7775", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 0, + "l2_gas": 42780 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x56414c4944" + ] + } } + } ] diff --git a/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_fee_charge.json b/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_fee_charge.json index 8c52825f1c..760d410089 100644 --- a/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_fee_charge.json +++ b/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_fee_charge.json @@ -16,6 +16,24 @@ "l1_gas": 878, "l2_gas": 0 }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [] + }, "type": "DECLARE", "validate_invocation": { "call_type": "CALL", @@ -149,6 +167,24 @@ "l1_gas": 19, "l2_gas": 0 }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -246,6 +282,19 @@ "l1_gas": 14, "l2_gas": 0 }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -339,6 +388,19 @@ "l1_gas": 14, "l2_gas": 0 }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x4" + } + ], + "replaced_classes": [], + "storage_diffs": [] + }, "type": "INVOKE", "validate_invocation": { "call_type": "CALL", @@ -367,4 +429,4 @@ } } } -] \ No newline at end of file +] diff --git a/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_validate.json b/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_validate.json index 6ab3815878..2d8b5421df 100644 --- a/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_validate.json +++ b/crates/rpc/fixtures/0.9.0/simulations/declare_deploy_and_invoke_sierra_class_with_skip_validate.json @@ -53,6 +53,38 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [ + { + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90", + "compiled_class_hash": "0x69032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8" + } + ], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffb12" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x4ee" + } + ] + } + ] + }, "type": "DECLARE" } }, @@ -201,6 +233,38 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0x12592426632af714f43ccb05536b6044fc3e897fa55288f658731f93590e7e7", + "class_hash": "0x544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x2" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff940" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x6c0" + } + ] + } + ] + }, "type": "INVOKE" } }, @@ -306,6 +370,33 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x3" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffff833" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x7cd" + } + ] + } + ] + }, "type": "INVOKE" } }, @@ -411,7 +502,34 @@ "0x1" ] }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xc01", + "nonce": "0x4" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d", + "storage_entries": [ + { + "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", + "value": "0xfffffffffffffffffffffffffee6" + }, + { + "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", + "value": "0x11a" + } + ] + } + ] + }, "type": "INVOKE" } } -] \ No newline at end of file +] diff --git a/crates/rpc/fixtures/0.9.0/simulations/simulate_transaction.json b/crates/rpc/fixtures/0.9.0/simulations/simulate_transaction.json new file mode 100644 index 0000000000..9c3648e662 --- /dev/null +++ b/crates/rpc/fixtures/0.9.0/simulations/simulate_transaction.json @@ -0,0 +1,111 @@ +[ + { + "fee_estimation": { + "l1_data_gas_consumed": "0x160", + "l1_data_gas_price": "0x2", + "l1_gas_consumed": "0x15", + "l1_gas_price": "0x1", + "l2_gas_consumed": "0x0", + "l2_gas_price": "0x1", + "overall_fee": "0x2d5", + "unit": "WEI" + }, + "transaction_trace": { + "constructor_invocation": { + "call_type": "CALL", + "calldata": [ + "0x1" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "entry_point_selector": "0x28ffe4ff0f226a9107253e17a904099aa4f63a02a5621de0576e5aa71bc5194", + "entry_point_type": "CONSTRUCTOR", + "events": [ + { + "data": [], + "keys": [ + "0x38f6a5b87c23cee6e7294bcc3302e95019f70f81586ff3cac38581f5ca96381", + "0x1" + ], + "order": 0 + } + ], + "execution_resources": { + "l1_gas": 2, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [] + }, + "execution_resources": { + "l1_data_gas": 352, + "l1_gas": 21, + "l2_gas": 0 + }, + "state_diff": { + "declared_classes": [], + "deployed_contracts": [ + { + "address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978" + } + ], + "deprecated_declared_classes": [], + "nonces": [ + { + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "nonce": "0x1" + } + ], + "replaced_classes": [], + "storage_diffs": [ + { + "address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "storage_entries": [ + { + "key": "0x81ba5d1f84a6a8f0e7ae24720a20f43f81d9ee6eed98fd524ba8d53a49416b", + "value": "0x1" + }, + { + "key": "0x1379ac0624b939ceb9dede92211d7db5ee174fe28be72245b0a1a2abd81c98f", + "value": "0x1" + }, + { + "key": "0x7e79bbb6be5d418acd50c88b675e697f6f7094e203c9d7e29c6ad6731f931dd", + "value": "0x1" + } + ] + } + ] + }, + "type": "DEPLOY_ACCOUNT", + "validate_invocation": { + "call_type": "CALL", + "calldata": [ + "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "0x46c0d4abf0192a788aca261e58d7031576f7d8ea5229f452b0f23e691dd5971", + "0x1" + ], + "caller_address": "0x0", + "calls": [], + "class_hash": "0x19cabebe31b9fb6bf5e7ce9a971bd7d06e9999e0b97eee943869141a46fd978", + "contract_address": "0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232", + "entry_point_selector": "0x36fcbf06cd96843058359e1a75928beacfac10727dab22a3972f0af8aa92895", + "entry_point_type": "EXTERNAL", + "events": [], + "execution_resources": { + "l1_gas": 1, + "l2_gas": 0 + }, + "is_reverted": false, + "messages": [], + "result": [ + "0x56414c4944" + ] + } + } + } +] diff --git a/crates/rpc/fixtures/0.8.0/traces/multiple_pending_txs.json b/crates/rpc/fixtures/0.9.0/traces/multiple_pre_confirmed_txs.json similarity index 96% rename from crates/rpc/fixtures/0.8.0/traces/multiple_pending_txs.json rename to crates/rpc/fixtures/0.9.0/traces/multiple_pre_confirmed_txs.json index 536c292c92..31f16f03a2 100644 --- a/crates/rpc/fixtures/0.8.0/traces/multiple_pending_txs.json +++ b/crates/rpc/fixtures/0.9.0/traces/multiple_pre_confirmed_txs.json @@ -3,14 +3,14 @@ "trace_root": { "execution_resources": { "l1_data_gas": 192, - "l1_gas": 878, + "l1_gas": 882, "l2_gas": 0 }, "fee_transfer_invocation": { "call_type": "CALL", "calldata": [ "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4ee", + "0x4f2", "0x0" ], "caller_address": "0xc01", @@ -24,7 +24,7 @@ "data": [ "0xc01", "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x4ee", + "0x4f2", "0x0" ], "keys": [ @@ -65,11 +65,11 @@ "storage_entries": [ { "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", - "value": "0xfffffffffffffffffffffffffb12" + "value": "0xfffffffffffffffffffffffffb0e" }, { "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", - "value": "0x4ee" + "value": "0x4f2" } ] } @@ -183,7 +183,7 @@ "entry_point_type": "EXTERNAL", "events": [], "execution_resources": { - "l1_gas": 8, + "l1_gas": 10, "l2_gas": 0 }, "is_reverted": false, @@ -196,14 +196,14 @@ }, "execution_resources": { "l1_data_gas": 224, - "l1_gas": 19, + "l1_gas": 25, "l2_gas": 0 }, "fee_transfer_invocation": { "call_type": "CALL", "calldata": [ "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d3", + "0x1d9", "0x0" ], "caller_address": "0xc01", @@ -217,7 +217,7 @@ "data": [ "0xc01", "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x1d3", + "0x1d9", "0x0" ], "keys": [ @@ -258,11 +258,11 @@ "storage_entries": [ { "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", - "value": "0xfffffffffffffffffffffffff93f" + "value": "0xfffffffffffffffffffffffff935" }, { "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", - "value": "0x6c1" + "value": "0x6cb" } ] } @@ -289,7 +289,7 @@ "entry_point_type": "EXTERNAL", "events": [], "execution_resources": { - "l1_gas": 1, + "l1_gas": 2, "l2_gas": 0 }, "is_reverted": false, @@ -340,7 +340,7 @@ "entry_point_type": "EXTERNAL", "events": [], "execution_resources": { - "l1_gas": 4, + "l1_gas": 6, "l2_gas": 0 }, "is_reverted": false, @@ -353,14 +353,14 @@ }, "execution_resources": { "l1_data_gas": 128, - "l1_gas": 14, + "l1_gas": 19, "l2_gas": 0 }, "fee_transfer_invocation": { "call_type": "CALL", "calldata": [ "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x10e", + "0x113", "0x0" ], "caller_address": "0xc01", @@ -374,7 +374,7 @@ "data": [ "0xc01", "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8", - "0x10e", + "0x113", "0x0" ], "keys": [ @@ -410,11 +410,11 @@ "storage_entries": [ { "key": "0x32a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e", - "value": "0xfffffffffffffffffffffffff831" + "value": "0xfffffffffffffffffffffffff822" }, { "key": "0x5496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a", - "value": "0x7cf" + "value": "0x7de" } ] } @@ -437,7 +437,7 @@ "entry_point_type": "EXTERNAL", "events": [], "execution_resources": { - "l1_gas": 1, + "l1_gas": 2, "l2_gas": 0 }, "is_reverted": false, @@ -449,4 +449,4 @@ }, "transaction_hash": "0x2a973a52127349ccb6ecd72c31a7b1fc444a526643b4afe8a275a536075cb0e" } -] \ No newline at end of file +] diff --git a/crates/rpc/fixtures/0.9.0/transactions/receipt_pending.json b/crates/rpc/fixtures/0.9.0/transactions/receipt_pending.json deleted file mode 100644 index 72d734c927..0000000000 --- a/crates/rpc/fixtures/0.9.0/transactions/receipt_pending.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "actual_fee": { - "amount": "0x0", - "unit": "WEI" - }, - "block_number": 3, - "events": [ - { - "data": [], - "from_address": "0xabcddddddd", - "keys": [ - "0x70656e64696e67206b6579" - ] - }, - { - "data": [], - "from_address": "0xabcddddddd", - "keys": [ - "0x70656e64696e67206b6579", - "0x7365636f6e642070656e64696e67206b6579" - ] - }, - { - "data": [], - "from_address": "0xabcaaaaaaa", - "keys": [ - "0x70656e64696e67206b65792032" - ] - } - ], - "execution_resources": { - "l1_data_gas": 0, - "l1_gas": 0, - "l2_gas": 0 - }, - "execution_status": "SUCCEEDED", - "finality_status": "ACCEPTED_ON_L2", - "messages_sent": [], - "transaction_hash": "0x70656e64696e6720747820686173682030", - "type": "INVOKE" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.9.0/transactions/receipt_pre_latest.json b/crates/rpc/fixtures/0.9.0/transactions/receipt_pre_latest.json index 34c738fb15..3d63b03f53 100644 --- a/crates/rpc/fixtures/0.9.0/transactions/receipt_pre_latest.json +++ b/crates/rpc/fixtures/0.9.0/transactions/receipt_pre_latest.json @@ -30,7 +30,7 @@ "l2_gas": 0 }, "execution_status": "SUCCEEDED", - "finality_status": "ACCEPTED_ON_L2", + "finality_status": "PRE_CONFIRMED", "messages_sent": [], "transaction_hash": "0x7072656c617465737420747820686173682030", "type": "INVOKE" diff --git a/crates/rpc/fixtures/0.9.0/transactions/receipt_reverted_pending.json b/crates/rpc/fixtures/0.9.0/transactions/receipt_reverted_preconfirmed.json similarity index 72% rename from crates/rpc/fixtures/0.9.0/transactions/receipt_reverted_pending.json rename to crates/rpc/fixtures/0.9.0/transactions/receipt_reverted_preconfirmed.json index d8f7f78820..ea3d80fd11 100644 --- a/crates/rpc/fixtures/0.9.0/transactions/receipt_reverted_pending.json +++ b/crates/rpc/fixtures/0.9.0/transactions/receipt_reverted_preconfirmed.json @@ -11,9 +11,9 @@ "l2_gas": 0 }, "execution_status": "REVERTED", - "finality_status": "ACCEPTED_ON_L2", + "finality_status": "PRE_CONFIRMED", "messages_sent": [], "revert_reason": "Reverted!", - "transaction_hash": "0x70656e64696e67207265766572746564", + "transaction_hash": "0x707265636f6e6669726d6564207265766572746564", "type": "INVOKE" -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/0.9.0/transactions/status_pending.json b/crates/rpc/fixtures/0.9.0/transactions/status_pending.json deleted file mode 100644 index 8cfefa0492..0000000000 --- a/crates/rpc/fixtures/0.9.0/transactions/status_pending.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "execution_status": "SUCCEEDED", - "finality_status": "ACCEPTED_ON_L2" -} diff --git a/crates/rpc/fixtures/0.9.0/transactions/status_pre_latest.json b/crates/rpc/fixtures/0.9.0/transactions/status_pre_latest.json index 8cfefa0492..40cf8fdd9a 100644 --- a/crates/rpc/fixtures/0.9.0/transactions/status_pre_latest.json +++ b/crates/rpc/fixtures/0.9.0/transactions/status_pre_latest.json @@ -1,4 +1,4 @@ { "execution_status": "SUCCEEDED", - "finality_status": "ACCEPTED_ON_L2" + "finality_status": "PRE_CONFIRMED" } diff --git a/crates/rpc/fixtures/0.9.0/transactions/status_reverted.json b/crates/rpc/fixtures/0.9.0/transactions/status_reverted.json index 845486464e..a8e59987d1 100644 --- a/crates/rpc/fixtures/0.9.0/transactions/status_reverted.json +++ b/crates/rpc/fixtures/0.9.0/transactions/status_reverted.json @@ -1,5 +1,5 @@ { "execution_status": "REVERTED", "failure_reason": "Reverted!", - "finality_status": "ACCEPTED_ON_L2" + "finality_status": "PRE_CONFIRMED" } diff --git a/crates/rpc/fixtures/0.9.0/transactions/txn_pending_hash_0.json b/crates/rpc/fixtures/0.9.0/transactions/txn_pending_hash_0.json deleted file mode 100644 index 625b3fe314..0000000000 --- a/crates/rpc/fixtures/0.9.0/transactions/txn_pending_hash_0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "transaction_hash": "0x70656e64696e6720747820686173682030", - "type": "INVOKE", - "version": "0x0" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.9.0/transactions/txn_pending_reverted.json b/crates/rpc/fixtures/0.9.0/transactions/txn_pending_reverted.json deleted file mode 100644 index fb92c2312d..0000000000 --- a/crates/rpc/fixtures/0.9.0/transactions/txn_pending_reverted.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", - "entry_point_selector": "0x656e74727920706f696e742030", - "max_fee": "0x0", - "signature": [], - "transaction_hash": "0x70656e64696e67207265766572746564", - "type": "INVOKE", - "version": "0x0" -} \ No newline at end of file diff --git a/crates/rpc/fixtures/0.10.0/transactions/txn_pending_hash_0.json b/crates/rpc/fixtures/0.9.0/transactions/txn_preconfirmed_reverted.json similarity index 50% rename from crates/rpc/fixtures/0.10.0/transactions/txn_pending_hash_0.json rename to crates/rpc/fixtures/0.9.0/transactions/txn_preconfirmed_reverted.json index 625b3fe314..af98031fc1 100644 --- a/crates/rpc/fixtures/0.10.0/transactions/txn_pending_hash_0.json +++ b/crates/rpc/fixtures/0.9.0/transactions/txn_preconfirmed_reverted.json @@ -1,10 +1,10 @@ { "calldata": [], - "contract_address": "0x70656e64696e6720636f6e747261637420616464722030", + "contract_address": "0x707265636f6e6669726d656420636f6e747261637420616464722030", "entry_point_selector": "0x656e74727920706f696e742030", "max_fee": "0x0", "signature": [], - "transaction_hash": "0x70656e64696e6720747820686173682030", + "transaction_hash": "0x707265636f6e6669726d6564207265766572746564", "type": "INVOKE", "version": "0x0" -} \ No newline at end of file +} diff --git a/crates/rpc/fixtures/contracts/libfuncs_coverage.json b/crates/rpc/fixtures/contracts/libfuncs_coverage.json new file mode 100644 index 0000000000..e5888abdde --- /dev/null +++ b/crates/rpc/fixtures/contracts/libfuncs_coverage.json @@ -0,0 +1,8134 @@ +{ + "sierra_program": [ + "0x1", + "0x8", + "0x0", + "0x2", + "0x11", + "0x0", + "0xc15", + "0x3eb", + "0x27e", + "0x52616e6765436865636b", + "0x800000000000000100000000000000000000000000000000", + "0x7538", + "0x800000000000000700000000000000000000000000000000", + "0x456e756d", + "0x800000000000000700000000000000000000000000000003", + "0x0", + "0xc048ae671041dedb3ca1f250ad42a27aeddf8a7f491e553e7f2a70ff2e1800", + "0x1", + "0x436f6e7374", + "0x800000000000000000000000000000000000000000000002", + "0xf6", + "0x2", + "0x8000000000000000", + "0x7d", + "0x5c", + "0x6e5f627974657320746f6f20626967", + "0x693132385f6d756c204f766572666c6f77", + "0x753235365f6d756c204f766572666c6f77", + "0x426f756e646564496e74", + "0x800000000000000700000000000000000000000000000002", + "0xd", + "0x4172726179", + "0x800000000000000300000000000000000000000000000001", + "0x536e617073686f74", + "0x800000000000000700000000000000000000000000000001", + "0xe", + "0x537472756374", + "0x3f829a4bc463d91621ba418d447cc38c95ddc483f9ccfebae79050eb7b3dcb6", + "0xf", + "0x8000000000000001", + "0x800000000000000f00000000000000000000000000000001", + "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3", + "0x800000000000000300000000000000000000000000000003", + "0x12", + "0x16a4c8d7c05909052238a862d8cc3e7975bf05a07b3a69c6b28951083a6d672", + "0x14", + "0x15", + "0x25e50662218619229b3f53f1dc3253192a0f68ca423d900214253db415a90b4", + "0x13", + "0x16", + "0x1eb", + "0x1a", + "0x11", + "0x53", + "0x1b", + "0x38b507bf259d96f5c53e8ab8f187781c3d096482729ec2d57f3366318a8502f", + "0x1c", + "0x800000000000000300000000000000000000000000000004", + "0x1d", + "0x3c5ce4d28d473343dbe52c630edf038a582af9574306e1d609e379cd17fc87a", + "0x1e", + "0x42697477697365", + "0x556e696e697469616c697a6564", + "0x800000000000000200000000000000000000000000000001", + "0x20", + "0x84", + "0x24", + "0x25", + "0x52", + "0x1000000000000000000000000000000", + "0x10000000000000000000000000000", + "0x28", + "0x29", + "0x100000000000000000000000000", + "0x1000000000000000000000000", + "0x2c", + "0x2d", + "0x10000000000000000000000", + "0x100000000000000000000", + "0x30", + "0x31", + "0x1000000000000000000", + "0x10000000000000000", + "0x34", + "0x35", + "0x100000000000000", + "0x1000000000000", + "0x38", + "0x39", + "0x10000000000", + "0x1000000", + "0x3c", + "0x3d", + "0x10000", + "0x100", + "0x40", + "0x800000000000000700000000000000000000000000000011", + "0x14cb65c06498f4a8e9db457528e9290f453897bdb216ce18347fff8fef2cd11", + "0x5", + "0x693132385f737562204f766572666c6f77", + "0x693132385f61646420556e646572666c6f77", + "0x6936345f6d756c204f766572666c6f77", + "0x6936345f737562204f766572666c6f77", + "0x6936345f61646420556e646572666c6f77", + "0x6933325f6d756c204f766572666c6f77", + "0x6933325f737562204f766572666c6f77", + "0x6933325f61646420556e646572666c6f77", + "0x6931365f6d756c204f766572666c6f77", + "0x6931365f737562204f766572666c6f77", + "0x6931365f61646420556e646572666c6f77", + "0x69385f6d756c204f766572666c6f77", + "0x69385f737562204f766572666c6f77", + "0x69385f61646420556e646572666c6f77", + "0x617474656d707420746f206469766964652077697468206f766572666c6f77", + "0x75313238", + "0x25e2ca4b84968c2d8b83ef476ca8549410346b00836ce79beaf538155990bb2", + "0x3288d594b9a45d15bb2fcb7903f06cdb06b27f0ba88186ec4cfaa98307cb972", + "0x54", + "0x753235365f737562204f766572666c6f77", + "0x753235365f616464204f766572666c6f77", + "0x753132385f6d756c204f766572666c6f77", + "0x18e", + "0x59", + "0x149ee8c97f9cdd259b09b6ca382e10945af23ee896a644de8c7b57da1779da7", + "0x5a", + "0x66656c74323532", + "0x53746f726167654261736541646472657373", + "0x101dc0399934cc08fa0d6f6f2daead4e4a38cabeea1c743e1fc28d2d6e58e99", + "0x800000000000000300000000000000000000000000000006", + "0x5b", + "0x5d", + "0x5e", + "0x1da860b08c8c086977f4d7b1cde9e72ae6fd06254c518bdbf96a0bcaf812e2", + "0x5f", + "0x427974654172726179", + "0x1effffffff", + "0x1effffffe1", + "0x65", + "0x1f", + "0x53746f726555313238202d206e6f6e2075313238", + "0x800000000000000700000000000000000000000000000005", + "0x2907a9767b8e0b68c23345eea8650b1366373b598791523a07fddaa450ba526", + "0x100000000000000000000000000000000", + "0x6b", + "0x100000000", + "0x2ce4352eafa6073ab4ecf9445ae96214f99c2c33a29c01fcae68ba501d10e2c", + "0x6a", + "0x426f78", + "0x6e", + "0x118", + "0x126", + "0x800000000000000000000000000000000000000000000003", + "0x76", + "0x73", + "0x75", + "0x74", + "0x483ada7726a3c4655da4fbfc0e1108a8", + "0x79be667ef9dcbbac55a06295ce870b07", + "0x29bfcdb2dce28d959f2815b16f81798", + "0xfd17b448a68554199c47d08ffb10d4b8", + "0x79", + "0x4e6f7420616c6c20696e707574732068617665206265656e2066696c6c6564", + "0x7b", + "0x144", + "0x416c6c20696e707574732068617665206265656e2066696c6c6564", + "0x496e646578206f7574206f6620626f756e6473", + "0x753332", + "0xff", + "0xffffffffffffffffffffffffffffff", + "0x83", + "0x18d", + "0x4e6f6e5a65726f", + "0x82", + "0x3e316790085ded77e618c7a06b4b2688f26416ea39c409a6ae51947c6668180", + "0x85", + "0x10", + "0x69313238", + "0x89", + "0x14b1294c8a79ef8d61452187d0b0bb505d2a3f4308f3e4f56ac9c914411624d", + "0x8a", + "0x693132385f73756220556e646572666c6f77", + "0x693132385f616464204f766572666c6f77", + "0x7ffffffffffffffffffffffffffffffe", + "0x80000000000000000000000000000000", + "0x7fffffffffffffffffffffffffffffff", + "0x93", + "0x95", + "0x97", + "0x6936345f73756220556e646572666c6f77", + "0x6936345f616464204f766572666c6f77", + "0x7ffffffffffffffe", + "0x7fffffffffffffff", + "0xa0", + "0xa2", + "0xa4", + "0x6933325f73756220556e646572666c6f77", + "0x6933325f616464204f766572666c6f77", + "0x7ffffffe", + "0x80000000", + "0x7fffffff", + "0xad", + "0xaf", + "0xb1", + "0x6931365f73756220556e646572666c6f77", + "0x6931365f616464204f766572666c6f77", + "0x7ffe", + "0x8000", + "0x7fff", + "0xba", + "0xbc", + "0xbe", + "0x69385f73756220556e646572666c6f77", + "0x69385f616464204f766572666c6f77", + "0x7e", + "0x80", + "0x7f", + "0xc7", + "0xcb", + "0xcc", + "0xca", + "0xcd", + "0xcf", + "0xffffffffffffffffffffffffffffffff", + "0x5aebc3d9d37a18c1875058f870f2bd708c1be102c684156df9dc102492ed9b", + "0x753132385f737562204f766572666c6f77", + "0x753132385f616464204f766572666c6f77", + "0x7536345f6d756c204f766572666c6f77", + "0x7536345f737562204f766572666c6f77", + "0x7536345f616464204f766572666c6f77", + "0x7533325f6d756c204f766572666c6f77", + "0x7533325f737562204f766572666c6f77", + "0x7533325f616464204f766572666c6f77", + "0x7531365f6d756c204f766572666c6f77", + "0x7531365f737562204f766572666c6f77", + "0x7531365f616464204f766572666c6f77", + "0x75385f6d756c204f766572666c6f77", + "0x75385f737562204f766572666c6f77", + "0x75385f616464204f766572666c6f77", + "0x4469766973696f6e2062792030", + "0x4f7074696f6e3a3a756e77726170206661696c65642e", + "0x1baeba72e79e9db2587cf44fedb2f3700b2075a5e8e39a562584862c4b71f62", + "0xe3", + "0x161ee0e6962e56453b5d68e09d1cabe5633858c1ba3a7e73fee8c70867eced0", + "0xe4", + "0x436c61737348617368", + "0x14a7ddbb1150a2edc3d078a24d9dd07049784d38d10f9253fc3ece33c2f46a3", + "0xe6", + "0xed", + "0x1cd44d3958bee022c1561960992f7da2205f85af54179129fc07d8fdf3a3202", + "0xe8", + "0xf9", + "0xf3", + "0x436f6e747261637441646472657373", + "0x800000000000000700000000000000000000000000000006", + "0x3dda549830dd1ec87f88217fc4be4b8f53ab537bba2ecca1d3169d839f21191", + "0xea", + "0xeb", + "0xec", + "0xf5", + "0xfeece2ea7edbbbebeeb5f270b77f64c680a68a089b794478dd9eca75e0196a", + "0xee", + "0xf7", + "0xf0", + "0x1597b831feeb60c71f259624b79cf66995ea4f7e383403583674ab9c33b9cec", + "0xf1", + "0x80000000000000070000000000000000000000000000000f", + "0x2db8ee6affe61edc9ac1b14951a23c709c9b82a4c645fa8be64632bd9fe644b", + "0xf2", + "0xf8", + "0x7d4d99e9ed8d285b5c61b493cedb63976bc3d9da867933d829f49ce838b5e7", + "0xf4", + "0x753634", + "0x800000000000000700000000000000000000000000000004", + "0x3342418ef16b3e2799b906b1e4e89dbb9b111332dd44f72458ce44f9895b508", + "0x80000000000000070000000000000000000000000000000e", + "0x348a62b7a38c0673e61e888d83a3ac1bf334ee7361a8514593d3d9532ed8b39", + "0x3808c701a5d13e100ab11b6c02f91f752ecae7e420d21b56c90ec0a475cc7e5", + "0xfd", + "0x2c7badf5cd070e89531ef781330a9554b04ce4ea21304b67a30ac3d43df84a2", + "0xfa", + "0x19367431bdedfe09ea99eed9ade3de00f195dd97087ed511b8942ebb45dbc5a", + "0xfc", + "0x90d0203c41ad646d024845257a6eceb2f8b59b29ce7420dd518053d2edeedc", + "0x800000000000000700000000000000000000000000000008", + "0x2e655a7513158873ca2e5e659a9e175d23bf69a2325cdd0397ca3b8d864b967", + "0x242ab892b168865613d6bf48e23e6f2bf6bd4155b5adb58517a5ceeef69ebb", + "0x800000000000000300000000000000000000000000000002", + "0x5b9304f5e1c8e3109707ef96fc2ba4cf5360d21752ceb905d488f0aef67c7", + "0x102", + "0x23b", + "0x7e4621e01c1acc41883ac1e084237742756de8c1659ee7bf893bb560837ced", + "0x1b1a0649752af1b28b3dc29a1556eee781e4a4c3a1f7f53f90fa834de098c4d", + "0x2ecc19720cac124bf57d12b451ce180dac73fe2f32da9d53f9dc1b476570fad", + "0x1ab6bf8b2d37052b3fc65bd4ab2cc70c4943b961009e87e94df4df0392fad8f", + "0x526573756c743a3a756e77726170206661696c65642e", + "0x115", + "0x112", + "0x114", + "0x113", + "0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e16", + "0x6b17d1f2e12c4247f8bce6e563a440f2", + "0x77037d812deb33a0f4a13945d898c296", + "0x2bce33576b315ececbb6406837bf51f5", + "0x553132384d756c47756172616e746565", + "0x119", + "0x11c", + "0x11b", + "0x5075626c6963206b6579207265636f76657279206661696c6564", + "0xffffffff00000000ffffffffffffffff", + "0xbce6faada7179e84f3b9cac2fc632551", + "0x496e76616c6964207369676e6174757265", + "0x3233063c5dc6197e9bf4ddc53b925e10907665cf58255b7899f8212442d4605", + "0x11e", + "0x1d8a68005db1b26d0d9f54faae1798d540e7df6326fae758cc2cf8f7ee88e72", + "0x11f", + "0x536563703235366b31506f696e74", + "0x3179e7829d19e62b12c79010203ceee40c98166e97eb104c25ad1adb6b9675a", + "0x121", + "0x122", + "0x3c7b5436891664778e6019991e6bd154eeab5d43a552b1f19485dec008095d3", + "0x123", + "0x5369676e6174757265206f7574206f662072616e6765", + "0x129", + "0x128", + "0x5539364c696d62734c7447756172616e746565", + "0x800000000000000100000000000000000000000000000001", + "0xfffffffffffffffffffffffffffffffe", + "0xbaaedce6af48a03bbfd25e8cd0364141", + "0x3", + "0x4164644d6f6447617465", + "0x800000000000000800000000000000000000000000000002", + "0x12f", + "0x12e", + "0x4", + "0x43697263756974496e707574", + "0x800000000000000800000000000000000000000000000001", + "0x436972637569744661696c75726547756172616e746565", + "0x436972637569745061727469616c4f757470757473", + "0x139", + "0x436972637569744f757470757473", + "0x134", + "0x4369726375697444657363726970746f72", + "0x4369726375697444617461", + "0x55393647756172616e746565", + "0x800000000000000100000000000000000000000000000005", + "0x137", + "0x43697263756974", + "0x13d", + "0x43697263756974496e707574416363756d756c61746f72", + "0x4d756c4d6f6447617465", + "0x13c", + "0x13e", + "0x496e766572736547617465", + "0x12c", + "0x800000000000000800000000000000000000000000000004", + "0x13b", + "0x5375624d6f6447617465", + "0x436972637569744d6f64756c7573", + "0xffffffffffffffffffffffff", + "0x140", + "0x417474656d7074656420746f206465726566206e756c6c2076616c7565", + "0x147", + "0x3f66516dd5ed57d877a3ca3fc9dbe959f8fdf67fb3c5a7e55253a2c25d88903", + "0x145", + "0x35249d19238f0cd0e5fbf1dac2d7ce82cbf5ec4ca45a6031cde9b1110b9afcc", + "0x313d53fcef2616901e3fd6801087e8d55f5cb59357e1fc8b603b82ae0af064c", + "0x149", + "0xcfd9d1e1526314210451b0ad766e6d5b4ed1fe368bc13bb5230c29bd979878", + "0x14b", + "0x152", + "0xc9c2a6c8eb0d497d9a79fb3d3120d7390f52a0fc4f076b8afe6aa558241770", + "0x150", + "0x278f3ec0bad7182b4c545ec7663cc22fb4121af56a2576e273c74279b32c0ab", + "0xe3487c9ab3a7407cb90a0f6910666cc906c3e598f4828c6440b0679c5f7943", + "0x154", + "0x156", + "0x1181821a537efc0a295cb4fc1ad6c5b418750ca55ec64a042db7aa37b3aa516", + "0x157", + "0x2b88657ad062407e6e79647fccc585dbc7423d10eb48767559c52add0103dbf", + "0x159", + "0x15c", + "0x336711c2797eda3aaf8c07c5cf7b92162501924a7090b25482d45dd3a24ddce", + "0x15d", + "0x536861323536537461746548616e646c65", + "0x15e", + "0x15f", + "0x324f33e2d695adb91665eafd5b62ec62f181e09c2e0e60401806dcc4bb3fa1", + "0x160", + "0x800000000000000000000000000000000000000000000009", + "0x22b", + "0x16b", + "0x16a", + "0x169", + "0x168", + "0x167", + "0x166", + "0x165", + "0x164", + "0x5be0cd19", + "0x1f83d9ab", + "0x9b05688c", + "0x510e527f", + "0xa54ff53a", + "0x3c6ef372", + "0xbb67ae85", + "0x6a09e667", + "0x87", + "0x16f", + "0x1b0", + "0x16e", + "0xffffffff800000", + "0x1ffffffff", + "0x1fffffffe", + "0x174", + "0x179", + "0x800000", + "0x1ffffffff8", + "0x18", + "0x17f", + "0x8", + "0x1fffffffe0", + "0x182", + "0x22e", + "0xffffff00", + "0xffffff", + "0xffff00", + "0xffff", + "0xff00", + "0x62797465733331", + "0x1f6117a75e73316bee80a3d681219b132768c8b8ca0b8c552ac3615cccecc5f", + "0x3c0b2dc6588ea569ade7827b2ab2bf3bd17da59c1f7d6ba5a69dfbc11c0f19d", + "0x190", + "0x3b9ddf97bd58cc7301a2107c3eabad82196f38221c880cd3645d07c3aac1422", + "0x191", + "0x192", + "0xcb2569551a5d010d5e78b093d882e8282fe7091146322e2b9da4c3d338b4a9", + "0x193", + "0x45635374617465", + "0x4563506f696e74", + "0x2a862fbf322420f9b484eed01b235833f52a37df634df6dc9948698c824c0a1", + "0x197", + "0x33f235d9b542880cc4704c6ab38aa9c5924055ca75a1d91cbd4118573a9f6c4", + "0x199", + "0x53746f7261676541646472657373", + "0x2b3dcf65180836e963dd7cd4cbd404fb49ed666c6a82a1014123098bf285da5", + "0x19b", + "0x11771f2d3e7dc3ed5afe7eae405dfd127619490dec57ceaa021ac8bc2b9b315", + "0x3d37ad6eafb32512d2dd95a2917f6bf14858de22c27a1114392429f2e5c15d7", + "0xef37977e058689489dbbd7685834bd6b82a64f2db109135470239d2dc655c", + "0x246cc388e96542771c5acac7fdb362e2928cdad1e914884663a26434ff9cf3f", + "0x693634", + "0x1761a0dbb41597d02b154a10bcac53e17f0553f1a422b7d1925f9557790477f", + "0x1a1", + "0x693332", + "0x27ed008ff197573a3c25e887843c7d8bed7ece797a05ccbe7e02d201a721c65", + "0x1a3", + "0x693136", + "0x21f045c358dbabc128517fd7d92b6c4ba48eaf1370ecf0ca12891d8d90da677", + "0x1a5", + "0x6938", + "0x63de42eced2a7e8558e83c15270c0715890830fdb0e6c0a2adc687428506ed", + "0x1a7", + "0x1909a2057b9c1373b889e003e050a09f431d8108e0659d03444ced99a6eea68", + "0x156b6b29ca961a0da2cfe5b86b7d70df78ddc905131c6ded2cd9024ceb26b4e", + "0x19b9ae4ba181a54f9e7af894a81b44a60aea4c9803939708d6cc212759ee94c", + "0x753136", + "0x1df5abf484ff46fcefc4c239b5c351ce9c47777b7e1f26b505f9e9bc5823115", + "0x1ac", + "0xffffffffffffffff00000000", + "0xffffffffffffffff", + "0x1b4", + "0x1b5", + "0x1b1", + "0xffffffff", + "0x1b9", + "0x1ba", + "0x1b6", + "0x1bd", + "0x1581ffdeebe5727b8aea839aa79e85bcd2144c8300d50f2ee683f8c0f2ceec3", + "0x1be", + "0x41f738426955e76da993ac462972a8d230b76a8f1fbd862b0c9844d3319014", + "0x1c4", + "0x2ef6df8717a79bda13615e370f780febf22001d097fffd9c9ecc1c009a9e23c", + "0x1c5", + "0xd74cd452c76d7a4424187f7010c6f09f39fbbae271122db5365a6ef0ffde5b", + "0x1cb", + "0x11e41fdd402da7c0b6e6fe0d02a451b41183e353b735934621de025bd180ef2", + "0x1cc", + "0x24c196261bf04296eb2084597a43fb962d89b1bf32fe2c8e86e92d506929e85", + "0x1d2", + "0x3d6cd8ff03930da691362cc24a0fdeeee1fefdc1f416544b8d3424a81e49575", + "0x1d3", + "0x1e502373461b88a9424d3731ae5def2f9cac8b7114594a76516346c9d3b4290", + "0x1d9", + "0x40b459980e674f9a8d0c1278a6126055adc02e5270b7ef71bcd0f92a96c2b9", + "0x1da", + "0x3915ed49bd144204bf0adb602111e609ba2e7a273b324d4bbc869e774091d8f", + "0x800000000000000700000000000000000000000000000007", + "0x30f214300edde592b381a6ae206c8ffd84e0ec57cb57e8ccbc636f195d7a8ac", + "0xd2", + "0x2e46652dc521ef47bda345c4afbf4811b66f1e79242ce1206ef9f7e6a3c9ed", + "0x1655889cb788f47ef8275f94fead01c6f6943f41dbb664b4b79104cf8ebcb34", + "0x1e2", + "0xfffffffffffffffe", + "0x1aaaaa2455a6623d5539087759c82197214ba41d1ec1af6d4eec032cd3f8e88", + "0x1e7", + "0xfffffffe", + "0x1e116ebfe9daaa458476828d5eddf5d1e99a9e9495211e28e8c68c4b5fac83e", + "0x1ec", + "0xfffe", + "0x3869d6586ce5c376b5c2998396c912c0f4f73fb9232a99483e5b47caf013662", + "0x1f1", + "0x1f5", + "0xfe", + "0xc06006f5028e317ce389cf26bba2618d731815cfdd4a5afaddc555cf41f58d", + "0x1f8", + "0x46a6158a16a947e5916b2a2ca68501a45e93d7110e81aa2d6438b1c57c879a3", + "0x4f7574206f6620676173", + "0x4275696c74696e436f737473", + "0x496e7452616e6765", + "0x1fd", + "0xb4f8b41f7169e13a421ddfa0f8287570662d50603f8071abaceaf61b5bffa7", + "0x1fe", + "0x12867ecd09c884a5cf1f6d9eb0193b4695ce3bb3b2d796a8367d0c371f59cb2", + "0x46656c7432353244696374", + "0x800000000000000100000000000000000000000000000003", + "0x395182d3064a9b10aed2efff9fc0a42698c3db74bf85f80b39a9cbfc0c3ecf0", + "0x202", + "0x203", + "0x205", + "0xa853c166304d20fb0711becf2cbdf482dee3cac4e9717d040b7a7ab1df7eec", + "0x207", + "0x536563703235367231506f696e74", + "0xcb47311929e7a903ce831cb2b3e67fe265f121b394a36bc46c17cf352547fc", + "0x209", + "0x185fda19bc33857e9f1d92d61312b69416f20cf740fa3993dcc2de228a6671d", + "0x20b", + "0xf83fa82126e7aeaf5fe12fff6a0f4a02d8a185bf5aaee3d10d1c4e751399b4", + "0x20c", + "0x107a3e65b6e33d1b25fa00c80dfe693f414350005bc697782c25eaac141fedd", + "0x35de1f6419a35f1a8c6f276f09c80570ebf482614031777c6d07679cf95b8bb", + "0x210", + "0x4e756c6c61626c65", + "0x213", + "0x219", + "0x46656c7432353244696374456e747279", + "0x218", + "0x537175617368656446656c7432353244696374", + "0x21a", + "0x21f", + "0x224", + "0x225", + "0x228", + "0x800000000000000700000000000000000000000000000009", + "0x2ebd0db842156282541f330b9adda69afbcb5e0bc850c2bf2c001e26e2bbbac", + "0x22c", + "0x22c9b1bc6d3fefa028617aab43371d8bc107526fab21f8f952be9ad64df8ebd", + "0x2fde49800770c298b23d39416d8f03af955ed23b30c1dbb83d842b8beb5244a", + "0x230", + "0x231", + "0x22f", + "0x50175a0c185134fbf1ccf4cdcd863391c14cebf4d05b1e8a92a632fe1dd2e8", + "0x232", + "0x36775737a2dc48f3b19f9a1f4bc3ab9cb367d1e2e827cef96323826fd39f53f", + "0x23c", + "0xb85322f11b6b0744eb1b48a47107e41bb232b5fca3144aead447a0f56ccbe1", + "0x133d694001bf35a9d923263ef35056656745ebc4a438d88d5d3fc91bceaec88", + "0x336e65619009691e760aeadfba6034fce01c8eb2c2a3fef46fc487311383eae", + "0x240", + "0x241", + "0x2caa410582282e9087e415aaea56622a206cb26f86694341167b00d637784d1", + "0x1e3", + "0x358cbeadbc6bc920b06f3af655cc81f8c06720b7b8c5d887d0a4ff8a2f3987d", + "0x296e2da3dae89e805568644447722b6e9b8f393aa11180266eea96013ddff3e", + "0x1e8", + "0x278bc1b4c43f70a6d2b76e205914639790564e37aca10520a3eac18436a27b", + "0x933d549b77e62e351b1d4b4b3025acf36121eed7d17d635bfa7545b6cef21f", + "0x1ed", + "0x335a793b941896561d8cf0db776a195e7bd051a5a44860d7e678fafc9c546a9", + "0x2c0448028a4687a5cb047cafd24243145de75b91ad6810a46fc451753644068", + "0x1f2", + "0x36eb41a30e1afa28ea2dc8190a8c1549444f1c1a0033b59f4be150b5cd315bc", + "0x2e527aace812f12e100ec80e4cb6f1acea10e1c9382bcfa71fa41da0664e26e", + "0x1f9", + "0xbb743ac4a29bb0a9ffd7e1c7e521ab57351e005951c20c76365d555e773026", + "0x200", + "0x18a05f53ea81c8c63375a3c58440d80255ddf215694d970763758360e334b89", + "0x206", + "0x204", + "0x800000000000000700000000000000000000000000000010", + "0x208ac0e42fde74f15114489931e5382e24a3050151a1edd9bee69b05389f904", + "0xa77670e54832b3524efd887e40de5f4d58834f565049530c42c737f3fec347", + "0x10e", + "0x10d", + "0x10c", + "0x10b", + "0x10a", + "0x109", + "0x20e", + "0x20f", + "0x1be9ee399405cf270029f0b363ee031275616b71077bc49a8b3544f1ec58c9f", + "0x214", + "0x33ab7e7cf294eab2cbe7c081764643846217402b2b5cc6b85cafbe577933184", + "0x29d5f87479f148719daf652f935dc6e924094a16fec4af025c58a1a61833e5d", + "0x215", + "0x800000000000000100000000000000000000000000000004", + "0x1a26c1d3be604aff4d2b7def62375545abd8bade26aaf02b42781d56102b498", + "0x21c", + "0x21b", + "0x3400f4f89056b8abeadf8a0dfe1483193de23fef4686b76eab2269db6b0e6f3", + "0x221", + "0x220", + "0x2537e6ee50909a8e8762060e4e1e7b913966a0a86b3ec226c78454a05b2de8e", + "0x227", + "0x226", + "0x80000000000000030000000000000000000000000000000e", + "0x1ed6da506010c57064df4122a0890222f2322c0fde5f0668363a80be4514c61", + "0x14d", + "0x1cf82d760aecd4e9e1e4c4052e6cda7ab408e4e7a9391f028ee328ed5921834", + "0x15b", + "0x15a", + "0x22a", + "0x24b9c0e4d2ac85a769b1d3027eb9e259f1267911e45b5d3352c813bd0dde628", + "0x1bfcb7e8c53e5e85135a9770c4900abc172e5183c50bd7370ecc79d0f77a53f", + "0x23f", + "0x23e", + "0x2fb4525f84038a7baa4c1c73f9a6dc679f82c81ac41abbd2b95341bc7e3834b", + "0x243", + "0x242", + "0x16620b24664933340a90c3d02675d3901363845ac01f4833ad0db23ca0cdfd5", + "0x244", + "0x195e9c3e34bd8f20ee27e379815968d3309c60a2ca3c19f7646c5e0bf05ef3d", + "0x1c1", + "0x145a58dfbe62b6819db06740e3e42fddae971cc76d9770ad3759785435dfb0d", + "0x1c8", + "0x195fdca4e62e1beeea64060dab8e999d4adbb39147d26453ed2046986b2ad93", + "0x1cf", + "0xdf4b7ca1c28e682c6b6eae58172d1eacc088ffd679abe048202cf0532baecd", + "0x1d6", + "0x3aefc04216aedf7951fbed4f0a832d0785c77e3c10090be3320af6017e1039a", + "0x1dd", + "0x3a4f1f10fb9f14ac33f78ea864cd7964f7e0664c6f9f943d6be38d89ed2ef70", + "0x1df", + "0x1de", + "0x13e1a9c3f6ce0c728e320368718de22081d7d41d5c5285224eea54c598678d8", + "0x246", + "0x245", + "0x117d1ad57905ac9e3ef94c83e6dcd3b54daf79b81570ab522026bbcb755466b", + "0x248", + "0x247", + "0x353f56edcdbc6df3126f836fa57559f5d778644fc9bdc844c98e8147734662f", + "0x24a", + "0x249", + "0x229ca9befcabdd47be84e485cc1b65c35c50b280033ace2e0cb47591a472513", + "0x24c", + "0x24b", + "0x15abae457d5414f8bd4a1ac55d16960c2486fc16733bb531c61e59a9a26492b", + "0x24e", + "0x24d", + "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473", + "0x800000000000000f00000000000000000000000000000002", + "0xcc5e86243f861d2d64b08c35db21013e773ac5cf10097946fe0011304886d5", + "0x270", + "0x800000000000000100000000000000000000000000000024", + "0x2f1c5c2ddc6e3deec4c1d27e7778b298764edb7b7940638bc050a68e57fb297", + "0x26d", + "0x26c", + "0x26b", + "0x26a", + "0x269", + "0x268", + "0x267", + "0x266", + "0x265", + "0x264", + "0x263", + "0x262", + "0x261", + "0x260", + "0x25f", + "0x25e", + "0x25d", + "0x25c", + "0x25b", + "0x25a", + "0x259", + "0x258", + "0x257", + "0x256", + "0x255", + "0x254", + "0x253", + "0x252", + "0x251", + "0x250", + "0x24f", + "0x53797374656d", + "0x4d756c4d6f64", + "0x4164644d6f64", + "0x52616e6765436865636b3936", + "0x5365676d656e744172656e61", + "0x506f736569646f6e", + "0x45634f70", + "0x506564657273656e", + "0x9931c641b913035ae674b400b61a51476d506bbe8bba2ff8a6272790aba9e6", + "0x26f", + "0x4761734275696c74696e", + "0x604", + "0x7265766f6b655f61705f747261636b696e67", + "0x77697468647261775f676173", + "0x6272616e63685f616c69676e", + "0x7374727563745f6465636f6e737472756374", + "0x61727261795f736e617073686f745f706f705f66726f6e74", + "0x64726f70", + "0x27c", + "0x66756e6374696f6e5f63616c6c", + "0x656e756d5f696e6974", + "0x27b", + "0x73746f72655f74656d70", + "0x27a", + "0x279", + "0x278", + "0x277", + "0x276", + "0x275", + "0x274", + "0x27d", + "0x273", + "0x7374727563745f636f6e737472756374", + "0x272", + "0x656e756d5f6d61746368", + "0x271", + "0x72656465706f7369745f676173", + "0x61727261795f6e6577", + "0x736e617073686f745f74616b65", + "0x636f6e73745f61735f696d6d656469617465", + "0x26e", + "0x64697361626c655f61705f747261636b696e67", + "0x6a756d70", + "0x75385f73717274", + "0x75385f62697477697365", + "0x6", + "0x7531365f73717274", + "0x7531365f62697477697365", + "0x7", + "0x7533325f73717274", + "0x7533325f62697477697365", + "0x9", + "0xa", + "0x7536345f73717274", + "0x7536345f62697477697365", + "0xb", + "0xc", + "0x753132385f73717274", + "0x62697477697365", + "0x626f6f6c5f616e645f696d706c", + "0x626f6f6c5f6f725f696d706c", + "0x626f6f6c5f786f725f696d706c", + "0x66656c743235325f646976", + "0x66656c743235325f616464", + "0x66656c743235325f737562", + "0x66656c743235325f6d756c", + "0x66656c743235325f69735f7a65726f", + "0x17", + "0x19", + "0x7374727563745f736e617073686f745f6465636f6e737472756374", + "0x72656e616d65", + "0x757063617374", + "0x756e626f78", + "0x627974657333315f746f5f66656c74323532", + "0x239", + "0x238", + "0x626f756e6465645f696e745f737562", + "0x237", + "0x626f756e6465645f696e745f636f6e73747261696e", + "0x236", + "0x235", + "0x234", + "0x233", + "0x22d", + "0x647570", + "0x626c616b6532735f636f6d7072657373", + "0x626c616b6532735f66696e616c697a65", + "0x229", + "0x66656c743235325f646963745f6e6577", + "0x66656c743235325f646963745f656e7472795f676574", + "0x223", + "0x21", + "0x73717561736865645f66656c743235325f646963745f656e7472696573", + "0x222", + "0x22", + "0x23", + "0x21e", + "0x21d", + "0x26", + "0x217", + "0x27", + "0x216", + "0x6e756c6c", + "0x696e746f5f626f78", + "0x6e756c6c61626c655f66726f6d5f626f78", + "0x6e756c6c61626c655f666f72776172645f736e617073686f74", + "0x6d617463685f6e756c6c61626c65", + "0x2a", + "0x2b", + "0x211", + "0x2e", + "0x2f", + "0x20d", + "0x38757fc6ad96fab837f69741024e18cbedcf9445933917989f3d1d58af02312", + "0x20a", + "0x208", + "0x32", + "0x66656c743235325f636f6e7374", + "0x75385f636f6e7374", + "0x7531365f636f6e7374", + "0x7533325f636f6e7374", + "0x7536345f636f6e7374", + "0x753132385f636f6e7374", + "0x69385f636f6e7374", + "0x33", + "0x6931365f636f6e7374", + "0x6933325f636f6e7374", + "0x6936345f636f6e7374", + "0x36", + "0x693132385f636f6e7374", + "0x37", + "0x627974657333315f636f6e7374", + "0x73746f726167655f626173655f616464726573735f636f6e7374", + "0x636c6173735f686173685f636f6e7374", + "0x3a", + "0x636f6e74726163745f616464726573735f636f6e7374", + "0x3b", + "0x626f785f666f72776172645f736e617073686f74", + "0x656e756d5f736e617073686f745f6d61746368", + "0x656e756d5f626f7865645f6d61746368", + "0x7374727563745f626f7865645f6465636f6e737472756374", + "0x3e", + "0x201", + "0x696e745f72616e67655f7472795f6e6577", + "0x3f", + "0x1ff", + "0x6765745f6275696c74696e5f636f737473", + "0x1fc", + "0x77697468647261775f6761735f616c6c", + "0x1fb", + "0x61727261795f617070656e64", + "0x1fa", + "0x75385f69735f7a65726f", + "0x75385f736166655f6469766d6f64", + "0x41", + "0x75385f6f766572666c6f77696e675f737562", + "0x626f756e6465645f696e745f7472696d5f6d6178", + "0x1f4", + "0x626f756e6465645f696e745f616464", + "0x1f6", + "0x1f3", + "0x626f756e6465645f696e745f7472696d5f6d696e", + "0x75385f6f766572666c6f77696e675f616464", + "0x42", + "0x43", + "0x75385f776964655f6d756c", + "0x646f776e63617374", + "0x44", + "0x75385f6571", + "0x7531365f69735f7a65726f", + "0x7531365f736166655f6469766d6f64", + "0x7531365f6f766572666c6f77696e675f737562", + "0x1ef", + "0x1ee", + "0x7531365f6f766572666c6f77696e675f616464", + "0x45", + "0x46", + "0x7531365f776964655f6d756c", + "0x47", + "0x7531365f6571", + "0x7533325f69735f7a65726f", + "0x7533325f736166655f6469766d6f64", + "0x7533325f6f766572666c6f77696e675f737562", + "0x1ea", + "0x1e9", + "0x7533325f6f766572666c6f77696e675f616464", + "0x48", + "0x49", + "0x7533325f776964655f6d756c", + "0x4a", + "0x7533325f6571", + "0x7536345f69735f7a65726f", + "0x7536345f736166655f6469766d6f64", + "0x7536345f6f766572666c6f77696e675f737562", + "0x1e5", + "0x1e4", + "0x7536345f6f766572666c6f77696e675f616464", + "0x4b", + "0x4c", + "0x7536345f776964655f6d756c", + "0x4d", + "0x7536345f6571", + "0x753132385f69735f7a65726f", + "0x753132385f736166655f6469766d6f64", + "0x753132385f6f766572666c6f77696e675f737562", + "0x4e", + "0x1e1", + "0x1e0", + "0x4f", + "0x50", + "0x753235365f73717274", + "0x51", + "0x626f756e6465645f696e745f69735f7a65726f", + "0x1dc", + "0x1db", + "0x69385f64696666", + "0x1d8", + "0x1d7", + "0x55", + "0x1d5", + "0x56", + "0x1d4", + "0x6931365f64696666", + "0x57", + "0x1d1", + "0x1d0", + "0x58", + "0x1ce", + "0x1cd", + "0x6933325f64696666", + "0x1ca", + "0x1c9", + "0x1c7", + "0x1c6", + "0x6936345f64696666", + "0x1c3", + "0x1c2", + "0x60", + "0x61", + "0x1c0", + "0x62", + "0x1bf", + "0x693132385f64696666", + "0x63", + "0x1bc", + "0x1bb", + "0x64", + "0x75385f746f5f66656c74323532", + "0x7531365f746f5f66656c74323532", + "0x7533325f746f5f66656c74323532", + "0x7536345f746f5f66656c74323532", + "0x753132385f746f5f66656c74323532", + "0x69385f746f5f66656c74323532", + "0x6931365f746f5f66656c74323532", + "0x6933325f746f5f66656c74323532", + "0x6936345f746f5f66656c74323532", + "0x693132385f746f5f66656c74323532", + "0x626f6f6c5f746f5f66656c74323532", + "0x1b8", + "0x626f756e6465645f696e745f6469765f72656d", + "0x1b3", + "0x626f756e6465645f696e745f6d756c", + "0x1b2", + "0x1af", + "0x1b7", + "0x1ae", + "0x66", + "0x636f6e74726163745f616464726573735f746f5f66656c74323532", + "0x636c6173735f686173685f746f5f66656c74323532", + "0x73746f726167655f616464726573735f746f5f66656c74323532", + "0x75385f7472795f66726f6d5f66656c74323532", + "0x67", + "0x7531365f7472795f66726f6d5f66656c74323532", + "0x1ad", + "0x68", + "0x7533325f7472795f66726f6d5f66656c74323532", + "0x1ab", + "0x69", + "0x7536345f7472795f66726f6d5f66656c74323532", + "0x1aa", + "0x75313238735f66726f6d5f66656c74323532", + "0x1a9", + "0x69385f7472795f66726f6d5f66656c74323532", + "0x1a8", + "0x6c", + "0x6931365f7472795f66726f6d5f66656c74323532", + "0x1a6", + "0x6d", + "0x6933325f7472795f66726f6d5f66656c74323532", + "0x1a4", + "0x6936345f7472795f66726f6d5f66656c74323532", + "0x1a2", + "0x6f", + "0x693132385f7472795f66726f6d5f66656c74323532", + "0x1a0", + "0x70", + "0x627974657333315f7472795f66726f6d5f66656c74323532", + "0x19f", + "0x71", + "0x21adb5788e32c84f69a1863d85ef9394b7bf761a0ce1190f826984e5075c371", + "0x19e", + "0x72", + "0x636c6173735f686173685f7472795f66726f6d5f66656c74323532", + "0x19d", + "0x1ad5911ecb88aa4a50482c4de3232f196cfcaf7bd4e9c96d22b283733045007", + "0x19c", + "0x65635f706f696e745f7472795f6e65775f6e7a", + "0x19a", + "0x65635f706f696e745f66726f6d5f785f6e7a", + "0x756e777261705f6e6f6e5f7a65726f", + "0x198", + "0x65635f706f696e745f756e77726170", + "0x77", + "0x65635f6e6567", + "0x78", + "0x65635f73746174655f696e6974", + "0x65635f706f696e745f69735f7a65726f", + "0x196", + "0x65635f6e65675f6e7a", + "0x65635f73746174655f616464", + "0x195", + "0x65635f73746174655f6164645f6d756c", + "0x65635f73746174655f7472795f66696e616c697a655f6e7a", + "0x65635f706f696e745f7a65726f", + "0x194", + "0x656e61626c655f61705f747261636b696e67", + "0x18f", + "0x18c", + "0x18b", + "0x18a", + "0x189", + "0x188", + "0x187", + "0x186", + "0x185", + "0x184", + "0x183", + "0x61727261795f6c656e", + "0x181", + "0x17e", + "0x180", + "0x17d", + "0x17c", + "0x17b", + "0x17a", + "0x178", + "0x177", + "0x176", + "0x175", + "0x173", + "0x172", + "0x171", + "0x16d", + "0x170", + "0x16c", + "0x163", + "0x7a", + "0x636f6e73745f61735f626f78", + "0x162", + "0x7368613235365f73746174655f68616e646c655f696e6974", + "0x161", + "0x7368613235365f73746174655f68616e646c655f646967657374", + "0x7c", + "0x61727261795f706f705f66726f6e74", + "0x61727261795f706f705f66726f6e745f636f6e73756d65", + "0x158", + "0x61727261795f676574", + "0x155", + "0x153", + "0x61727261795f736e617073686f745f706f705f6261636b", + "0x81", + "0x61727261795f736e617073686f745f6d756c74695f706f705f66726f6e74", + "0x151", + "0x61727261795f736e617073686f745f6d756c74695f706f705f6261636b", + "0x14f", + "0x14e", + "0x61727261795f736c696365", + "0x7370616e5f66726f6d5f7475706c65", + "0x7475706c655f66726f6d5f7370616e", + "0x86", + "0x14c", + "0x14a", + "0x88", + "0x148", + "0x146", + "0x8b", + "0x8c", + "0x66656c743235325f646963745f656e7472795f66696e616c697a65", + "0x8d", + "0x8e", + "0x616c6c6f635f6c6f63616c", + "0x66696e616c697a655f6c6f63616c73", + "0x73746f72655f6c6f63616c", + "0x142", + "0x141", + "0x7472795f696e746f5f636972637569745f6d6f64756c7573", + "0x696e69745f636972637569745f64617461", + "0x696e746f5f7539365f67756172616e746565", + "0x138", + "0x13a", + "0x6164645f636972637569745f696e707574", + "0x136", + "0x13f", + "0x8f", + "0x6765745f636972637569745f64657363726970746f72", + "0x133", + "0x6576616c5f63697263756974", + "0x6765745f636972637569745f6f7574707574", + "0x3ec1c84a1511eed894537833882a965abdddafab0d627a3ee76e01e6b57f37a", + "0x1d1238f44227bdf67f367571e4dec83368c54054d98ccf71a67381f7c51f1c4", + "0x7539365f67756172616e7465655f766572696679", + "0x131", + "0x4ef3b3bc4d34db6611aef96d643937624ebee01d56eae5bde6f3b158e32b15", + "0x90", + "0x753132385f6571", + "0x91", + "0x125", + "0x92", + "0x124", + "0x120", + "0x11d", + "0x11a", + "0x94", + "0x626f6f6c5f6e6f745f696d706c", + "0x117", + "0x753235365f67756172616e7465655f696e765f6d6f645f6e", + "0x753132385f6d756c5f67756172616e7465655f766572696679", + "0x111", + "0x110", + "0x7365637032353672315f6e65775f73797363616c6c", + "0x7365637032353672315f6d756c5f73797363616c6c", + "0x7365637032353672315f6164645f73797363616c6c", + "0x7365637032353672315f6765745f78795f73797363616c6c", + "0x10f", + "0x108", + "0x6c6962726172795f63616c6c5f73797363616c6c", + "0x63616c6c5f636f6e74726163745f73797363616c6c", + "0x706564657273656e", + "0xad292db4ff05a993c318438c1b6c8a8303266af2da151aa28ccece6726f1f1", + "0x107", + "0x106", + "0x2679d68052ccd03a53755ca9169677965fbd93e489df62f5f40d4f03c24f7a4", + "0x73746f726167655f726561645f73797363616c6c", + "0x96", + "0x73746f726167655f616464726573735f66726f6d5f62617365", + "0x105", + "0x104", + "0x103", + "0x6465706c6f795f73797363616c6c", + "0x101", + "0x98", + "0x656d69745f6576656e745f73797363616c6c", + "0x6765745f626c6f636b5f686173685f73797363616c6c", + "0x99", + "0x6765745f657865637574696f6e5f696e666f5f73797363616c6c", + "0xfb", + "0x9a", + "0x6765745f657865637574696f6e5f696e666f5f76325f73797363616c6c", + "0xef", + "0x9b", + "0x6765745f657865637574696f6e5f696e666f5f76335f73797363616c6c", + "0xe9", + "0x9c", + "0x7265706c6163655f636c6173735f73797363616c6c", + "0x73656e645f6d6573736167655f746f5f6c315f73797363616c6c", + "0x9d", + "0x6765745f636c6173735f686173685f61745f73797363616c6c", + "0xe7", + "0x9e", + "0x6d6574615f74785f76305f73797363616c6c", + "0xe5", + "0x9f", + "0x696e745f72616e67655f706f705f66726f6e74", + "0xe2", + "0xe1", + "0xe0", + "0xdf", + "0xde", + "0xdd", + "0xdc", + "0xdb", + "0xda", + "0xd9", + "0xd8", + "0xd7", + "0xd6", + "0xd5", + "0xd4", + "0xd3", + "0x753132385f6f766572666c6f77696e675f616464", + "0x753132385f67756172616e7465655f6d756c", + "0x753235365f69735f7a65726f", + "0x753235365f736166655f6469766d6f64", + "0xa1", + "0xd1", + "0xa3", + "0xc9", + "0xd0", + "0xc8", + "0xc6", + "0xc5", + "0xc3", + "0xc4", + "0xc2", + "0xc1", + "0xc0", + "0x69385f6f766572666c6f77696e675f6164645f696d706c", + "0xa5", + "0x69385f6f766572666c6f77696e675f7375625f696d706c", + "0xa6", + "0x69385f776964655f6d756c", + "0xa7", + "0x69385f6571", + "0xbf", + "0xbb", + "0xb9", + "0xb8", + "0xb6", + "0xb7", + "0xb5", + "0xb4", + "0xb3", + "0x6931365f6f766572666c6f77696e675f6164645f696d706c", + "0xa8", + "0x6931365f6f766572666c6f77696e675f7375625f696d706c", + "0xa9", + "0x6931365f776964655f6d756c", + "0xaa", + "0x6931365f6571", + "0xb2", + "0xae", + "0xac", + "0xab", + "0x6933325f6f766572666c6f77696e675f6164645f696d706c", + "0x6933325f6f766572666c6f77696e675f7375625f696d706c", + "0x6933325f776964655f6d756c", + "0x6933325f6571", + "0x6936345f6f766572666c6f77696e675f6164645f696d706c", + "0x6936345f6f766572666c6f77696e675f7375625f696d706c", + "0x6936345f776964655f6d756c", + "0xb0", + "0x6936345f6571", + "0x693132385f6f766572666c6f77696e675f6164645f696d706c", + "0x693132385f6f766572666c6f77696e675f7375625f696d706c", + "0x693132385f6571", + "0x7368613235365f70726f636573735f626c6f636b5f73797363616c6c", + "0x66656c743235325f646963745f737175617368", + "0x393d13543d6033e70e218aad8050e8de40a1dfbac0e80459811df56e3716ce6", + "0x736563703235366b315f6e65775f73797363616c6c", + "0x736563703235366b315f6d756c5f73797363616c6c", + "0x736563703235366b315f6164645f73797363616c6c", + "0x736563703235366b315f6765745f78795f73797363616c6c", + "0x6c6f63616c5f696e746f5f626f78", + "0x753132385f627974655f72657665727365", + "0x753531325f736166655f6469766d6f645f62795f75323536", + "0x73746f726167655f77726974655f73797363616c6c", + "0x68616465735f7065726d75746174696f6e", + "0x656e756d5f66726f6d5f626f756e6465645f696e74", + "0xbd", + "0x6b656363616b5f73797363616c6c", + "0x2b75", + "0x290", + "0x2a2", + "0x2b4", + "0x2c6", + "0x2d8", + "0x313", + "0x376", + "0x39c", + "0x3af", + "0x42a", + "0x442", + "0x454", + "0x466", + "0x4a7", + "0x4e8", + "0x529", + "0x57a", + "0x5cb", + "0x641", + "0x658", + "0x68e", + "0x6e1", + "0x6f7", + "0x816", + "0x845", + "0x862", + "0x889", + "0x894", + "0x127", + "0xce", + "0x2ed", + "0x300", + "0x327", + "0x116", + "0x33c", + "0x34f", + "0x362", + "0x12a", + "0x12b", + "0x12d", + "0x36e", + "0x130", + "0x132", + "0x60a", + "0x135", + "0x38a", + "0x143", + "0x3c6", + "0x3e2", + "0x3d4", + "0x3d9", + "0x41b", + "0x40c", + "0x47e", + "0x495", + "0x4bf", + "0x4d6", + "0x500", + "0x517", + "0x53e", + "0x550", + "0x562", + "0x55a", + "0x1e6", + "0x568", + "0x61d", + "0x1f0", + "0x58f", + "0x5a1", + "0x5b3", + "0x1f7", + "0x5ab", + "0x5b9", + "0x5e3", + "0x5f9", + "0x618", + "0x212", + "0x603", + "0x62c", + "0x23a", + "0x23d", + "0x67f", + "0x66e", + "0x6cd", + "0x6c2", + "0x6b3", + "0x8a9", + "0x70c", + "0x71f", + "0x732", + "0x745", + "0x758", + "0x76b", + "0x77e", + "0x791", + "0x7a4", + "0x7b7", + "0x7ca", + "0x7dd", + "0x7f0", + "0x803", + "0x27f", + "0x280", + "0x281", + "0x282", + "0x283", + "0x284", + "0x285", + "0x286", + "0x287", + "0x288", + "0x289", + "0x28a", + "0x28b", + "0x28c", + "0x28d", + "0x28e", + "0x28f", + "0x291", + "0x292", + "0x293", + "0x294", + "0x295", + "0x296", + "0x297", + "0x298", + "0x299", + "0x29a", + "0x29b", + "0x29c", + "0x29d", + "0x29e", + "0x29f", + "0x2a0", + "0x2a1", + "0x2a3", + "0x2a4", + "0x2a5", + "0x2a6", + "0x2a7", + "0x2a8", + "0x82a", + "0x2a9", + "0x2aa", + "0x2ab", + "0x2ac", + "0x2ad", + "0x83d", + "0x2ae", + "0x2af", + "0x2b0", + "0x2b1", + "0x2b2", + "0x85a", + "0x2b3", + "0x2b5", + "0x2b6", + "0x2b7", + "0x2b8", + "0x2b9", + "0x2ba", + "0x2bb", + "0x2bc", + "0x86b", + "0x2bd", + "0x2be", + "0x2bf", + "0x2c0", + "0x2c1", + "0x2c2", + "0x870", + "0x2c3", + "0x2c4", + "0x2c5", + "0x2c7", + "0x87a", + "0x2c8", + "0x2c9", + "0x2ca", + "0x2cb", + "0x2cc", + "0x2cd", + "0x8a4", + "0x2ce", + "0x2cf", + "0x2d0", + "0x2d1", + "0x2d2", + "0x2d3", + "0x2d4", + "0x2d5", + "0x2d6", + "0x8e4", + "0x8f5", + "0x906", + "0x914", + "0x922", + "0x8dc", + "0x8e9", + "0x8ee", + "0x8ff", + "0x962", + "0x90b", + "0x92e", + "0x919", + "0x93d", + "0x933", + "0x942", + "0x954", + "0x92b", + "0x94a", + "0x93a", + "0x94e", + "0x95d", + "0x988", + "0x999", + "0x9aa", + "0x9b8", + "0x9c6", + "0x980", + "0x98d", + "0x992", + "0x9a3", + "0xa06", + "0x9af", + "0x9d2", + "0x9bd", + "0x9e1", + "0x9d7", + "0x9e6", + "0x9f8", + "0x9cf", + "0x9ee", + "0x9de", + "0x9f2", + "0xa01", + "0xa2c", + "0xa3d", + "0xa4e", + "0xa5c", + "0xa6a", + "0xa24", + "0xa31", + "0xa36", + "0xa47", + "0xaaa", + "0xa53", + "0xa76", + "0xa61", + "0xa85", + "0xa7b", + "0xa8a", + "0xa9c", + "0xa73", + "0xa92", + "0xa82", + "0xa96", + "0xaa5", + "0xad0", + "0xae1", + "0xaf2", + "0xb00", + "0xb0e", + "0xac8", + "0xad5", + "0xada", + "0xaeb", + "0xb4e", + "0xaf7", + "0xb1a", + "0xb05", + "0xb29", + "0xb1f", + "0xb2e", + "0xb40", + "0xb17", + "0xb36", + "0xb26", + "0xb3a", + "0xb49", + "0xb74", + "0xb85", + "0xb99", + "0xbaa", + "0xbbb", + "0xb6c", + "0xb79", + "0xb7e", + "0xb8f", + "0xb95", + "0xba1", + "0xbb2", + "0xbc9", + "0xbfe", + "0xbdc", + "0xbed", + "0xc25", + "0xc43", + "0xc57", + "0xc68", + "0xc79", + "0xc11", + "0xc20", + "0xc2f", + "0xc3e", + "0xc4d", + "0xc53", + "0xc5f", + "0xc70", + "0xc9d", + "0xcbb", + "0xccf", + "0xce0", + "0xcf1", + "0xc89", + "0xc98", + "0xca7", + "0xcb6", + "0xcc5", + "0xccb", + "0xcd7", + "0xce8", + "0xd15", + "0xd33", + "0xd47", + "0xd58", + "0xd69", + "0xd01", + "0xd10", + "0xd1f", + "0xd2e", + "0xd3d", + "0xd43", + "0xd4f", + "0xd60", + "0xd8d", + "0xdab", + "0xdbf", + "0xdd0", + "0xde1", + "0xd79", + "0xd88", + "0xd97", + "0xda6", + "0xdb5", + "0xdbb", + "0xdc7", + "0xdd8", + "0xe05", + "0xe23", + "0xe37", + "0xe48", + "0xe59", + "0xdf1", + "0xe00", + "0xe0f", + "0xe1e", + "0xe2d", + "0xe33", + "0xe3f", + "0xe50", + "0xe8c", + "0xe93", + "0xe9a", + "0xea1", + "0xea8", + "0xeaf", + "0xeb6", + "0xebd", + "0xec4", + "0xecb", + "0xed2", + "0xed8", + "0xeec", + "0xef3", + "0xefa", + "0xf12", + "0xf22", + "0xf32", + "0xf42", + "0xf54", + "0xf64", + "0xf74", + "0xf84", + "0xf94", + "0xfa4", + "0xfb4", + "0xfc4", + "0xfd4", + "0xf09", + "0xf0e", + "0xf19", + "0xf1e", + "0xf29", + "0xf2e", + "0xf39", + "0xf3e", + "0xf49", + "0xf50", + "0xf5b", + "0xf60", + "0xf6b", + "0xf70", + "0xf7b", + "0xf80", + "0xf8b", + "0xf90", + "0xf9b", + "0xfa0", + "0xfab", + "0xfb0", + "0xfbb", + "0xfc0", + "0xfcb", + "0xfd0", + "0xfdb", + "0xfe0", + "0xff5", + "0x1008", + "0x1011", + "0x1019", + "0xfec", + "0xff0", + "0xffe", + "0x1003", + "0x1024", + "0x1033", + "0x1036", + "0x122a", + "0x1221", + "0x1053", + "0x1093", + "0x1062", + "0x1069", + "0x1076", + "0x1081", + "0x1216", + "0x1205", + "0x11fa", + "0x10a4", + "0x10db", + "0x10b0", + "0x10b7", + "0x10c2", + "0x10cb", + "0x11ee", + "0x11dd", + "0x11d0", + "0x10f0", + "0x1127", + "0x10fc", + "0x1103", + "0x110e", + "0x1117", + "0x11c3", + "0x11b1", + "0x11a4", + "0x113f", + "0x1179", + "0x114b", + "0x1152", + "0x115d", + "0x1166", + "0x1197", + "0x1188", + "0x12b8", + "0x2d7", + "0x124f", + "0x127f", + "0x2d9", + "0x125d", + "0x2da", + "0x2db", + "0x126f", + "0x2dc", + "0x1269", + "0x2dd", + "0x2de", + "0x2df", + "0x2e0", + "0x2e1", + "0x2e2", + "0x2e3", + "0x2e4", + "0x2e5", + "0x2e6", + "0x2e7", + "0x2e8", + "0x2e9", + "0x2ea", + "0x2eb", + "0x2ec", + "0x2ee", + "0x2ef", + "0x2f0", + "0x2f1", + "0x2f2", + "0x2f3", + "0x2f4", + "0x12b1", + "0x2f5", + "0x2f6", + "0x2f7", + "0x2f8", + "0x2f9", + "0x2fa", + "0x2fb", + "0x2fc", + "0x2fd", + "0x2fe", + "0x2ff", + "0x301", + "0x12f2", + "0x12f9", + "0x130a", + "0x131a", + "0x132b", + "0x1332", + "0x1341", + "0x1354", + "0x1364", + "0x1374", + "0x1388", + "0x1390", + "0x302", + "0x303", + "0x304", + "0x305", + "0x306", + "0x307", + "0x1301", + "0x308", + "0x309", + "0x1306", + "0x30a", + "0x30b", + "0x1312", + "0x30c", + "0x30d", + "0x30e", + "0x1316", + "0x30f", + "0x310", + "0x311", + "0x312", + "0x1322", + "0x314", + "0x1327", + "0x315", + "0x316", + "0x317", + "0x318", + "0x319", + "0x133b", + "0x31a", + "0x31b", + "0x31c", + "0x1350", + "0x31d", + "0x31e", + "0x134b", + "0x31f", + "0x320", + "0x135d", + "0x321", + "0x322", + "0x139d", + "0x323", + "0x324", + "0x136d", + "0x325", + "0x326", + "0x1382", + "0x328", + "0x329", + "0x32a", + "0x32b", + "0x32c", + "0x32d", + "0x1398", + "0x32e", + "0x32f", + "0x13aa", + "0x13b1", + "0x13c2", + "0x13d2", + "0x13e3", + "0x13ea", + "0x13f9", + "0x140c", + "0x141c", + "0x142c", + "0x1440", + "0x1448", + "0x330", + "0x331", + "0x332", + "0x333", + "0x334", + "0x13b9", + "0x335", + "0x336", + "0x337", + "0x13be", + "0x338", + "0x339", + "0x33a", + "0x13ca", + "0x33b", + "0x33d", + "0x13ce", + "0x33e", + "0x33f", + "0x340", + "0x341", + "0x13da", + "0x342", + "0x343", + "0x13df", + "0x344", + "0x345", + "0x346", + "0x347", + "0x348", + "0x13f3", + "0x349", + "0x34a", + "0x34b", + "0x1408", + "0x34c", + "0x34d", + "0x1403", + "0x34e", + "0x350", + "0x1415", + "0x351", + "0x352", + "0x1455", + "0x353", + "0x354", + "0x1425", + "0x355", + "0x143a", + "0x356", + "0x357", + "0x358", + "0x359", + "0x35a", + "0x1450", + "0x35b", + "0x35c", + "0x35d", + "0x35e", + "0x35f", + "0x360", + "0x361", + "0x363", + "0x364", + "0x365", + "0x366", + "0x367", + "0x368", + "0x369", + "0x36a", + "0x36b", + "0x36c", + "0x1597", + "0x36d", + "0x36f", + "0x370", + "0x371", + "0x161e", + "0x372", + "0x373", + "0x374", + "0x375", + "0x377", + "0x15c5", + "0x378", + "0x379", + "0x37a", + "0x37b", + "0x1614", + "0x37c", + "0x37d", + "0x37e", + "0x37f", + "0x380", + "0x381", + "0x382", + "0x15f4", + "0x383", + "0x384", + "0x385", + "0x386", + "0x15ea", + "0x387", + "0x15e7", + "0x388", + "0x15e4", + "0x389", + "0x15ec", + "0x38b", + "0x38c", + "0x38d", + "0x160b", + "0x1608", + "0x1605", + "0x160d", + "0x38e", + "0x38f", + "0x390", + "0x391", + "0x392", + "0x393", + "0x1642", + "0x163d", + "0x394", + "0x395", + "0x1687", + "0x396", + "0x1647", + "0x397", + "0x398", + "0x166f", + "0x399", + "0x165c", + "0x1669", + "0x1678", + "0x39a", + "0x16e9", + "0x39b", + "0x168f", + "0x39d", + "0x39e", + "0x39f", + "0x3a0", + "0x3a1", + "0x3a2", + "0x16e0", + "0x3a3", + "0x3a4", + "0x16d2", + "0x3a5", + "0x3a6", + "0x3a7", + "0x16c9", + "0x3a8", + "0x3a9", + "0x3aa", + "0x16bc", + "0x3ab", + "0x3ac", + "0x3ad", + "0x3ae", + "0x170f", + "0x170a", + "0x3b0", + "0x1738", + "0x1713", + "0x3b1", + "0x1742", + "0x172a", + "0x173c", + "0x3b2", + "0x3b3", + "0x181f", + "0x174b", + "0x3b4", + "0x1825", + "0x3b5", + "0x1813", + "0x3b6", + "0x3b7", + "0x3b8", + "0x3b9", + "0x1800", + "0x3ba", + "0x3bb", + "0x3bc", + "0x3bd", + "0x3be", + "0x3bf", + "0x17f2", + "0x17e0", + "0x3c0", + "0x17d3", + "0x17c7", + "0x3c1", + "0x17bc", + "0x3c2", + "0x17b1", + "0x1799", + "0x17a5", + "0x3c3", + "0x3c4", + "0x3c5", + "0x3c7", + "0x3c8", + "0x3c9", + "0x3ca", + "0x3cb", + "0x1852", + "0x1875", + "0x18b7", + "0x18f1", + "0x190c", + "0x1920", + "0x1939", + "0x1953", + "0x196d", + "0x1987", + "0x199a", + "0x19b5", + "0x19ce", + "0x3cc", + "0x3cd", + "0x1847", + "0x1860", + "0x3ce", + "0x186a", + "0x3cf", + "0x3d0", + "0x3d1", + "0x3d2", + "0x3d3", + "0x3d5", + "0x3d6", + "0x3d7", + "0x3d8", + "0x3da", + "0x3db", + "0x3dc", + "0x3dd", + "0x18ac", + "0x189c", + "0x3de", + "0x3df", + "0x3e0", + "0x3e1", + "0x3e3", + "0x3e4", + "0x3e5", + "0x3e6", + "0x3e7", + "0x3e8", + "0x3e9", + "0x18e4", + "0x3ea", + "0x3eb", + "0x18d9", + "0x3ec", + "0x3ed", + "0x18fd", + "0x3ee", + "0x3ef", + "0x3f0", + "0x1904", + "0x3f1", + "0x3f2", + "0x3f3", + "0x3f4", + "0x1918", + "0x3f5", + "0x3f6", + "0x19ad", + "0x3f7", + "0x3f8", + "0x192a", + "0x3f9", + "0x3fa", + "0x1931", + "0x3fb", + "0x3fc", + "0x3fd", + "0x1944", + "0x3fe", + "0x3ff", + "0x194b", + "0x400", + "0x401", + "0x402", + "0x195e", + "0x403", + "0x404", + "0x1965", + "0x405", + "0x406", + "0x407", + "0x1978", + "0x408", + "0x409", + "0x197f", + "0x40a", + "0x40b", + "0x1992", + "0x40d", + "0x40e", + "0x19a6", + "0x40f", + "0x410", + "0x19bf", + "0x411", + "0x412", + "0x19c6", + "0x413", + "0x414", + "0x415", + "0x416", + "0x19d9", + "0x417", + "0x418", + "0x19e0", + "0x419", + "0x41a", + "0x41c", + "0x41d", + "0x41e", + "0x41f", + "0x1ae3", + "0x420", + "0x421", + "0x1ada", + "0x422", + "0x423", + "0x424", + "0x425", + "0x426", + "0x427", + "0x428", + "0x429", + "0x42b", + "0x42c", + "0x42d", + "0x42e", + "0x42f", + "0x430", + "0x431", + "0x432", + "0x433", + "0x434", + "0x435", + "0x436", + "0x437", + "0x1b3a", + "0x1b48", + "0x1b5d", + "0x438", + "0x1b33", + "0x1b51", + "0x1b41", + "0x439", + "0x1b55", + "0x43a", + "0x1b65", + "0x1b69", + "0x43b", + "0x1b7d", + "0x1b90", + "0x1bbc", + "0x1bd6", + "0x1bf5", + "0x43c", + "0x1b74", + "0x1b82", + "0x43d", + "0x1b87", + "0x1bad", + "0x1b9f", + "0x1ba4", + "0x1ba9", + "0x1bb8", + "0x1bb4", + "0x1bcf", + "0x1bc7", + "0x43e", + "0x1bef", + "0x1be9", + "0x1be1", + "0x43f", + "0x440", + "0x441", + "0x443", + "0x1c29", + "0x444", + "0x1c18", + "0x445", + "0x446", + "0x447", + "0x448", + "0x449", + "0x44a", + "0x44b", + "0x44c", + "0x44d", + "0x1c10", + "0x44e", + "0x44f", + "0x450", + "0x451", + "0x452", + "0x453", + "0x455", + "0x456", + "0x457", + "0x458", + "0x459", + "0x45a", + "0x45b", + "0x45c", + "0x1c3a", + "0x45d", + "0x45e", + "0x45f", + "0x460", + "0x461", + "0x462", + "0x463", + "0x1c62", + "0x1c77", + "0x1c89", + "0x464", + "0x1c54", + "0x1c5b", + "0x1c7f", + "0x465", + "0x1c69", + "0x1c70", + "0x467", + "0x468", + "0x469", + "0x1c83", + "0x46a", + "0x46b", + "0x1c91", + "0x1c95", + "0x46c", + "0x1cc8", + "0x46d", + "0x1cb7", + "0x46e", + "0x46f", + "0x470", + "0x471", + "0x472", + "0x473", + "0x1caf", + "0x474", + "0x475", + "0x476", + "0x477", + "0x478", + "0x479", + "0x47a", + "0x47b", + "0x47c", + "0x47d", + "0x47f", + "0x480", + "0x1cd9", + "0x481", + "0x482", + "0x483", + "0x484", + "0x485", + "0x486", + "0x487", + "0x1d01", + "0x1d16", + "0x1d28", + "0x488", + "0x1cf3", + "0x1cfa", + "0x1d1e", + "0x489", + "0x48a", + "0x1d08", + "0x1d0f", + "0x48b", + "0x48c", + "0x48d", + "0x1d22", + "0x48e", + "0x48f", + "0x1d30", + "0x1d34", + "0x490", + "0x1d67", + "0x491", + "0x1d56", + "0x492", + "0x493", + "0x494", + "0x496", + "0x497", + "0x1d4e", + "0x498", + "0x499", + "0x49a", + "0x49b", + "0x49c", + "0x49d", + "0x49e", + "0x49f", + "0x4a0", + "0x4a1", + "0x4a2", + "0x4a3", + "0x4a4", + "0x1d78", + "0x4a5", + "0x4a6", + "0x4a8", + "0x4a9", + "0x4aa", + "0x4ab", + "0x1da0", + "0x1db5", + "0x1dc7", + "0x4ac", + "0x1d92", + "0x1d99", + "0x1dbd", + "0x4ad", + "0x4ae", + "0x1da7", + "0x1dae", + "0x4af", + "0x4b0", + "0x4b1", + "0x1dc1", + "0x4b2", + "0x4b3", + "0x1dcf", + "0x1dd3", + "0x4b4", + "0x1e06", + "0x4b5", + "0x1df5", + "0x4b6", + "0x4b7", + "0x4b8", + "0x4b9", + "0x4ba", + "0x4bb", + "0x1ded", + "0x4bc", + "0x4bd", + "0x4be", + "0x4c0", + "0x4c1", + "0x4c2", + "0x4c3", + "0x4c4", + "0x4c5", + "0x4c6", + "0x4c7", + "0x4c8", + "0x1e17", + "0x4c9", + "0x4ca", + "0x4cb", + "0x4cc", + "0x4cd", + "0x4ce", + "0x4cf", + "0x1e3f", + "0x1e54", + "0x1e66", + "0x4d0", + "0x1e31", + "0x1e38", + "0x1e5c", + "0x4d1", + "0x4d2", + "0x1e46", + "0x1e4d", + "0x4d3", + "0x4d4", + "0x4d5", + "0x1e60", + "0x4d7", + "0x1e6e", + "0x1e72", + "0x4d8", + "0x1ea5", + "0x4d9", + "0x1e94", + "0x4da", + "0x4db", + "0x4dc", + "0x4dd", + "0x4de", + "0x4df", + "0x1e8c", + "0x4e0", + "0x4e1", + "0x4e2", + "0x4e3", + "0x4e4", + "0x4e5", + "0x4e6", + "0x4e7", + "0x4e9", + "0x4ea", + "0x4eb", + "0x4ec", + "0x1eb6", + "0x4ed", + "0x4ee", + "0x4ef", + "0x4f0", + "0x4f1", + "0x4f2", + "0x4f3", + "0x1ede", + "0x1ef6", + "0x1f09", + "0x4f4", + "0x1ed0", + "0x1ed7", + "0x1ee4", + "0x4f5", + "0x4f6", + "0x1ee8", + "0x1eef", + "0x4f7", + "0x4f8", + "0x4f9", + "0x1f04", + "0x4fa", + "0x4fb", + "0x1f11", + "0x1f15", + "0x4fc", + "0x4fd", + "0x4fe", + "0x4ff", + "0x501", + "0x502", + "0x503", + "0x504", + "0x505", + "0x506", + "0x507", + "0x508", + "0x509", + "0x50a", + "0x50b", + "0x50c", + "0x50d", + "0x50e", + "0x50f", + "0x208e", + "0x510", + "0x511", + "0x512", + "0x513", + "0x514", + "0x209b", + "0x209f", + "0x515", + "0x516", + "0x20bb", + "0x518", + "0x519", + "0x20b3", + "0x51a", + "0x20c8", + "0x51b", + "0x51c", + "0x20d5", + "0x51d", + "0x51e", + "0x51f", + "0x520", + "0x521", + "0x20e4", + "0x20f4", + "0x2103", + "0x2112", + "0x2121", + "0x2130", + "0x213f", + "0x214e", + "0x215d", + "0x216c", + "0x217b", + "0x218a", + "0x2199", + "0x21a8", + "0x21b3", + "0x21e0", + "0x522", + "0x523", + "0x21d5", + "0x524", + "0x525", + "0x21cb", + "0x526", + "0x527", + "0x528", + "0x52a", + "0x52b", + "0x52c", + "0x52d", + "0x52e", + "0x52f", + "0x530", + "0x531", + "0x532", + "0x533", + "0x534", + "0x535", + "0x536", + "0x537", + "0x538", + "0x539", + "0x53a", + "0x53b", + "0x53c", + "0x53d", + "0x53f", + "0x233b", + "0x2338", + "0x233e", + "0x540", + "0x2360", + "0x2352", + "0x2357", + "0x235c", + "0x236b", + "0x2367", + "0x2389", + "0x2384", + "0x23b4", + "0x238e", + "0x23bd", + "0x23a5", + "0x23b7", + "0x24da", + "0x23c4", + "0x24e1", + "0x24cf", + "0x541", + "0x24c1", + "0x542", + "0x24b1", + "0x543", + "0x544", + "0x545", + "0x24a2", + "0x248f", + "0x546", + "0x247a", + "0x2402", + "0x240b", + "0x2414", + "0x242b", + "0x2422", + "0x547", + "0x2473", + "0x2467", + "0x548", + "0x245c", + "0x2452", + "0x549", + "0x2449", + "0x54a", + "0x54b", + "0x54c", + "0x54d", + "0x54e", + "0x54f", + "0x551", + "0x2525", + "0x552", + "0x553", + "0x554", + "0x555", + "0x556", + "0x557", + "0x558", + "0x559", + "0x251d", + "0x55b", + "0x55c", + "0x55d", + "0x55e", + "0x55f", + "0x560", + "0x561", + "0x563", + "0x564", + "0x565", + "0x2543", + "0x2540", + "0x2546", + "0x2568", + "0x255a", + "0x255f", + "0x2564", + "0x2573", + "0x256f", + "0x566", + "0x567", + "0x569", + "0x56a", + "0x56b", + "0x56c", + "0x56d", + "0x56e", + "0x56f", + "0x570", + "0x2617", + "0x571", + "0x572", + "0x2608", + "0x573", + "0x574", + "0x575", + "0x576", + "0x577", + "0x578", + "0x579", + "0x25fd", + "0x57b", + "0x57c", + "0x25ed", + "0x57d", + "0x25cb", + "0x25d5", + "0x25e0", + "0x57e", + "0x57f", + "0x580", + "0x581", + "0x582", + "0x583", + "0x584", + "0x585", + "0x586", + "0x587", + "0x588", + "0x589", + "0x58a", + "0x58b", + "0x58c", + "0x58d", + "0x58e", + "0x26ff", + "0x273b", + "0x2752", + "0x26d4", + "0x26da", + "0x26e0", + "0x26ee", + "0x26e7", + "0x26fa", + "0x26f5", + "0x272b", + "0x270b", + "0x2711", + "0x2717", + "0x2725", + "0x271e", + "0x2736", + "0x2731", + "0x590", + "0x274a", + "0x591", + "0x2761", + "0x2766", + "0x276a", + "0x276e", + "0x592", + "0x593", + "0x594", + "0x595", + "0x596", + "0x597", + "0x598", + "0x599", + "0x59a", + "0x59b", + "0x59c", + "0x59d", + "0x59e", + "0x59f", + "0x5a0", + "0x27b9", + "0x27c0", + "0x5a2", + "0x27ca", + "0x27cf", + "0x27ed", + "0x27da", + "0x27e0", + "0x5a3", + "0x27e7", + "0x5a4", + "0x5a5", + "0x5a6", + "0x5a7", + "0x5a8", + "0x5a9", + "0x287b", + "0x5aa", + "0x5ac", + "0x2803", + "0x280b", + "0x2813", + "0x281b", + "0x2823", + "0x282b", + "0x2833", + "0x283b", + "0x2843", + "0x284b", + "0x2853", + "0x285b", + "0x2863", + "0x286b", + "0x2873", + "0x5ad", + "0x5ae", + "0x5af", + "0x5b0", + "0x5b1", + "0x5b2", + "0x5b4", + "0x5b5", + "0x5b6", + "0x5b7", + "0x5b8", + "0x5ba", + "0x5bb", + "0x5bc", + "0x5bd", + "0x5be", + "0x5bf", + "0x5c0", + "0x5c1", + "0x5c2", + "0x5c3", + "0x5c4", + "0x5c5", + "0x5c6", + "0x28e7", + "0x5c7", + "0x5c8", + "0x5c9", + "0x5ca", + "0x28c4", + "0x28b9", + "0x5cc", + "0x5cd", + "0x5ce", + "0x28b1", + "0x5cf", + "0x28ce", + "0x5d0", + "0x5d1", + "0x5d2", + "0x5d3", + "0x5d4", + "0x5d5", + "0x28dd", + "0x5d6", + "0x5d7", + "0x28ff", + "0x5d8", + "0x5d9", + "0x2904", + "0x5da", + "0x290e", + "0x2913", + "0x291a", + "0x291f", + "0x2928", + "0x292d", + "0x5db", + "0x5dc", + "0x2937", + "0x293c", + "0x5dd", + "0x5de", + "0x5df", + "0x2947", + "0x5e0", + "0x5e1", + "0x298d", + "0x5e2", + "0x297e", + "0x5e4", + "0x2970", + "0x5e5", + "0x5e6", + "0x5e7", + "0x5e8", + "0x5e9", + "0x29ef", + "0x29e2", + "0x29b0", + "0x29b5", + "0x29dd", + "0x29c7", + "0x29da", + "0x29d2", + "0x29d8", + "0x5ea", + "0x29eb", + "0x29e7", + "0x29f9", + "0x2a00", + "0x5eb", + "0x5ec", + "0x5ed", + "0x5ee", + "0x5ef", + "0x2a46", + "0x2a3b", + "0x5f0", + "0x5f1", + "0x5f2", + "0x5f3", + "0x5f4", + "0x5f5", + "0x5f6", + "0x2a7b", + "0x5f7", + "0x2a6e", + "0x2a60", + "0x5f8", + "0x5fa", + "0x5fb", + "0x5fc", + "0x5fd", + "0x2ae8", + "0x2ad9", + "0x2acb", + "0x2ab2", + "0x2abe", + "0x5fe", + "0x2b59", + "0x2b4a", + "0x2b3c", + "0x5ff", + "0x600", + "0x2b16", + "0x2b2f", + "0x2b6e", + "0x601", + "0x602", + "0x8b8", + "0x8bc", + "0x8c2", + "0x8d5", + "0x966", + "0x979", + "0xa0a", + "0xa1d", + "0xaae", + "0xac1", + "0xb52", + "0xb65", + "0xbc0", + "0xc06", + "0xc7e", + "0xcf6", + "0xd6e", + "0xde6", + "0xe5e", + "0xe71", + "0xe84", + "0xf01", + "0xfe4", + "0x103b", + "0x1233", + "0x12c3", + "0x12d6", + "0x12e9", + "0x13a1", + "0x1459", + "0x1475", + "0x1494", + "0x14a7", + "0x14c3", + "0x14e2", + "0x14f5", + "0x1511", + "0x1530", + "0x1543", + "0x1556", + "0x1569", + "0x157c", + "0x15a7", + "0x15ab", + "0x1628", + "0x16f4", + "0x1832", + "0x1836", + "0x19e8", + "0x19fb", + "0x1a0e", + "0x1a21", + "0x1a34", + "0x1a47", + "0x1a5a", + "0x1a6d", + "0x1a80", + "0x1a93", + "0x1aa6", + "0x1ab9", + "0x1acc", + "0x1aeb", + "0x1aef", + "0x1af3", + "0x1af7", + "0x1afb", + "0x1aff", + "0x1b03", + "0x1b07", + "0x1b0b", + "0x1b0f", + "0x1b13", + "0x1b17", + "0x1b1b", + "0x1b1f", + "0x1b23", + "0x1b27", + "0x1b2b", + "0x1b6d", + "0x1bfa", + "0x1c44", + "0x1c48", + "0x1c4c", + "0x1c99", + "0x1ce3", + "0x1ce7", + "0x1ceb", + "0x1d38", + "0x1d82", + "0x1d86", + "0x1d8a", + "0x1dd7", + "0x1e21", + "0x1e25", + "0x1e29", + "0x1e76", + "0x1ec0", + "0x1ec4", + "0x1ec8", + "0x1f19", + "0x1f2c", + "0x1f3f", + "0x1f52", + "0x1f65", + "0x1f78", + "0x1f8b", + "0x1f9e", + "0x1fb1", + "0x1fc4", + "0x1fd7", + "0x1fea", + "0x1ffd", + "0x2010", + "0x2023", + "0x2036", + "0x2049", + "0x205c", + "0x206f", + "0x2082", + "0x20dd", + "0x21b8", + "0x21ea", + "0x21fd", + "0x2210", + "0x2223", + "0x2236", + "0x2249", + "0x225c", + "0x226f", + "0x2273", + "0x2286", + "0x2299", + "0x22ac", + "0x22bf", + "0x22d2", + "0x22e5", + "0x22f8", + "0x230b", + "0x2312", + "0x2319", + "0x2320", + "0x2324", + "0x2328", + "0x2371", + "0x24ee", + "0x2530", + "0x2579", + "0x2587", + "0x258b", + "0x2623", + "0x2636", + "0x2649", + "0x265c", + "0x266f", + "0x2682", + "0x2695", + "0x26a8", + "0x26bb", + "0x26bf", + "0x26c3", + "0x26c7", + "0x2772", + "0x2776", + "0x277a", + "0x277e", + "0x2782", + "0x2786", + "0x278a", + "0x278e", + "0x2792", + "0x2796", + "0x279a", + "0x279e", + "0x27a2", + "0x27a6", + "0x27aa", + "0x27ae", + "0x27f6", + "0x2881", + "0x28ef", + "0x294c", + "0x299a", + "0x2a09", + "0x2a0d", + "0x2a11", + "0x2a15", + "0x2a50", + "0x2a84", + "0x2af6", + "0x2b68", + "0x187d7", + "0xa00e00d00c00900b00a009009009009008007006005004003002001000", + "0x900b00a01100d01000900b00a00900d00f00900b00a00700d00c00900b", + "0xd00700d01501400700d00900900b00a01300d01000900b00a01200d010", + "0x1700900d00700d01501400700d01600900b00a00900d01600900b00a00d", + "0x1c01f00d00c00900b00a01e00901d00701501c01b00901a01900c009018", + "0x1c01000901801702400702001c02300901b00902100702201c021007020", + "0xd00c00900b00a029009028009027007022005026009025009021007022", + "0x901a01902d00901801702c00d00f00900b00a02b00902a00900b00a009", + "0x702200502300901b00903200902100703101c03000902f00701501c02e", + "0x900b00a03a00903900900b00a038009037036002035029009034009033", + "0x903900900b00a03e00d03c00900b00a03d00d03c00900b00a03b009039", + "0xa04200d03c00900b00a04100d03c00900b00a04000903900900b00a03f", + "0x900b00a04500d03c00900b00a04400903900900b00a04300903900900b", + "0xd03c00900b00a04800903900900b00a04700903900900b00a04600d03c", + "0xa04c00903900900b00a04b00903900900b00a04a00d03c00900b00a049", + "0x900b00a04f00903900900b00a04e00d03c00900b00a04d00d03c00900b", + "0x903900900b00a05200d03c00900b00a05100d03c00900b00a050009039", + "0xa05600d03c00900b00a05500d03c00900b00a05400903900900b00a053", + "0x902300902300902300902300902300905900705800505700903900900b", + "0x9023009023009023009023009023009023009023009023009023009023", + "0xa00905a01000900b00a01e00d00700d01501400900d03c00900b00a023", + "0x900b00a05d00d01000900b00a05c00d01000900b00a05b00d01000900b", + "0xd01000900b00a06000d01000900b00a05f00d01000900b00a05e00d010", + "0xa06400d01000900b00a06300d01000900b00a06200d01000900b00a061", + "0x900b00a06700d01000900b00a06600d01000900b00a06500d01000900b", + "0x503c00903c00906b00700601c00406a06900d01000900b00a06800d010", + "0xd01000900b00a06d00902d00902100700601c02300902300906c007006", + "0x901a01907100901801707000d01000900b00a06f00d01000900b00a06e", + "0x1c02600902300907700702200500407600407507400907300701501c072", + "0x907d00907c00702200507b00900900907a009010009079009021007078", + "0xa08000d00700d01501407f00d00700d01501407e00d01000900b00a029", + "0x708401c08300d01000900b00a08200d08200d01501408200d08100900b", + "0x903900900b00a08600d01000900b00a03c00903c00903c00903c009085", + "0x908a00908900702200508800d03c00900b00a02d00902100701501c087", + "0x900b00a08c00903703602d00902d00902100700601c08c00901a08b029", + "0xa09300909200902d00908f00a09100909000902d00908f00a08e00908d", + "0x900b00a09600d03c00900b00a09500d03c00900b00a09400d03c00900b", + "0x902d00908f00a09900d01000900b00a09800908d00900b00a09700d03c", + "0xd01000900b00a00d00d03c00900b00a09c00d01000900b00a09b00909a", + "0x900f00900f00900f00900f00900f00900f00902100705801c00409e09d", + "0x1400f00900f00900f00900f00900f00900f00900f00900f00900f00900f", + "0xd0150140a20090a100900b00a0a000d00700d01501409f00d00700d015", + "0x702200503900902100701501c03c00901a0a30a400901a0a305600d056", + "0x1c0040a808200d00900d0150140a700d00f00900b00a0290090a60090a5", + "0xa0ac00d01000900b00a0290090ab0090aa0070220050a9009021007015", + "0xd01501400700d0af05a01501400700d0ae05a0150140ad00d01000900b", + "0xd00900d0150140af00d00700d01501400700d0b005a0150140ae00d007", + "0x5a0af05a0150140b200901a0a30b000d00700d0150140b100901a0a30af", + "0x5a0150140b500d01000900b00a0b400d01000900b00a0b300901a0a3009", + "0xd0b705a0150140b600d00700d01501400700d00e05a01501400700d0b6", + "0xd0150140b800901a0a300e00d00900d01501400e00d00700d015014007", + "0x900b00a0ba00901a0a300905a00e05a0150140b900901a0a30b700d007", + "0xd0be05a01501400700d0bd05a0150140bc00d01000900b00a0bb00d010", + "0x140be00d00700d01501400700d0bf05a0150140bd00d00700d015014007", + "0x140c100901a0a30bf00d00700d0150140c000901a0a30be00d00900d015", + "0xd01000900b00a0c300d01000900b00a0c200901a0a300905a0be05a015", + "0x140c500d00700d01501400700d0c605a01501400700d0c505a0150140c4", + "0x901a0a30c600d00900d0150140c600d00700d01501400700d0c705a015", + "0x901a0a300905a0c605a0150140c900901a0a30c700d00700d0150140c8", + "0x1400700d0cd05a0150140cc00d01000900b00a0cb00d01000900b00a0ca", + "0xd01501400700d0cf05a0150140cd00d00700d01501400700d0ce05a015", + "0x140d20090d100900b00a0d000901a0a30ce00d00900d0150140ce00d007", + "0xd00700d01501400905a0d300900b00a0d300901a0a300905a00905a015", + "0xd03c00900b00a0d500901a0a300905a0ce05a0150140d400901a0a30cf", + "0xa0d800d01000900b00a08c00908c00908c00908c0090d70070840050d6", + "0x900b00a0db00d01000900b00a0da00d01000900b00a0d900d01000900b", + "0xd01000900b00a0de00d01000900b00a0dd00d01000900b00a0dc00d010", + "0xa0e200d01000900b00a0e100d01000900b00a0e000d01000900b00a0df", + "0x900b00a0e500d01000900b00a0e400d01000900b00a0e300d01000900b", + "0x50e90090e800701501c02600901a0190e700d01000900b00a0e600d010", + "0x901a08b0260090ee0090ed0070220050040ec0260090eb0090ea007022", + "0x1c0040f40f300901a08b0f200901a08b0260090f10090f00070220050ef", + "0x70220050fa00901a08b0100090f90090f90090f80090f70090f60070f5", + "0x1c1000090ff00701501c0fe00901a0190fd0090180170260090fc0090fb", + "0x91030090100090100090100090eb00903c0090f9009010009102007101", + "0x91050070f501c10400901a08b0eb0090eb00900f00900f0090eb00903c", + "0x900c00901000910900710801c0041070100090f90090f90091060090f7", + "0x90100090100090100090eb00903c0090f900901000910b00710a01c03c", + "0x900c00900c00910c00710801c0eb00900f00900f0090eb00903c009103", + "0x70f501c09f00901a08b02600910f00910e00702200510d00901a08b0f9", + "0x1c0260090100091120070220050100090f90090f90091110090f7009110", + "0x700601c0100090100090100090eb00903c0090f9009010009114007113", + "0x507b00902100711601c0260090560091150070220050eb0090f9009021", + "0x1c04700d01000900b00a00900d11900900b00a029009118009117007022", + "0x1c11b00d01000900b00a00900d00900900b00a00900907a00911a007006", + "0x1c0eb00901000902100700601c0eb0090eb0090100090f9009021007084", + "0x1c06d0090eb0090100090ee00902100708401c0eb0090eb009021007006", + "0x908f00a11e00d01000900b00a01000911d00701501c01000911c007015", + "0xa12300d03c00900b00a12200912100902d00908f00a12000911f00902d", + "0xa00212712600d03c00900b00a12500d03c00900b00a12400d03c00900b", + "0x900b00a12a00912900902d00908f00a02d00901a0a312800908d00900b", + "0xd01000900b00a12d00d03c00900b00a12c00d03c00900b00a12b00d010", + "0x913200913100702200513000902100701501c01000912f00701501c12e", + "0x702200513600902100701501c023009135009134007006005004133029", + "0x13c13b00913a00902d00908f00a13900d01000900b00a029009138009137", + "0x13c00d00d13d13c13f00d03c00900b00a13e00d03c00900b00a00900d13d", + "0xd14714600900d14714614500d13d13c14400914300914214114000d13d", + "0xd01501400700d14c00900b00a14a00901a14b14a009018149002148007", + "0x915100902100715001c00214f14a00901814e14a00901a14d00700d007", + "0x15815700915600914215514a009018154153009147152151009151009151", + "0x15d14400915600914215c15600915900915b00902100715a01c159009147", + "0xa15f00915f00915f00915f00902100708401c15e00d00700d015014004", + "0x516100901a08b00700d03c00900b00a02600903703616000d01000900b", + "0x902d00902d00902d00902d0090210070f501c023009163009162007006", + "0x916600916500700600502d00901a08b02300902d00916400700600502d", + "0x700601c02300916800916700702200502d00902e00902100702201c023", + "0x901a08b00d00d00f00900b00a05a00d00f00900b00a00f009030009021", + "0x903c00903c00903c0090210070f501c02300916b00916a007006005169", + "0x916d00700600503c00901a08b02300903c00916c00700600503c00903c", + "0x917000702200503c00916f00902100702201c03c00901801702300916e", + "0x917300902100700601c17300917200701501c16f00901a019023009171", + "0x710801c00417717600917500701501c17400901a01900f00901801700f", + "0x917d00917c00a02900917b00917a007022005023009179009178009021", + "0xd01000900b00a18500918400918300918200918100918000917f00917e", + "0xa18800d00f00900b00a18700d00f00900b00a18600d00f00900b00a01e", + "0x900b00a18b00d00f00900b00a18a00d00f00900b00a18900d00f00900b", + "0x918f00900b00a18e00902a00900b00a18d00d00f00900b00a18c00d00f", + "0xd01501419200d00700d01501419100901a0a308800d08800d015014190", + "0xd00d00d01501400d00d19500900b00a19400d00700d01501419300d009", + "0xa00d00d01000900b00a0c600d19600900b00a0ce00d19600900b00a00d", + "0x900b00a00900d01000900b00a19700d00700d01501419700d19600900b", + "0xd19a00900b00a19900d00700d01501419800d00700d0150140be00d00f", + "0x1403800d19d00900b00a19c00d00700d01501419b00d19b00d01501419b", + "0x900b00a00700d00f00900b00a00700d19e00900b00a03800d03800d015", + "0xd00700d01501414000d19e00900b00a00d00d19e00900b00a00900d19e", + "0x141a200d00700d0150141a100d00700d0150141a000d00700d01501419f", + "0x90710091a50070060050041a405600d0a400900b00a1a300d00700d015", + "0x91a80070060051a70090100091a600700601c08200d00700d015014023", + "0xa0290091ac0091ab0070220051aa0091a900902100700601c023009009", + "0x901a0a30230091b00091af0070060050041ae0041ad05a00d01000900b", + "0x50230091b50091b40070060050041b30230091b20091b10070060051b0", + "0x91b80070060050230090f90091b70070060050230090ee0091b6007006", + "0x91bc0091bb0070060050041ba0230090a90091b9007006005023009071", + "0x91c20091c10070060050041c00230091bf0091be0070060050041bd023", + "0x502300903c0091c60070060050230091c50091c40070060050041c3023", + "0x70060050041c902300900f0091c800700600502300900c0091c7007006", + "0x900b00a1cc00d00700d01501400700d15f00900b00a0230091cb0091ca", + "0x91ce00900b00a1cd00d00700d01501404a00d04a00d01501408800d191", + "0xd01501404200d04200d01501404a00d1d000900b00a1d000901a0a31cf", + "0x1404200d1d400900b00a1d400901a0a31d30091d200900b00a1d100d007", + "0x1c0a90090a900902100700601c0ae00d0af05a0150140b000d0b005a015", + "0x70840050a900901a0a30290091d70091d60070220051d5009021007015", + "0xd00e05a0150140b700d0b705a0150141d50091d50091d50091d50091d8", + "0x91da0070220051d900902100701501c1bc0091bc00902100700601c0b6", + "0x141d90091d90091d90091d90091dc0070840051bc00901a0a30290091db", + "0x1c1bf0091bf00902100700601c0bd00d0be05a0150140bf00d0bf05a015", + "0x70840051bf00901a0a30290091df0091de0070220051dd009021007015", + "0xd0c605a0150140c700d0c705a0150141dd0091dd0091dd0091dd0091e0", + "0x91e20070220051e100902100701501c1c20091c200902100700601c0c5", + "0x141e10091e10091e10091e10091e40070840051c200901a0a30290091e3", + "0x1c1c50091c500902100700601c0cd00d0ce05a0150140cf00d0cf05a015", + "0x70840051c500901a0a30290091e70091e60070220051e5009021007015", + "0x908c00908c00908c0091ea0071e90051e50091e50091e50091e50091e8", + "0xd00900d01501408c00908c00908c0091ec0071080051eb00902d00902d", + "0x91ed00708400503c00903c00902100700601c13e00d00700d0150140d6", + "0xa31ef00d00700d0150141cd00d00900d0150141ee0091ee0091ee0091ee", + "0x91f10091f10091f000708400500c00900c00902100700601c00c00901a", + "0x1c00f00901a0a31f200d00700d0150141d100d00900d0150141f10091f1", + "0x141f40091f40091f40091f40091f300708400500f00900f009021007006", + "0x902100700601c1cb00901a0a31f500d00700d0150141a200d00900d015", + "0xd00900d0150141f70091f70091f70091f70091f60070840051cb0091cb", + "0xa31f900d00700d01501400900d00900d01501400900d1f800900b00a09f", + "0x91fb0091fb0091fa00708400500900900900902100700601c00900901a", + "0x901a1ff0041fe1fd00d01000900b00a1fc00d01000900b00a1fb0091fb", + "0x700600502900920200920100702200502300920000902100700601c009", + "0x920700920600720500501000913d20402300901a08b02300902d009203", + "0x506d00902100701501c20900901a01920700913d08b20800901a019023", + "0x700600502300920e00920d00700600500420c02900920b00920a007022", + "0x1c02900921200921100702200521000902100701501c01000902300920f", + "0x915f00915f00915f00921400708401c06d00902d00902d009213007108", + "0x901a01920700913d21621500901a21621500901a08b20700901a01915f", + "0x710801c02d00901a21621a00913d21921800901801701000901a216217", + "0x902100720501c21a00901821b21a00913d20421a00921a009010009021", + "0x901000901000902100710801c01000913d21921d00901801701000921c", + "0x913d21921e00901801701000920700902100720501c01000901821b010", + "0x1c03c00901821b03c00913d20403c00903c00901000902100710801c03c", + "0x8b22000922000902100700601c17d00901a08b01000921f009021007205", + "0x900f00900f00900f00900f00900f00900f00902100722101c0cd00901a", + "0xd01501402900922300922200702200517d00902100701501c00f00900f", + "0x710801c07900922400701501c19e00900f00902100700601c14000d007", + "0x702200522800917400922700902100703101c1a90091a9009226009225", + "0x5a01501400700d1a700900b00a00700d01000900b00a02900922a009229", + "0xd1a700900b00a00700d11900900b00a08200d03405a01501400905a034", + "0x901000907200922b00703101c03400d00700d01501407100901a08b082", + "0x901000901000901000901000901000922d00710100522c00901a019119", + "0x7058005010009010009010009010009010009010009010009010009010", + "0x91bc0091bf0091c20091c500903c00900c00900f0091cb00900900922e", + "0x901000902100700601c1b50090ee0090f900902d00901000906d0090a9", + "0x700601c23000923000923000923000922f00708400501000901a0a3010", + "0x91ee0092320071e900506d00906d00902100700601c231009010009021", + "0x51ee0091ee0091ee00923400710800523300903c00903c0091ee0091ee", + "0x923700710800523600900c00900c0091f10091f10091f10092350071e9", + "0x900f00900f0091f40091f40091f40092380071e90051f10091f10091f1", + "0x91f70091f700923b0071e90051f40091f40091f400923a007108005239", + "0x71e90051f70091f70091f700923d00710800523c0091cb0091cb0091f7", + "0x91fb00924000710800523f0090090090090091fb0091fb0091fb00923e", + "0x924600724500524400924300924200700600524100901a08b1fb0091fb", + "0x9023009023009023009023009023009023009023009023009023009023", + "0x92480090f90090ee009247007101005023009023009023009023009023", + "0x90f900924c0090ee00902300902300902300900c00924b00924a009249", + "0x902d00902100710801c02d00902d00902d00902d00902100708401c24d", + "0x902300925000715000524f00924f00924f00902100710801c13000924e", + "0x708400521a00921a00902d009023009252007084005217009251009207", + "0x5258009257009023009256007255005254009254009010009023009253", + "0x525e00925d00902300925c00725500525b00925a009023009259007255", + "0x903200903200903000926100902e00902e00916800902300926000725f", + "0x916f00917100902300926200725f005032009163009032009032009032", + "0x1c26400916b00926400926400926400926400926400917300926300916f", + "0x91b20090100092300092660070f500526500900f009220009021007108", + "0x526c00926b00926a0070060052690092680092670070060051b00091b0", + "0x91d50091d50091d500926f0071e900526e00926e00926e00926d007108", + "0x91bc0091bc0091d90091d90091d90092710071e90052700090a90090a9", + "0x71e90052740091bf0091bf0091dd0091dd0091dd0092730071e9005272", + "0x91e50092770071e90052760091c20091c20091e10091e10091e1009275", + "0x527b00927a00902d0092790071080052780091c50091c50091e50091e5", + "0x528100928000900c00927f00710800527e00927d00903c00927c007108", + "0x52870092860091cb00928500710800528400928300900f009282007108", + "0x902100701501c28b00d01000900b00a28a009289009009009288007108", + "0x929000728f00502900928e00928d00702200502300902100728c01c0eb", + "0x9299009298009297009296009295009294009293009292009291009023", + "0x92a20092a10092a000922c00929f00929e00929d00929c00929b00929a", + "0x92ac0092ab0092aa0092a90092a80092a70092a60092a50092a40092a3", + "0x2b50022b40022b30022b20022b10022b00230091fb0092af0092ae0092ad", + "0x2bb0022ba01000901a08b0290092b90092b80070220050022b70022b6002", + "0x92c10e90090092c10100090092c00eb0090092bf0072be0072bd0072bc", + "0x70090092c62c70090092c600900d2c500900d2c40091400092c32c2009", + "0x2cb0090092c62ca0090092c62c90090092c62c80090092c60380090092c6", + "0x2c50090092c62cf0090092c62ce0090092c62cd0090092c62cc0090092c6", + "0x92d200d1400092c32d10090092c600700d2d100900d2c40230090092d0", + "0x260090092c10260090092d60100090092d50072d428e0090092c12d3009", + "0x92c30eb0090092c100700d2c500900d2c42b90090092d00eb0090092d0", + "0x2d10090092d20072d91451400092c30100090092c62d80090092d7140140", + "0x2d30090092c605a1400092c30072db2910090092d20072da0230090092c1", + "0x92c60090090092c60090090092c10072dc1fb0090092bf2890090092d2", + "0x1f70090092bf2860090092d20072de2920090092d22dd1400092c328a009", + "0x92c32870090092c62e01400092c31cb0090092c61cb0090092c10072df", + "0x92c10072e21f40090092bf2830090092d20072e12930090092d219b140", + "0x92d22e41400092c32840090092c62e31400092c300f0090092c600f009", + "0x92c600c0090092c10072e61f10090092bf2800090092d20072e5294009", + "0x72e92950090092d22e81400092c32810090092c62e71400092c300c009", + "0x92c303c0090092c603c0090092c10072ea1ee0090092bf27d0090092d2", + "0x92c601e1400092c32960090092c601b1400092c327e0090092c6016140", + "0x92c32990090092c602c1400092c32980090092c60a71400092c3297009", + "0x92d20251400092c329b0090092c60281400092c329a0090092c6023140", + "0x72ed0072ec0261400092c306d0090092c60072eb26e0090092bf29c009", + "0x92bf26c0090092d20291400092c30072ee26b0090092bf29d0090092d2", + "0x2310090092c100900d06d00900d2c40072f20072f10072f00072ef230009", + "0x92c62f31400092c32680090092c629e0090092d200700d06d00900d2c4", + "0x92c122c0090092d62f41400092c329f0090092c61991400092c3269009", + "0x100090092f611900911900900d2f71190090092f622c0090092f522c009", + "0x1a700911900900d2f70072f90710090092f60710090092f80710090092c0", + "0x1a700900d2fc2fb0090092d71a70090092c60740090092c62fa0090092d7", + "0x3000090092d72ff0090092c100700d2fd00900d2fe2fd0090092c6119009", + "0x1a90090092d02260090092d00790090092d000f0090092d53010090092d7", + "0x3020090092d202b1400092c31740090092c62270090092c62270090092d0", + "0x2e1400092c319e0090092c62280090092bf2270090092c122a0090092bf", + "0x2d300900d2c40301400092c317d0090092c62230090092bf3030090092d2", + "0x730526500900930400f0090093042200090093042a00090092bf00900d", + "0x92c32a10090092c60321400092c33070090092c63070090092d0007306", + "0x92c603c0090093082a30090092d20821400092c32a20090092c6034140", + "0x92c330a0090092c603c00900930925d0090092bf0381400092c321f009", + "0x93082a40090092d230e1400092c330d0090092c603c00900930c30b140", + "0x92c101000900930925a0090092bf30f1400092c32070090092c6010009", + "0x92c33110090092c601000900930c03a1400092c33100090092c6010009", + "0x92bf3121400092c321c0090092c621a0090093082a50090092d203b140", + "0x930c3141400092c33130090092c621a0090092c121a009009309257009", + "0x92c60100090093162a60090092d203f1400092c33150090092c621a009", + "0x931a0100090093190100090093180100090093170401400092c3254009", + "0x92c321a0090092c602d0090093162a70090092d20100090092f8010009", + "0x92c102d00900931a02d00900931902d00900931802d00900931731b140", + "0x93162a80090092d231c1400092c302d0090092c602d0090092f8166009", + "0x93192070090093182070090093170431400092c32170090092c6207009", + "0x92f80441400092c320700900931a31d0090092c121500900931a207009", + "0x92c62aa0090092bf31e1400092c324f0090092c62a90090092bf207009", + "0x92d22120090092bf3200090092d231f1400092c31300090092c624e009", + "0x20e0090092c63220090092d23220090092c60073212ab0090092bf210009", + "0x481400092c302d0090092c120b0090092bf3230090092d20471400092c3", + "0x700d00932600700d0093252ad0090092d23241400092c32ac0090092c6", + "0x700d00932b00700d00932a00700d00932900700d00932800700d009327", + "0x4b1400092c31c20090092c600700d00932d32c1400092c31c50090092c6", + "0x1bc0090092c600700d00932f04c1400092c31bf0090092c600700d00932e", + "0x700d0093333321400092c30a90090092c600700d0093313301400092c3", + "0x501400092c307a0090092c600700d00933404f1400092c30710090092c6", + "0xf90090092c600700d0093373361400092c30ee0090092c600700d009335", + "0x531400092c331d0090092c62070090093392ae0090092d23381400092c3", + "0x2d00900933c24100900933b0541400092c32150090092c620800900933a", + "0x900900933f33e0090092c133d1400092c316e0090092c616e0090092c1", + "0x92c60073422020090092c13410090092d23401400092c32000090092c6", + "0x92d70571400092c300700d2d300900d2c428e0090092d0007344343009", + "0x92d70290090092c60290090092d00250090092d0010009009346345009", + "0x734b34a1400092c300734900734828a0090092d2010009009304347009", + "0x900935000900d2f71f800934f00900d34e34d0090092d700900900934c", + "0x23f0090092d200900934f00900d2f71f800935000900d2fc009009009351", + "0x92c30090091cb00900d3560073553541400092c33531400092c3007352", + "0xd34e1cb00900934c00735b00735a0073592870090092d2007358357140", + "0x1f800935d00900d2fc1cb0090093511cb00935d00900d2f71f800935c009", + "0x3601400092c335f1400092c300735e23c0090092d21cb00935c00900d2f7", + "0x73642840090092d20073633621400092c31cb00900f00900d356007361", + "0xf00936800900d2f71f800936700900d34e00f00900934c007366007365", + "0x2390090092d200f00936700900d2f71f800936800900d2fc00f009009351", + "0x92c300f00900c00900d35600736c36b1400092c336a1400092c3007369", + "0xd34e00c00900934c00737100737000736f2810090092d200736e36d140", + "0x1f800937300900d2fc00c00900935100c00937300900d2f71f8009372009", + "0x3761400092c33751400092c30073742360090092d200c00937200900d2f7", + "0x737a27e0090092d20073793781400092c300c00903c00900d356007377", + "0xd2f71f800937e00900d34e37d1400092c303c00900934c00737c00737b", + "0xd2f71f800937f00900d2fc3801400092c303c00900935103c00937f009", + "0x92d20073822960090092d23811400092c32330090092c603c00937e009", + "0x92c327b0090092c602d0090092d002d0090092bf08c0090092bf27a009", + "0x92c61c50090092c11c50090093841e50090092bf2970090092d2383140", + "0x1c500900934c0073871e70090092bf3860090092d203c1400092c3385009", + "0x1c50090093511c500938900900d2f71f800938800900d34e02d1400092c3", + "0x2780090092c61c500938800900d2f71f800938900900d2fc06d1400092c3", + "0x1c20090092c11c20090093841e10090092bf2980090092d238a1400092c3", + "0x934c00738e1e30090092bf38d0090092d238c1400092c338b0090092c6", + "0x93511c200939100900d2f71f800939000900d34e38f1400092c31c2009", + "0x92c61c200939000900d2f71f800939100900d2fc3921400092c31c2009", + "0x92c11bf0090093841dd0090092bf2990090092d20721400092c3276009", + "0x73951df0090092bf3940090092d20741400092c33930090092c61bf009", + "0x1bf00939700900d2f71f800939600900d34e0791400092c31bf00900934c", + "0x1bf00939600900d2f71f800939700900d2fc0101400092c31bf009009351", + "0x1bc0090093841d90090092bf29a0090092d207a1400092c32740090092c6", + "0x1db0090092bf3990090092d207b1400092c33980090092c61bc0090092c1", + "0x39c00900d2f71f800939b00900d34e07d1400092c31bc00900934c00739a", + "0x39b00900d2f71f800939c00900d2fc39d1400092c31bc0090093511bc009", + "0x93841d50090092bf29b0090092d239e1400092c32720090092c61bc009", + "0x92bf3a10090092d23a01400092c339f0090092c60a90090092c10a9009", + "0xd2f71f80093a400900d34e3a31400092c30a900900934c0073a21d7009", + "0xd2f71f80093a500900d2fc3a61400092c30a90090093510a90093a5009", + "0x2680090092d206d0090092c10811400092c32700090092c60a90093a4009", + "0x73b00073af0073ae0073ad0073ac0073ab0073aa0073a90073a80073a7", + "0x3b40090092d71d400903c00900d3b31d20090092c63b20090092d70073b1", + "0x1910093b600900d3b51900090092d71d000903c00900d3b31ce0090092c6", + "0x3b90090092d715f0093b600900d2f73b80093b700900d34e3b70090092c6", + "0x73be2690090092d20073bd0073bc0073bb3ba1400092c324f0090092d0", + "0x3bf1400092c300900d1aa00900d2c41aa0090092c600700d1aa00900d2c4", + "0x92c300900d3c100900d2c43c10090092c600700d3c100900d2c40073c0", + "0x900d3c400900d2c43c40090092c600700d3c400900d2c40073c33c2140", + "0x3c700900d2c43c70090092c600700d3c700900d2c40073c63c51400092c3", + "0xd2c43c90090092c600700d3c900900d2c40073c808a1400092c300900d", + "0x3cb0090092c600700d3cb00900d2c40073ca0871400092c300900d3c9009", + "0x92c600700d3ce00900d2c40073cd3cc1400092c300900d3cb00900d2c4", + "0x700d3d100900d2c40073d03cf1400092c300900d3ce00900d2c43ce009", + "0x3d300900d2c40073d208c1400092c300900d3d100900d2c43d10090092c6", + "0xd2c40073d53d41400092c300900d3d300900d2c43d30090092c600700d", + "0x73d83d71400092c300900d3d600900d2c43d60090092c600700d3d6009", + "0x3da1400092c300900d3d900900d2c43d90090092c600700d3d900900d2c4", + "0x92c300900d3dc00900d2c43dc0090092c600700d3dc00900d2c40073db", + "0x900d3df00900d2c43df0090092c600700d3df00900d2c40073de3dd140", + "0x3e100900d2c43e10090092c600700d3e100900d2c40073e00911400092c3", + "0x92c600700d3e300900d2c40073e229f0090092d20931400092c300900d", + "0x93e51b20090092c60073e40921400092c300900d3e300900d2c43e3009", + "0x92c300900d3e600900d2c43e60090092c600700d3e600900d2c41b0009", + "0x92c60073e93e81400092c32300090092c62300090092d00073e7090140", + "0x73ee1b20090093043ed0090092c10073ec0073eb3ea1400092c31b0009", + "0x2270090092bf0073f30073f20073f13ed0090092c63f00090092d70073ef", + "0x1aa0090092d21ac0090092bf3f40090092d20981400092c31a90090092c6", + "0xd2c40073f51a90090092c11a90090092bf0790090092bf2260090092bf", + "0x92d73f60090092d200900d3f600900d2c43f60090092c600700d3f6009", + "0x3f700900d34e3f70090092c60a400900900900d3b50a40090093040a2009", + "0x3f900900d34e3f90090092c60a40093f800900d3b53f80090092c6009009", + "0x3fb0090092c60a40093fa00900d3b53fa0090092c62260090092c6009009", + "0xa40090092c100f00900934600f0093b800900d2f70090093fb00900d34e", + "0xd2c422a0090092d02280090092d03fc0090092d700f0093fa00900d2f7", + "0x1740090092c13fa0090092c11a70090092c13020090092c600700d302009", + "0x3fd0090092d700f0093f800900d2f700900d30200900d2c40740090092c1", + "0x92d73ff0090092d73fe0090092d700f00900900900d2f73f80090092c1", + "0xd3b54020090092d700f0090094011740090092d62260090092c1400009", + "0x92c619a00919e00900d3b519e0090093044030090092d719d00900f009", + "0x40600900d3564060090092c640500940400900d34e4050090092c6404009", + "0x4090090092d74080090092d74070090092d701000919e00900d2f700f009", + "0x40d0090092d740c0090092d740b0090092d740a0090092d71960090092c6", + "0x40f0090092c61f800940e00900d34e40e0090092c619500900f00900d3b5", + "0xd3b318f0090092c64110090092c64100090092d719600940f00900d3b5", + "0x4130090092d702a0090092c64120090092d71760090092c6191009411009", + "0x1780090092c61780090092d000741700700d41600900d4154141400092c3", + "0x1780090092c117b0090092bf4180090092d209a1400092c31790090092c6", + "0x700d30300900d2c42230090092d017d0090092f82200090092c6007419", + "0x92c117d0090092c119e0090092c100900d30300900d2c43030090092c6", + "0x92c141a1400092c316f0090092c603c0090092d52a10090092d2307009", + "0x92c303c0090092f816f0090092c103c00900941b00f1400092c3171009", + "0x41d0090092c600700d41d00900d2c41710090092d003c00900941c0cd140", + "0xd2c403c00900941e2630090092bf0cf1400092c300900d41d00900d2c4", + "0x94010ce1400092c300900d41f00900d2c441f0090092c600700d41f009", + "0x700d42000900d2c41730090092c103c0090092c02640090092bf03c009", + "0x94234221400092c303c00900942100900d42000900d2c44200090092c6", + "0x942500900d42400900d2c44240090092c600700d42400900d2c4169009", + "0x92c62640090092d003c0090094284270090092d74260090092d7169009", + "0x92c316900900942a1690090094290a11400092c30a41400092c3264009", + "0x92c10a61400092c302e0090092c602d0090092d52a20090092d2039140", + "0x2410090092c600700d24100900d2c402e0090092c102d00900941b168009", + "0xd2c41680090092d002d00900941c42b1400092c300900d24100900d2c4", + "0x92bf18e1400092c300900d42c00900d2c442c0090092c600700d42c009", + "0x42d00900d2c442d0090092c600700d42d00900d2c402d00900941e261009", + "0x92c102d0090092c00320090092bf02d00900940142e1400092c300900d", + "0x942100900d42f00900d2c442f0090092c600700d42f00900d2c4030009", + "0x700d43000900d2c41610090094230a91400092c31660090092c602d009", + "0x92d002d00900942816100900942500900d43000900d2c44300090092c6", + "0x92c316100900942a1610090094290ab1400092c30320090092c6032009", + "0x92c103c00900943309b0090092d725e0090092c14321400092c3431140", + "0x92c33110090092c101000900943325b0090092c14341400092c330d009", + "0x94362540090092c13150090092c121a0090094332580090092c1435140", + "0x43a0090092d024f0090092bf4390090092d7026009009438007437026009", + "0x92c643e0090092d015f00900943d14a00900943c00743b43a0090092c6", + "0x92c14420090092c14410090092c114a00900944043e0090092c643f009", + "0x930414c0090093044450090092d714a0090094444431400092c324f009", + "0x92c114c0090092c114a0090094461f80090092c614c0090092c61f8009", + "0xd00d00944814000d00944814500d00944815900914a00900d4471f8009", + "0x92c343f0090092c100744c44b0090092c100744a1510090092c6007449", + "0x92c103c0090092f602d0090092d624e0090092bf24e00900930444d140", + "0x744e03c00900930408e0090092d70390090092c124e0090092c1130009", + "0x92d000900d21000900d2c44500090092d706d0090092d244f1400092c3", + "0x4520090092d24511400092c33200090092c600700d32000900d2c4212009", + "0x4530090092d20b11400092c31350090092c61360090092d21380090092bf", + "0x92d700700d21000900d2c41300090092bf1300090092d61320090092bf", + "0x20e0090092c102d0090093044550090092d700900d32000900d2c4454009", + "0x92d70074574561400092c32ce0090092f60070090092f61280090092d7", + "0x92c302d0090093e500745a00745908d0090092c608d009009304458009", + "0x92d000746000745f00745e00745d45c0090092d745b0090092d70b2140", + "0x92bf00900d32300900d2c43230090092c600700d32300900d2c420b009", + "0x92d72ac0090092d24610090092d708d0090092c10250090092c1029009", + "0x74652480090092bf2480090092c12480090092d6007464007463462009", + "0x92bf4680090092c14680090092d64680090092d04670090092d7007466", + "0x92c300746a1b50090092c60074690090090092f607a0090092f6468009", + "0x710090092d500746c2490090092bf2490090092c12490090092d646b140", + "0xb31400092c322c0090092c622c0090092d046e0090092d746d0090092d7", + "0x92d000747024a0090092bf07b0090092d21180090092bf46f0090092d2", + "0x92c300900d47100900d2c44710090092c600700d47100900d2c4056009", + "0xd2c407b0090092c600700d07b00900d2c400747324b0090092bf472140", + "0x1f900900d2c41f90090092c600700d1f900900d2c400747400900d07b009", + "0xd2c44770090092c600700d47700900d2c40074764751400092c300900d", + "0x47a0090092c600700d47a00900d2c40074794781400092c300900d477009", + "0x92c600700d47d00900d2c400747c47b1400092c300900d47a00900d2c4", + "0x748024c0090092bf00747f47e1400092c300900d47d00900d2c447d009", + "0x48300900d2c44830090092c600700d48300900d2c40074824811400092c3", + "0x92c600700d48600900d2c400748524d0090092bf4841400092c300900d", + "0x7a0090092c10710090092c14871400092c300900d48600900d2c4486009", + "0x90090094882000090093042150090092c10f90090092c10ee0090092c1", + "0xd2c42000090092c13410090092c600700d34100900d2c42020090092d0", + "0x48c0090092d748b0090092d748a0090092d74890090092d700900d341009", + "0x4910090092d74900090092d748f0090092d748e0090092d748d0090092d7", + "0x4960090092d74950090092d74940090092d74930090092d74920090092d7", + "0xb81400092c300749a0074992330090092d24980090092d74970090092d7", + "0x49e0090092d70b91400092c349d1400092c300749c00749b27b0090092d2", + "0x700d38500900d2fe00700d1c500900d2fe49f1400092c31eb0090092c6", + "0xd3b54a00090092d70d30090d500900d3b50d30090093040d20090092d7", + "0xd3560d00090d000900d3b34a20090092c60d00090092c60d10094a1009", + "0x1e50090092d01c50094a400900d2f70d30090d400900d3b51c50094a3009", + "0x92c10d40090092c13860090092c600700d38600900d2c41e70090092d0", + "0xd3b50d40090d000900d3b300900d38600900d2c40ba1400092c30d3009", + "0x4a700900d2f70d30094a600900d3b51c50094a500900d2f70d30094a3009", + "0xd40090d400900d3b31c50090d400900d2f70d00090d400900d3b31c5009", + "0x74aa2780090092d24a90090092d74a80090092d71c50094a600900d2f7", + "0x92c31c50091c200900d3560074ae4ad1400092c30074ac4ab1400092c3", + "0xca00900d3b500700d38b00900d2fe00700d1c200900d2fe0074b04af140", + "0xc800900d3b34b20090092c60c80090092c60d10094b100900d3b50d3009", + "0x1c20094b400900d2f70d30090c900900d3b51c20094b300900d3560c8009", + "0x92c138d0090092c600700d38d00900d2c41e30090092d01e10090092d0", + "0xd30094b300900d3b50c90090c800900d3b300900d38d00900d2c40c9009", + "0xd3b31c20094b700900d2f70d30094b600900d3b51c20094b500900d2f7", + "0x4b600900d2f70c90090c900900d3b31c20090c900900d2f70c80090c9009", + "0x4bb1400092c30074ba2760090092d24b90090092d74b80090092d71c2009", + "0x74c04bf1400092c31c20091bf00900d3560074be4bd1400092c30074bc", + "0xd3b50d30090c200900d3b500700d39300900d2fe00700d1bf00900d2fe", + "0xd3560c00090c000900d3b34c20090092c60c00090092c60d10094c1009", + "0x1dd0090092d01bf0094c400900d2f70d30090c100900d3b51bf0094c3009", + "0xd2c40c10090092c13940090092c600700d39400900d2c41df0090092d0", + "0x4bd00900d2f70d30094c300900d3b50c10090c000900d3b300900d394009", + "0xc00090c100900d3b31bf0094bb00900d2f70d30094bf00900d3b51bf009", + "0x92d71bf0094bf00900d2f70c10090c100900d3b31bf0090c100900d2f7", + "0x92c30074c64c41400092c30074c52740090092d24ad0090092d74af009", + "0x1bc00900d2fe0074c80c01400092c31bf0091bc00900d3560074c74c3140", + "0xd10094ab00900d3b50d30090ba00900d3b500700d39800900d2fe00700d", + "0x1bc00948700900d3560b80090b800900d3b349d0090092c60b80090092c6", + "0x1db0090092d01d90090092d01bc00948400900d2f70d30090b900900d3b5", + "0x900d39900900d2c40b90090092c13990090092c600700d39900900d2c4", + "0xd3b51bc00947e00900d2f70d300948700900d3b50b90090b800900d3b3", + "0xb900900d2f70b80090b900900d3b31bc00947b00900d2f70d3009481009", + "0x92d74780090092d71bc00948100900d2f70b90090b900900d3b31bc009", + "0x74cb0c11400092c30074ca4c21400092c30074c92720090092d2475009", + "0xd2fe00700d0a900900d2fe0074cd4cc1400092c31bc0090a900900d356", + "0xb10090092c60d100947200900d3b50d30090b300900d3b500700d39f009", + "0xb200900d3b50a900945100900d3560b10090b100900d3b34560090092c6", + "0x3a100900d2c41d70090092d01d50090092d00a900944f00900d2f70d3009", + "0xb100900d3b300900d3a100900d2c40b20090092c13a10090092c600700d", + "0xd300944d00900d3b50a900944300900d2f70d300945100900d3b50b2009", + "0xd3b30a90090b200900d2f70b10090b200900d3b30a900943500900d2f7", + "0x92d24320090092d74340090092d70a900944d00900d2f70b20090b2009", + "0x92d24b91400092c34c11400092c30074cf0c21400092c30074ce270009", + "0x3c40090092c13c10090092c11aa0090092c10074d00ab0090092bf431009", + "0x3d10090092c13ce0090092c13cb0090092c13c90090092c13c70090092c1", + "0x3df0090092c13dc0090092c13d90090092c13d60090092c13d30090092c1", + "0x1b00090092c12300090092c13e60090092c13e30090092c13e10090092c1", + "0x92c600700d3f400900d2c41ac0090092d01a70090093511a9009009304", + "0x11900900d2f71190090093041190090092c61f800942e00900d2fc3f4009", + "0x92c10a60090092bf42b0090092d24b81400092c318e0090092d700f009", + "0x3c00900d3b30a10090092c64220090092d700900d3f400900d2c4119009", + "0xcd0090094231780090092bf0090090cf00900d2f70ce0090092c10a4009", + "0x4180090092c600900d41800900d2c41760090092c10074d12650090092f6", + "0x92c141d0090092c11790090092c100700d41800900d2c417b0090092d0", + "0x92c14240090092c141a0090092d72640090092c14200090092c141f009", + "0x92c10320090092c142f0090092c142d0090092c142c0090092c1241009", + "0x94d225b0090092c60100090094d225e0090092c603c0090094d2430009", + "0x74d33e80090092d73ea0090092d74140090092d72580090092c621a009", + "0x92c13d70090092d70074d43da0090092d73dd0090092d71360090092c6", + "0x45200900d2c41380090092d000700d13600900d2c40074d60074d5135009", + "0x943600900d13600900d2c400900d45200900d2c44520090092c600700d", + "0x8c0090092c108c0090092d608c00900943808c0090092d00074d708c009", + "0x3cc0090092d24b71400092c308c0090094293cf0090092c608c0090094d8", + "0x92d03c20090092d70390090092c63c50090092d70074d908a0090092bf", + "0x45300900d2c44530090092c600700d45300900d2c41320090092d0130009", + "0x3ba0090092d73bf0090092c10074da4b51400092c33d40090092c100900d", + "0xd34e3a30090092c608100900f00900d3b53a60090092d7071009009401", + "0x74db1b500900930400f0093a000900d3563a00090092c63a3009119009", + "0x92c60720090092c10720090092d60074dc39e0090092d722c0090092bf", + "0xd2f70790090092c107d0090092bf39d0090092d24b61400092c3079009", + "0xd2c446f0090092c600700d46f00900d2c41180090092d0010009119009", + "0x4770090092c11f90090092c14710090092c11b50090092c100900d46f009", + "0x4860090092c14830090092c107b0090092c147d0090092c147a0090092c1", + "0x4b41400092c31eb0090092d238c0090092d738f0090092d73920090092d7", + "0x3800090092d73810090092d73830090092d74b31400092c338a0090092bf", + "0x36d0090092d73750090092d73760090092d73780090092d737d0090092d7", + "0x35f0090092d73600090092d73620090092d736a0090092d736b0090092d7", + "0x3c0090b200900d2f703c0090b100900d2f73540090092d73570090092d7", + "0x92c34310090092c600700d43100900d2c40ab0090092d03530090092d7", + "0x92c63400090094dd34a00900f00900d35600900d43100900d2c40c8140", + "0x700d42b00900d2c40a60090092d033d0090092d73400090092d2340009", + "0x3300090092d73320090092d73360090092d73380090092d742b0090092c6", + "0x31c0090092d731e0090092d731f0090092d73240090092d732c0090092d7", + "0x30e0090092d730f0090092d73120090092d73140090092d731b0090092d7", + "0x92c600c0090092d503800900943600900d42b00900d2c44b21400092c3", + "0x92d60340090092bf0820090092d20380090094380c91400092c301b009", + "0x92c300c0090093461990090092d72f40090092d700c00900940101b009", + "0x3cc0090092c600900d3cc00900d2c40280090092bf2f30090092d24de140", + "0xd2c408a0090092d00074df0a70090092d002c0090092d701b0090092c1", + "0x1600900d34e2e70090092d70160090092c62e80090092d700700d3cc009", + "0xd2f70160092e400900d34e2e40090092c603c0092e400900d2f7016009", + "0x7a0090093042e30090092d73bf0090092c63bf0090092d003c00919e009", + "0x92c600700d39d00900d2c407d0090092d00ca1400092c3009009009304", + "0x38a0090092c638a0090092d006d0090092f600900d39d00900d2c439d009", + "0x1ce00900930402d0090092f62dd0090092d72e00090092d719b0090092d7", + "0x820090092c600700d08200900d2c40340090092d000c0093b600900d2f7", + "0x2f30090092c600900d2f300900d2c405a0090092d700900d08200900d2c4", + "0x92c300700d2f300900d2c40280090092d01400090092d71450090092d7", + "0xd0090092c600900d00d00900d2c400d0090092d24a91400092c34b1140", + "0x1cd00d2e300900d0090070071cd0090070070074e000700d00d00900d2c4", + "0x91cd0092e70091400070071cd00900700d00701e01b00d37d0162e800d", + "0x70071cd00900700d0070280092f302302c00d1cd00d0a70091450070a7", + "0x250091cd0090072e00070071cd0090230092dd0070071cd00902c00905a", + "0x2e80092e40070070091cd0090070092e30070260091cd00902500919b007", + "0x1400091cd0091400092e800700d0091cd00900d0092e70072e80091cd009", + "0x2dd00901e00705a0091cd00905a00901b0071450091cd009145009016007", + "0x19b0091cd00919b00902c0072e00091cd0092e00090a70072dd0091cd009", + "0x260090250072e40091cd0092e40090280070160091cd009016009023007", + "0xd0070262e401619b2e02dd05a14514000d2e80072e80090260091cd009", + "0x290070290091cd0090070260070071cd00902800905a0070071cd009007", + "0x1cd00905a00901b0072e80091cd0092e80092e40072f30091cd009029009", + "0x1e00719b0091cd00919b00902c0072e00091cd0092e00090a700705a009", + "0x1cd0090160090230071400091cd0091400092e80072dd0091cd0092dd009", + "0x160070070091cd0090070092e300700d0091cd00900d0092e7007016009", + "0x1cd0092f30092f30072e40091cd0092e40090280071450091cd009145009", + "0x2e81cd0092f32e414500700d0161402dd19b2e005a2e82e81990072f3009", + "0x3a0091cd00d30f0092f400730f30e30b03808203403203002e02b2f4199", + "0x3400902e0070071cd00903a00902b0070071cd00900700d00703b009340", + "0x4003f00d1cd0093140090320073140091cd0090070300073120091cd009", + "0x931b00903800731b0091cd0090400090820070071cd00903f009034007", + "0x70380091cd0090380092e30070430091cd00931c00930b00731c0091cd", + "0x90320092e80070820091cd0090820092e70071990091cd0091990092e4", + "0x72f40091cd0092f400901b00730b0091cd00930b0090160070320091cd", + "0x902e00902c00702b0091cd00902b0090a70070300091cd00903000901e", + "0x730e0091cd00930e0090280073120091cd00931200902300702e0091cd", + "0x30e31202e02b0302f430b0320821990382e80090430091cd009043009025", + "0x90380092e30070440091cd00903b00919b0070071cd00900700d007043", + "0x70820091cd0090820092e70071990091cd0091990092e40070380091cd", + "0x92f400901b00730b0091cd00930b0090160070320091cd0090320092e8", + "0x702b0091cd00902b0090a70070300091cd00903000901e0072f40091cd", + "0x930e0090280070340091cd00903400902300702e0091cd00902e00902c", + "0x302f430b0320821990382e80090440091cd00904400902500730e0091cd", + "0x30f0070071cd0092e700930e0070071cd00900700d00704430e03402e02b", + "0x91cd0090070092e300731f0091cd00931e00919b00731e0091cd009007", + "0x92e800700d0091cd00900d0092e700701b0091cd00901b0092e4007007", + "0x91cd00905a00901b0071450091cd0091450090160071400091cd009140", + "0x902c0072e00091cd0092e00090a70072dd0091cd0092dd00901e00705a", + "0x91cd0092e400902800701e0091cd00901e00902300719b0091cd00919b", + "0x19b2e02dd05a14514000d01b0072e800931f0091cd00931f0090250072e4", + "0x3120070070091cd00900700903b0070070091cd00900703a00731f2e401e", + "0x30f2e700903f0070071cd0090073140070090090090090091cd009007009", + "0x929302c0092090a70093d901e00914a01b0094980160093cf2e80091cd", + "0x4e61990094e52f30094e40290094e30260094e20250094e1028009000023", + "0x820094ec0340094eb0320094ea0300094e902e0094e802b0094e72f4009", + "0x94f303b0094f203a0094f130f0094f030e0094ef30b0094ee0380094ed", + "0x4fa0430094f931c0094f831b0094f70400094f603f0094f53140094f4312", + "0x2e0070071cd0092e80090400070071cd00900700d00731e0094fb044009", + "0x1cd00931f0090230070470091cd0090070092e400731f0091cd0092dd009", + "0x31b00732c0091cd0092e40090280073240091cd0092e00092e7007048009", + "0x90ce04b0091cd14001600931c0070071cd00900700d0070074fc009007", + "0x430073320091cd0092dd00902e0070071cd00900700d0073300094a804c", + "0x4f0092e40073360091cd00905000904400705004f00d1cd00904b00700d", + "0xd0091cd00900d0090a70070090091cd00900900901b00704f0091cd009", + "0x5a0092e80071450091cd00914500901e0071400091cd00914000902c007", + "0x2e00091cd0092e00092e70073320091cd00933200902300705a0091cd009", + "0x2e40090280072e30091cd0092e300901600719b0091cd00919b0092e3007", + "0x5a14514000d00904f2e80093360091cd00933600931e0072e40091cd009", + "0x3380091cd14004c00931f0070071cd00900700d0073362e42e319b2e0332", + "0x33d0091cd0092dd00902e0070071cd00900700d0070540094c30530090b3", + "0x35334a1451cd0090573402e014004800705734000d1cd009338009047007", + "0x35300932c0070071cd0093570093240070071cd009354009324007357354", + "0x70091cd0090070092e400735f0091cd0093530090440073530091cd009", + "0x14000902c00700d0091cd00900d0090a70070090091cd00900900901b007", + "0x5a0091cd00905a0092e80071450091cd00914500901e0071400091cd009", + "0x19b0092e300734a0091cd00934a0092e700733d0091cd00933d009023007", + "0x2e40091cd0092e40090280072e30091cd0092e300901600719b0091cd009", + "0x2e319b34a33d05a14514000d0090072e800935f0091cd00935f00931e007", + "0x530090470073600091cd0092dd00902e0070071cd00900700d00735f2e4", + "0x32400737637536d36b1451cd00936a3622e014004800736a36200d1cd009", + "0x3760091cd00937600932c0070071cd0093750093240070071cd00936d009", + "0x900901b0070070091cd0090070092e40073780091cd009376009044007", + "0x1400091cd00914000902c00700d0091cd00900d0090a70070090091cd009", + "0x36000902300705a0091cd00905a0092e80071450091cd00914500901e007", + "0x19b0091cd00919b0092e300736b0091cd00936b0092e70073600091cd009", + "0x37800931e0072e40091cd0092e40090280072e30091cd0092e3009016007", + "0xd0073782e42e319b36b36005a14514000d0090072e80093780091cd009", + "0x38000d1cd00905400904700737d0091cd0092dd00902e0070071cd009007", + "0x1cd00903c00932400706d02d03c3831451cd0093813802e0140048007381", + "0x2d00904400702d0091cd00902d00932c0070071cd00906d009324007007", + "0x90091cd00900900901b0070070091cd0090070092e400738a0091cd009", + "0x14500901e0071400091cd00914000902c00700d0091cd00900d0090a7007", + "0x37d0091cd00937d00902300705a0091cd00905a0092e80071450091cd009", + "0x2e300901600719b0091cd00919b0092e30073830091cd0093830092e7007", + "0x38a0091cd00938a00931e0072e40091cd0092e40090280072e30091cd009", + "0x71cd00900700d00738a2e42e319b38337d05a14514000d0090072e8009", + "0x33000904b0070070091cd0090070092e400738c0091cd0092dd00902e007", + "0x1cd00938f0092e400739238f00d1cd00933000700d04c0073300091cd009", + "0x2c00700d0091cd00900d0090a70070090091cd00900900901b00738f009", + "0x1cd00905a0092e80071450091cd00914500901e0071400091cd009140009", + "0x2e30072e00091cd0092e00092e700738c0091cd00938c00902300705a009", + "0x1cd0092e40090280072e30091cd0092e300901600719b0091cd00919b009", + "0x2e038c05a14514000d00938f2e80093920091cd00939200931e0072e4009", + "0x90ee0720091cd14001b0093300070071cd00900700d0073922e42e319b", + "0x3320070100091cd0092dd00902e0070071cd00900700d0070790094fd074", + "0x7a0092e400707d0091cd00907b00904400707b07a00d1cd00907200700d", + "0xd0091cd00900d0090a70070090091cd00900900901b00707a0091cd009", + "0x5a0092e80071450091cd00914500901e0071400091cd00914000902c007", + "0x2e00091cd0092e00092e70070100091cd00901000902300705a0091cd009", + "0x2e40090280072e30091cd0092e300901600719b0091cd00919b0092e3007", + "0x5a14514000d00907a2e800907d0091cd00907d00931e0072e40091cd009", + "0x39d0091cd14007400904f0070071cd00900700d00707d2e42e319b2e0010", + "0x3a30091cd0092dd00902e0070071cd00900700d0073a000912039e00910d", + "0x3bf3ba1451cd0090813a62e01403360070813a600d1cd00939d009050007", + "0x3bf0090530070071cd0093c50093380070071cd0093c20093380073c53c2", + "0x70091cd0090070092e400708a0091cd0093bf0090540073bf0091cd009", + "0x14000902c00700d0091cd00900d0090a70070090091cd00900900901b007", + "0x5a0091cd00905a0092e80071450091cd00914500901e0071400091cd009", + "0x19b0092e30073ba0091cd0093ba0092e70073a30091cd0093a3009023007", + "0x2e40091cd0092e40090280072e30091cd0092e300901600719b0091cd009", + "0x2e319b3ba3a305a14514000d0090072e800908a0091cd00908a00931e007", + "0x39e0090500070870091cd0092dd00902e0070071cd00900700d00708a2e4", + "0x3380073da3d73d408c1451cd0093cf3cc2e01403360073cf3cc00d1cd009", + "0x3da0091cd0093da0090530070071cd0093d70093380070071cd0093d4009", + "0x900901b0070070091cd0090070092e40073dd0091cd0093da009054007", + "0x1400091cd00914000902c00700d0091cd00900d0090a70070090091cd009", + "0x8700902300705a0091cd00905a0092e80071450091cd00914500901e007", + "0x19b0091cd00919b0092e300708c0091cd00908c0092e70070870091cd009", + "0x3dd00931e0072e40091cd0092e40090280072e30091cd0092e3009016007", + "0xd0073dd2e42e319b08c08705a14514000d0090072e80093dd0091cd009", + "0x9300d1cd0093a00090500070910091cd0092dd00902e0070071cd009007", + "0x1cd0093e80093380070983ea3e80901451cd0090920932e0140336007092", + "0x3ea0090540073ea0091cd0093ea0090530070071cd009098009338007007", + "0x90091cd00900900901b0070070091cd0090070092e40074140091cd009", + "0x14500901e0071400091cd00914000902c00700d0091cd00900d0090a7007", + "0x910091cd00909100902300705a0091cd00905a0092e80071450091cd009", + "0x2e300901600719b0091cd00919b0092e30070900091cd0090900092e7007", + "0x4140091cd00941400931e0072e40091cd0092e40090280072e30091cd009", + "0x71cd00900700d0074142e42e319b09009105a14514000d0090072e8009", + "0x7900933d0070070091cd0090070092e400709a0091cd0092dd00902e007", + "0x1cd00941a0092e400700f41a00d1cd00907900700d3400070790091cd009", + "0x2c00700d0091cd00900d0090a70070090091cd00900900901b00741a009", + "0x1cd00905a0092e80071450091cd00914500901e0071400091cd009140009", + "0x2e30072e00091cd0092e00092e700709a0091cd00909a00902300705a009", + "0x1cd0092e40090280072e30091cd0092e300901600719b0091cd00919b009", + "0x2e009a05a14514000d00941a2e800900f0091cd00900f00931e0072e4009", + "0x942c0cd0091cd14001e0090570070071cd00900700d00700f2e42e319b", + "0x34a0074220091cd0092dd00902e0070071cd00900700d0070ce0090a20cf", + "0xa40092e40070390091cd0090a10090540070a10a400d1cd0090cd00700d", + "0xd0091cd00900d0090a70070090091cd00900900901b0070a40091cd009", + "0x5a0092e80071450091cd00914500901e0071400091cd00914000902c007", + "0x2e00091cd0092e00092e70074220091cd00942200902300705a0091cd009", + "0x2e40090280072e30091cd0092e300901600719b0091cd00919b0092e3007", + "0x5a14514000d0090a42e80090390091cd00903900931e0072e40091cd009", + "0xa60091cd1400cf0093530070071cd00900700d0070392e42e319b2e0422", + "0x42e0091cd0092dd00902e0070071cd00900700d00718e00940942b009413", + "0x4324311451cd0090ab0a92e01403570070ab0a900d1cd0090a6009354007", + "0x4320093600070071cd00943500935f0070071cd00943400935f007435434", + "0x70091cd0090070092e40074430091cd0094320093620074320091cd009", + "0x14000902c00700d0091cd00900d0090a70070090091cd00900900901b007", + "0x5a0091cd00905a0092e80071450091cd00914500901e0071400091cd009", + "0x19b0092e30074310091cd0094310092e700742e0091cd00942e009023007", + "0x2e40091cd0092e40090280072e30091cd0092e300901600719b0091cd009", + "0x2e319b43142e05a14514000d0090072e80094430091cd00944300931e007", + "0x42b00935400744d0091cd0092dd00902e0070071cd00900700d0074432e4", + "0x35f00746b0b24560b11451cd00945144f2e014035700745144f00d1cd009", + "0x46b0091cd00946b0093600070071cd0090b200935f0070071cd009456009", + "0x900901b0070070091cd0090070092e40070b30091cd00946b009362007", + "0x1400091cd00914000902c00700d0091cd00900d0090a70070090091cd009", + "0x44d00902300705a0091cd00905a0092e80071450091cd00914500901e007", + "0x19b0091cd00919b0092e30070b10091cd0090b10092e700744d0091cd009", + "0xb300931e0072e40091cd0092e40090280072e30091cd0092e3009016007", + "0xd0070b32e42e319b0b144d05a14514000d0090072e80090b30091cd009", + "0x47500d1cd00918e0093540074720091cd0092dd00902e0070071cd009007", + "0x1cd00947e00935f00748448147e47b1451cd0094784752e0140357007478", + "0x4810093620074810091cd0094810093600070071cd00948400935f007007", + "0x90091cd00900900901b0070070091cd0090070092e40074870091cd009", + "0x14500901e0071400091cd00914000902c00700d0091cd00900d0090a7007", + "0x4720091cd00947200902300705a0091cd00905a0092e80071450091cd009", + "0x2e300901600719b0091cd00919b0092e300747b0091cd00947b0092e7007", + "0x4870091cd00948700931e0072e40091cd0092e40090280072e30091cd009", + "0x71cd00900700d0074872e42e319b47b47205a14514000d0090072e8009", + "0xce00936a0070070091cd0090070092e40070b80091cd0092dd00902e007", + "0x1cd00949d0092e40070b949d00d1cd0090ce00700d36b0070ce0091cd009", + "0x2c00700d0091cd00900d0090a70070090091cd00900900901b00749d009", + "0x1cd00905a0092e80071450091cd00914500901e0071400091cd009140009", + "0x2e30072e00091cd0092e00092e70070b80091cd0090b800902300705a009", + "0x1cd0092e40090280072e30091cd0092e300901600719b0091cd00919b009", + "0x2e00b805a14514000d00949d2e80090b90091cd0090b900931e0072e4009", + "0x93b649f0091cd1400a700936d0070071cd00900700d0070b92e42e319b", + "0x3750074ad0091cd0092dd00902e0070071cd00900700d0074ab0093500ba", + "0x4af0092e40074bd0091cd0094bb0093620074bb4af00d1cd00949f00700d", + "0xd0091cd00900d0090a70070090091cd00900900901b0074af0091cd009", + "0x5a0092e80071450091cd00914500901e0071400091cd00914000902c007", + "0x2e00091cd0092e00092e70074ad0091cd0094ad00902300705a0091cd009", + "0x2e40090280072e30091cd0092e300901600719b0091cd00919b0092e3007", + "0x5a14514000d0094af2e80094bd0091cd0094bd00931e0072e40091cd009", + "0x4bf0091cd1400ba0093760070071cd00900700d0074bd2e42e319b2e04ad", + "0xc00091cd0092dd00902e0070071cd00900700d0074c300927b4c4009397", + "0xc24cc1451cd0090c14c22e014037d0070c14c200d1cd0094bf009378007", + "0xc20093810070071cd0094b90093800070071cd0094c10093800074b94c1", + "0x70091cd0090070092e40074b80091cd0090c20093830070c20091cd009", + "0x14000902c00700d0091cd00900d0090a70070090091cd00900900901b007", + "0x5a0091cd00905a0092e80071450091cd00914500901e0071400091cd009", + "0x19b0092e30074cc0091cd0094cc0092e70070c00091cd0090c0009023007", + "0x2e40091cd0092e40090280072e30091cd0092e300901600719b0091cd009", + "0x2e319b4cc0c005a14514000d0090072e80094b80091cd0094b800931e007", + "0x4c40093780074b70091cd0092dd00902e0070071cd00900700d0074b82e4", + "0x3800074b20c84b34b41451cd0094b64b52e014037d0074b64b500d1cd009", + "0x4b20091cd0094b20093810070071cd0090c80093800070071cd0094b3009", + "0x900901b0070070091cd0090070092e40070c90091cd0094b2009383007", + "0x1400091cd00914000902c00700d0091cd00900d0090a70070090091cd009", + "0x4b700902300705a0091cd00905a0092e80071450091cd00914500901e007", + "0x19b0091cd00919b0092e30074b40091cd0094b40092e70074b70091cd009", + "0xc900931e0072e40091cd0092e40090280072e30091cd0092e3009016007", + "0xd0070c92e42e319b4b44b705a14514000d0090072e80090c90091cd009", + "0xca00d1cd0094c30093780074de0091cd0092dd00902e0070071cd009007", + "0x1cd0094a80093800074a54a74a84a91451cd0094b10ca2e014037d0074b1", + "0x4a70093830074a70091cd0094a70093810070071cd0094a5009380007007", + "0x90091cd00900900901b0070070091cd0090070092e40074a60091cd009", + "0x14500901e0071400091cd00914000902c00700d0091cd00900d0090a7007", + "0x4de0091cd0094de00902300705a0091cd00905a0092e80071450091cd009", + "0x2e300901600719b0091cd00919b0092e30074a90091cd0094a90092e7007", + "0x4a60091cd0094a600931e0072e40091cd0092e40090280072e30091cd009", + "0x71cd00900700d0074a62e42e319b4a94de05a14514000d0090072e8009", + "0x4ab00903c0070070091cd0090070092e40074a40091cd0092dd00902e007", + "0x1cd0094a30092e40070d04a300d1cd0094ab00700d02d0074ab0091cd009", + "0x2c00700d0091cd00900d0090a70070090091cd00900900901b0074a3009", + "0x1cd00905a0092e80071450091cd00914500901e0071400091cd009140009", + "0x2e30072e00091cd0092e00092e70074a40091cd0094a400902300705a009", + "0x1cd0092e40090280072e30091cd0092e300901600719b0091cd00919b009", + "0x2e04a405a14514000d0094a32e80090d00091cd0090d000931e0072e4009", + "0x921a4a20091cd14002c00906d0070071cd00900700d0070d02e42e319b", + "0x38a0070d10091cd0092dd00902e0070071cd00900700d0070d30092a54a0", + "0xd20092e40074fe0091cd0090d40093830070d40d200d1cd0094a200700d", + "0xd0091cd00900d0090a70070090091cd00900900901b0070d20091cd009", + "0x5a0092e80071450091cd00914500901e0071400091cd00914000902c007", + "0x2e00091cd0092e00092e70070d10091cd0090d100902300705a0091cd009", + "0x2e40090280072e30091cd0092e300901600719b0091cd00919b0092e3007", + "0x5a14514000d0090d22e80094fe0091cd0094fe00931e0072e40091cd009", + "0xd50091cd1404a000938c0070071cd00900700d0074fe2e42e319b2e00d1", + "0x1eb0091cd0092dd00902e0070071cd00900700d00749e00926e4a1009228", + "0x4954961451cd0094974982e014039200749749800d1cd0090d500938f007", + "0x4950090740070071cd0094930090720070071cd009494009072007493494", + "0x70091cd0090070092e40074920091cd0094950090790074950091cd009", + "0x14000902c00700d0091cd00900d0090a70070090091cd00900900901b007", + "0x5a0091cd00905a0092e80071450091cd00914500901e0071400091cd009", + "0x19b0092e30074960091cd0094960092e70071eb0091cd0091eb009023007", + "0x2e40091cd0092e40090280072e30091cd0092e300901600719b0091cd009", + "0x2e319b4961eb05a14514000d0090072e80094920091cd00949200931e007", + "0x4a100938f0074910091cd0092dd00902e0070071cd00900700d0074922e4", + "0x7200748b48c48d48e1451cd00948f4902e014039200748f49000d1cd009", + "0x48b0091cd00948b0090740070071cd00948c0090720070071cd00948d009", + "0x900901b0070070091cd0090070092e400748a0091cd00948b009079007", + "0x1400091cd00914000902c00700d0091cd00900d0090a70070090091cd009", + "0x49100902300705a0091cd00905a0092e80071450091cd00914500901e007", + "0x19b0091cd00919b0092e300748e0091cd00948e0092e70074910091cd009", + "0x48a00931e0072e40091cd0092e40090280072e30091cd0092e3009016007", + "0xd00748a2e42e319b48e49105a14514000d0090072e800948a0091cd009", + "0xe900d1cd00949e00938f0074890091cd0092dd00902e0070071cd009007", + "0x1cd0090ee0090720070f14830ee4861451cd0090eb0e92e01403920070eb", + "0x4830090790074830091cd0094830090740070071cd0090f1009072007007", + "0x90091cd00900900901b0070070091cd0090070092e400747d0091cd009", + "0x14500901e0071400091cd00914000902c00700d0091cd00900d0090a7007", + "0x4890091cd00948900902300705a0091cd00905a0092e80071450091cd009", + "0x2e300901600719b0091cd00919b0092e30074860091cd0094860092e7007", + "0x47d0091cd00947d00931e0072e40091cd0092e40090280072e30091cd009", + "0x71cd00900700d00747d2e42e319b48648905a14514000d0090072e8009", + "0xd30090100070070091cd0090070092e40070f70091cd0092dd00902e007", + "0x1cd0090f80092e40070f90f800d1cd0090d300700d07a0070d30091cd009", + "0x2c00700d0091cd00900d0090a70070090091cd00900900901b0070f8009", + "0x1cd00905a0092e80071450091cd00914500901e0071400091cd009140009", + "0x2e30072e00091cd0092e00092e70070f70091cd0090f700902300705a009", + "0x1cd0092e40090280072e30091cd0092e300901600719b0091cd00919b009", + "0x2e00f705a14514000d0090f82e80090f90091cd0090f900931e0072e4009", + "0x2e40070ef0091cd0092dd00902e0070071cd00900700d0070f92e42e319b", + "0x1cd00902300907b0072e00091cd0092e00092e70070070091cd009007009", + "0x1cd0090fc0092e40070fe47a0fc1401cd0090232e000714007d007023009", + "0x2c00700d0091cd00900d0090a70070090091cd00900900901b0070fc009", + "0x1cd00905a0092e80071450091cd00914500901e0071400091cd009140009", + "0x2e300747a0091cd00947a0092e70070ef0091cd0090ef00902300705a009", + "0x1cd0092e40090280072e30091cd0092e300901600719b0091cd00919b009", + "0x47a0ef05a14514000d0090fc2e80090fe0091cd0090fe00931e0072e4009", + "0x2e40071000091cd0092dd00902e0070071cd00900700d0070fe2e42e319b", + "0x902800700d39e0070280091cd00902800939d0070070091cd009007009", + "0x90091cd00900900901b0071030091cd0091030092e40070f310300d1cd", + "0x14500901e0071400091cd00914000902c00700d0091cd00900d0090a7007", + "0x1000091cd00910000902300705a0091cd00905a0092e80071450091cd009", + "0x2e300901600719b0091cd00919b0092e30072e00091cd0092e00092e7007", + "0xf30091cd0090f300931e0072e40091cd0092e40090280072e30091cd009", + "0x71cd00900700d0070f32e42e319b2e010005a14514000d0091032e8009", + "0x250093a00070070091cd0090070092e40071060091cd0092dd00902e007", + "0x1cd0090fa0092e400700c0fa00d1cd00902500700d3a30070250091cd009", + "0x2c00700d0091cd00900d0090a70070090091cd00900900901b0070fa009", + "0x1cd00905a0092e80071450091cd00914500901e0071400091cd009140009", + "0x2e30072e00091cd0092e00092e70071060091cd00910600902300705a009", + "0x1cd0092e40090280072e30091cd0092e300901600719b0091cd00919b009", + "0x2e010605a14514000d0090fa2e800900c0091cd00900c00931e0072e4009", + "0x2e40070fd0091cd0092dd00902e0070071cd00900700d00700c2e42e319b", + "0x902600700d0810070260091cd0090260093a60070070091cd009007009", + "0x90091cd00900900901b0071040091cd0091040092e40070f210400d1cd", + "0x14500901e0071400091cd00914000902c00700d0091cd00900d0090a7007", + "0xfd0091cd0090fd00902300705a0091cd00905a0092e80071450091cd009", + "0x2e300901600719b0091cd00919b0092e30072e00091cd0092e00092e7007", + "0xf20091cd0090f200931e0072e40091cd0092e40090280072e30091cd009", + "0x71cd00900700d0070f22e42e319b2e00fd05a14514000d0091042e8009", + "0x290093ba0070070091cd0090070092e400710f0091cd0092dd00902e007", + "0x1cd0094770092e400711147700d1cd00902900700d3bf0070290091cd009", + "0x2c00700d0091cd00900d0090a70070090091cd00900900901b007477009", + "0x1cd00905a0092e80071450091cd00914500901e0071400091cd009140009", + "0x2e30072e00091cd0092e00092e700710f0091cd00910f00902300705a009", + "0x1cd0092e40090280072e30091cd0092e300901600719b0091cd00919b009", + "0x2e010f05a14514000d0094772e80091110091cd00911100931e0072e4009", + "0x2e400710d0091cd0092dd00902e0070071cd00900700d0071112e42e319b", + "0x92f300700d3c50072f30091cd0092f30093c20070070091cd009007009", + "0x90091cd00900900901b0071f90091cd0091f90092e400709f1f900d1cd", + "0x14500901e0071400091cd00914000902c00700d0091cd00900d0090a7007", + "0x10d0091cd00910d00902300705a0091cd00905a0092e80071450091cd009", + "0x2e300901600719b0091cd00919b0092e30072e00091cd0092e00092e7007", + "0x9f0091cd00909f00931e0072e40091cd0092e40090280072e30091cd009", + "0x71cd00900700d00709f2e42e319b2e010d05a14514000d0091f92e8009", + "0x71cd00900700d0071180095004710094ff0560091cd14019900908a007", + "0xd3cc00746d46e00d1cd00905600908700746f0091cd0092dd00902e007", + "0x1cd00946800908c0074680091cd0094680093cf0074680091cd00946d46e", + "0xa70070090091cd00900900901b0070070091cd0090070092e4007467009", + "0x1cd00914500901e0071400091cd00914000902c00700d0091cd00900d009", + "0x2e700746f0091cd00946f00902300705a0091cd00905a0092e8007145009", + "0x1cd0092e300901600719b0091cd00919b0092e30072e00091cd0092e0009", + "0x2e80094670091cd00946700931e0072e40091cd0092e40090280072e3009", + "0x2e0070071cd00900700d0074672e42e319b2e046f05a14514000d009007", + "0x24c24d00d3d400724c24d00d1cd0094710090870074620091cd0092dd009", + "0x24a0091cd00924b00908c00724b0091cd00924b0093cf00724b0091cd009", + "0xd0090a70070090091cd00900900901b0070070091cd0090070092e4007", + "0x1450091cd00914500901e0071400091cd00914000902c00700d0091cd009", + "0x2e00092e70074620091cd00946200902300705a0091cd00905a0092e8007", + "0x2e30091cd0092e300901600719b0091cd00919b0092e30072e00091cd009", + "0x90072e800924a0091cd00924a00931e0072e40091cd0092e4009028007", + "0x2dd00902e0070071cd00900700d00724a2e42e319b2e046205a14514000d", + "0x1cd00946124800d3d700746124800d1cd0091180090870072490091cd009", + "0x2e400745b0091cd00945c00908c00745c0091cd00945c0093cf00745c009", + "0x1cd00900d0090a70070090091cd00900900901b0070070091cd009007009", + "0x2e80071450091cd00914500901e0071400091cd00914000902c00700d009", + "0x1cd0092e00092e70072490091cd00924900902300705a0091cd00905a009", + "0x280072e30091cd0092e300901600719b0091cd00919b0092e30072e0009", + "0x14000d0090072e800945b0091cd00945b00931e0072e40091cd0092e4009", + "0x1cd00d2f40093da0070071cd00900700d00745b2e42e319b2e024905a145", + "0x71210091cd0092dd00902e0070071cd00900700d007122009501120009", + "0x90930074580091cd00950211f00d09100750211f00d1cd0091200093dd", + "0x91cd00900900901b0070070091cd0090070092e400708d0091cd009458", + "0x901e0071400091cd00914000902c00700d0091cd00900d0090a7007009", + "0x91cd00912100902300705a0091cd00905a0092e80071450091cd009145", + "0x901600719b0091cd00919b0092e30072e00091cd0092e00092e7007121", + "0x91cd00908d00931e0072e40091cd0092e40090280072e30091cd0092e3", + "0x1cd00900700d00708d2e42e319b2e012105a14514000d0090072e800908d", + "0xd00712900950512a0095044550095031280091cd145122009092007007", + "0x13000d1cd0091280090900074540091cd0092dd00902e0070071cd009007", + "0x930074530091cd00945300903b0074530091cd00913213000d3e8007132", + "0x1cd00900900901b0070070091cd0090070092e40071350091cd009453009", + "0x1e0071400091cd00914000902c00700d0091cd00900d0090a7007009009", + "0x1cd00945400902300705a0091cd00905a0092e80071450091cd009145009", + "0x1600719b0091cd00919b0092e30072e00091cd0092e00092e7007454009", + "0x1cd00913500931e0072e40091cd0092e40090280072e30091cd0092e3009", + "0x900700d0071352e42e319b2e045405a14514000d0090072e8009135009", + "0x745213800d1cd0094550090900071360091cd0092dd00902e0070071cd", + "0x4500090930074500091cd00945000903b0074500091cd00945213800d3ea", + "0x90091cd00900900901b0070070091cd0090070092e400708e0091cd009", + "0x14500901e0071400091cd00914000902c00700d0091cd00900d0090a7007", + "0x1360091cd00913600902300705a0091cd00905a0092e80071450091cd009", + "0x2e300901600719b0091cd00919b0092e30072e00091cd0092e00092e7007", + "0x8e0091cd00908e00931e0072e40091cd0092e40090280072e30091cd009", + "0x71cd00900700d00708e2e42e319b2e013605a14514000d0090072e8009", + "0xd09800713a13b00d1cd00912a0090900074fd0091cd0092dd00902e007", + "0x1cd0095060090930075060091cd00950600903b0075060091cd00913a13b", + "0xa70070090091cd00900900901b0070070091cd0090070092e4007507009", + "0x1cd00914500901e0071400091cd00914000902c00700d0091cd00900d009", + "0x2e70074fd0091cd0094fd00902300705a0091cd00905a0092e8007145009", + "0x1cd0092e300901600719b0091cd00919b0092e30072e00091cd0092e0009", + "0x2e80095070091cd00950700931e0072e40091cd0092e40090280072e3009", + "0x900070071cd00900700d0075072e42e319b2e04fd05a14514000d009007", + "0x14400903b0071440091cd00950815900d3ea00750815900d1cd009129009", + "0x71cd00900700d0071430095090071cd00d1440094140071440091cd009", + "0x944b00909a00744b0091cd00900702600750a0091cd0092dd00902e007", + "0x714c0091cd00950b0093cf0074450091cd00950a00902300750b0091cd", + "0x2e0070071cd00914300941a0070071cd00900700d00700750c00900731b", + "0x91cd00944100900f0074410091cd00900702600750d0091cd0092dd009", + "0x731b00714c0091cd0091510093cf0074450091cd00950d009023007151", + "0x14a00950e43e0091cd00d02b0090cd0070071cd00900700d00700750c009", + "0x1cd0090070092e400743f0091cd0092dd00902e0070071cd00900700d007", + "0x15615b00d1cd00943e00700d0ce00743e0091cd00943e0090cf007007009", + "0xd0090a70070090091cd00900900901b00715b0091cd00915b0092e4007", + "0x1450091cd00914500901e0071400091cd00914000902c00700d0091cd009", + "0x2e00092e700743f0091cd00943f00902300705a0091cd00905a0092e8007", + "0x2e30091cd0092e300901600719b0091cd00919b0092e30072e00091cd009", + "0x915b2e80091560091cd00915600931e0072e40091cd0092e4009028007", + "0x2dd00902e0070071cd00900700d0071562e42e319b2e043f05a14514000d", + "0x14a0091cd00914a0094220070070091cd0090070092e40071530091cd009", + "0x1b0071570091cd0091570092e400744215700d1cd00914a00700d0a4007", + "0x1cd00914000902c00700d0091cd00900d0090a70070090091cd009009009", + "0x2300705a0091cd00905a0092e80071450091cd00914500901e007140009", + "0x1cd00919b0092e30072e00091cd0092e00092e70071530091cd009153009", + "0x31e0072e40091cd0092e40090280072e30091cd0092e300901600719b009", + "0x4422e42e319b2e015305a14514000d0091572e80094420091cd009442009", + "0x1cd0090070092e400715f0091cd0092dd00902e0070071cd00900700d007", + "0x3900702e0091cd00902e0090a100705a0091cd00905a0092e8007007009", + "0x1b00743a0091cd00943a0092e400750f43943a1401cd00902e05a007140", + "0x1cd00914000902c00700d0091cd00900d0090a70070090091cd009009009", + "0x230074390091cd0094390092e80071450091cd00914500901e007140009", + "0x1cd00919b0092e30072e00091cd0092e00092e700715f0091cd00915f009", + "0x31e0072e40091cd0092e40090280072e30091cd0092e300901600719b009", + "0x50f2e42e319b2e015f43914514000d00943a2e800950f0091cd00950f009", + "0x909b00942b00716309b00d1cd0090300090a60070071cd00900700d007", + "0x1660091cd00942f00942e00742f1614301401cd00916300918e0070071cd", + "0x4300094310071680091cd0091610090ab00742d0091cd0091660090a9007", + "0x1cd0092dd00902e0070071cd00900700d00742700951026142c00d1cd00d", + "0x4350074240091cd00916b00943400716b0091cd009261009432007426009", + "0x91cd00900744d0074200091cd00942d0094430071690091cd009424009", + "0x944f00716f0091cd00942600902300741f0091cd0090070092e400716e", + "0x91cd00916e00945100741d0091cd00916900903b0071710091cd00942c", + "0x731b0072630091cd0094200094510072640091cd00916800903b007173", + "0x70b10071740091cd00942d0094430070071cd00900700d007007511009", + "0x91cd0091780090b20071780091cd00917617400d4560071760091cd009", + "0x1cd00900700d00741641800d51217b17900d1cd00d17800700d46b007178", + "0x90074720074130091cd0092dd00902e0070071cd00917b0090b3007007", + "0x71830091cd0094130090230071840091cd0091790092e40071850091cd", + "0x70071cd00900700d00700751300900731b0071820091cd009185009451", + "0x91810090230071840091cd0094180092e40071810091cd0092dd00902e", + "0x4720071800091cd0090074750071820091cd0094160094510071830091cd", + "0x91cd00918300902300741f0091cd0091840092e400717f0091cd009007", + "0x945100741d0091cd00916800903b0071710091cd00942700944f00716f", + "0x91cd00917f0094510072640091cd00918000903b0071730091cd009182", + "0x41200947e0074120091cd00917100947b00717e0091cd009007478007263", + "0x1cd00926326400d4810071910091cd00917341d00d4810074100091cd009", + "0x41f0091cd00941f0092e40074110091cd00918f19141014048400718f009", + "0x17e0090b80074110091cd00941100948700716f0091cd00916f009023007", + "0x90b900740d40e40f1401cd00917e41116f41f14549d00717e0091cd009", + "0x1cd00919500949f0070071cd00900700d00740c0095141950091cd00d40d", + "0x40819600d1cd0094090094ab0070071cd00940b0090ba00740940a40b140", + "0x2e400902800740e0091cd00940e00902300740f0091cd00940f0092e4007", + "0x1960091cd00919600936000740a0091cd00940a0090b80072e40091cd009", + "0x1451cd00940819640a2e440e40f2dd4af0074080091cd0094080094ad007", + "0x1cd00900700d00740400951519a0091cd00d4030094bb007403405406407", + "0x94bf00719d0091cd00919a0094bd0074020091cd00940600902e007007", + "0x91cd0094070092e40074000091cd00919d0094c400719d0091cd00919d", + "0x902c00700d0091cd00900d0090a70070090091cd00900900901b007407", + "0x91cd00905a0092e80071450091cd00914500901e0071400091cd009140", + "0x92e30072e00091cd0092e00092e70074020091cd00940200902300705a", + "0x91cd0094050090280072e30091cd0092e300901600719b0091cd00919b", + "0x19b2e040205a14514000d0094072e80094000091cd00940000931e007405", + "0x92e40073ff0091cd0094040094c30070071cd00900700d0074004052e3", + "0x91cd00900d0090a70070090091cd00900900901b0074070091cd009407", + "0x92e80071450091cd00914500901e0071400091cd00914000902c00700d", + "0x91cd0092e00092e70074060091cd00940600902300705a0091cd00905a", + "0x90280072e30091cd0092e300901600719b0091cd00919b0092e30072e0", + "0x14514000d0094072e80093ff0091cd0093ff00931e0074050091cd009405", + "0x91cd00940c0094c30070071cd00900700d0073ff4052e319b2e040605a", + "0x90a70070090091cd00900900901b00740f0091cd00940f0092e40073fe", + "0x91cd00914500901e0071400091cd00914000902c00700d0091cd00900d", + "0x92e700740e0091cd00940e00902300705a0091cd00905a0092e8007145", + "0x91cd0092e300901600719b0091cd00919b0092e30072e00091cd0092e0", + "0x40f2e80093fe0091cd0093fe00931e0072e40091cd0092e40090280072e3", + "0x902e0070071cd00900700d0073fe2e42e319b2e040e05a14514000d009", + "0x93fc0094c20073fa3fb3fc1401cd0090320090c00073fd0091cd0092dd", + "0xd1cd0093fa0094cc0073f83fb00d1cd0093fb0090c10073f93fc00d1cd", + "0x1cd0093fa3fb3fc1404c10070a20091cd0093f73f83f91400c20073f73fa", + "0x73f60091cd0093f60094b80073f60091cd0090710a200d4b9007071009", + "0x900900901b0070070091cd0090070092e40071a70091cd0093f60094b7", + "0x71400091cd00914000902c00700d0091cd00900d0090a70070090091cd", + "0x93fd00902300705a0091cd00905a0092e80071450091cd00914500901e", + "0x719b0091cd00919b0092e30072e00091cd0092e00092e70073fd0091cd", + "0x91a700931e0072e40091cd0092e40090280072e30091cd0092e3009016", + "0x700d0071a72e42e319b2e03fd05a14514000d0090072e80091a70091cd", + "0x70070091cd0090070092e40071a90091cd0092dd00902e0070071cd009", + "0x92e40071ac1aa00d1cd00903400700d4b60070340091cd0090340094b5", + "0x91cd00900d0090a70070090091cd00900900901b0071aa0091cd0091aa", + "0x92e80071450091cd00914500901e0071400091cd00914000902c00700d", + "0x91cd0092e00092e70071a90091cd0091a900902300705a0091cd00905a", + "0x90280072e30091cd0092e300901600719b0091cd00919b0092e30072e0", + "0x14514000d0091aa2e80091ac0091cd0091ac00931e0072e40091cd0092e4", + "0x91cd0092dd00902e0070071cd00900700d0071ac2e42e319b2e01a905a", + "0xd4b30070820091cd0090820094b40070070091cd0090070092e40073f4", + "0x900900901b0073f00091cd0093f00092e40073ed3f000d1cd009082007", + "0x71400091cd00914000902c00700d0091cd00900d0090a70070090091cd", + "0x93f400902300705a0091cd00905a0092e80071450091cd00914500901e", + "0x719b0091cd00919b0092e30072e00091cd0092e00092e70073f40091cd", + "0x93ed00931e0072e40091cd0092e40090280072e30091cd0092e3009016", + "0x700d0073ed2e42e319b2e03f405a14514000d0093f02e80093ed0091cd", + "0x700d0071b20095173e60095161b00091cd1400380090c80070071cd009", + "0x4b20073e30091cd0092dd00902e0070071cd0091b00090400070071cd009", + "0x91b500901b0070070091cd0090070092e40073e11b500d1cd009009009", + "0x73e10091cd0093e10090c90073e30091cd0093e30090230071b50091cd", + "0x91cd0093df0092e40073d63d93dc3df1451cd0093e13e31b50071454de", + "0x902c00700d0091cd00900d0090a70073dc0091cd0093dc00901b0073df", + "0x91cd00905a0092e80071450091cd00914500901e0071400091cd009140", + "0x92e30072e00091cd0092e00092e70073d90091cd0093d900902300705a", + "0x91cd0092e40090280072e30091cd0092e300901600719b0091cd00919b", + "0x19b2e03d905a14514000d3dc3df2e80093d60091cd0093d600931e0072e4", + "0x90ca0071bc0091cd0092dd00902e0070071cd00900700d0073d62e42e3", + "0x1c20090720071c23d100d1cd0091bf3d300d4b10071bf3d300d1cd0093e6", + "0x70090091cd00900900901b0070070091cd0090070092e40070071cd009", + "0x90071454a80073d10091cd0093d10094a90071bc0091cd0091bc009023", + "0x901b0073ce0091cd0093ce0092e40073c93cb1c53ce1451cd0093d11bc", + "0x91cd00914000902c00700d0091cd00900d0090a70071c50091cd0091c5", + "0x902300705a0091cd00905a0092e80071450091cd00914500901e007140", + "0x91cd00919b0092e30072e00091cd0092e00092e70073cb0091cd0093cb", + "0x931e0072e40091cd0092e40090280072e30091cd0092e300901600719b", + "0x73c92e42e319b2e03cb05a14514000d1c53ce2e80093c90091cd0093c9", + "0x91cd0091b20094a70073c70091cd0092dd00902e0070071cd00900700d", + "0x92e40071cb0091cd0093c40094a60073c40091cd0093c40094a50073c4", + "0x91cd00900d0090a70070090091cd00900900901b0070070091cd009007", + "0x92e80071450091cd00914500901e0071400091cd00914000902c00700d", + "0x91cd0092e00092e70073c70091cd0093c700902300705a0091cd00905a", + "0x90280072e30091cd0092e300901600719b0091cd00919b0092e30072e0", + "0x14514000d0090072e80091cb0091cd0091cb00931e0072e40091cd0092e4", + "0x91cd14030b0094a40070071cd00900700d0071cb2e42e319b2e03c705a", + "0x71cd0093c10090400070071cd00900700d0073b70095193b90095183c1", + "0x92e40073b61d000d1cd0090090094a30071900091cd0092dd00902e007", + "0x91cd0091900090230071d00091cd0091d000901b0070070091cd009007", + "0x3b41451cd0093b61901d00071454a20073b60091cd0093b60090d0007190", + "0x71ce0091cd0091ce00901b0073b40091cd0093b40092e40071d41cf1ce", + "0x914500901e0071400091cd00914000902c00700d0091cd00900d0090a7", + "0x71cf0091cd0091cf00902300705a0091cd00905a0092e80071450091cd", + "0x92e300901600719b0091cd00919b0092e30072e00091cd0092e00092e7", + "0x91d40091cd0091d400931e0072e40091cd0092e40090280072e30091cd", + "0x70071cd00900700d0071d42e42e319b2e01cf05a14514000d1ce3b42e8", + "0x3b200d0d30071d23b200d1cd0093b90094a00073b80091cd0092dd00902e", + "0x91cd0090070092e40070071cd0093a50090d10073a51d300d1cd0091d2", + "0x90d20073b80091cd0093b80090230070090091cd00900900901b007007", + "0x73a11d71d53a41451cd0091d33b80090071450d40071d30091cd0091d3", + "0x900d0090a70071d50091cd0091d500901b0073a40091cd0093a40092e4", + "0x71450091cd00914500901e0071400091cd00914000902c00700d0091cd", + "0x92e00092e70071d70091cd0091d700902300705a0091cd00905a0092e8", + "0x72e30091cd0092e300901600719b0091cd00919b0092e30072e00091cd", + "0xd1d53a42e80093a10091cd0093a100931e0072e40091cd0092e4009028", + "0x92dd00902e0070071cd00900700d0073a12e42e319b2e01d705a145140", + "0x72700091cd0092700090d50072700091cd0093b70094fe00739f0091cd", + "0x900900901b0070070091cd0090070092e400739c0091cd0092700094a1", + "0x71400091cd00914000902c00700d0091cd00900d0090a70070090091cd", + "0x939f00902300705a0091cd00905a0092e80071450091cd00914500901e", + "0x719b0091cd00919b0092e30072e00091cd0092e00092e700739f0091cd", + "0x939c00931e0072e40091cd0092e40090280072e30091cd0092e3009016", + "0x700d00739c2e42e319b2e039f05a14514000d0090072e800939c0091cd", + "0x700d0071db00951b1d900951a39b0091cd14030e00949e0070071cd009", + "0x1eb0073990091cd0092dd00902e0070071cd00939b0090400070071cd009", + "0x939800901b0070070091cd0090070092e400727239800d1cd009009009", + "0x72720091cd0092720094980073990091cd0093990090230073980091cd", + "0x91cd0093970092e40071df1dd3963971451cd009272399398007145497", + "0x902c00700d0091cd00900d0090a70073960091cd00939600901b007397", + "0x91cd00905a0092e80071450091cd00914500901e0071400091cd009140", + "0x92e30072e00091cd0092e00092e70071dd0091cd0091dd00902300705a", + "0x91cd0092e40090280072e30091cd0092e300901600719b0091cd00919b", + "0x19b2e01dd05a14514000d3963972e80091df0091cd0091df00931e0072e4", + "0x94960073940091cd0092dd00902e0070071cd00900700d0071df2e42e3", + "0x39000949400739039100d1cd00927439300d49500727439300d1cd0091d9", + "0x70090091cd00900900901b0070070091cd0090070092e40070071cd009", + "0x90071454920073910091cd0093910094930073940091cd009394009023", + "0x901b0071e10091cd0091e10092e400738b38d1e31e11451cd009391394", + "0x91cd00914000902c00700d0091cd00900d0090a70071e30091cd0091e3", + "0x902300705a0091cd00905a0092e80071450091cd00914500901e007140", + "0x91cd00919b0092e30072e00091cd0092e00092e700738d0091cd00938d", + "0x931e0072e40091cd0092e40090280072e30091cd0092e300901600719b", + "0x738b2e42e319b2e038d05a14514000d1e31e12e800938b0091cd00938b", + "0x91cd0091db0094910072760091cd0092dd00902e0070071cd00900700d", + "0x92e40073880091cd00938900948f0073890091cd009389009490007389", + "0x91cd00900d0090a70070090091cd00900900901b0070070091cd009007", + "0x92e80071450091cd00914500901e0071400091cd00914000902c00700d", + "0x91cd0092e00092e70072760091cd00927600902300705a0091cd00905a", + "0x90280072e30091cd0092e300901600719b0091cd00919b0092e30072e0", + "0x14514000d0090072e80093880091cd00938800931e0072e40091cd0092e4", + "0x91cd14530f00948e0070071cd00900700d0073882e42e319b2e027605a", + "0x1e50090400070071cd00900700d00738500951e38600951d1e700951c1e5", + "0x48c00727b0091cd00900748d0072780091cd0092dd00902e0070071cd009", + "0x1cd0090070092e400727a0091cd00927b00948b00727b0091cd00927b009", + "0x2c00700d0091cd00900d0090a70070090091cd00900900901b007007009", + "0x1cd00905a0092e80071450091cd00914500901e0071400091cd009140009", + "0x2e30072e00091cd0092e00092e70072780091cd00927800902300705a009", + "0x1cd0092e40090280072e30091cd0092e300901600719b0091cd00919b009", + "0x2e027805a14514000d0090072e800927a0091cd00927a00931e0072e4009", + "0x48a00737f0091cd0092dd00902e0070071cd00900700d00727a2e42e319b", + "0x1cd0091ee00948b0071ee0091cd00937e00948900737e0091cd0091e7009", + "0xa70070090091cd00900900901b0070070091cd0090070092e4007233009", + "0x1cd00914500901e0071400091cd00914000902c00700d0091cd00900d009", + "0x2e700737f0091cd00937f00902300705a0091cd00905a0092e8007145009", + "0x1cd0092e300901600719b0091cd00919b0092e30072e00091cd0092e0009", + "0x2e80092330091cd00923300931e0072e40091cd0092e40090280072e3009", + "0xe90070071cd00900700d0072332e42e319b2e037f05a14514000d009007", + "0x900700d00737200951f0071cd00d3730090eb0073730091cd009386009", + "0x909a0071f10091cd0090070260075200091cd0092dd00902e0070071cd", + "0x91cd0092360093cf0074450091cd0095200090230072360091cd0091f1", + "0x71cd0093720092dd0070071cd00900700d00700750c00900731b00714c", + "0x936700900f0073670091cd0090070260073680091cd0092dd00902e007", + "0x714c0091cd00902a0093cf0074450091cd00936800902300702a0091cd", + "0x95210071cd00d3850090eb0070071cd00900700d00700750c00900731b", + "0x92390090230072390091cd0092dd00902e0070071cd00900700d0071f4", + "0x92dd00902e0070071cd00900700d00700752200900731b00735d0091cd", + "0x75230091cd00952300903b0075230091cd0091f400948600735c0091cd", + "0x900900901b0070070091cd0090070092e40071f70091cd009523009093", + "0x71400091cd00914000902c00700d0091cd00900d0090a70070090091cd", + "0x935c00902300705a0091cd00905a0092e80071450091cd00914500901e", + "0x719b0091cd00919b0092e30072e00091cd0092e00092e700735c0091cd", + "0x91f700931e0072e40091cd0092e40090280072e30091cd0092e3009016", + "0x700d0071f72e42e319b2e035c05a14514000d0090072e80091f70091cd", + "0x1f800952634d00952535000952423c0091cd14503a0090ee0070071cd009", + "0x91cd0092dd00902e0070071cd00923c0090400070071cd00900700d007", + "0x52700947d0075270091cd0095270090f10075270091cd00900748300734f", + "0x90091cd00900900901b0070070091cd0090070092e40071fb0091cd009", + "0x14500901e0071400091cd00914000902c00700d0091cd00900d0090a7007", + "0x34f0091cd00934f00902300705a0091cd00905a0092e80071450091cd009", + "0x2e300901600719b0091cd00919b0092e30072e00091cd0092e00092e7007", + "0x1fb0091cd0091fb00931e0072e40091cd0092e40090280072e30091cd009", + "0x71cd00900700d0071fb2e42e319b2e034f05a14514000d0090072e8009", + "0x3470090f80073470091cd0093500090f700723f0091cd0092dd00902e007", + "0x70091cd0090070092e40073430091cd00934500947d0073450091cd009", + "0x14000902c00700d0091cd00900d0090a70070090091cd00900900901b007", + "0x5a0091cd00905a0092e80071450091cd00914500901e0071400091cd009", + "0x19b0092e30072e00091cd0092e00092e700723f0091cd00923f009023007", + "0x2e40091cd0092e40090280072e30091cd0092e300901600719b0091cd009", + "0x2e319b2e023f05a14514000d0090072e80093430091cd00934300931e007", + "0x2000090ef0072000091cd00934d0090f90070071cd00900700d0073432e4", + "0x3410091cd0092dd00902e0070071cd00900700d0072020095280071cd00d", + "0x934100902300733e0091cd00924100909a0072410091cd009007026007", + "0x700d00700750c00900731b00714c0091cd00933e0093cf0074450091cd", + "0x260072070091cd0092dd00902e0070071cd0092020090fc0070071cd009", + "0x91cd0092070090230072440091cd00920800900f0072080091cd009007", + "0x1cd00900700d00700750c00900731b00714c0091cd0092440093cf007445", + "0x902e0070071cd00900700d0072090095290071cd00d1f80090ef007007", + "0x700752200900731b00735d0091cd0092430090230072430091cd0092dd", + "0x91cd00920900947a00720b0091cd0092dd00902e0070071cd00900700d", + "0x92e400720e0091cd0093230091000073230091cd0093230090fe007323", + "0x91cd00900d0090a70070090091cd00900900901b0070070091cd009007", + "0x92e80071450091cd00914500901e0071400091cd00914000902c00700d", + "0x91cd0092e00092e700720b0091cd00920b00902300705a0091cd00905a", + "0x90280072e30091cd0092e300901600719b0091cd00919b0092e30072e0", + "0x14514000d0090072e800920e0091cd00920e00931e0072e40091cd0092e4", + "0x91cd14503b0091030070071cd00900700d00720e2e42e319b2e020b05a", + "0x3220090400070071cd00900700d00732000952c21200952b21000952a322", + "0x2e400724f0091cd0090070f300724e0091cd0092dd00902e0070071cd009", + "0x1cd00924e0090230070090091cd00900900901b0070070091cd009007009", + "0x1451cd00924f24e0090071450fa00724f0091cd00924f00910600724e009", + "0x31d0091cd00931d00901b0072150091cd0092150092e400721752d31d215", + "0x14500901e0071400091cd00914000902c00700d0091cd00900d0090a7007", + "0x52d0091cd00952d00902300705a0091cd00905a0092e80071450091cd009", + "0x2e300901600719b0091cd00919b0092e30072e00091cd0092e00092e7007", + "0x2170091cd00921700931e0072e40091cd0092e40090280072e30091cd009", + "0x71cd00900700d0072172e42e319b2e052d05a14514000d31d2152e8009", + "0x2540090fd0072540091cd00921000900c0072510091cd0092dd00902e007", + "0x90091cd00900900901b0070070091cd0090070092e40073150091cd009", + "0x71450fa0073150091cd0093150091060072510091cd009251009023007", + "0x1b0073130091cd0093130092e400721c21821a3131451cd009315251009", + "0x1cd00914000902c00700d0091cd00900d0090a700721a0091cd00921a009", + "0x2300705a0091cd00905a0092e80071450091cd00914500901e007140009", + "0x1cd00919b0092e30072e00091cd0092e00092e70072180091cd009218009", + "0x31e0072e40091cd0092e40090280072e30091cd0092e300901600719b009", + "0x21c2e42e319b2e021805a14514000d21a3132e800921c0091cd00921c009", + "0x1cd00d2580090f20072580091cd0092120091040070071cd00900700d007", + "0x260073110091cd0092dd00902e0070071cd00900700d00725700952e007", + "0x91cd00931100902300721d0091cd00931000909a0073100091cd009007", + "0x1cd00900700d00700750c00900731b00714c0091cd00921d0093cf007445", + "0x900702600725b0091cd0092dd00902e0070071cd00925700910f007007", + "0x74450091cd00925b00902300730d0091cd00925a00900f00725a0091cd", + "0x90070092e400730a0091cd00914c00908c00714c0091cd00930d0093cf", + "0x700d0091cd00900d0090a70070090091cd00900900901b0070070091cd", + "0x905a0092e80071450091cd00914500901e0071400091cd00914000902c", + "0x72e00091cd0092e00092e70074450091cd00944500902300705a0091cd", + "0x92e40090280072e30091cd0092e300901600719b0091cd00919b0092e3", + "0x44505a14514000d0090072e800930a0091cd00930a00931e0072e40091cd", + "0x952f0071cd00d3200094770070071cd00900700d00730a2e42e319b2e0", + "0x921f00902300721f0091cd0092dd00902e0070071cd00900700d00721e", + "0x2e400725d0091cd00925e0094c300725e0091cd00900711100735d0091cd", + "0x1cd00900d0090a70070090091cd00900900901b0070070091cd009007009", + "0x2e80071450091cd00914500901e0071400091cd00914000902c00700d009", + "0x1cd0092e00092e700735d0091cd00935d00902300705a0091cd00905a009", + "0x280072e30091cd0092e300901600719b0091cd00919b0092e30072e0009", + "0x14000d0090072e800925d0091cd00925d00931e0072e40091cd0092e4009", + "0x1cd0092dd00902e0070071cd00900700d00725d2e42e319b2e035d05a145", + "0x1b0070070091cd0090070092e40073070091cd00921e00910d007220009", + "0x1cd0093070090d00072200091cd0092200090230070090091cd009009009", + "0x2650092e400730322317d2651451cd0093072200090071454a2007307009", + "0xd0091cd00900d0090a700717d0091cd00917d00901b0072650091cd009", + "0x5a0092e80071450091cd00914500901e0071400091cd00914000902c007", + "0x2e00091cd0092e00092e70072230091cd00922300902300705a0091cd009", + "0x2e40090280072e30091cd0092e300901600719b0091cd00919b0092e3007", + "0x5a14514000d17d2652e80093030091cd00930300931e0072e40091cd009", + "0x19e0091cd0092dd00902e0070071cd00900700d0073032e42e319b2e0223", + "0x2c00700d0091cd00900d0090a70072272262281401cd0093120091f9007", + "0x1cd00922800909f0071450091cd00914500901e0071400091cd009140009", + "0x560072270091cd00922700909f0072260091cd00922600909f007228009", + "0x1cd0090070092e400730030130222a1451cd00922722622814514000d2dd", + "0x2c00722a0091cd00922a0090a70070090091cd00900900901b007007009", + "0x1cd00905a0092e80073010091cd00930100901e0073020091cd009302009", + "0x2e30072e00091cd0092e00092e700719e0091cd00919e00902300705a009", + "0x1cd0092e40090280072e30091cd0092e300901600719b0091cd00919b009", + "0x2e019e05a30130222a0090072e80093000091cd00930000931e0072e4009", + "0x2fb2fd2ff1401cd0093140094710070071cd00900700d0073002e42e319b", + "0x2e00092e70072dd0091cd0092dd0090230070070091cd0090070092e4007", + "0x2ff0091cd0092ff0090fe0072e40091cd0092e40090280072e00091cd009", + "0x72e046e0072fb0091cd0092fb00946f0072fd0091cd0092fd009118007", + "0x1cd00d53100946d00753122c1195302fa05a1cd0092fb2fd2ff2e42e02dd", + "0x72300091cd0092690094680070071cd00900700d007268009532269009", + "0x2310090400070071cd00900700d00726c0095332310091cd00d230009467", + "0x70470091cd0092fa0092e400726b0091cd00953000902e0070071cd009", + "0x922c0090280073240091cd0091190092e70070480091cd00926b009023", + "0x926c00903b0070071cd00900700d0070074fc00900731b00732c0091cd", + "0x727e0091cd00926e0094c300726e0091cd00926c00931200726c0091cd", + "0x900d0090a70070090091cd00900900901b0072fa0091cd0092fa0092e4", + "0x71450091cd00914500901e0071400091cd00914000902c00700d0091cd", + "0x91190092e70075300091cd00953000902300705a0091cd00905a0092e8", + "0x72e30091cd0092e300901600719b0091cd00919b0092e30071190091cd", + "0xd0092fa2e800927e0091cd00927e00931e00722c0091cd00922c009028", + "0x92680094c30070071cd00900700d00727e22c2e319b11953005a145140", + "0x70090091cd00900900901b0072fa0091cd0092fa0092e400727d0091cd", + "0x914500901e0071400091cd00914000902c00700d0091cd00900d0090a7", + "0x75300091cd00953000902300705a0091cd00905a0092e80071450091cd", + "0x92e300901600719b0091cd00919b0092e30071190091cd0091190092e7", + "0x927d0091cd00927d00931e00722c0091cd00922c0090280072e30091cd", + "0x70071cd00900700d00727d22c2e319b11953005a14514000d0092fa2e8", + "0x909a0072870091cd0090070260072832842802811451cd00903f009462", + "0x2862832e42dd14524d0072860091cd0092860093cf0072860091cd009287", + "0x924c0070071cd00900700d0072ac2ad2ae1405342af28928a1401cd00d", + "0x900700d0072aa0095352ab0091cd00d2af00924b0072af0091cd0092af", + "0x2800728a0091cd00928a0090230070070091cd0090070092e40070071cd", + "0x1cd0092800090fe0072810091cd0092810090fe0072890091cd009289009", + "0x2490072ab0091cd0092ab00924a0072840091cd0092840090fe007280009", + "0xd2a60092480072a62a72a82a91451cd0092ab28428028128928a0072e0", + "0x2a30091cd0092a800902e0070071cd00900700d0072a40095362a50091cd", + "0x2a200908c0072a20091cd0092a20093cf0072a20091cd0092a5009461007", + "0x90091cd00900900901b0072a90091cd0092a90092e40072a10091cd009", + "0x14500901e0071400091cd00914000902c00700d0091cd00900d0090a7007", + "0x2a30091cd0092a300902300705a0091cd00905a0092e80071450091cd009", + "0x2e300901600719b0091cd00919b0092e30072e00091cd0092e00092e7007", + "0x2a10091cd0092a100931e0072a70091cd0092a70090280072e30091cd009", + "0x71cd00900700d0072a12a72e319b2e02a305a14514000d0092a92e8009", + "0x900901b0072a90091cd0092a90092e40072a00091cd0092a40094c3007", + "0x1400091cd00914000902c00700d0091cd00900d0090a70070090091cd009", + "0x2a800902300705a0091cd00905a0092e80071450091cd00914500901e007", + "0x19b0091cd00919b0092e30072e00091cd0092e00092e70072a80091cd009", + "0x2a000931e0072a70091cd0092a70090280072e30091cd0092e3009016007", + "0xd0072a02a72e319b2e02a805a14514000d0092a92e80092a00091cd009", + "0x45c0070071cd00928400945c0070071cd0092aa0090400070071cd009007", + "0x28a0091cd00928a0090230070071cd00928100945c0070071cd009280009", + "0x29f00902300729e0091cd0090070092e400729f0091cd00928a00902e007", + "0xd00700753700900731b00729c0091cd00928900902800729d0091cd009", + "0x45c0070071cd00928400945c0070071cd0092ac0090340070071cd009007", + "0x729b0091cd00900745b0070071cd00928100945c0070071cd009280009", + "0x900900901b0070070091cd0090070092e400729a0091cd00929b0094c3", + "0x71400091cd00914000902c00700d0091cd00900d0090a70070090091cd", + "0x92ae00902300705a0091cd00905a0092e80071450091cd00914500901e", + "0x719b0091cd00919b0092e30072e00091cd0092e00092e70072ae0091cd", + "0x929a00931e0072ad0091cd0092ad0090280072e30091cd0092e3009016", + "0x700d00729a2ad2e319b2e02ae05a14514000d0090072e800929a0091cd", + "0x70070091cd0090070092e40072990091cd0092dd00902e0070071cd009", + "0x92e300901600719b0091cd00919b0092e30072990091cd009299009023", + "0x70400091cd0090400091200072e40091cd0092e40090280072e30091cd", + "0x92e40072932942952962972982dd1cd0090402e42e319b2990072dd122", + "0x91cd00900d0090a70070090091cd00900900901b0072980091cd009298", + "0x92e80071450091cd00914500901e0071400091cd00914000902c00700d", + "0x91cd0092e00092e70072970091cd00929700902300705a0091cd00905a", + "0x90280072950091cd0092950090160072960091cd0092960092e30072e0", + "0x14514000d0092982e80092930091cd00929300931e0072940091cd009294", + "0x91cd01e31b0091210070071cd00900700d0072932942952962e029705a", + "0x53e2d100953d2d300953c28e00953b2b900953a2d8009539291009538292", + "0x2c80095442c90095432ca0095422cb0095412cc0095402cd00953f2cf009", + "0x2dd00902e0070071cd0092920090400070071cd00900700d0072c7009545", + "0x72c20091cd0092c200903b0072c20091cd00900711f0072c50091cd009", + "0x900900901b0070070091cd0090070092e40072ce0091cd0092c2009093", + "0x71400091cd00914000902c00700d0091cd00900d0090a70070090091cd", + "0x92c500902300705a0091cd00905a0092e80071450091cd00914500901e", + "0x719b0091cd00919b0092e30072e00091cd0092e00092e70072c50091cd", + "0x92ce00931e0072e40091cd0092e40090280072e30091cd0092e3009016", + "0x700d0072ce2e42e319b2e02c505a14514000d0090072e80092ce0091cd", + "0x5020070000091cd0092dd00902e0070071cd0092910090400070071cd009", + "0x91cd0095460090440075460091cd00954600932c0075460091cd009007", + "0x90a70070090091cd00900900901b0070070091cd0090070092e4007547", + "0x91cd00914500901e0071400091cd00914000902c00700d0091cd00900d", + "0x92e70070000091cd00900000902300705a0091cd00905a0092e8007145", + "0x91cd0092e300901600719b0091cd00919b0092e30072e00091cd0092e0", + "0x72e80095470091cd00954700931e0072e40091cd0092e40090280072e3", + "0x90400070071cd00900700d0075472e42e319b2e000005a14514000d009", + "0x75490091cd0090074580075480091cd0092dd00902e0070071cd0092d8", + "0x90070092e400754a0091cd0095490090540075490091cd009549009053", + "0x700d0091cd00900d0090a70070090091cd00900900901b0070070091cd", + "0x905a0092e80071450091cd00914500901e0071400091cd00914000902c", + "0x72e00091cd0092e00092e70075480091cd00954800902300705a0091cd", + "0x92e40090280072e30091cd0092e300901600719b0091cd00919b0092e3", + "0x54805a14514000d0090072e800954a0091cd00954a00931e0072e40091cd", + "0x2e0070071cd0092b90090400070071cd00900700d00754a2e42e319b2e0", + "0x91cd00954c00936000754c0091cd00900708d00754b0091cd0092dd009", + "0x901b0070070091cd0090070092e400754d0091cd00954c00936200754c", + "0x91cd00914000902c00700d0091cd00900d0090a70070090091cd009009", + "0x902300705a0091cd00905a0092e80071450091cd00914500901e007140", + "0x91cd00919b0092e30072e00091cd0092e00092e700754b0091cd00954b", + "0x931e0072e40091cd0092e40090280072e30091cd0092e300901600719b", + "0x754d2e42e319b2e054b05a14514000d0090072e800954d0091cd00954d", + "0x54e0091cd0092dd00902e0070071cd00928e0090400070071cd00900700d", + "0x954f00938300754f0091cd00954f00938100754f0091cd009007128007", + "0x70090091cd00900900901b0070070091cd0090070092e40075500091cd", + "0x914500901e0071400091cd00914000902c00700d0091cd00900d0090a7", + "0x754e0091cd00954e00902300705a0091cd00905a0092e80071450091cd", + "0x92e300901600719b0091cd00919b0092e30072e00091cd0092e00092e7", + "0x95500091cd00955000931e0072e40091cd0092e40090280072e30091cd", + "0x70071cd00900700d0075502e42e319b2e054e05a14514000d0090072e8", + "0x91cd0090074550075510091cd0092dd00902e0070071cd0092d3009040", + "0x92e40075530091cd0095520090790075520091cd009552009074007552", + "0x91cd00900d0090a70070090091cd00900900901b0070070091cd009007", + "0x92e80071450091cd00914500901e0071400091cd00914000902c00700d", + "0x91cd0092e00092e70075510091cd00955100902300705a0091cd00905a", + "0x90280072e30091cd0092e300901600719b0091cd00919b0092e30072e0", + "0x14514000d0090072e80095530091cd00955300931e0072e40091cd0092e4", + "0x71cd0092d10090400070071cd00900700d0075532e42e319b2e055105a", + "0x95550091290075550091cd00900712a0075540091cd0092dd00902e007", + "0x70070091cd0090070092e40075560091cd0095550094540075550091cd", + "0x914000902c00700d0091cd00900d0090a70070090091cd00900900901b", + "0x705a0091cd00905a0092e80071450091cd00914500901e0071400091cd", + "0x919b0092e30072e00091cd0092e00092e70075540091cd009554009023", + "0x72e40091cd0092e40090280072e30091cd0092e300901600719b0091cd", + "0x2e42e319b2e055405a14514000d0090072e80095560091cd00955600931e", + "0x1cd0092dd00902e0070071cd0092cf0090400070071cd00900700d007556", + "0x94530075570091cd0095570091320075570091cd0090071300074e1009", + "0x91cd00900900901b0070070091cd0090070092e40075580091cd009557", + "0x901e0071400091cd00914000902c00700d0091cd00900d0090a7007009", + "0x91cd0094e100902300705a0091cd00905a0092e80071450091cd009145", + "0x901600719b0091cd00919b0092e30072e00091cd0092e00092e70074e1", + "0x91cd00955800931e0072e40091cd0092e40090280072e30091cd0092e3", + "0x1cd00900700d0075582e42e319b2e04e105a14514000d0090072e8009558", + "0x90071350075590091cd0092dd00902e0070071cd0092cd009040007007", + "0x755b0091cd00955a00913800755a0091cd00955a00913600755a0091cd", + "0x900d0090a70070090091cd00900900901b0070070091cd0090070092e4", + "0x71450091cd00914500901e0071400091cd00914000902c00700d0091cd", + "0x92e00092e70075590091cd00955900902300705a0091cd00905a0092e8", + "0x72e30091cd0092e300901600719b0091cd00919b0092e30072e00091cd", + "0xd0090072e800955b0091cd00955b00931e0072e40091cd0092e4009028", + "0x92cc0090400070071cd00900700d00755b2e42e319b2e055905a145140", + "0x945000755d0091cd00900745200755c0091cd0092dd00902e0070071cd", + "0x91cd0090070092e400755e0091cd00955d00908e00755d0091cd00955d", + "0x902c00700d0091cd00900d0090a70070090091cd00900900901b007007", + "0x91cd00905a0092e80071450091cd00914500901e0071400091cd009140", + "0x92e30072e00091cd0092e00092e700755c0091cd00955c00902300705a", + "0x91cd0092e40090280072e30091cd0092e300901600719b0091cd00919b", + "0x19b2e055c05a14514000d0090072e800955e0091cd00955e00931e0072e4", + "0x2dd00902e0070071cd0092cb0090400070071cd00900700d00755e2e42e3", + "0x75600091cd00956000913b0075600091cd0090074fd00755f0091cd009", + "0x900900901b0070070091cd0090070092e40075610091cd00956000913a", + "0x71400091cd00914000902c00700d0091cd00900d0090a70070090091cd", + "0x955f00902300705a0091cd00905a0092e80071450091cd00914500901e", + "0x719b0091cd00919b0092e30072e00091cd0092e00092e700755f0091cd", + "0x956100931e0072e40091cd0092e40090280072e30091cd0092e3009016", + "0x700d0075612e42e319b2e055f05a14514000d0090072e80095610091cd", + "0x5060075620091cd0092dd00902e0070071cd0092ca0090400070071cd009", + "0x91cd0095630091590075630091cd0095630095070075630091cd009007", + "0x90a70070090091cd00900900901b0070070091cd0090070092e4007564", + "0x91cd00914500901e0071400091cd00914000902c00700d0091cd00900d", + "0x92e70075620091cd00956200902300705a0091cd00905a0092e8007145", + "0x91cd0092e300901600719b0091cd00919b0092e30072e00091cd0092e0", + "0x72e80095640091cd00956400931e0072e40091cd0092e40090280072e3", + "0x90400070071cd00900700d0075642e42e319b2e056205a14514000d009", + "0x75660091cd0090075080075650091cd0092dd00902e0070071cd0092c9", + "0x90070092e40075670091cd0095660091430075660091cd009566009144", + "0x700d0091cd00900d0090a70070090091cd00900900901b0070070091cd", + "0x905a0092e80071450091cd00914500901e0071400091cd00914000902c", + "0x72e00091cd0092e00092e70075650091cd00956500902300705a0091cd", + "0x92e40090280072e30091cd0092e300901600719b0091cd00919b0092e3", + "0x56505a14514000d0090072e80095670091cd00956700931e0072e40091cd", + "0x2e0070071cd0092c80090400070071cd00900700d0075672e42e319b2e0", + "0x91cd00956800944b0075680091cd00900750a0074e20091cd0092dd009", + "0x901b0070070091cd0090070092e40075690091cd00956800950b007568", + "0x91cd00914000902c00700d0091cd00900d0090a70070090091cd009009", + "0x902300705a0091cd00905a0092e80071450091cd00914500901e007140", + "0x91cd00919b0092e30072e00091cd0092e00092e70074e20091cd0094e2", + "0x931e0072e40091cd0092e40090280072e30091cd0092e300901600719b", + "0x75692e42e319b2e04e205a14514000d0090072e80095690091cd009569", + "0x56a0091cd0092dd00902e0070071cd0092c70090400070071cd00900700d", + "0x956b00950d00756b0091cd00956b00914c00756b0091cd009007445007", + "0x70090091cd00900900901b0070070091cd0090070092e400756c0091cd", + "0x914500901e0071400091cd00914000902c00700d0091cd00900d0090a7", + "0x756a0091cd00956a00902300705a0091cd00905a0092e80071450091cd", + "0x92e300901600719b0091cd00919b0092e30072e00091cd0092e00092e7", + "0x956c0091cd00956c00931e0072e40091cd0092e40090280072e30091cd", + "0x70071cd00900700d00756c2e42e319b2e056a05a14514000d0090072e8", + "0x2dd00902e0070071cd00900700d00756f00956e56d0091cd00d31c009441", + "0x5710091cd00957100943e0075710091cd00956d0091510075700091cd009", + "0x900901b0070070091cd0090070092e40075720091cd00957100914a007", + "0x1400091cd00914000902c00700d0091cd00900d0090a70070090091cd009", + "0x57000902300705a0091cd00905a0092e80071450091cd00914500901e007", + "0x19b0091cd00919b0092e30072e00091cd0092e00092e70075700091cd009", + "0x57200931e0072e40091cd0092e40090280072e30091cd0092e3009016007", + "0xd0075722e42e319b2e057005a14514000d0090072e80095720091cd009", + "0x1cd00900700d0075750095745730091cd00d56f00943f0070071cd009007", + "0x91560075730091cd00957300915b0075760091cd0092dd00902e007007", + "0x91cd00900900901b0070070091cd0090070092e40075770091cd009573", + "0x901e0071400091cd00914000902c00700d0091cd00900d0090a7007009", + "0x91cd00957600902300705a0091cd00905a0092e80071450091cd009145", + "0x901600719b0091cd00919b0092e30072e00091cd0092e00092e7007576", + "0x91cd00957700931e0072e40091cd0092e40090280072e30091cd0092e3", + "0x1cd00900700d0075772e42e319b2e057605a14514000d0090072e8009577", + "0x70092e40075780091cd0092dd00902e0070071cd009575009040007007", + "0x3240091cd0092e00092e70070480091cd0095780090230070470091cd009", + "0x71cd00900700d0070074fc00900731b00732c0091cd0092e4009028007", + "0x902e0070071cd00900700d00757b00957a5790091cd00d043009153007", + "0x1cd00957d00944200757d57c00d1cd0095790091570074e30091cd0092dd", + "0x92e400757e0091cd00957c00943a00757c0091cd00957c00915f007007", + "0x91cd00900d0090a70070090091cd00900900901b0070070091cd009007", + "0x92e80071450091cd00914500901e0071400091cd00914000902c00700d", + "0x91cd0092e00092e70074e30091cd0094e300902300705a0091cd00905a", + "0x90280072e30091cd0092e300901600719b0091cd00919b0092e30072e0", + "0x14514000d0090072e800957e0091cd00957e00931e0072e40091cd0092e4", + "0x71cd00957b0094390070071cd00900700d00757e2e42e319b2e04e305a", + "0x57f0090230070470091cd0090070092e400757f0091cd0092dd00902e007", + "0x32c0091cd0092e40090280073240091cd0092e00092e70070480091cd009", + "0x58000d1cd0090440090470070071cd00900700d0070074fc00900731b007", + "0x900700d00758658500d58458358200d1cd00d58158000714050f007581", + "0x230075880091cd0095820092e40075870091cd0092dd00902e0070071cd", + "0x758b00900731b00758a0091cd00958300909b0075890091cd009587009", + "0x1cd0095850092e400758c0091cd0092dd00902e0070071cd00900700d007", + "0x16300758a0091cd00958600909b0075890091cd00958c009023007588009", + "0x959058f0091cd00d4e40094300074e458e58d1401cd00958a589588140", + "0x1cd00958e00902e0070071cd00958f0091610070071cd00900700d007591", + "0x2e70070480091cd0095920090230070470091cd00958d0092e4007592009", + "0x74fc00900731b00732c0091cd0092e40090280073240091cd0092e0009", + "0x1cd00958d0092e40075930091cd0095910094c30070071cd00900700d007", + "0x2c00700d0091cd00900d0090a70070090091cd00900900901b00758d009", + "0x1cd00905a0092e80071450091cd00914500901e0071400091cd009140009", + "0x2e30072e00091cd0092e00092e700758e0091cd00958e00902300705a009", + "0x1cd0092e40090280072e30091cd0092e300901600719b0091cd00919b009", + "0x2e058e05a14514000d00958d2e80095930091cd00959300931e0072e4009", + "0x742f0070071cd00931e0090400070071cd00900700d0075932e42e319b", + "0x1cd00d5942dd00714042d0075940091cd0095940091660075940091cd009", + "0x91cd00959600902e0070071cd00900700d00759959800d59759659500d", + "0x92e70070480091cd00959a0090230070470091cd0095950092e400759a", + "0x59b0091cd00900702600732c0091cd0092e40090280073240091cd0092e0", + "0x470092e400759d0091cd00959c00942c00759c0091cd00959b009168007", + "0xd0091cd00900d0090a70070090091cd00900900901b0070470091cd009", + "0x5a0092e80071450091cd00914500901e0071400091cd00914000902c007", + "0x3240091cd0093240092e70070480091cd00904800902300705a0091cd009", + "0x32c0090280072e30091cd0092e300901600719b0091cd00919b0092e3007", + "0x5a14514000d0090472e800959d0091cd00959d00931e00732c0091cd009", + "0x59e0091cd00959900902e0070071cd00900700d00759d32c2e319b324048", + "0x2e400902800729d0091cd00959e00902300729e0091cd0095980092e4007", + "0x75a00091cd00959f0094c300759f0091cd00900726100729c0091cd009", + "0x900d0090a70070090091cd00900900901b00729e0091cd00929e0092e4", + "0x71450091cd00914500901e0071400091cd00914000902c00700d0091cd", + "0x92e00092e700729d0091cd00929d00902300705a0091cd00905a0092e8", + "0x72e30091cd0092e300901600719b0091cd00919b0092e30072e00091cd", + "0xd00929e2e80095a00091cd0095a000931e00729c0091cd00929c009028", + "0x700903b0070070091cd0090074270075a029c2e319b2e029d05a145140", + "0x1cd0090070300070090090090090091cd0090070093120070070091cd009", + "0x4240071400091cd00900716b00700d0091cd00900700900d426007009009", + "0x3240071450090091450091cd0091450091690071450091cd00900d14000d", + "0x700d0091cd0090070300070090091cd0090074750070071cd009007009", + "0x914000d00d4260071400091cd00914000903b0071400091cd009007420", + "0x5a0091cd00905a00903b00705a00900d1cd00900900916e0071450091cd", + "0x3b0072e000900d1cd00900900916e0072dd0091cd00905a14500d426007", + "0x900900903b00719b0091cd0092e02dd00d4260072e00091cd0092e0009", + "0x72e40091cd00900716b0072e30091cd00900919b00d4260070090091cd", + "0x2e800931e0072e80091cd0092e70094c30072e70091cd0092e32e400d424", + "0x95a21400095a100d0091cd2dd00900941f0072e80090092e80091cd009", + "0xd0090470070071cd00900700d0072e00095a52dd0095a405a0095a3145", + "0x1cd00900700d0072e40095a60071cd00d2e300916f0072e319b00d1cd009", + "0x71cd00900700d0070075a700900731b0070071cd00919b009324007007", + "0x70071cd0090160093240070162e82e71401cd0092e419b007140171007", + "0x92e70092e400701b0091cd0092e80090440072e80091cd0092e800932c", + "0x1cd00900700d00701b2e700d00901b0091cd00901b00931e0072e70091cd", + "0x2c0095a80071cd00d0a700916f0070a701e00d1cd009140009047007007", + "0x230091cd00900741d0070071cd00901e0093240070071cd00900700d007", + "0x2800931e0070070091cd0090070092e40070280091cd0090230094c3007", + "0x2c01e0071401710070071cd00900700d00702800700d0090280091cd009", + "0x91cd0090290090440070071cd0090260093240070290260251401cd009", + "0x2500d0092f30091cd0092f300931e0070250091cd0090250092e40072f3", + "0x71401730072f419900d1cd0091450090470070071cd00900700d0072f3", + "0x93240070071cd00900700d00703203000d5a902e02b00d1cd00d2f4199", + "0x70820091cd00903400900f0070340091cd0090070260070071cd00902e", + "0x5aa00900731b00730b0091cd0090820093cf0070380091cd00902b0092e4", + "0x91cd0090070260070071cd0090320093240070071cd00900700d007007", + "0x93cf0070380091cd0090300092e400730f0091cd00930e00909a00730e", + "0x92640070071cd00900700d0070075aa00900731b00730b0091cd00930f", + "0x91cd0090070092e40070071cd00900700d00703a0095ab0071cd00d05a", + "0x3120091cd0090072630070071cd00900700d0070075ac00900731b00703b", + "0x932c00703f0091cd0093140091760073140091cd00931203a00d174007", + "0x91cd0090070092e40070400091cd00903f00904400703f0091cd00903f", + "0x70071cd00900700d00704000700d0090400091cd00904000931e007007", + "0x90070092e40070071cd00900700d00731b0095ad0071cd00d2dd009178", + "0x1cd0090072630070071cd00900700d0070075ae00900731b00731c0091cd", + "0x731e0091cd00904400917b0070440091cd00904331b00d179007043009", + "0x90070092e400731f0091cd00931e00904400731e0091cd00931e00932c", + "0x1cd00900700d00731f00700d00931f0091cd00931f00931e0070070091cd", + "0xd00732c0095b13240095b00480095af0470091cd1452e0009418007007", + "0xd04c04b00714041600704c04b00d1cd0090470090470070071cd009007", + "0x1cd0093300092e40070071cd00900700d00705004f00d5b233233000d1cd", + "0x900700d0070075b300900731b0073380091cd00933200932c007336009", + "0x741300703b0091cd00904f0092e40070071cd0090500093240070071cd", + "0x3b0091cd00903b0092e40070540091cd0090530094c30070530091cd009", + "0x470070071cd00900700d00705403b00d0090540091cd00905400931e007", + "0xd5b434a05700d1cd00d34033d00714017300734033d00d1cd009048009", + "0x34a00932c0073360091cd0090570092e40070071cd00900700d007354353", + "0x3540093240070071cd00900700d0070075b300900731b0073380091cd009", + "0x4c30073570091cd00900718500731c0091cd0093530092e40070071cd009", + "0x1cd00935f00931e00731c0091cd00931c0092e400735f0091cd009357009", + "0x36000d1cd0093240090470070071cd00900700d00735f31c00d00935f009", + "0x18300736a0091cd00936a00905300736a0091cd00936236000d184007362", + "0x92e40070071cd00900700d0073750095b536d36b00d1cd00d36a00700d", + "0x91cd0093380090440073380091cd00936d00932c0073360091cd00936b", + "0x33600d0093760091cd00937600931e0073360091cd0093360092e4007376", + "0x1cd0093780094c30073780091cd0090071820070071cd00900700d007376", + "0xd00937d0091cd00937d00931e0073750091cd0093750092e400737d009", + "0xd18100738138000d1cd00932c0090470070071cd00900700d00737d375", + "0x3830091cd0090070260070071cd00900700d0070075b60071cd00d381380", + "0x3c0093cf0070380091cd0090070092e400703c0091cd00938300900f007", + "0x90070260070071cd00900700d0070075aa00900731b00730b0091cd009", + "0x70380091cd0090070092e400706d0091cd00902d00909a00702d0091cd", + "0x90380092e400738a0091cd00930b00908c00730b0091cd00906d0093cf", + "0x900700933800738a03800d00938a0091cd00938a00931e0070380091cd", + "0x900742000700d0091cd0090070300070090091cd0090074750070071cd", + "0x1450091cd00914000d00d4260071400091cd00914000903b0071400091cd", + "0xd42600705a0091cd00905a00903b00705a00900d1cd00900900916e007", + "0x92e000903b0072e000900d1cd00900900916e0072dd0091cd00905a145", + "0x90091cd00900900903b00719b0091cd0092e02dd00d4260072e00091cd", + "0x2e400d4240072e40091cd00900716b0072e30091cd00900919b00d426007", + "0x91cd0092e800931e0072e80091cd0092e70094c30072e70091cd0092e3", + "0x95b91450095b81400095b700d0091cd2dd0090091800072e80090092e8", + "0xd1cd00900d0090500070071cd00900700d0072e00095bb2dd0095ba05a", + "0x3380070071cd00900700d0072e40095bc0071cd00d2e300917f0072e319b", + "0x14017e0070071cd00900700d0070075bd00900731b0070071cd00919b009", + "0x2e80090530070071cd0090160093380070162e82e71401cd0092e419b007", + "0x2e70091cd0092e70092e400701b0091cd0092e80090540072e80091cd009", + "0x500070071cd00900700d00701b2e700d00901b0091cd00901b00931e007", + "0x700d00702c0095be0071cd00d0a700917f0070a701e00d1cd009140009", + "0x94c30070230091cd00900741d0070071cd00901e0093380070071cd009", + "0x91cd00902800931e0070070091cd0090070092e40070280091cd009023", + "0x1401cd00902c01e00714017e0070071cd00900700d00702800700d009028", + "0x2e40072f30091cd0090290090540070071cd009026009338007029026025", + "0xd0072f302500d0092f30091cd0092f300931e0070250091cd009025009", + "0xd2f41990071404120072f419900d1cd0091450090500070071cd009007", + "0x1cd00902e0093380070071cd00900700d00703203000d5bf02e02b00d1cd", + "0x2b0092e40070820091cd00903400900f0070340091cd009007026007007", + "0xd0070075c000900731b00730b0091cd0090820093cf0070380091cd009", + "0x9a00730e0091cd0090070260070071cd0090320093380070071cd009007", + "0x1cd00930f0093cf0070380091cd0090300092e400730f0091cd00930e009", + "0x1cd00d05a0094100070071cd00900700d0070075c000900731b00730b009", + "0x31b00703b0091cd0090070092e40070071cd00900700d00703a0095c1007", + "0xd1910073120091cd0090072630070071cd00900700d0070075c2009007", + "0x1cd00903f00905300703f0091cd00931400918f0073140091cd00931203a", + "0x31e0070070091cd0090070092e40070400091cd00903f00905400703f009", + "0x2dd0094110070071cd00900700d00704000700d0090400091cd009040009", + "0x31c0091cd0090070092e40070071cd00900700d00731b0095c30071cd00d", + "0x70430091cd0090072630070071cd00900700d0070075c400900731b007", + "0x31e00905300731e0091cd00904400940e0070440091cd00904331b00d40f", + "0x70091cd0090070092e400731f0091cd00931e00905400731e0091cd009", + "0x40d0070071cd00900700d00731f00700d00931f0091cd00931f00931e007", + "0x1cd00900700d00732c0095c73240095c60480095c50470091cd1452e0009", + "0x33000d1cd00d04c04b00714019500704c04b00d1cd009047009050007007", + "0x73360091cd0093300092e40070071cd00900700d00705004f00d5c8332", + "0x70071cd00900700d0070075c900900731b0073380091cd009332009053", + "0x91cd00900740c00703b0091cd00904f0092e40070071cd009050009338", + "0x931e00703b0091cd00903b0092e40070540091cd0090530094c3007053", + "0x90480090500070071cd00900700d00705403b00d0090540091cd009054", + "0x735435300d5ca34a05700d1cd00d34033d00714041200734033d00d1cd", + "0x91cd00934a0090530073360091cd0090570092e40070071cd00900700d", + "0x71cd0093540093380070071cd00900700d0070075c900900731b007338", + "0x93570094c30073570091cd00900740b00731c0091cd0093530092e4007", + "0x935f0091cd00935f00931e00731c0091cd00931c0092e400735f0091cd", + "0x40a00736236000d1cd0093240090500070071cd00900700d00735f31c00d", + "0x36a00700d40900736a0091cd00936a00936000736a0091cd00936236000d", + "0x1cd00936b0092e40070071cd00900700d0073750095cb36d36b00d1cd00d", + "0x2e40073760091cd0093380090540073380091cd00936d009053007336009", + "0xd00737633600d0093760091cd00937600931e0073360091cd009336009", + "0x737d0091cd0093780094c30073780091cd0090071960070071cd009007", + "0x737d37500d00937d0091cd00937d00931e0073750091cd0093750092e4", + "0xd38138000d40800738138000d1cd00932c0090500070071cd00900700d", + "0x900f0073830091cd0090070260070071cd00900700d0070075cc0071cd", + "0x91cd00903c0093cf0070380091cd0090070092e400703c0091cd009383", + "0x2d0091cd0090070260070071cd00900700d0070075c000900731b00730b", + "0x6d0093cf0070380091cd0090070092e400706d0091cd00902d00909a007", + "0x380091cd0090380092e400738a0091cd00930b00908c00730b0091cd009", + "0x70071cd00900700935f00738a03800d00938a0091cd00938a00931e007", + "0x1400091cd00900742000700d0091cd0090070300070090091cd009007475", + "0x916e0071450091cd00914000d00d4260071400091cd00914000903b007", + "0x905a14500d42600705a0091cd00905a00903b00705a00900d1cd009009", + "0x2e00091cd0092e000903b0072e000900d1cd00900900916e0072dd0091cd", + "0xd4260070090091cd00900900903b00719b0091cd0092e02dd00d426007", + "0x1cd0092e32e400d4240072e40091cd00900716b0072e30091cd00900919b", + "0x90092e80091cd0092e800931e0072e80091cd0092e70094c30072e7009", + "0x95d005a0095cf1450095ce1400095cd00d0091cd2dd0090094070072e8", + "0x72e319b00d1cd00900d0093540070071cd00900700d0072e00095d12dd", + "0x919b00935f0070071cd00900700d0072e40095d20071cd00d2e3009406", + "0x2e419b0071404050070071cd00900700d0070075d300900731b0070071cd", + "0x91cd0092e80093600070071cd00901600935f0070162e82e71401cd009", + "0x931e0072e70091cd0092e70092e400701b0091cd0092e80093620072e8", + "0x91400093540070071cd00900700d00701b2e700d00901b0091cd00901b", + "0x71cd00900700d00702c0095d40071cd00d0a70094060070a701e00d1cd", + "0x1cd0090230094c30070230091cd00900741d0070071cd00901e00935f007", + "0xd0090280091cd00902800931e0070070091cd0090070092e4007028009", + "0x290260251401cd00902c01e0071404050070071cd00900700d007028007", + "0x90250092e40072f30091cd0090290093620070071cd00902600935f007", + "0x1cd00900700d0072f302500d0092f30091cd0092f300931e0070250091cd", + "0x2b00d1cd00d2f41990071404030072f419900d1cd009145009354007007", + "0x260070071cd00902e00935f0070071cd00900700d00703203000d5d502e", + "0x91cd00902b0092e40070820091cd00903400900f0070340091cd009007", + "0x1cd00900700d0070075d600900731b00730b0091cd0090820093cf007038", + "0x930e00909a00730e0091cd0090070260070071cd00903200935f007007", + "0x730b0091cd00930f0093cf0070380091cd0090300092e400730f0091cd", + "0x95d70071cd00d05a00919a0070071cd00900700d0070075d600900731b", + "0x5d800900731b00703b0091cd0090070092e40070071cd00900700d00703a", + "0x931203a00d4040073120091cd0090072630070071cd00900700d007007", + "0x703f0091cd00903f00936000703f0091cd0093140094020073140091cd", + "0x904000931e0070070091cd0090070092e40070400091cd00903f009362", + "0x71cd00d2dd00919d0070071cd00900700d00704000700d0090400091cd", + "0x731b00731c0091cd0090070092e40070071cd00900700d00731b0095d9", + "0x31b00d4000070430091cd0090072630070071cd00900700d0070075da009", + "0x91cd00931e00936000731e0091cd0090440093ff0070440091cd009043", + "0x931e0070070091cd0090070092e400731f0091cd00931e00936200731e", + "0x1452e00093fe0070071cd00900700d00731f00700d00931f0091cd00931f", + "0x3540070071cd00900700d00732c0095dd3240095dc0480095db0470091cd", + "0xd5de33233000d1cd00d04c04b0071403fd00704c04b00d1cd009047009", + "0x3320093600073360091cd0093300092e40070071cd00900700d00705004f", + "0x5000935f0070071cd00900700d0070075df00900731b0073380091cd009", + "0x4c30070530091cd0090073fc00703b0091cd00904f0092e40070071cd009", + "0x1cd00905400931e00703b0091cd00903b0092e40070540091cd009053009", + "0x33d00d1cd0090480093540070071cd00900700d00705403b00d009054009", + "0x900700d00735435300d5e034a05700d1cd00d34033d007140403007340", + "0x31b0073380091cd00934a0093600073360091cd0090570092e40070071cd", + "0x92e40070071cd00935400935f0070071cd00900700d0070075df009007", + "0x35f0091cd0093570094c30073570091cd0090073fb00731c0091cd009353", + "0x35f31c00d00935f0091cd00935f00931e00731c0091cd00931c0092e4007", + "0x36236000d3fa00736236000d1cd0093240093540070071cd00900700d007", + "0xd1cd00d36a00700d3f900736a0091cd00936a00938100736a0091cd009", + "0x73360091cd00936b0092e40070071cd00900700d0073750095e136d36b", + "0x93360092e40073760091cd0093380093620073380091cd00936d009360", + "0x1cd00900700d00737633600d0093760091cd00937600931e0073360091cd", + "0x3750092e400737d0091cd0093780094c30073780091cd0090073f8007007", + "0x900700d00737d37500d00937d0091cd00937d00931e0073750091cd009", + "0x5e20071cd00d38138000d3f700738138000d1cd00932c0093540070071cd", + "0x1cd00938300900f0073830091cd0090070260070071cd00900700d007007", + "0x31b00730b0091cd00903c0093cf0070380091cd0090070092e400703c009", + "0x909a00702d0091cd0090070260070071cd00900700d0070075d6009007", + "0x91cd00906d0093cf0070380091cd0090070092e400706d0091cd00902d", + "0x931e0070380091cd0090380092e400738a0091cd00930b00908c00730b", + "0x90074750070071cd00900700938000738a03800d00938a0091cd00938a", + "0x903b0071400091cd00900742000700d0091cd0090070300070090091cd", + "0x1cd00900900916e0071450091cd00914000d00d4260071400091cd009140", + "0x2dd0091cd00905a14500d42600705a0091cd00905a00903b00705a00900d", + "0xd4260072e00091cd0092e000903b0072e000900d1cd00900900916e007", + "0x900919b00d4260070090091cd00900900903b00719b0091cd0092e02dd", + "0x72e70091cd0092e32e400d4240072e40091cd00900716b0072e30091cd", + "0xa20072e80090092e80091cd0092e800931e0072e80091cd0092e70094c3", + "0x95e72dd0095e605a0095e51450095e41400095e300d0091cd2dd009009", + "0x2e30090710072e319b00d1cd00900d0093780070071cd00900700d0072e0", + "0x70071cd00919b0093800070071cd00900700d0072e40095e80071cd00d", + "0x1401cd0092e419b0071403f60070071cd00900700d0070075e900900731b", + "0x3830072e80091cd0092e80093810070071cd0090160093800070162e82e7", + "0x1cd00901b00931e0072e70091cd0092e70092e400701b0091cd0092e8009", + "0x1e00d1cd0091400093780070071cd00900700d00701b2e700d00901b009", + "0x93800070071cd00900700d00702c0095ea0071cd00d0a70090710070a7", + "0x70280091cd0090230094c30070230091cd00900741d0070071cd00901e", + "0x702800700d0090280091cd00902800931e0070070091cd0090070092e4", + "0x93800070290260251401cd00902c01e0071403f60070071cd00900700d", + "0x250091cd0090250092e40072f30091cd0090290093830070071cd009026", + "0x3780070071cd00900700d0072f302500d0092f30091cd0092f300931e007", + "0xd5eb02e02b00d1cd00d2f41990071401a70072f419900d1cd009145009", + "0x1cd0090070260070071cd00902e0093800070071cd00900700d007032030", + "0x3cf0070380091cd00902b0092e40070820091cd00903400900f007034009", + "0x3800070071cd00900700d0070075ec00900731b00730b0091cd009082009", + "0x30f0091cd00930e00909a00730e0091cd0090070260070071cd009032009", + "0x900731b00730b0091cd00930f0093cf0070380091cd0090300092e4007", + "0xd00703a0095ed0071cd00d05a0091a90070071cd00900700d0070075ec", + "0xd0070075ee00900731b00703b0091cd0090070092e40070071cd009007", + "0x3140091cd00931203a00d1aa0073120091cd0090072630070071cd009007", + "0x3f00938300703f0091cd00903f00938100703f0091cd0093140091ac007", + "0x400091cd00904000931e0070070091cd0090070092e40070400091cd009", + "0x31b0095ef0071cd00d2dd0093f40070071cd00900700d00704000700d009", + "0x75f000900731b00731c0091cd0090070092e40070071cd00900700d007", + "0x1cd00904331b00d3f00070430091cd0090072630070071cd00900700d007", + "0x38300731e0091cd00931e00938100731e0091cd0090440093ed007044009", + "0x1cd00931f00931e0070070091cd0090070092e400731f0091cd00931e009", + "0x470091cd1452e00091b00070071cd00900700d00731f00700d00931f009", + "0x90470093780070071cd00900700d00732c0095f33240095f20480095f1", + "0x705004f00d5f433233000d1cd00d04c04b0071403e600704c04b00d1cd", + "0x91cd0093320093810073360091cd0093300092e40070071cd00900700d", + "0x71cd0090500093800070071cd00900700d0070075f500900731b007338", + "0x90530094c30070530091cd0090071b200703b0091cd00904f0092e4007", + "0x90540091cd00905400931e00703b0091cd00903b0092e40070540091cd", + "0x1a700734033d00d1cd0090480093780070071cd00900700d00705403b00d", + "0x70071cd00900700d00735435300d5f634a05700d1cd00d34033d007140", + "0x5f500900731b0073380091cd00934a0093810073360091cd0090570092e4", + "0x1cd0093530092e40070071cd0093540093800070071cd00900700d007007", + "0x92e400735f0091cd0093570094c30073570091cd0090073e300731c009", + "0x700d00735f31c00d00935f0091cd00935f00931e00731c0091cd00931c", + "0x91cd00936236000d1b500736236000d1cd0093240093780070071cd009", + "0x5f736d36b00d1cd00d36a00700d3e100736a0091cd00936a00907400736a", + "0x36d0093810073360091cd00936b0092e40070071cd00900700d007375009", + "0x3360091cd0093360092e40073760091cd0093380093830073380091cd009", + "0x3df0070071cd00900700d00737633600d0093760091cd00937600931e007", + "0x91cd0093750092e400737d0091cd0093780094c30073780091cd009007", + "0x70071cd00900700d00737d37500d00937d0091cd00937d00931e007375", + "0xd0070075f80071cd00d38138000d3dc00738138000d1cd00932c009378", + "0x703c0091cd00938300900f0073830091cd0090070260070071cd009007", + "0x5ec00900731b00730b0091cd00903c0093cf0070380091cd0090070092e4", + "0x1cd00902d00909a00702d0091cd0090070260070071cd00900700d007007", + "0x8c00730b0091cd00906d0093cf0070380091cd0090070092e400706d009", + "0x1cd00938a00931e0070380091cd0090380092e400738a0091cd00930b009", + "0x90091cd0090074750070071cd00900700907200738a03800d00938a009", + "0x1cd00914000903b0071400091cd00900742000700d0091cd009007030007", + "0x5a00900d1cd00900900916e0071450091cd00914000d00d426007140009", + "0x916e0072dd0091cd00905a14500d42600705a0091cd00905a00903b007", + "0x92e02dd00d4260072e00091cd0092e000903b0072e000900d1cd009009", + "0x2e30091cd00900919b00d4260070090091cd00900900903b00719b0091cd", + "0x2e70094c30072e70091cd0092e32e400d4240072e40091cd00900716b007", + "0x2dd0090093d90072e80090092e80091cd0092e800931e0072e80091cd009", + "0xd0072e00095fd2dd0095fc05a0095fb1450095fa1400095f900d0091cd", + "0x71cd00d2e30093d60072e319b00d1cd00900d00938f0070071cd009007", + "0x900731b0070071cd00919b0090720070071cd00900700d0072e40095fe", + "0x162e82e71401cd0092e419b0071401bc0070071cd00900700d0070075ff", + "0x92e80090790072e80091cd0092e80090740070071cd009016009072007", + "0x901b0091cd00901b00931e0072e70091cd0092e70092e400701b0091cd", + "0x3d60070a701e00d1cd00914000938f0070071cd00900700d00701b2e700d", + "0x1cd00901e0090720070071cd00900700d00702c0096000071cd00d0a7009", + "0x70092e40070280091cd0090230094c30070230091cd00900741d007007", + "0x900700d00702800700d0090280091cd00902800931e0070070091cd009", + "0x1cd0090260090720070290260251401cd00902c01e0071401bc0070071cd", + "0x931e0070250091cd0090250092e40072f30091cd009029009079007007", + "0x914500938f0070071cd00900700d0072f302500d0092f30091cd0092f3", + "0x703203000d60102e02b00d1cd00d2f41990071403d30072f419900d1cd", + "0x70340091cd0090070260070071cd00902e0090720070071cd00900700d", + "0x90820093cf0070380091cd00902b0092e40070820091cd00903400900f", + "0x90320090720070071cd00900700d00700760200900731b00730b0091cd", + "0x92e400730f0091cd00930e00909a00730e0091cd0090070260070071cd", + "0x91cd00930b00908c00730b0091cd00930f0093cf0070380091cd009030", + "0x3800d00903a0091cd00903a00931e0070380091cd0090380092e400703a", + "0x700d00703b0096030071cd00d05a0091bf0070071cd00900700d00703a", + "0x2e40073140091cd0093120094c30073120091cd0090073d10070071cd009", + "0xd00731400700d0093140091cd00931400931e0070070091cd009007009", + "0x400091cd00903f03b00d1c200703f0091cd0090072630070071cd009007", + "0x31b00907900731b0091cd00931b00907400731b0091cd0090400093ce007", + "0x31c0091cd00931c00931e0070070091cd0090070092e400731c0091cd009", + "0x430096040071cd00d2dd0091c50070071cd00900700d00731c00700d009", + "0x91cd0090440094c30070440091cd0090073cb0070071cd00900700d007", + "0x700d00931e0091cd00931e00931e0070070091cd0090070092e400731e", + "0x931f04300d3c900731f0091cd0090072630070071cd00900700d00731e", + "0x70480091cd0090480090740070480091cd0090470093c70070470091cd", + "0x932400931e0070070091cd0090070092e40073240091cd009048009079", + "0x91cd0090070092e40070071cd00900700d00732400700d0093240091cd", + "0x904b32c00d1cd0092e000700d1cb0072e00091cd0092e00093c4007007", + "0x700d00705a0096061450096051400091cd14000d0093c100704b32c00d", + "0x91cd0092e00090740072e02dd00d1cd00914000700d3b90070071cd009", + "0x92e70072dd0091cd0092dd0092e400719b0091cd0092e00090790072e0", + "0xd00719b0092dd14000919b0091cd00919b00931e0070090091cd009009", + "0xd0072e70096082e40096072e30091cd1401450093b70070071cd009007", + "0xd1cd0092e80091d00070162e800d1cd0092e30091900070071cd009007", + "0x1451cd0090a701b00914039200702c0a700d1cd0090160091d000701e01b", + "0x3920070071cd0090260090720070071cd009025009072007026025028023", + "0x720070071cd0091990090720072f41992f30291451cd00902c01e023140", + "0x1cd00902b0090fe00702b0091cd0092f302800d3b60070071cd0092f4009", + "0x2e70070070091cd0090070092e400702e0091cd00902b00910000702b009", + "0x702e02900714000902e0091cd00902e00931e0070290091cd009029009", + "0x1cd0090300091d000703203000d1cd0092e40091900070071cd00900700d", + "0x1cd00903803400914039200730b03800d1cd0090320091d000708203400d", + "0x70071cd00903a0090720070071cd00930f00907200703b03a30f30e145", + "0x70071cd00931400907200704003f3143121451cd00930b08230e140392", + "0x931b0090fe00731b0091cd00904003b00d3b60070071cd00903f009072", + "0x70070091cd0090070092e400731c0091cd00931b00910000731b0091cd", + "0x31c31200714000931c0091cd00931c00931e0073120091cd0093120092e7", + "0x90430091d000704404300d1cd0092e70091900070071cd00900700d007", + "0x904731e00914039200704804700d1cd0090440091d000731f31e00d1cd", + "0x71cd00904c0090720070071cd00932c00907200704c04b32c3241451cd", + "0x71cd00933200907200705004f3323301451cd00904831f324140392007", + "0x3360090fe0073360091cd00904f04b00d3b60070071cd009050009072007", + "0x70091cd0090070092e40073380091cd0093360091000073360091cd009", + "0x3300071400093380091cd00933800931e0073300091cd0093300092e7007", + "0x905a0093b40070070091cd0090070092e40070071cd00900700d007338", + "0x91cd0090530092e400705405300d1cd00905a00700d1ce00705a0091cd", + "0x531400090540091cd00905400931e0070090091cd0090090092e7007053", + "0x60c05a00960b14500960a14000960900d0091cd2dd0090091cf007054009", + "0x2e319b00d1cd00900d0091d40070071cd00900700d0072e000960d2dd009", + "0x19b0093b20070071cd00900700d0072e400960e0071cd00d2e30093b8007", + "0x2e40072e80091cd0092e70094c30072e70091cd00900741d0070071cd009", + "0xd0072e800700d0092e80091cd0092e800931e0070070091cd009007009", + "0x19b0091cd00919b0091290070070091cd0090070092e40070071cd009007", + "0x701b01600d1cd0092e419b0071401d30072e40091cd0092e40091d2007", + "0x1e0093a40070071cd00900700d0070a700960f01e0091cd00d01b0093a5", + "0x71cd0090280093b200702802300d1cd00902c0091d400702c0091cd009", + "0x160092e40070250091cd0090230094540070230091cd009023009129007", + "0x900700d00702501600d0090250091cd00902500931e0070160091cd009", + "0x31e0070160091cd0090160092e40070260091cd0090a70094c30070071cd", + "0x1400091d40070071cd00900700d00702601600d0090260091cd009026009", + "0x1cd00900700d0071990096100071cd00d2f30093b80072f302900d1cd009", + "0x92f40094c30072f40091cd00900741d0070071cd0090290093b2007007", + "0x902b0091cd00902b00931e0070070091cd0090070092e400702b0091cd", + "0x91290070070091cd0090070092e40070071cd00900700d00702b00700d", + "0x91990290071401d30071990091cd0091990091d20070290091cd009029", + "0x1cd00900700d0070340096110320091cd00d0300093a500703002e00d1cd", + "0x3b200730b03800d1cd0090820091d40070820091cd0090320093a4007007", + "0x91cd00930b00945400730b0091cd00930b0091290070071cd009038009", + "0x2e00d00930e0091cd00930e00931e00702e0091cd00902e0092e400730e", + "0x902e0092e400730f0091cd0090340094c30070071cd00900700d00730e", + "0x1cd00900700d00730f02e00d00930f0091cd00930f00931e00702e0091cd", + "0x31200d1cd00d03b03a0071401d500703b03a00d1cd0091450091d4007007", + "0x260070071cd0093140093240070071cd00900700d00704003f00d612314", + "0x91cd0093120092e400731c0091cd00931b00900f00731b0091cd009007", + "0x1cd00900700d00700761300900731b0070440091cd00931c0093cf007043", + "0x931e00909a00731e0091cd0090070260070071cd009040009324007007", + "0x70440091cd00931f0093cf0070430091cd00903f0092e400731f0091cd", + "0x904700931e0070430091cd0090430092e40070470091cd00904400908c", + "0x71cd00d05a0091d70070071cd00900700d00704704300d0090470091cd", + "0x3240094c30073240091cd0090073a10070071cd00900700d007048009614", + "0x32c0091cd00932c00931e0070070091cd0090070092e400732c0091cd009", + "0xd39f00704b0091cd0090072630070071cd00900700d00732c00700d009", + "0x1cd0093300091290073300091cd00904c00927000704c0091cd00904b048", + "0x31e0070070091cd0090070092e40073320091cd009330009454007330009", + "0x2dd00939c0070071cd00900700d00733200700d0093320091cd009332009", + "0x70500091cd00900739b0070071cd00900700d00704f0096150071cd00d", + "0x933600931e0070070091cd0090070092e40073360091cd0090500094c3", + "0x3380091cd0090072630070071cd00900700d00733600700d0093360091cd", + "0x91290070540091cd0090530091db0070530091cd00933804f00d1d9007", + "0x91cd0090070092e400733d0091cd0090540094540070540091cd009054", + "0x70071cd00900700d00733d00700d00933d0091cd00933d00931e007007", + "0x2e000700d3980072e00091cd0092e00093990070070091cd0090070092e4", + "0x14000961600d0091cd2dd00900927200705734000d00905734000d1cd009", + "0x3970070071cd00900700d0072e000961a2dd00961905a009618145009617", + "0x700d0072e400961b0071cd00d2e30093960072e319b00d1cd00900d009", + "0x94c30072e70091cd00900741d0070071cd00919b0091dd0070071cd009", + "0x91cd0092e800931e0070070091cd0090070092e40072e80091cd0092e7", + "0x70070091cd0090070092e40070071cd00900700d0072e800700d0092e8", + "0x19b0071403940072e40091cd0092e40091df00719b0091cd00919b009132", + "0x700d0070a700961c01e0091cd00d01b00939300701b01600d1cd0092e4", + "0x2802300d1cd00902c00939700702c0091cd00901e0092740070071cd009", + "0x90230094530070230091cd0090230091320070071cd0090280091dd007", + "0x90250091cd00902500931e0070160091cd0090160092e40070250091cd", + "0x92e40070260091cd0090a70094c30070071cd00900700d00702501600d", + "0x700d00702601600d0090260091cd00902600931e0070160091cd009016", + "0x61d0071cd00d2f30093960072f302900d1cd0091400093970070071cd009", + "0x1cd00900741d0070071cd0090290091dd0070071cd00900700d007199009", + "0x31e0070070091cd0090070092e400702b0091cd0092f40094c30072f4009", + "0x70092e40070071cd00900700d00702b00700d00902b0091cd00902b009", + "0x1990091cd0091990091df0070290091cd0090290091320070070091cd009", + "0x61e0320091cd00d03000939300703002e00d1cd009199029007140394007", + "0x820093970070820091cd0090320092740070071cd00900700d007034009", + "0x30b0091cd00930b0091320070071cd0090380091dd00730b03800d1cd009", + "0x30e00931e00702e0091cd00902e0092e400730e0091cd00930b009453007", + "0x1cd0090340094c30070071cd00900700d00730e02e00d00930e0091cd009", + "0xd00930f0091cd00930f00931e00702e0091cd00902e0092e400730f009", + "0x14039100703b03a00d1cd0091450093970070071cd00900700d00730f02e", + "0x3380070071cd00900700d00704003f00d61f31431200d1cd00d03b03a007", + "0x31c0091cd00931b00900f00731b0091cd0090070260070071cd009314009", + "0x900731b0070440091cd00931c0093cf0070430091cd0093120092e4007", + "0x1cd0090070260070071cd0090400093380070071cd00900700d007007620", + "0x3cf0070430091cd00903f0092e400731f0091cd00931e00909a00731e009", + "0x1cd0090430092e40070470091cd00904400908c0070440091cd00931f009", + "0x71cd00900700d00704704300d0090470091cd00904700931e007043009", + "0x90071e10070071cd00900700d0070480096210071cd00d05a009390007", + "0x70070091cd0090070092e400732c0091cd0093240094c30073240091cd", + "0x72630070071cd00900700d00732c00700d00932c0091cd00932c00931e", + "0x91cd00904c00938d00704c0091cd00904b04800d1e300704b0091cd009", + "0x92e40073320091cd0093300094530073300091cd009330009132007330", + "0x700d00733200700d0093320091cd00933200931e0070070091cd009007", + "0x70071cd00900700d00704f0096220071cd00d2dd00938b0070071cd009", + "0x1cd0090070092e40073360091cd0090500094c30070500091cd009007276", + "0x71cd00900700d00733600700d0093360091cd00933600931e007007009", + "0x530093880070530091cd00933804f00d3890073380091cd009007263007", + "0x33d0091cd0090540094530070540091cd0090540091320070540091cd009", + "0x33d00700d00933d0091cd00933d00931e0070070091cd0090070092e4007", + "0x1cd0092e00091e50070070091cd0090070092e40070071cd00900700d007", + "0x900938600705734000d00905734000d1cd0092e000700d1e70072e0009", + "0x72e00096272dd00962605a00962514500962414000962300d0091cd2dd", + "0x1cd00d2e30092780072e319b00d1cd00900d0093850070071cd00900700d", + "0x741d0070071cd00919b00927b0070071cd00900700d0072e4009628007", + "0x70091cd0090070092e40072e80091cd0092e70094c30072e70091cd009", + "0x2e40070071cd00900700d0072e800700d0092e80091cd0092e800931e007", + "0x1cd0092e400927a00719b0091cd00919b0091360070070091cd009007009", + "0x91cd00d01b00937e00701b01600d1cd0092e419b00714037f0072e4009", + "0x38500702c0091cd00901e0091ee0070071cd00900700d0070a700962901e", + "0x1cd0090230091360070071cd00902800927b00702802300d1cd00902c009", + "0x31e0070160091cd0090160092e40070250091cd009023009138007023009", + "0xa70094c30070071cd00900700d00702501600d0090250091cd009025009", + "0x260091cd00902600931e0070160091cd0090160092e40070260091cd009", + "0x72f302900d1cd0091400093850070071cd00900700d00702601600d009", + "0x902900927b0070071cd00900700d00719900962a0071cd00d2f3009278", + "0x92e400702b0091cd0092f40094c30072f40091cd00900741d0070071cd", + "0x700d00702b00700d00902b0091cd00902b00931e0070070091cd009007", + "0x70290091cd0090290091360070070091cd0090070092e40070071cd009", + "0x37e00703002e00d1cd00919902900714037f0071990091cd00919900927a", + "0x90320091ee0070071cd00900700d00703400962b0320091cd00d030009", + "0x70071cd00903800927b00730b03800d1cd0090820093850070820091cd", + "0x902e0092e400730e0091cd00930b00913800730b0091cd00930b009136", + "0x1cd00900700d00730e02e00d00930e0091cd00930e00931e00702e0091cd", + "0x931e00702e0091cd00902e0092e400730f0091cd0090340094c3007007", + "0x91450093850070071cd00900700d00730f02e00d00930f0091cd00930f", + "0x704003f00d62c31431200d1cd00d03b03a00714023300703b03a00d1cd", + "0x731b0091cd0090070260070071cd00931400935f0070071cd00900700d", + "0x931c0093cf0070430091cd0093120092e400731c0091cd00931b00900f", + "0x904000935f0070071cd00900700d00700762d00900731b0070440091cd", + "0x92e400731f0091cd00931e00909a00731e0091cd0090070260070071cd", + "0x91cd00904400908c0070440091cd00931f0093cf0070430091cd00903f", + "0x4300d0090470091cd00904700931e0070430091cd0090430092e4007047", + "0x700d00704800962e0071cd00d05a0093730070071cd00900700d007047", + "0x2e400732c0091cd0093240094c30073240091cd0090073720070071cd009", + "0xd00732c00700d00932c0091cd00932c00931e0070070091cd009007009", + "0x4c0091cd00904b04800d52000704b0091cd0090072630070071cd009007", + "0x3300091380073300091cd0093300091360073300091cd00904c0091f1007", + "0x3320091cd00933200931e0070070091cd0090070092e40073320091cd009", + "0x4f00962f0071cd00d2dd0092360070071cd00900700d00733200700d009", + "0x91cd0090500094c30070500091cd0090073680070071cd00900700d007", + "0x700d0093360091cd00933600931e0070070091cd0090070092e4007336", + "0x933804f00d3670073380091cd0090072630070071cd00900700d007336", + "0x70540091cd0090540091360070540091cd00905300902a0070530091cd", + "0x933d00931e0070070091cd0090070092e400733d0091cd009054009138", + "0x91cd0090070092e40070071cd00900700d00733d00700d00933d0091cd", + "0x905734000d1cd0092e000700d2390072e00091cd0092e00091f4007007", + "0x5a00963214500963114000963000d0091cd2dd00900935d00705734000d", + "0x19b00d1cd00900d00935c0070071cd00900700d0072e00096342dd009633", + "0x91f70070071cd00900700d0072e40096350071cd00d2e30095230072e3", + "0x72e80091cd0092e70094c30072e70091cd00900741d0070071cd00919b", + "0x72e800700d0092e80091cd0092e800931e0070070091cd0090070092e4", + "0x91cd00919b0094500070070091cd0090070092e40070071cd00900700d", + "0x1b01600d1cd0092e419b0071403500072e40091cd0092e400923c00719b", + "0x91f80070071cd00900700d0070a700963601e0091cd00d01b00934d007", + "0x1cd0090280091f700702802300d1cd00902c00935c00702c0091cd00901e", + "0x92e40070250091cd00902300908e0070230091cd009023009450007007", + "0x700d00702501600d0090250091cd00902500931e0070160091cd009016", + "0x70160091cd0090160092e40070260091cd0090a70094c30070071cd009", + "0x935c0070071cd00900700d00702601600d0090260091cd00902600931e", + "0x900700d0071990096370071cd00d2f30095230072f302900d1cd009140", + "0x2f40094c30072f40091cd00900741d0070071cd0090290091f70070071cd", + "0x2b0091cd00902b00931e0070070091cd0090070092e400702b0091cd009", + "0x4500070070091cd0090070092e40070071cd00900700d00702b00700d009", + "0x1990290071403500071990091cd00919900923c0070290091cd009029009", + "0x900700d0070340096380320091cd00d03000934d00703002e00d1cd009", + "0x730b03800d1cd00908200935c0070820091cd0090320091f80070071cd", + "0x1cd00930b00908e00730b0091cd00930b0094500070071cd0090380091f7", + "0xd00930e0091cd00930e00931e00702e0091cd00902e0092e400730e009", + "0x2e0092e400730f0091cd0090340094c30070071cd00900700d00730e02e", + "0x900700d00730f02e00d00930f0091cd00930f00931e00702e0091cd009", + "0xd1cd00d03b03a00714034f00703b03a00d1cd00914500935c0070071cd", + "0x70071cd0093140093800070071cd00900700d00704003f00d639314312", + "0x1cd0093120092e400731c0091cd00931b00900f00731b0091cd009007026", + "0x900700d00700763a00900731b0070440091cd00931c0093cf007043009", + "0x31e00909a00731e0091cd0090070260070071cd0090400093800070071cd", + "0x440091cd00931f0093cf0070430091cd00903f0092e400731f0091cd009", + "0x4700931e0070430091cd0090430092e40070470091cd00904400908c007", + "0x1cd00d05a0095270070071cd00900700d00704704300d0090470091cd009", + "0x94c30073240091cd0090071fb0070071cd00900700d00704800963b007", + "0x91cd00932c00931e0070070091cd0090070092e400732c0091cd009324", + "0x23f00704b0091cd0090072630070071cd00900700d00732c00700d00932c", + "0x93300094500073300091cd00904c00934700704c0091cd00904b04800d", + "0x70070091cd0090070092e40073320091cd00933000908e0073300091cd", + "0x93450070071cd00900700d00733200700d0093320091cd00933200931e", + "0x500091cd0090073430070071cd00900700d00704f00963c0071cd00d2dd", + "0x33600931e0070070091cd0090070092e40073360091cd0090500094c3007", + "0x91cd0090072630070071cd00900700d00733600700d0093360091cd009", + "0x4500070540091cd0090530092020070530091cd00933804f00d200007338", + "0x1cd0090070092e400733d0091cd00905400908e0070540091cd009054009", + "0x71cd00900700d00733d00700d00933d0091cd00933d00931e007007009", + "0x700d2410072e00091cd0092e00093410070070091cd0090070092e4007", + "0x963d00d0091cd2dd00900933e00705734000d00905734000d1cd0092e0", + "0x70071cd00900700d0072e00096412dd00964005a00963f14500963e140", + "0xd0072e40096420071cd00d2e30092080072e319b00d1cd00900d009207", + "0x4c30072e70091cd00900741d0070071cd00919b0092440070071cd009007", + "0x1cd0092e800931e0070070091cd0090070092e40072e80091cd0092e7009", + "0x70091cd0090070092e40070071cd00900700d0072e800700d0092e8009", + "0x71402430072e40091cd0092e400920900719b0091cd00919b00913b007", + "0xd0070a700964301e0091cd00d01b00920b00701b01600d1cd0092e419b", + "0x2300d1cd00902c00920700702c0091cd00901e0093230070071cd009007", + "0x2300913a0070230091cd00902300913b0070071cd009028009244007028", + "0x250091cd00902500931e0070160091cd0090160092e40070250091cd009", + "0x2e40070260091cd0090a70094c30070071cd00900700d00702501600d009", + "0xd00702601600d0090260091cd00902600931e0070160091cd009016009", + "0x71cd00d2f30092080072f302900d1cd0091400092070070071cd009007", + "0x900741d0070071cd0090290092440070071cd00900700d007199009644", + "0x70070091cd0090070092e400702b0091cd0092f40094c30072f40091cd", + "0x92e40070071cd00900700d00702b00700d00902b0091cd00902b00931e", + "0x91cd0091990092090070290091cd00902900913b0070070091cd009007", + "0x320091cd00d03000920b00703002e00d1cd009199029007140243007199", + "0x92070070820091cd0090320093230070071cd00900700d007034009645", + "0x91cd00930b00913b0070071cd00903800924400730b03800d1cd009082", + "0x931e00702e0091cd00902e0092e400730e0091cd00930b00913a00730b", + "0x90340094c30070071cd00900700d00730e02e00d00930e0091cd00930e", + "0x930f0091cd00930f00931e00702e0091cd00902e0092e400730f0091cd", + "0x20e00703b03a00d1cd0091450092070070071cd00900700d00730f02e00d", + "0x70071cd00900700d00704003f00d64631431200d1cd00d03b03a007140", + "0x91cd00931b00900f00731b0091cd0090070260070071cd009314009072", + "0x731b0070440091cd00931c0093cf0070430091cd0093120092e400731c", + "0x90070260070071cd0090400090720070071cd00900700d007007647009", + "0x70430091cd00903f0092e400731f0091cd00931e00909a00731e0091cd", + "0x90430092e40070470091cd00904400908c0070440091cd00931f0093cf", + "0x1cd00900700d00704704300d0090470091cd00904700931e0070430091cd", + "0x72100070071cd00900700d0070480096480071cd00d05a009322007007", + "0x70091cd0090070092e400732c0091cd0093240094c30073240091cd009", + "0x2630070071cd00900700d00732c00700d00932c0091cd00932c00931e007", + "0x1cd00904c00932000704c0091cd00904b04800d21200704b0091cd009007", + "0x2e40073320091cd00933000913a0073300091cd00933000913b007330009", + "0xd00733200700d0093320091cd00933200931e0070070091cd009007009", + "0x71cd00900700d00704f0096490071cd00d2dd00924e0070071cd009007", + "0x90070092e40073360091cd0090500094c30070500091cd00900724f007", + "0x1cd00900700d00733600700d0093360091cd00933600931e0070070091cd", + "0x931d0070530091cd00933804f00d2150073380091cd009007263007007", + "0x91cd00905400913a0070540091cd00905400913b0070540091cd009053", + "0x700d00933d0091cd00933d00931e0070070091cd0090070092e400733d", + "0x92e000952d0070070091cd0090070092e40070071cd00900700d00733d", + "0x925100705734000d00905734000d1cd0092e000700d2170072e00091cd", + "0x42000700d0091cd0090070300070090091cd0090074750070071cd009007", + "0x1cd00914000d00d4260071400091cd00914000903b0071400091cd009007", + "0x705a0091cd00905a00903b00705a00900d1cd00900900916e007145009", + "0x903b0072e000900d1cd00900900916e0072dd0091cd00905a14500d426", + "0x1cd00900900903b00719b0091cd0092e02dd00d4260072e00091cd0092e0", + "0x4240072e40091cd00900716b0072e30091cd00900919b00d426007009009", + "0x92e800931e0072e80091cd0092e70094c30072e70091cd0092e32e400d", + "0x90091cd0090074750070071cd0090070090d10072e80090092e80091cd", + "0x1cd00914000903b0071400091cd00900742000700d0091cd009007030007", + "0x5a00900d1cd00900900916e0071450091cd00914000d00d426007140009", + "0x916e0072dd0091cd00905a14500d42600705a0091cd00905a00903b007", + "0x92e02dd00d4260072e00091cd0092e000903b0072e000900d1cd009009", + "0x2e30091cd00900919b00d4260070090091cd00900900903b00719b0091cd", + "0x2e70094c30072e70091cd0092e32e400d4240072e40091cd00900716b007", + "0xa70090092540072e80090092e80091cd0092e800931e0072e80091cd009", + "0x964f2e000964e2dd00964d05a00964c14500964b14000964a00d0091cd", + "0x65601b0096550160096542e80096532e70096522e40096512e300965019b", + "0x1cd00900d0093150070071cd00900700d00702c0096580a700965701e009", + "0x2e40070280091cd0090230090930070230091cd00902300903b007023009", + "0xd00702800700d0090280091cd00902800931e0070070091cd009007009", + "0x250091cd00902500903b0070250091cd0091400093130070071cd009007", + "0x2600931e0070070091cd0090070092e40070260091cd009025009093007", + "0x1cd00914500921a0070071cd00900700d00702600700d0090260091cd009", + "0x2e40072f30091cd0090290090930070290091cd00902900903b007029009", + "0xd0072f300700d0092f30091cd0092f300931e0070070091cd009007009", + "0x1990091cd00919900903b0071990091cd00905a0092180070071cd009007", + "0x2f400931e0070070091cd0090070092e40072f40091cd009199009093007", + "0x1cd0092dd00921c0070071cd00900700d0072f400700d0092f40091cd009", + "0x2e400702e0091cd00902b00909300702b0091cd00902b00903b00702b009", + "0xd00702e00700d00902e0091cd00902e00931e0070070091cd009007009", + "0x300091cd00903000903b0070300091cd0092e00092580070071cd009007", + "0x3200931e0070070091cd0090070092e40070320091cd009030009093007", + "0x1cd00919b0092570070071cd00900700d00703200700d0090320091cd009", + "0x2e40070820091cd0090340090930070340091cd00903400903b007034009", + "0xd00708200700d0090820091cd00908200931e0070070091cd009007009", + "0x380091cd00903800903b0070380091cd0092e30093110070071cd009007", + "0x30b00931e0070070091cd0090070092e400730b0091cd009038009093007", + "0x1cd0092e40093100070071cd00900700d00730b00700d00930b0091cd009", + "0x2e400730f0091cd00930e00909300730e0091cd00930e00903b00730e009", + "0xd00730f00700d00930f0091cd00930f00931e0070070091cd009007009", + "0x3a0091cd00903a00903b00703a0091cd0092e700921d0070071cd009007", + "0x3b00931e0070070091cd0090070092e400703b0091cd00903a009093007", + "0x1cd0092e800925b0070071cd00900700d00703b00700d00903b0091cd009", + "0x2e40073140091cd0093120090930073120091cd00931200903b007312009", + "0xd00731400700d0093140091cd00931400931e0070070091cd009007009", + "0x3f0091cd0090160090930070160091cd00901600903b0070071cd009007", + "0x3f00700d00903f0091cd00903f00931e0070070091cd0090070092e4007", + "0x1cd00900725a00731b04000d1cd00901b0091d00070071cd00900700d007", + "0x431401cd00931c04000714030a00731c0091cd00931c00930d00731c009", + "0x14025e00731f0091cd00931f00921f00731f0091cd00900721e00731e044", + "0x32400d22000732c0091cd00900725d0073240480471401cd00931f31b043", + "0x1cd00904404b00d26500704b0091cd00904b00930700704b0091cd00932c", + "0x1453030073320091cd0090072230073300091cd00904800917d00704c009", + "0x4f00919e00704f0091cd00904f00909f00704f0091cd00933233004c31e", + "0x500091cd00905000931e0070470091cd0090470092e40070500091cd009", + "0x3b0073360091cd00901e0092280070071cd00900700d00705004700d009", + "0x1cd0090070092e40073380091cd0093360090930073360091cd009336009", + "0x71cd00900700d00733800700d0093380091cd00933800931e007007009", + "0x530090930070530091cd00905300903b0070530091cd0090a7009226007", + "0x540091cd00905400931e0070070091cd0090070092e40070540091cd009", + "0x3b00733d0091cd00902c0092270070071cd00900700d00705400700d009", + "0x1cd0090070092e40073400091cd00933d00909300733d0091cd00933d009", + "0x1cd01b00900922a00734000700d0093400091cd00934000931e007007009", + "0x19b00965e2e000965d2dd00965c05a00965b14500965a14000965900d009", + "0x966501b0096640160096632e80096622e70096612e40096602e300965f", + "0x2300966602c0a700d1cd00d00d00700d3020070071cd00900700d00701e", + "0x1cd0090a70092e40070280091cd00902c0093010070071cd00900700d007", + "0x900700d00700766700900731b0070260091cd009028009300007025009", + "0x92e40072f30091cd0090290092ff0070290091cd0090070260070071cd", + "0x91cd0090260092fd0070260091cd0092f30093000070250091cd009023", + "0x2500d0091990091cd00919900931e0070250091cd0090250092e4007199", + "0x2e00966802b2f400d1cd00d14000700d2fb0070071cd00900700d007199", + "0x1cd0092f40092e40070300091cd00902b0092fa0070071cd00900700d007", + "0x900700d00700766900900731b0070340091cd009030009530007032009", + "0x92e40070380091cd0090820091190070820091cd0090070260070071cd", + "0x91cd00903400922c0070340091cd0090380095300070320091cd00902e", + "0x3200d00930b0091cd00930b00931e0070320091cd0090320092e400730b", + "0x3a00966a30f30e00d1cd00d14500700d5310070071cd00900700d00730b", + "0x1cd00930e0092e400703b0091cd00930f0092690070071cd00900700d007", + "0x900700d00700766b00900731b0073140091cd00903b009268007312009", + "0x92e40070400091cd00903f00923000703f0091cd0090070260070071cd", + "0x91cd0093140092310073140091cd0090400092680073120091cd00903a", + "0x31200d00931b0091cd00931b00931e0073120091cd0093120092e400731b", + "0x4400966c04331c00d1cd00d05a00700d26c0070071cd00900700d00731b", + "0x1cd00931c0092e400731e0091cd00904300926b0070071cd00900700d007", + "0x900700d00700766d00900731b0070470091cd00931e00926e00731f009", + "0x92e40073240091cd00904800927e0070480091cd0090070260070071cd", + "0x91cd00904700927d0070470091cd00932400926e00731f0091cd009044", + "0x31f00d00932c0091cd00932c00931e00731f0091cd00931f0092e400732c", + "0x33014066e04c04b00d1cd00d2dd00700d2810070071cd00900700d00732c", + "0x4b0092e40070500091cd00904c0092800070071cd00900700d00704f332", + "0xd00700766f00900731b0073380091cd0090500092840073360091cd009", + "0x260070071cd00904f0090720070071cd0093320090720070071cd009007", + "0x91cd0093300092e40070540091cd0090530092830070530091cd009007", + "0x92e400733d0091cd0093380092870073380091cd009054009284007336", + "0x700d00733d33600d00933d0091cd00933d00931e0073360091cd009336", + "0x900700d00734a00967005734000d1cd00d2e000700d2860070071cd009", + "0x2890073540091cd0093400092e40073530091cd00905700928a0070071cd", + "0x260070071cd00900700d00700767100900731b0073570091cd009353009", + "0x91cd00934a0092e40073600091cd00935f0092af00735f0091cd009007", + "0x92e40073620091cd0093570092ae0073570091cd009360009289007354", + "0x700d00736235400d0093620091cd00936200931e0073540091cd009354", + "0x900700d00736d00967236b36a00d1cd00d19b00700d2ad0070071cd009", + "0x2ab0073760091cd00936a0092e40073750091cd00936b0092ac0070071cd", + "0x260070071cd00900700d00700767300900731b0073780091cd009375009", + "0x91cd00936d0092e40073800091cd00937d0092aa00737d0091cd009007", + "0x92e40073810091cd0093780092a90073780091cd0093800092ab007376", + "0x700d00738137600d0093810091cd00938100931e0073760091cd009376", + "0x900700d00702d00967403c38300d1cd00d2e300700d2a80070071cd009", + "0x2a600738a0091cd0093830092e400706d0091cd00903c0092a70070071cd", + "0x260070071cd00900700d00700767500900731b00738c0091cd00906d009", + "0x91cd00902d0092e40073920091cd00938f0092a500738f0091cd009007", + "0x92e40070720091cd00938c0092a400738c0091cd0093920092a600738a", + "0x700d00707238a00d0090720091cd00907200931e00738a0091cd00938a", + "0x900700d00701000967607907400d1cd00d2e400700d2a30070071cd009", + "0x2a100707b0091cd0090740092e400707a0091cd0090790092a20070071cd", + "0x260070071cd00900700d00700767700900731b00707d0091cd00907a009", + "0x91cd0090100092e400739e0091cd00939d0092a000739d0091cd009007", + "0x92e40073a00091cd00907d00929f00707d0091cd00939e0092a100707b", + "0x700d0073a007b00d0093a00091cd0093a000931e00707b0091cd00907b", + "0x900700d0070810096783a63a300d1cd00d2e700700d29e0070071cd009", + "0x29c0073bf0091cd0093a30092e40073ba0091cd0093a600929d0070071cd", + "0x260070071cd00900700d00700767900900731b0073c20091cd0093ba009", + "0x91cd0090810092e400708a0091cd0093c500929b0073c50091cd009007", + "0x92e40070870091cd0093c200929a0073c20091cd00908a00929c0073bf", + "0x700d0070873bf00d0090870091cd00908700931e0073bf0091cd0093bf", + "0x900700d00708c00967a3cf3cc00d1cd00d2e800700d2990070071cd009", + "0x2970073d70091cd0093cc0092e40073d40091cd0093cf0092980070071cd", + "0x260070071cd00900700d00700767b00900731b0073da0091cd0093d4009", + "0x91cd00908c0092e40070910091cd0093dd0092960073dd0091cd009007", + "0x92e40070930091cd0093da0092950073da0091cd0090910092970073d7", + "0x700d0070933d700d0090930091cd00909300931e0073d70091cd0093d7", + "0x900700d0073e800967c09009200d1cd00d01600700d2940070071cd009", + "0x2920070980091cd0090920092e40073ea0091cd0090900092930070071cd", + "0x260070071cd00900700d00700767d00900731b0074140091cd0093ea009", + "0x91cd0093e80092e400741a0091cd00909a00929100709a0091cd009007", + "0x92e400700f0091cd0094140092d80074140091cd00941a009292007098", + "0x700d00700f09800d00900f0091cd00900f00931e0070980091cd009098", + "0x900700d0070ce00967e0cf0cd00d1cd00d01b00700d2b90070071cd009", + "0x2d30070a40091cd0090cd0092e40074220091cd0090cf00928e0070071cd", + "0x260070071cd00900700d00700767f00900731b0070a10091cd009422009", + "0x91cd0090ce0092e40070a60091cd0090390092d10070390091cd009007", + "0x92e400742b0091cd0090a10092cf0070a10091cd0090a60092d30070a4", + "0x700d00742b0a400d00942b0091cd00942b00931e0070a40091cd0090a4", + "0x900700d0070a900968042e18e00d1cd00d01e00700d2cd0070071cd009", + "0x2cb0074310091cd00918e0092e40070ab0091cd00942e0092cc0070071cd", + "0x260070071cd00900700d00700768100900731b0074320091cd0090ab009", + "0x91cd0090a90092e40074350091cd0094340092ca0074340091cd009007", + "0x92e40074430091cd0094320092c90074320091cd0094350092cb007431", + "0x92c800744343100d0094430091cd00944300931e0074310091cd009431", + "0x700d0072e00096852dd00968405a0096831450096821400091cd05a00d", + "0x91cd00d2e319b00d2c70072e319b00d1cd0091400090900070071cd009", + "0x92c20072e70091cd0092e40092c50070071cd00900700d0070076862e4", + "0x70260070071cd00900700d00700768700900731b0072e80091cd0092e7", + "0x2e80091cd00901b0092c200701b0091cd0090160092ce0070160091cd009", + "0x90092e80070070091cd0090070092e400701e0091cd0092e8009000007", + "0x700d00701e00900714000901e0091cd00901e00931e0070090091cd009", + "0x900700d00702300968802c0a700d1cd00d14500700d5460070071cd009", + "0x5490070280091cd00902c00954800702c0091cd00902c0095470070071cd", + "0x1cd00902500954a0070260091cd0090a70092e40070250091cd009028009", + "0x91cd0090070260070071cd00900700d00700768900900731b007029009", + "0x954a0070260091cd0090230092e40071990091cd0092f300954b0072f3", + "0x91cd0090260092e40072f40091cd00902900954c0070290091cd009199", + "0x261400092f40091cd0092f400931e0070090091cd0090090092e8007026", + "0xd54e00702e02b00d1cd00905a00954d0070071cd00900700d0072f4009", + "0x1cd0090300095500070300091cd00903000954f0070300091cd00902e02b", + "0x31e0070090091cd0090090092e80070070091cd0090070092e4007032009", + "0x95510070071cd00900700d0070320090071400090320091cd009032009", + "0x91cd0090340095530070340091cd0090340095520070340091cd0092dd", + "0x931e0070090091cd0090090092e80070070091cd0090070092e4007082", + "0x90075540070071cd00900700d0070820090071400090820091cd009082", + "0x70071cd00900700d00730b00968a0071cd00d2e00095550070380091cd", + "0x91cd00930e0094c300730e0091cd0090072610070071cd009038009556", + "0x931e0070090091cd0090090092e80070070091cd0090070092e400730f", + "0x30b0094e10070071cd00900700d00730f00900714000930f0091cd00930f", + "0x91cd00903b00954700703b0091cd00903a00955700703a30b00d1cd009", + "0x955a0073140091cd0090075590073120091cd00903b03800d55800703b", + "0x30b31431200914555b0073140091cd00931400903b0073120091cd009312", + "0x91cd00d04000955c0070400091cd00904000955a00704003f00d1cd009", + "0x955200731c0091cd00931b0095480070071cd00900700d00700768b31b", + "0x755d0070071cd00900700d00700768c00900731b0070430091cd00931c", + "0x31e0091cd0090430095530070430091cd0090440095520070440091cd009", + "0x31e00931e00703f0091cd00903f0092e80070070091cd0090070092e4007", + "0x900700d0090070071cd00900731400731e03f00714000931e0091cd009", + "0x900d00955e0070071cd00900700d0072e02dd00d68d05a14500d1cd00d", + "0x91cd0092e300955f0071450091cd0091450092e40072e42e319b1401cd", + "0x68e0160091cd00d2e80095610072e82e700d1cd0092e314500d5600072e3", + "0x95630070a701e00d1cd0090160095620070071cd00900700d00701b009", + "0x1cd00905a00902e0070071cd00900700d00702300968f02c0091cd00d0a7", + "0x5660070260091cd0090250095650070250091cd00919b009564007028009", + "0x90280090230071990091cd0092e70092e40072f302900d1cd0092e4009", + "0x702e0091cd00902600944f00702b0091cd00902c00932c0072f40091cd", + "0x92f30094510070320091cd00902900903b0070300091cd00901e00955f", + "0x90230090400070071cd00900700d00700769000900731b0070340091cd", + "0x95650070820091cd00919b0095640070071cd00901e0095670070071cd", + "0x30e30b00d1cd00d0380094310070071cd0090074e20070380091cd009082", + "0x943200703a0091cd00905a00902e0070071cd00900700d00730f009691", + "0x91cd00903a0090230073120091cd00903b00956800703b0091cd00930e", + "0x731b0070400091cd00931200956900703f0091cd00930b00944f007314", + "0x702600731b0091cd00905a00902e0070071cd00900700d007007692009", + "0x3140091cd00931b0090230070430091cd00931c00956a00731c0091cd009", + "0x4000956b0070400091cd00904300956900703f0091cd00930f00944f007", + "0x91cd00931400902e0070071cd00900700d00731e0096930440091cd00d", + "0x744d0070480091cd0090470094350070470091cd00904400943400731f", + "0x91cd00931f00902300704b32c00d1cd0092e40095660073240091cd009", + "0x903b0073320091cd0093240094510073300091cd00904800903b00704c", + "0x700769400900731b0070500091cd00904b00945100704f0091cd00932c", + "0x3360091cd00931400902e0070071cd00931e0090400070071cd00900700d", + "0x33600902300705405300d1cd0092e40095660073380091cd009007472007", + "0x91cd00933000903b00733005300d1cd00905300916e00704c0091cd009", + "0x945100704f0091cd00905300903b0073320091cd009054009451007330", + "0x1cd0092e70092e400733d0091cd00933233000d4810070500091cd009338", + "0x5734000d1cd00933d2e700d56000733d0091cd00933d00955f0072e7009", + "0x95620070071cd00900700d00735300969534a0091cd00d057009561007", + "0x700d00736000969635f0091cd00d35700956300735735400d1cd00934a", + "0x92e40073620091cd00904c00902e0070071cd0090073140070071cd009", + "0x91cd00935f00932c0072f40091cd0093620090230071990091cd009340", + "0x903b0070300091cd00935400955f00702e0091cd00903f00944f00702b", + "0x91cd0091990092e40070340091cd0090500094510070320091cd00904f", + "0x736b36a00d1cd00903019900d5600070300091cd00903000955f007199", + "0x36d0095620070071cd00900700d00737500969736d0091cd00d36b009561", + "0x69837d0091cd00d3780095630070071cd0090074e200737837600d1cd009", + "0x36a0092e40073810091cd0092f400902e0070071cd00900700d007380009", + "0x2d0091cd00937d00932c00703c0091cd0093810090230073830091cd009", + "0x3400945100738a0091cd00937600955f00706d0091cd00902e00944f007", + "0x3800090400070071cd00900700d00700769900900731b00738c0091cd009", + "0x69a39238f00d1cd00d02e0094310070071cd0093760095670070071cd009", + "0x3920094320070740091cd0092f400902e0070071cd00900700d007072009", + "0x7a0091cd0090740090230070100091cd0090790095680070790091cd009", + "0x900731b00707d0091cd00901000956900707b0091cd00938f00944f007", + "0x900702600739d0091cd0092f400902e0070071cd00900700d00700769b", + "0x707a0091cd00939d0090230073a00091cd00939e00956a00739e0091cd", + "0xd07d00956b00707d0091cd0093a000956900707b0091cd00907200944f", + "0x810091cd00907a00902e0070071cd00900700d0073a600969c3a30091cd", + "0x900744d0073bf0091cd0093ba0094350073ba0091cd0093a3009434007", + "0x708a0091cd0093bf00903b0073c50091cd0090810090230073c20091cd", + "0x69d00900731b0073cc0091cd0090340094510070870091cd0093c2009451", + "0x1cd00907a00902e0070071cd0093a60090400070071cd00900700d007007", + "0x916e0073c50091cd0093cf00902300708c0091cd0090074720073cf009", + "0x1cd00903400945100708a0091cd00908a00903b00708a03200d1cd009032", + "0x73d40091cd00908708a00d4810073cc0091cd00908c009451007087009", + "0x3d436a00d5600073d40091cd0093d400955f00736a0091cd00936a0092e4", + "0x900700d00709100969e3dd0091cd00d3da0095610073da3d700d1cd009", + "0x69f0900091cd00d09200956300709209300d1cd0093dd0095620070071cd", + "0x3d70092e40073ea0091cd0093c500902e0070071cd00900700d0073e8009", + "0x2d0091cd00909000932c00703c0091cd0093ea0090230073830091cd009", + "0x3cc00945100738a0091cd00909300955f00706d0091cd00907b00944f007", + "0x41409800d1cd00909800956d0070980091cd00900756c00738c0091cd009", + "0xd57100709a0091cd00909a00957000709a0091cd00941402b00d56f007", + "0x1cd00938a00955f0073830091cd0093830092e400741a0091cd00902d09a", + "0xcf0091cd00d0cd0095610070cd00f00d1cd00938a38300d56000738a009", + "0x5630070a442200d1cd0090cf0095620070071cd00900700d0070ce0096a0", + "0x903c00902e0070071cd00900700d0070390096a10a10091cd00d0a4009", + "0x718e0091cd0090a600902300742b0091cd00900f0092e40070a60091cd", + "0x942200955f0070a90091cd00906d00944f00742e0091cd0090a100932c", + "0x700d0070076a200900731b0074310091cd00938c0094510070ab0091cd", + "0x94310070071cd0094220095670070071cd0090390090400070071cd009", + "0x903c00902e0070071cd00900700d0074350096a343443200d1cd00d06d", + "0x744f0091cd00944d00956800744d0091cd0094340094320074430091cd", + "0x944f0095690070b10091cd00943200944f0074510091cd009443009023", + "0x903c00902e0070071cd00900700d0070076a400900731b0074560091cd", + "0x230070b30091cd00946b00956a00746b0091cd0090070260070b20091cd", + "0x1cd0090b30095690070b10091cd00943500944f0074510091cd0090b2009", + "0x70071cd00900700d0074750096a54720091cd00d45600956b007456009", + "0x947b00943500747b0091cd0094720094340074780091cd00945100902e", + "0x3b0074840091cd0094780090230074810091cd00900744d00747e0091cd", + "0x1cd00938c0094510070b80091cd0094810094510074870091cd00947e009", + "0x1cd0094750090400070071cd00900700d0070076a600900731b00749d009", + "0xb900902300749f0091cd0090074720070b90091cd00945100902e007007", + "0x91cd00948700903b00748703200d1cd00903200916e0074840091cd009", + "0xd48100749d0091cd00949f0094510070b80091cd00938c009451007487", + "0x1cd0090ba00955f00700f0091cd00900f0092e40070ba0091cd0090b8487", + "0x4af0091cd00d4ad0095610074ad4ab00d1cd0090ba00f00d5600070ba009", + "0x5630074bf4bd00d1cd0094af0095620070071cd00900700d0074bb0096a7", + "0x948400902e0070071cd00900700d0074c30096a84c40091cd00d4bf009", + "0x718e0091cd0090c000902300742b0091cd0094ab0092e40070c00091cd", + "0x94bd00955f0070a90091cd0090b100944f00742e0091cd0094c400932c", + "0x4c209800d1cd00909800956d0074310091cd00949d0094510070ab0091cd", + "0x95750070c10091cd0094c241a00d57300741a0091cd00941a009572007", + "0x1cd00942b0092e40074cc0091cd00942e0c100d5760070c10091cd0090c1", + "0x4c10c200d1cd0090ab42b00d5600070ab0091cd0090ab00955f00742b009", + "0x95620070071cd00900700d0074b80096a94b90091cd00d4c1009561007", + "0x700d0074b40096aa4b60091cd00d4b50095630074b54b700d1cd0094b9", + "0x70c80091cd0090a900947b0074b30091cd00918e00902e0070071cd009", + "0xc20092e40070c90091cd00943103200d4810074b20091cd0090c800947e", + "0x4b10091cd0094b600932c0070ca0091cd0094b30090230074de0091cd009", + "0xc900955f0074a80091cd0094b20095770074a90091cd0094b700955f007", + "0x4b40090400070071cd00900700d0070076ab00900731b0074a70091cd009", + "0x6ac4a64a500d1cd00d0a90094310070071cd0094b70095670070071cd009", + "0x4a60094320074a30091cd00918e00902e0070071cd00900700d0074a4009", + "0x4a00091cd0094a30090230074a20091cd0090d00095680070d00091cd009", + "0x900731b0070d10091cd0094a20095690070d30091cd0094a500944f007", + "0x90070260070d20091cd00918e00902e0070071cd00900700d0070076ad", + "0x74a00091cd0090d20090230074fe0091cd0090d400956a0070d40091cd", + "0xd0d100956b0070d10091cd0094fe0095690070d30091cd0094a400944f", + "0x49e0091cd0094a000902e0070071cd00900700d0074a10096ae0d50091cd", + "0x900744d0074980091cd0091eb0094350071eb0091cd0090d5009434007", + "0x74950091cd00949800903b0074960091cd00949e0090230074970091cd", + "0x6af00900731b0074930091cd0094310094510074940091cd009497009451", + "0x1cd0094a000902e0070071cd0094a10090400070071cd00900700d007007", + "0x916e0074960091cd0094920090230074910091cd009007472007492009", + "0x1cd0094310094510074950091cd00949500903b00749503200d1cd009032", + "0x74900091cd00949449500d4810074930091cd009491009451007494009", + "0x4900c200d5600074900091cd00949000955f0070c20091cd0090c20092e4", + "0x900700d00748c0096b048d0091cd00d48e00956100748e48f00d1cd009", + "0x74890091cd0090d300947b00748a48b00d1cd00948d0095620070071cd", + "0x48a0095630070eb0091cd00949303200d4810070e90091cd00948900947e", + "0x91cd00949600902e0070071cd00900700d0070ee0096b14860091cd00d", + "0x932c0070ca0091cd0094830090230074de0091cd00948f0092e4007483", + "0x91cd0090e90095770074a90091cd00948b00955f0074b10091cd009486", + "0x94cc0095780070071cd0090073140074a70091cd0090eb00955f0074a8", + "0xf10091cd0090f100957b0070f10091cd0090984cc00d5790074cc0091cd", + "0x93600070f70091cd00947d00957c00747d0091cd0094b10f100d4e3007", + "0x4a74a94a81404840070f80091cd0090f714000d57d0070f70091cd0090f7", + "0xca0091cd0090ca0090230074de0091cd0094de0092e40070f90091cd009", + "0x4de14549d0070f80091cd0090f80090b80070f90091cd0090f9009487007", + "0x71cd00900700d00747a0fc0ef14000947a0fc0ef1401cd0090f80f90ca", + "0x71cd00909800957e0070071cd0090ee0090400070071cd009007314007", + "0x90075800071000091cd0094cc00957f0070fe0091cd00949600902e007", + "0x1cd00910310000d5810070f30091cd0090eb48b0e91404840071030091cd", + "0xc0091cd0090fa0095830070fa0091cd0091061400f3140582007106009", + "0xc0095850070fe0091cd0090fe00902300748f0091cd00948f0092e4007", + "0x1cd0090073140070071cd00900700d00700c0fe48f14000900c0091cd009", + "0x90320090d10070071cd0094cc0095870070071cd009493009586007007", + "0x9800957e0070071cd0090d30095890070071cd0091400095880070071cd", + "0x748f0091cd00948f0092e40070fd0091cd00948c00958a0070071cd009", + "0xfd49648f1400090fd0091cd0090fd0095850074960091cd009496009023", + "0x70071cd0090a90095890070071cd0090073140070071cd00900700d007", + "0x71cd0091400095880070071cd0090320090d10070071cd0094cc009587", + "0x1cd0094b800958a0070071cd00909800957e0070071cd009431009586007", + "0x58500718e0091cd00918e0090230070c20091cd0090c20092e4007104009", + "0x73140070071cd00900700d00710418e0c21400091040091cd009104009", + "0x902e0070071cd00909800957e0070071cd0094c30090400070071cd009", + "0x91cd0090b100947b00710f0091cd00941a00958c0070f20091cd009484", + "0x58d00710d0091cd00949d03200d4810071110091cd00947700947e007477", + "0x1f910f00d58100709f0091cd00910d4bd1111404840071f90091cd009007", + "0x1cd0094710095830074710091cd00905614009f1405820070560091cd009", + "0x5850070f20091cd0090f20090230074ab0091cd0094ab0092e4007118009", + "0x73140070071cd00900700d0071180f24ab1400091180091cd009118009", + "0x90d10070071cd0090b10095890070071cd00909800957e0070071cd009", + "0x5860070071cd00941a00958e0070071cd0091400095880070071cd009032", + "0x91cd0094ab0092e400746f0091cd0094bb00958a0070071cd00949d009", + "0x4ab14000946f0091cd00946f0095850074840091cd0094840090230074ab", + "0x1cd00909800957e0070071cd0090073140070071cd00900700d00746f484", + "0x91400095880070071cd0090320090d10070071cd00906d009589007007", + "0xce00958a0070071cd00938c0095860070071cd00941a00958e0070071cd", + "0x3c0091cd00903c00902300700f0091cd00900f0092e400746e0091cd009", + "0x70071cd00900700d00746e03c00f14000946e0091cd00946e009585007", + "0x46d0091cd0093c500902e0070071cd0093e80090400070071cd009007314", + "0x46700947e0074670091cd00907b00947b0074680091cd00902b0094e4007", + "0x24c0091cd00900758f00724d0091cd0093cc03200d4810074620091cd009", + "0x724a0091cd00924c46800d58100724b0091cd00924d093462140484007", + "0x92e40072480091cd0092490095830072490091cd00924a14024b140582", + "0x91cd00924800958500746d0091cd00946d0090230073d70091cd0093d7", + "0x3240070071cd0090073140070071cd00900700d00724846d3d7140009248", + "0x70071cd00907b0095890070071cd0093cc0095860070071cd00902b009", + "0x91cd00909100958a0070071cd0091400095880070071cd0090320090d1", + "0x95850073c50091cd0093c50090230073d70091cd0093d70092e4007461", + "0x2b0093240070071cd00900700d0074613c53d71400094610091cd009461", + "0x90d10070071cd00902e0095890070071cd0090340095860070071cd009", + "0x745c0091cd00937500958a0070071cd0091400095880070071cd009032", + "0x945c0095850072f40091cd0092f400902300736a0091cd00936a0092e4", + "0x71cd0090073140070071cd00900700d00745c2f436a14000945c0091cd", + "0x903f00947b00745b0091cd00904c00902e0070071cd009360009040007", + "0x1210091cd00905004f00d4810071220091cd00912000947e0071200091cd", + "0x1213541221404840075020091cd00900759200711f0091cd009007591007", + "0x908d14045814058200708d0091cd00950211f00d5810074580091cd009", + "0x73400091cd0093400092e40074550091cd0091280095830071280091cd", + "0x45545b3401400094550091cd00945500958500745b0091cd00945b009023", + "0x70071cd00903f0095890070071cd0090073140070071cd00900700d007", + "0x71cd0091400095880070071cd0090500095860070071cd00904f0090d1", + "0x4c0090230073400091cd0093400092e400712a0091cd00935300958a007", + "0x700d00712a04c34014000912a0091cd00912a00958500704c0091cd009", + "0x95880070071cd00919b0095930070071cd0092e40095670070071cd009", + "0x2e70091cd0092e70092e40071290091cd00901b00958a0070071cd009140", + "0x5a2e71400091290091cd00912900958500705a0091cd00905a009023007", + "0x1cd00900d0090ba0070071cd0091400095880070071cd00900700d007129", + "0x2dd0092e40071300091cd00945400958a0074540091cd00900730f007007", + "0x1300091cd0091300095850072e00091cd0092e00090230072dd0091cd009", + "0x2e02dd00d1cd0091400095940070071cd0090073140071302e02dd140009", + "0x919b0093600072e30091cd00900759600719b0091cd0092e0009595007", + "0x72e70091cd0090075990072e40091cd0092e319b00d59800719b0091cd", + "0x959c0070160091cd0092e72e800d59b0072e805a00d1cd00905a00959a", + "0x1cd0090162e400d59e0070160091cd00901600959d0072e40091cd0092e4", + "0xa701e00d1cd00d01b00700d5a000701b0091cd00901b00959f00701b009", + "0x74e20070230091cd00905a0096b30070071cd00900700d00702c0096b2", + "0x6b40071cd00d02800941400702802300d1cd00902300916e0070071cd009", + "0x90230090d10070071cd00914500935f0070071cd00900700d007025009", + "0x92e40070290091cd0090074e50070260091cd00900900902e0070071cd", + "0x91cd0090290093600071990091cd0090260090230072f30091cd00901e", + "0x71cd00902500941a0070071cd00900700d0070076b500900731b0072f4", + "0x2e00d3ea00702e02300d1cd00902300916e00702b0091cd0090076b6007", + "0x71cd00d0300094140070300091cd00903000903b0070300091cd00902b", + "0x900902e0070071cd0090230090d10070071cd00900700d0070320096b7", + "0x70380091cd0090340090230070820091cd0090076b80070340091cd009", + "0x70071cd00900700d0070076ba00900731b00730b0091cd0090820096b9", + "0x1cd00930e02300d3ea00730e0091cd0090076bb0070071cd00903200941a", + "0x3a0096bc0071cd00d30f00941400730f0091cd00930f00903b00730f009", + "0x91cd0090076bd00703b0091cd00900900902e0070071cd00900700d007", + "0x731b00730b0091cd0093120096b90070380091cd00903b009023007312", + "0x900902e0070071cd00903a00941a0070071cd00900700d0070076ba009", + "0x70380091cd00931400902300703f0091cd0090076be0073140091cd009", + "0x904014500d6c00070400091cd0090076bf00730b0091cd00903f0096b9", + "0x6c200731b0091cd00931b0096c100731c0091cd00900726300731b0091cd", + "0x30b04300d6c40070430091cd0090430096c30070430091cd00931c31b00d", + "0x70440091cd0090440096c600731e0091cd0090076c50070440091cd009", + "0x704804731f1401cd00931e04401e1406c800731e0091cd00931e0096c7", + "0x1cd00931f0092e40073240091cd00904800957c0070071cd009047009587", + "0x3140072f40091cd0093240093600071990091cd0090380090230072f3009", + "0x4b0091cd0092f42dd00d57d00732c0091cd0090075910070071cd009007", + "0xd57d00704c0091cd00904c00936000704c32c00d1cd00932c0090c1007", + "0x904f0096c900704f33200d1cd0093300095940073300091cd00904c04b", + "0x3600073360091cd0090076ca0070500091cd00904f00959500704f0091cd", + "0x3360502f31404050073360091cd0093360096cb0070500091cd009050009", + "0x91cd00905400921a0070071cd00905300935f0070540533381401cd009", + "0x34000d3ea0073400091cd00934000903b0073400091cd0090076cc00733d", + "0x91cd00905700903b0073320091cd0093320090b80070570091cd00933d", + "0x734a0091cd00932c0573321404ff00732c0091cd00932c009360007057", + "0x90a734a00d57d0073540091cd0093530096ce0073530091cd0090076cd", + "0x70071cd00935f00958800736035f00d1cd0093570095940073570091cd", + "0x91990090230073380091cd0093380092e40073620091cd0093600096cf", + "0x73620091cd0093620096d000700d0091cd00900d0090280071990091cd", + "0x36b36a1451cd00935436200d19933805a6d20073540091cd0093540096d1", + "0x70071cd00900700d0073780096d43760091cd00d3750096d300737536d", + "0x96d60073833813801401cd0093760096d500737d0091cd00936b00902e", + "0x703c0091cd0093810096d70070071cd0093830090400070071cd009380", + "0x902d0096da00702d0091cd00903c0096d900703c0091cd00903c0096d8", + "0x736a0091cd00936a0092e400738a0091cd00906d0096db00706d0091cd", + "0x938a0096dc00736d0091cd00936d00902800737d0091cd00937d009023", + "0x93780096dd0070071cd00900700d00738a36d37d36a14500938a0091cd", + "0x736b0091cd00936b00902300736a0091cd00936a0092e400738c0091cd", + "0x36d36b36a14500938c0091cd00938c0096dc00736d0091cd00936d009028", + "0x1cd0092dd0095880070071cd00914500935f0070071cd00900700d00738c", + "0x938f0096dd00738f0091cd0090072610070071cd00905a0096de007007", + "0x70090091cd00900900902300702c0091cd00902c0092e40073920091cd", + "0xd00902c1450093920091cd0093920096dc00700d0091cd00900d009028", + "0x1cd0090070300070090091cd0090074750070071cd0090070096df007392", + "0xd4260071400091cd00914000903b0071400091cd00900742000700d009", + "0x905a00903b00705a00900d1cd00900900916e0071450091cd00914000d", + "0x900d1cd00900900916e0072dd0091cd00905a14500d42600705a0091cd", + "0x3b00719b0091cd0092e02dd00d4260072e00091cd0092e000903b0072e0", + "0x1cd00900716b0072e30091cd00900919b00d4260070090091cd009009009", + "0x72e80091cd0092e70094c30072e70091cd0092e32e400d4240072e4009", + "0x74750070071cd0090070095000072e80090092e80091cd0092e800931e", + "0x3b0071400091cd00900742000700d0091cd0090070300070090091cd009", + "0x900900916e0071450091cd00914000d00d4260071400091cd009140009", + "0x91cd00905a14500d42600705a0091cd00905a00903b00705a00900d1cd", + "0x4260072e00091cd0092e000903b0072e000900d1cd00900900916e0072dd", + "0x919b00d4260070090091cd00900900903b00719b0091cd0092e02dd00d", + "0x2e70091cd0092e32e400d4240072e40091cd00900716b0072e30091cd009", + "0x72e80090092e80091cd0092e800931e0072e80091cd0092e70094c3007", + "0x6e52dd0096e405a0096e31450096e21400096e100d0091cd0160090096e0", + "0x160096eb2e80096ea2e70096e92e40096e82e30096e719b0096e62e0009", + "0x90076ed0070071cd00900d0090400070071cd00900700d00701b0096ec", + "0x70a70091cd00901e0096ef00701e0091cd00901e0096ee00701e0091cd", + "0x70a700700d0090a70091cd0090a700931e0070070091cd0090070092e4", + "0x702c0091cd0090070260070071cd0091400096f00070071cd00900700d", + "0x902300931e0070070091cd0090070092e40070230091cd00902c0096f1", + "0xd1cd00d1450096f20070071cd00900700d00702300700d0090230091cd", + "0x6f50070071cd0090280096f40070071cd00900700d0070260096f3025028", + "0x1cd0092f30092840072f30091cd0090290092800070290091cd009025009", + "0x1cd0090260096f40070071cd00900700d0070076f600900731b007199009", + "0x2b00928400702b0091cd0092f40092830072f40091cd009007026007007", + "0x70091cd0090070092e400702e0091cd0091990096f70071990091cd009", + "0x6f80070071cd00900700d00702e00700d00902e0091cd00902e00931e007", + "0x90320096f50070071cd00900700d0070076f903203000d1cd00d05a009", + "0x380091cd0090820096fb0070820091cd00903403000d6fa0070340091cd", + "0x71cd00900700d0070076fd00900731b00730b0091cd0090380096fc007", + "0x930f0096fc00730f0091cd00930e0096fe00730e0091cd009007026007", + "0x70070091cd0090070092e400703a0091cd00930b0096ff00730b0091cd", + "0x97000070071cd00900700d00703a00700d00903a0091cd00903a00931e", + "0x4000970203f31400d1cd00d31203b00714070100731203b00d1cd0092dd", + "0x1cd0093140092e400731b0091cd00903f0094e60070071cd00900700d007", + "0x900700d00700770400900731b0070430091cd00931b00970300731c009", + "0x92e400731e0091cd0090440097050070440091cd0090070260070071cd", + "0x91cd0090430097060070430091cd00931e00970300731c0091cd009040", + "0x31c00d00931f0091cd00931f00931e00731c0091cd00931c0092e400731f", + "0x90470093600070470091cd0092e00097070070071cd00900700d00731f", + "0x70070091cd0090070092e40070480091cd0090470093620070470091cd", + "0x97080070071cd00900700d00704800700d0090480091cd00904800931e", + "0x700d00704c00970a04b32c00d1cd00d3240097090073240091cd00919b", + "0x70c0073300091cd00904b0096f50070071cd00932c00970b0070071cd009", + "0x770e00900731b00704f0091cd00933200970d0073320091cd009330009", + "0x500091cd0090070260070071cd00904c00970b0070071cd00900700d007", + "0x900731b00704f0091cd00933600970d0073360091cd00905000970f007", + "0x3380097100073380091cd0092e30097080070071cd00900700d00700770e", + "0x1cd00905300970b0070071cd00900700d00733d00971105405300d1cd00d", + "0x970c0073400091cd0090540096f50070540091cd00905400915f007007", + "0x700770e00900731b00704f0091cd00905700970d0070570091cd009340", + "0x734a0091cd0090070260070071cd00933d00970b0070071cd00900700d", + "0x904f00971200704f0091cd00935300970d0073530091cd00934a00970f", + "0x93540091cd00935400931e0070070091cd0090070092e40073540091cd", + "0xd7130073570091cd0092e40097080070071cd00900700d00735400700d", + "0x70b0070071cd00900700d00736b36a00d71436236035f1401cd00d357007", + "0x91cd00935f0092e400736d0091cd0093620097150070071cd009360009", + "0x1cd00900700d00700771700900731b0073760091cd00936d009716007375", + "0x93780097180073780091cd0090070260070071cd00936b00970b007007", + "0x73760091cd00937d0097160073750091cd00936a0092e400737d0091cd", + "0x73800091cd0092e70097080070071cd00900700d00700771700900731b", + "0x71cd00900700d00706d02d00d71a03c3833811401cd00d38000700d719", + "0x93810092e400738a0091cd00903c0097150070071cd00938300970b007", + "0x700d00700771700900731b0073760091cd00938a0097160073750091cd", + "0x971800738c0091cd0090070260070071cd00906d00970b0070071cd009", + "0x91cd00938f0097160073750091cd00902d0092e400738f0091cd00938c", + "0x3920091cd00900771b0070071cd00900700d00700771700900731b007376", + "0x93920093600070740091cd0092e80097080070720091cd00900771c007", + "0x1cd00d0723920740071455010070720091cd0090720093600073920091cd", + "0x7b0091cd00901000971e0070071cd00900700d00707a00971d01007900d", + "0x790092e400707d0091cd00907b00972000707b0091cd00907b00971f007", + "0x900700d00707d07900d00907d0091cd00907d00931e0070790091cd009", + "0x92e400739e0091cd00939d0094c300739d0091cd0090077210070071cd", + "0x700d00739e07a00d00939e0091cd00939e00931e00707a0091cd00907a", + "0x73a30091cd0093a000971e0073a00091cd0090160097220070071cd009", + "0x90070092e40073a60091cd0093a30097200073a30091cd0093a300971f", + "0x1cd00900700d0073a600700d0093a60091cd0093a600931e0070070091cd", + "0x70077243ba0091cd00d0810097230070810091cd00901b009708007007", + "0x91cd0090070092e40073bf0091cd0093ba0097150070071cd00900700d", + "0x1cd00900700d00700771700900731b0073760091cd0093bf009716007375", + "0x70092e40073c50091cd0093c20097180073c20091cd009007026007007", + "0x8a0091cd0093760097250073760091cd0093c50097160073750091cd009", + "0x8a37500d00908a0091cd00908a00931e0073750091cd0093750092e4007", + "0x2dd00972a05a00972914500972814000972700d0091cd016009009726007", + "0x97312e80097302e700972f2e400972e2e300972d19b00972c2e000972b", + "0x77330070071cd00900d0090400070071cd00900700d00701b009732016", + "0xa70091cd00901e00973500701e0091cd00901e00973400701e0091cd009", + "0xa700700d0090a70091cd0090a700931e0070070091cd0090070092e4007", + "0x2c0091cd0090070260070071cd0091400097360070071cd00900700d007", + "0x2300931e0070070091cd0090070092e40070230091cd00902c0096f1007", + "0x1cd00d1450097370070071cd00900700d00702300700d0090230091cd009", + "0x70071cd0090280097390070071cd00900700d00702600973802502800d", + "0x92f300973b0072f30091cd00902900973a0070290091cd00902500947a", + "0x90260097390070071cd00900700d00700773c00900731b0071990091cd", + "0x973b00702b0091cd0092f400973d0072f40091cd0090070260070071cd", + "0x91cd0090070092e400702e0091cd00919900973e0071990091cd00902b", + "0x70071cd00900700d00702e00700d00902e0091cd00902e00931e007007", + "0x3200947a0070071cd00900700d00700774003203000d1cd00d05a00973f", + "0x91cd0090820095030070820091cd00903403000d7410070340091cd009", + "0x1cd00900700d00700774300900731b00730b0091cd009038009742007038", + "0x30f00974200730f0091cd00930e00974400730e0091cd009007026007007", + "0x70091cd0090070092e400703a0091cd00930b00974500730b0091cd009", + "0x7460070071cd00900700d00703a00700d00903a0091cd00903a00931e007", + "0x974803f31400d1cd00d31203b00714074700731203b00d1cd0092dd009", + "0x93140092e400731b0091cd00903f0097490070071cd00900700d007040", + "0x700d00700774b00900731b0070430091cd00931b00974a00731c0091cd", + "0x2e400731e0091cd00904400974c0070440091cd0090070260070071cd009", + "0x1cd00904300974d0070430091cd00931e00974a00731c0091cd009040009", + "0xd00931f0091cd00931f00931e00731c0091cd00931c0092e400731f009", + "0x470093600070470091cd0092e000974e0070071cd00900700d00731f31c", + "0x70091cd0090070092e40070480091cd0090470093620070470091cd009", + "0x74f0070071cd00900700d00704800700d0090480091cd00904800931e007", + "0xd00704c00975104b32c00d1cd00d3240097500073240091cd00919b009", + "0x73300091cd00904b00947a0070071cd00932c0097520070071cd009007", + "0x75500900731b00704f0091cd0093320097540073320091cd009330009753", + "0x91cd0090070260070071cd00904c0097520070071cd00900700d007007", + "0x731b00704f0091cd0093360097540073360091cd009050009756007050", + "0x97570073380091cd0092e300974f0070071cd00900700d007007755009", + "0x90530097520070071cd00900700d00733d00975805405300d1cd00d338", + "0x7530073400091cd00905400947a0070540091cd0090540097590070071cd", + "0x775500900731b00704f0091cd0090570097540070570091cd009340009", + "0x34a0091cd0090070260070071cd00933d0097520070071cd00900700d007", + "0x4f00950400704f0091cd0093530097540073530091cd00934a009756007", + "0x3540091cd00935400931e0070070091cd0090070092e40073540091cd009", + "0x75a0073570091cd0092e400974f0070071cd00900700d00735400700d009", + "0x70071cd00900700d00736b36a00d75b36236035f1401cd00d35700700d", + "0x1cd00935f0092e400736d0091cd00936200975c0070071cd009360009752", + "0x900700d00700775e00900731b0073760091cd00936d00975d007375009", + "0x37800975f0073780091cd0090070260070071cd00936b0097520070071cd", + "0x3760091cd00937d00975d0073750091cd00936a0092e400737d0091cd009", + "0x3800091cd0092e700974f0070071cd00900700d00700775e00900731b007", + "0x1cd00900700d00706d02d00d76103c3833811401cd00d38000700d760007", + "0x3810092e400738a0091cd00903c00975c0070071cd009383009752007007", + "0xd00700775e00900731b0073760091cd00938a00975d0073750091cd009", + "0x75f00738c0091cd0090070260070071cd00906d0097520070071cd009007", + "0x1cd00938f00975d0073750091cd00902d0092e400738f0091cd00938c009", + "0x91cd00900771b0070071cd00900700d00700775e00900731b007376009", + "0x3920093600070740091cd0092e800974f0070720091cd00900771c007392", + "0xd0723920740071457620070720091cd0090720093600073920091cd009", + "0x91cd0090100097640070071cd00900700d00707a00976301007900d1cd", + "0x92e400707d0091cd00907b00976600707b0091cd00907b00976500707b", + "0x700d00707d07900d00907d0091cd00907d00931e0070790091cd009079", + "0x2e400739e0091cd00939d0094c300739d0091cd0090077210070071cd009", + "0xd00739e07a00d00939e0091cd00939e00931e00707a0091cd00907a009", + "0x3a30091cd0093a00097640073a00091cd0090160097670070071cd009007", + "0x70092e40073a60091cd0093a30097660073a30091cd0093a3009765007", + "0x900700d0073a600700d0093a60091cd0093a600931e0070070091cd009", + "0x77693ba0091cd00d0810097680070810091cd00901b00974f0070071cd", + "0x1cd0090070092e40073bf0091cd0093ba00975c0070071cd00900700d007", + "0x900700d00700775e00900731b0073760091cd0093bf00975d007375009", + "0x92e40073c50091cd0093c200975f0073c20091cd0090070260070071cd", + "0x91cd00937600976a0073760091cd0093c500975d0073750091cd009007", + "0x37500d00908a0091cd00908a00931e0073750091cd0093750092e400708a", + "0x900900901b0070070091cd0090070092e40070071cd00900731400708a", + "0x71400091cd0091400090c900700d0091cd00900d0090230070090091cd", + "0x71cd0092e000976c0072e02dd05a1451451cd00914000d00900714576b", + "0x91cd0090074200072e30091cd00900703000719b0091cd009007475007", + "0x16e0072e70091cd0092e42e300d4260072e40091cd0092e400903b0072e4", + "0x2e82e700d4260072e80091cd0092e800903b0072e819b00d1cd00919b009", + "0x91cd00901b00903b00701b19b00d1cd00919b00916e0070160091cd009", + "0x42600719b0091cd00919b00903b00701e0091cd00901b01600d42600701b", + "0x90a702c00d42400702c0091cd00900716b0070a70091cd00919b01e00d", + "0x71450091cd0091450092e40070280091cd0090230094c30070230091cd", + "0x902800931e0072dd0091cd0092dd00902300705a0091cd00905a00901b", + "0x1cd00900776d0070071cd0090073140070282dd05a1451450090280091cd", + "0x705a0091cd00914514000d76e0071450091cd009145009074007145009", + "0x900d0090230070090091cd00900900901b0070070091cd0090070092e4", + "0x1cd00905a00d00900714576b00705a0091cd00905a0090c900700d0091cd", + "0x72e40091cd0090074750070071cd0092e300976c0072e319b2e02dd145", + "0x91cd0092e800903b0072e80091cd0090074200072e70091cd009007030", + "0x701b2e400d1cd0092e400916e0070160091cd0092e82e700d4260072e8", + "0x2e400916e00701e0091cd00901b01600d42600701b0091cd00901b00903b", + "0x1cd0090a701e00d4260070a70091cd0090a700903b0070a72e400d1cd009", + "0x70230091cd0092e402c00d4260072e40091cd0092e400903b00702c009", + "0x90250094c30070250091cd00902302800d4240070280091cd00900716b", + "0x72e00091cd0092e000901b0072dd0091cd0092dd0092e40070260091cd", + "0x19b2e02dd1450090260091cd00902600931e00719b0091cd00919b009023", + "0x1cd0090070300070090091cd0090074750070071cd00900700976f007026", + "0xd4260071400091cd00914000903b0071400091cd00900742000700d009", + "0x905a00903b00705a00900d1cd00900900916e0071450091cd00914000d", + "0x900d1cd00900900916e0072dd0091cd00905a14500d42600705a0091cd", + "0x3b00719b0091cd0092e02dd00d4260072e00091cd0092e000903b0072e0", + "0x1cd00900716b0072e30091cd00900919b00d4260070090091cd009009009", + "0x72e80091cd0092e70094c30072e70091cd0092e32e400d4240072e4009", + "0x70092e40070071cd0090073140072e80090092e80091cd0092e800931e", + "0xd0091cd00900d0090230070090091cd00900900901b0070070091cd009", + "0x5a1451451cd00914000d0090071457700071400091cd0091400090d0007", + "0x900703000719b0091cd0090074750070071cd0092e00095050072e02dd", + "0x4260072e40091cd0092e400903b0072e40091cd0090074200072e30091cd", + "0x2e800903b0072e819b00d1cd00919b00916e0072e70091cd0092e42e300d", + "0xd1cd00919b00916e0070160091cd0092e82e700d4260072e80091cd009", + "0x701e0091cd00901b01600d42600701b0091cd00901b00903b00701b19b", + "0x900716b0070a70091cd00919b01e00d42600719b0091cd00919b00903b", + "0x280091cd0090230094c30070230091cd0090a702c00d42400702c0091cd", + "0x2dd00902300705a0091cd00905a00901b0071450091cd0091450092e4007", + "0x3140070282dd05a1451450090280091cd00902800931e0072dd0091cd009", + "0x5a14500d1cd00914500916e0071450091cd0090074750070071cd009007", + "0x92e40072dd0091cd00905a14000d77100705a0091cd00905a00903b007", + "0x91cd00900d0090230070090091cd00900900901b0070070091cd009007", + "0x2e01451cd0092dd00d0090071457700072dd0091cd0092dd0090d000700d", + "0x74200072e70091cd0090070300070071cd0092e40095050072e42e319b", + "0x91cd0092e82e700d4260072e80091cd0092e800903b0072e80091cd009", + "0x42600701b0091cd00901b00903b00701b14500d1cd00914500916e007016", + "0xa700903b0070a714500d1cd00914500916e00701e0091cd00901b01600d", + "0x91cd00914500903b00702c0091cd0090a701e00d4260070a70091cd009", + "0xd4240070280091cd00900716b0070230091cd00914502c00d426007145", + "0x1cd0092e00092e40070260091cd0090250094c30070250091cd009023028", + "0x31e0072e30091cd0092e300902300719b0091cd00919b00901b0072e0009", + "0x70071cd0090070097720070262e319b2e01450090260091cd009026009", + "0x1400091cd00900742000700d0091cd0090070300070090091cd009007475", + "0x916e0071450091cd00914000d00d4260071400091cd00914000903b007", + "0x905a14500d42600705a0091cd00905a00903b00705a00900d1cd009009", + "0x2e00091cd0092e000903b0072e000900d1cd00900900916e0072dd0091cd", + "0xd4260070090091cd00900900903b00719b0091cd0092e02dd00d426007", + "0x1cd0092e32e400d4240072e40091cd00900716b0072e30091cd00900919b", + "0x90092e80091cd0092e800931e0072e80091cd0092e70094c30072e7009", + "0x900900901b0070070091cd0090070092e40070071cd0090073140072e8", + "0x71400091cd00914000949800700d0091cd00900d0090230070090091cd", + "0x71cd0092e00097740072e02dd05a1451451cd00914000d009007145773", + "0x91cd0090074200072e30091cd00900703000719b0091cd009007475007", + "0x16e0072e70091cd0092e42e300d4260072e40091cd0092e400903b0072e4", + "0x2e82e700d4260072e80091cd0092e800903b0072e819b00d1cd00919b009", + "0x91cd00901b00903b00701b19b00d1cd00919b00916e0070160091cd009", + "0x42600719b0091cd00919b00903b00701e0091cd00901b01600d42600701b", + "0x90a702c00d42400702c0091cd00900716b0070a70091cd00919b01e00d", + "0x71450091cd0091450092e40070280091cd0090230094c30070230091cd", + "0x902800931e0072dd0091cd0092dd00902300705a0091cd00905a00901b", + "0x1cd0090074830070071cd0090073140070282dd05a1451450090280091cd", + "0x705a0091cd00914514000d7750071450091cd0091450090f1007145009", + "0x900d0090230070090091cd00900900901b0070070091cd0090070092e4", + "0x1cd00905a00d00900714577300705a0091cd00905a00949800700d0091cd", + "0x72e40091cd0090074750070071cd0092e30097740072e319b2e02dd145", + "0x91cd0092e800903b0072e80091cd0090074200072e70091cd009007030", + "0x701b2e400d1cd0092e400916e0070160091cd0092e82e700d4260072e8", + "0x2e400916e00701e0091cd00901b01600d42600701b0091cd00901b00903b", + "0x1cd0090a701e00d4260070a70091cd0090a700903b0070a72e400d1cd009", + "0x70230091cd0092e402c00d4260072e40091cd0092e400903b00702c009", + "0x90250094c30070250091cd00902302800d4240070280091cd00900716b", + "0x72e00091cd0092e000901b0072dd0091cd0092dd0092e40070260091cd", + "0x19b2e02dd1450090260091cd00902600931e00719b0091cd00919b009023", + "0x1cd0090070300070090091cd0090074750070071cd009007009776007026", + "0xd4260071400091cd00914000903b0071400091cd00900742000700d009", + "0x905a00903b00705a00900d1cd00900900916e0071450091cd00914000d", + "0x900d1cd00900900916e0072dd0091cd00905a14500d42600705a0091cd", + "0x3b00719b0091cd0092e02dd00d4260072e00091cd0092e000903b0072e0", + "0x1cd00900716b0072e30091cd00900919b00d4260070090091cd009009009", + "0x72e80091cd0092e70094c30072e70091cd0092e32e400d4240072e4009", + "0x74750070071cd0090070097770072e80090092e80091cd0092e800931e", + "0x3b0071400091cd00900742000700d0091cd0090070300070090091cd009", + "0x900900916e0071450091cd00914000d00d4260071400091cd009140009", + "0x91cd00905a14500d42600705a0091cd00905a00903b00705a00900d1cd", + "0x4260072e00091cd0092e000903b0072e000900d1cd00900900916e0072dd", + "0x919b00d4260070090091cd00900900903b00719b0091cd0092e02dd00d", + "0x2e70091cd0092e32e400d4240072e40091cd00900716b0072e30091cd009", + "0x72e80090092e80091cd0092e800931e0072e80091cd0092e70094c3007", + "0xd0091cd0090070300070090091cd0090074750070071cd009007009494", + "0x14000d00d4260071400091cd00914000903b0071400091cd009007420007", + "0x91cd00905a00903b00705a00900d1cd00900900916e0071450091cd009", + "0x72e000900d1cd00900900916e0072dd0091cd00905a14500d42600705a", + "0x900903b00719b0091cd0092e02dd00d4260072e00091cd0092e000903b", + "0x2e40091cd00900716b0072e30091cd00900919b00d4260070090091cd009", + "0x931e0072e80091cd0092e70094c30072e70091cd0092e32e400d424007", + "0x1cd0090074750070071cd00900700945c0072e80090092e80091cd0092e8", + "0x14000903b0071400091cd00900742000700d0091cd009007030007009009", + "0xd1cd00900900916e0071450091cd00914000d00d4260071400091cd009", + "0x72dd0091cd00905a14500d42600705a0091cd00905a00903b00705a009", + "0x2dd00d4260072e00091cd0092e000903b0072e000900d1cd00900900916e", + "0x1cd00900919b00d4260070090091cd00900900903b00719b0091cd0092e0", + "0x4c30072e70091cd0092e32e400d4240072e40091cd00900716b0072e3009", + "0x77780072e80090092e80091cd0092e800931e0072e80091cd0092e7009", + "0x90074750070071cd0090073140070071cd00900777900705a0091cd009", + "0x903b00719b0091cd0090074200072e00091cd0090070300072dd0091cd", + "0x1cd0092dd00916e0072e30091cd00919b2e000d42600719b0091cd00919b", + "0x2e70091cd0092e42e300d4260072e40091cd0092e400903b0072e42dd00d", + "0xd4260072e80091cd0092e800903b0072e82dd00d1cd0092dd00916e007", + "0x92dd01600d4260072dd0091cd0092dd00903b0070160091cd0092e82e7", + "0x77b0071cd00d1400094770071450091cd00914505a00d77a0071450091cd", + "0x14501e00d42400701e0091cd00900716b0070071cd00900700d00701b009", + "0x70091cd0090070092e400702c0091cd0090a70094c30070a70091cd009", + "0x2c00931e00700d0091cd00900d0090230070090091cd00900900901b007", + "0x1b00910d0070071cd00900700d00702c00d00900714500902c0091cd009", + "0x90091cd00900900901b0070070091cd0090070092e40070230091cd009", + "0x71457700070230091cd0090230090d000700d0091cd00900d009023007", + "0x716b0070071cd0090290095050070290260250281451cd00902300d009", + "0x91cd0091990094c30071990091cd0091452f300d4240072f30091cd009", + "0x90230070250091cd00902500901b0070280091cd0090280092e40072f4", + "0x72f40260250281450092f40091cd0092f400931e0070260091cd009026", + "0x1cd0090070093120070070091cd00900700903b0070070091cd00900777c", + "0x2dd14577d0072e319b2e02dd1451cd009140009509007009009009009009", + "0xd2e400977f0072e40091cd0092e400977e0072e40091cd0092e319b2e0", + "0x162e800d1cd00900d0097810070071cd00900700d0070077802e70091cd", + "0x70230091cd00901b00978200702c0a701e01b1451cd009145009509007", + "0x902c0097820070250091cd0090a70097820070280091cd00901e009782", + "0x1cd0090160097840070290091cd0090260250280231457830070260091cd", + "0x7862f30091cd00d02901600d7850070290091cd0090290094e7007016009", + "0x92e70097880070071cd0092f30097870070071cd00900700d007199009", + "0x2f40094c30072f40091cd00900778a0070071cd00905a0097890070071cd", + "0x90091cd00900900902c0070070091cd0090070090a700702b0091cd009", + "0x900714500902b0091cd00902b00931e0072e80091cd0092e800901e007", + "0x703403203002e1451cd00905a0095090070071cd00900700d00702b2e8", + "0x90320097820070380091cd0090300097820070820091cd00902e009782", + "0x1cd00930e30b03808214578300730e0091cd00903400978200730b0091cd", + "0x78b03a0091cd00d30f19900d78500730f0091cd00930f0094e700730f009", + "0x1cd00900778d0073120091cd00900778c0070071cd00900700d00703b009", + "0x78f00704031400d1cd00931400978e00703f0091cd009007263007314009", + "0x931b0097910070400091cd00904000979000731b03f00d1cd00903f009", + "0x79304404331c1401cd00d31b0402e703a3120090072e079200731b0091cd", + "0x7950070071cd0093140097940070071cd00900700d00704804731f31e145", + "0x1cd00d32c00979700732c32400d1cd0090440097960070071cd00903f009", + "0x79a3300091cd00d04b0097990070071cd00900700d00704c00979804b009", + "0x705000979c04f0091cd00d33000979b0070071cd00900700d007332009", + "0x91cd00933600950e0073360091cd00904f00979d0070071cd00900700d", + "0x91cd00905000950e0070071cd00900700d00700779e00900731b007338", + "0x91cd00933200950e0070071cd00900700d00700779e00900731b007338", + "0x91cd00904c00950e0070071cd00900700d00700779e00900731b007338", + "0x19e0073240091cd00932400909f0070530091cd0093382e800d79f007338", + "0x1cd00904300902c00731c0091cd00931c0090a70070540091cd009324009", + "0x1450090540091cd00905400931e0070530091cd00905300901e007043009", + "0x745b0070071cd0090470097a00070071cd00900700d00705405304331c", + "0x31f0091cd00931f00902c0072e80091cd0092e800901e00733d0091cd009", + "0x2e805a7a100703f0091cd00903f0097910073140091cd009314009790007", + "0x97a23530091cd00d34a00979700734a0573401401cd00903f31404831f", + "0xd00735f0097a33570091cd00d3530097990070071cd00900700d007354", + "0x1cd00900700d0073620097a43600091cd00d35700979b0070071cd009007", + "0x731b00736b0091cd00936a00950e00736a0091cd00936000979d007007", + "0x731b00736b0091cd00936200950e0070071cd00900700d0070077a5009", + "0x731b00736b0091cd00935f00950e0070071cd00900700d0070077a5009", + "0xd79f00736b0091cd00935400950e0070071cd00900700d0070077a5009", + "0x1cd00931e0090a70073750091cd00933d0094c300736d0091cd00936b340", + "0x31e00736d0091cd00936d00901e0070570091cd00905700902c00731e009", + "0x7a60070071cd00900700d00737536d05731e1450093750091cd009375009", + "0x73760091cd0090077a70070071cd0092e70097880070071cd00903b009", + "0x900900902c0070070091cd0090070090a70073780091cd0093760094c3", + "0x93780091cd00937800931e0072e80091cd0092e800901e0070090091cd", + "0x7890070071cd0091450097890070071cd00900700d0073782e8009007145", + "0x3800091cd00937d0094c300737d0091cd0090072610070071cd00905a009", + "0xd00901e0070090091cd00900900902c0070070091cd0090070090a7007", + "0x31400738000d0090071450093800091cd00938000931e00700d0091cd009", + "0x1401cd0092e00097a90072e005a00d1cd00905a0097a80070071cd009007", + "0x72e82e700d1cd00919b0097aa0070071cd0092e40092510072e42e319b", + "0x1e0093d600701e0091cd0090160097ab00701b01600d1cd0092e80091d0", + "0x2c0091cd00901b0097ab0070071cd00900700d0070a70097ac0071cd00d", + "0x2e700945c0070071cd00900700d0070230097ad0071cd00d02c0093d6007", + "0x97af0070071cd0092dd0097ae0070071cd00914500945c0070071cd009", + "0x70280091cd00900900902e0070071cd0092e300945c0070071cd00905a", + "0x7b000900731b0070260091cd0090280090230070250091cd0090070092e4", + "0x1cd00900900902e0070071cd0090230097b10070071cd00900700d007007", + "0x900700d0070077b200900731b0072f30091cd009029009023007029009", + "0x900902e0070071cd00901b0090720070071cd0090a70097b10070071cd", + "0x2f400d1cd0092e70091d00072f30091cd0091990090230071990091cd009", + "0x97b400703203000d1cd00902e0091d000702e0091cd0090077b300702b", + "0x908200907400708203200d1cd0090320097b400703402b00d1cd00902b", + "0xd00730f30e00d7b530b03800d1cd00d0820340071403d30070820091cd", + "0x7b70071cd00d03202b00d7b60070071cd00930b0090720070071cd009007", + "0x1cd0092dd0097ae0070071cd00914500945c0070071cd00900700d007007", + "0x90300090720070071cd0092e300945c0070071cd00905a0097af007007", + "0x92e400703a0091cd0092f300902e0070071cd0092f40090720070071cd", + "0x70077b000900731b0070260091cd00903a0090230070250091cd009038", + "0xd0302f40381403d30070300091cd0090300090740070071cd00900700d", + "0x1cd0093120090720070071cd00900700d00703f31400d7b831203b00d1cd", + "0x905a0097af0070071cd0092dd0097ae0070071cd00914500945c007007", + "0x92e40070400091cd0092f300902e0070071cd0092e300945c0070071cd", + "0x70077b000900731b0070260091cd0090400090230070250091cd00903b", + "0x31b0091cd0092f300902e0070071cd00903f0090720070071cd00900700d", + "0x900731b0070430091cd00931b00902300731c0091cd0093140092e4007", + "0x902b0090720070071cd00930f0090720070071cd00900700d0070077b9", + "0x320090720070071cd0092f40090720070071cd0090300090720070071cd", + "0x731c0091cd00930e0092e40070440091cd0092f300902e0070071cd009", + "0x92e30090fe00731c0091cd00931c0092e40070430091cd009044009023", + "0x91cd00d31f00924800731f31e00d1cd0092e331c00d7ba0072e30091cd", + "0x7bc0073240091cd0090470094610070071cd00900700d0070480097bb047", + "0x932c0090400070071cd00900700d00704b0097bd32c0091cd00d324009", + "0x14500945c0070071cd00905a0097af0070071cd0092dd0097ae0070071cd", + "0x70250091cd00931e0092e400704c0091cd00904300902e0070071cd009", + "0x1cd0093300097be0073300091cd0090074e80070260091cd00904c009023", + "0x2e70070500091cd00904f0097c000704f0091cd0093320097bf007332009", + "0x1cd0090500097c10071400091cd00914000902800700d0091cd00900d009", + "0x904b0090400070071cd00900700d00705014000d02602505a009050009", + "0x280070430091cd00904300902300731e0091cd00931e0092e40070071cd", + "0x1cd00905a0091180071450091cd0091450090fe0071400091cd009140009", + "0x97c30070540533383361451cd00905a14514004331e05a7c200705a009", + "0x1cd00933d0097c50070071cd00900700d0073400097c433d0091cd00d054", + "0x70071cd00900700d0073530097c734a0091cd00d0570097c6007057009", + "0x900d0092e70073380091cd0093380090230073360091cd0093360092e4", + "0x734a0091cd00934a0097c80070530091cd00905300902800700d0091cd", + "0xd3620097ca00736236035f35735405a1cd00934a05300d33833605a7c9", + "0x36d0091cd00936a0097cc0070071cd00900700d00736b0097cb36a0091cd", + "0x36d0097cd0070071cd0093750097ae00737637500d1cd0092dd0097cd007", + "0x3800091cd0093760097ce0070071cd0093780097ae00737d37800d1cd009", + "0x3810090ab0073830091cd0093800090ab0073810091cd00937d0097ce007", + "0x91cd00902d00903b00702d0091cd00903c38300d3ea00703c0091cd009", + "0x902e0070071cd00900700d00706d0097cf0071cd00d02d00941400702d", + "0x38f0091cd00938c0097d000738c0091cd00900702600738a0091cd009357", + "0x3540092e40070720091cd0093920097c00073920091cd00938f0097bf007", + "0x35f0091cd00935f0092e700738a0091cd00938a0090230073540091cd009", + "0x38a35405a0090720091cd0090720097c10073600091cd009360009028007", + "0x35700902e0070071cd00906d00941a0070071cd00900700d00707236035f", + "0x70100091cd0090790097be0070790091cd0090077d10070740091cd009", + "0x93540092e400707b0091cd00907a0097c000707a0091cd0090100097bf", + "0x735f0091cd00935f0092e70070740091cd0090740090230073540091cd", + "0x35f07435405a00907b0091cd00907b0097c10073600091cd009360009028", + "0x936b0097d20070071cd0092dd0097ae0070071cd00900700d00707b360", + "0x73570091cd0093570090230073540091cd0093540092e400707d0091cd", + "0x907d0097c10073600091cd00936000902800735f0091cd00935f0092e7", + "0x3530090400070071cd00900700d00707d36035f35735405a00907d0091cd", + "0x7d300739d0091cd00933800902e0070071cd0092dd0097ae0070071cd009", + "0x91cd0093a00097bf0073a00091cd00939e0097be00739e0091cd009007", + "0x90230073360091cd0093360092e40073a60091cd0093a30097c00073a3", + "0x91cd00905300902800700d0091cd00900d0092e700739d0091cd00939d", + "0x900700d0073a605300d39d33605a0093a60091cd0093a60097c1007053", + "0x92e40070810091cd0093400097d20070071cd0092dd0097ae0070071cd", + "0x91cd00900d0092e70073380091cd0093380090230073360091cd009336", + "0x33605a0090810091cd0090810097c10070530091cd00905300902800700d", + "0x97af0070071cd0092dd0097ae0070071cd00900700d00708105300d338", + "0x73ba0091cd0090480097d20070071cd00914500945c0070071cd00905a", + "0x900d0092e70070430091cd00904300902300731e0091cd00931e0092e4", + "0x93ba0091cd0093ba0097c10071400091cd00914000902800700d0091cd", + "0x92e00097aa0072e014500d1cd0091450094e90073ba14000d04331e05a", + "0x91cd0092e40097ab0072e72e400d1cd0092e30091d00072e319b00d1cd", + "0x1b0097d40071cd00d0160093d60070162e800d1cd0092e80097b40072e8", + "0x901e0097ab00701e2e700d1cd0092e70097b40070071cd00900700d007", + "0x70071cd00900700d00702c0097d50071cd00d0a70093d60070a70091cd", + "0x71cd0092e70090720070071cd0092e80090720070071cd00919b00945c", + "0x1cd00905a00945c0070071cd00914500945c0070071cd0092dd0097d6007", + "0x70092e40070230091cd00900900902e0070071cd00914000945c007007", + "0xd0070077d700900731b0070250091cd0090230090230070280091cd009", + "0x70260091cd00900900902e0070071cd00902c0097b10070071cd009007", + "0x70071cd00900700d0070077d800900731b0070290091cd009026009023", + "0x1cd0092f30090230072f30091cd00900900902e0070071cd00901b0097b1", + "0x1d000702b0091cd0090077d90072f419900d1cd00919b0091d0007029009", + "0x300097b40070322f400d1cd0092f40097b400703002e00d1cd00902b009", + "0xd0340320071403d30070340091cd00903400907400703403000d1cd009", + "0x1cd0090380090720070071cd00900700d00730e30b00d7da03808200d1cd", + "0x90720070071cd00900700d0070077db0071cd00d0302f400d7b6007007", + "0x45c0070071cd0092dd0097d60070071cd0092e70090720070071cd0092e8", + "0x70071cd00914000945c0070071cd00905a00945c0070071cd009145009", + "0x91cd00902900902e0070071cd0091990090720070071cd00902e009072", + "0x731b0070250091cd00930f0090230070280091cd0090820092e400730f", + "0x1403d300702e0091cd00902e0090740070071cd00900700d0070077d7009", + "0x720070071cd00900700d00731431200d7dc03b03a00d1cd00d02e199082", + "0x70071cd0092e70090720070071cd0092e80090720070071cd00903b009", + "0x71cd00905a00945c0070071cd00914500945c0070071cd0092dd0097d6", + "0x903a0092e400703f0091cd00902900902e0070071cd00914000945c007", + "0x70400091cd0090280097dd0070250091cd00903f0090230070280091cd", + "0x7df00900731b00731c0091cd00900d00902800731b0091cd0090250097de", + "0x1cd00902900902e0070071cd0093140090720070071cd00900700d007007", + "0x31b00731e0091cd0090430090230070440091cd0093120092e4007043009", + "0x90720070071cd00930e0090720070071cd00900700d0070077e0009007", + "0x720070071cd0091990090720070071cd00902e0090720070071cd0092f4", + "0x91cd00930b0092e400731f0091cd00902900902e0070071cd009030009", + "0x94e90070440091cd0090440092e400731e0091cd00931f009023007044", + "0x904704400d7e10070470091cd0090470090fe00704705a00d1cd00905a", + "0x1cd00900700d00704b0097e232c0091cd00d32400924800732404800d1cd", + "0x93cf0073300091cd00904c0097e300704c0091cd00932c009461007007", + "0x900700d00704f0097e43320091cd00d3300097bc0073300091cd009330", + "0x500097e60070500091cd0090077e50070071cd0093320090400070071cd", + "0xd33605a0481407e80073360091cd0093360097e700733605000d1cd009", + "0x700d00736236035f1407e935735435334a05734033d0540533382e41cd", + "0x91cd00935436a00d7ea00736a0091cd00935733800d7ea0070071cd009", + "0x73750091cd00934a36d00d7ea00736d0091cd00935336b00d7ea00736b", + "0xd7ea0073780091cd00934037600d7ea0073760091cd00905737500d7ea", + "0x90530097eb0073800091cd00905437d00d7ea00737d0091cd00933d378", + "0x71400091cd0091400090fe0073800091cd0093800092e40073810091cd", + "0x500097e60073830091cd0093830090fe00738338100d1cd0093810094e9", + "0x3c3831403801457ec00703c0091cd00903c0097e700703c05000d1cd009", + "0x91cd0091450090fe00702d0091cd00902d0092e400706d02d00d1cd009", + "0x1457ec0070500091cd0090500097e70073810091cd0093810090fe007145", + "0x90077ee00738f0091cd0090077ed00738c38a00d1cd00905038114502d", + "0x73920091cd0093920090fe00738f0091cd00938f0090fe0073920091cd", + "0x700d00707b07a0101407f00790740721401cd00d39238f00d31e1457ef", + "0x7f107d0091cd00d07900924b0070790091cd00907900924c0070071cd009", + "0x721457f20070720091cd0090720090230070071cd00900700d00739d009", + "0x71cd00900700d0073ba0813a61407f33a33a039e1401cd00d06d07d074", + "0x3c23bf1401cd00d38c2dd3a039e1457f200739e0091cd00939e009023007", + "0x3bf0091cd0093bf0090230070071cd00900700d0073cc08708a1407f43c5", + "0x3bf1457f50073c50091cd0093c500924a0073a30091cd0093a300924a007", + "0x71cd00900700d0073dd3da3d71407f63d408c3cf1401cd00d3c53a33c2", + "0x3cf1407f70073d40091cd0093d400924a0073cf0091cd0093cf009023007", + "0x71cd00900700d0070983ea3e81407f80900920930911451cd00d3d408c", + "0x41400945c00709a41400d1cd0090920097aa0070071cd00909000945c007", + "0xcd0091cd00941a0097ab00700f41a00d1cd00909a0091d00070071cd009", + "0xd0070077f90071cd00d2e80cd00d7b60070cd0091cd0090cd009074007", + "0x230070071cd00900f0090720070071cd0092e70090720070071cd009007", + "0x1cd00938a0092e40070cf0091cd00909100902e0070910091cd009091009", + "0x31b00731c0091cd00909300902800731b0091cd0090cf009023007040009", + "0x7ab0070ce0091cd00900f0097ab0070071cd00900700d0070077df009007", + "0xd4220ce00d7b60070ce0091cd0090ce0090740074220091cd0092e7009", + "0x2e0070910091cd0090910090230070071cd00900700d0070077fa0071cd", + "0x1cd0090a40090230070400091cd00938a0092e40070a40091cd009091009", + "0x900700d0070077df00900731b00731c0091cd00909300902800731b009", + "0x260070a10091cd00909100902e0070910091cd0090910090230070071cd", + "0x91cd0090a60097fb0070a60091cd00903900909a0070390091cd009007", + "0x902300738a0091cd00938a0092e400718e0091cd00942b0097fc00742b", + "0x91cd00918e0097fd0070930091cd0090930090280070a10091cd0090a1", + "0x71cd0092e80090720070071cd00900700d00718e0930a138a14500918e", + "0x909842e00d42400742e0091cd00900716b0070071cd0092e7009072007", + "0x738a0091cd00938a0092e40070ab0091cd0090a90095100070a90091cd", + "0x90ab0097fd0073ea0091cd0093ea0090280073e80091cd0093e8009023", + "0x92e80090720070071cd00900700d0070ab3ea3e838a1450090ab0091cd", + "0x43100d4240074310091cd00900716b0070071cd0092e70090720070071cd", + "0x91cd00938a0092e40074340091cd0094320095100074320091cd0093dd", + "0x97fd0073da0091cd0093da0090280073d70091cd0093d700902300738a", + "0x90720070071cd00900700d0074343da3d738a1450094340091cd009434", + "0x16b0070071cd0093a30097d60070071cd0092e70090720070071cd0092e8", + "0x1cd0094430095100074430091cd0093cc43500d4240074350091cd009007", + "0x2800708a0091cd00908a00902300738a0091cd00938a0092e400744d009", + "0x44d08708a38a14500944d0091cd00944d0097fd0070870091cd009087009", + "0x71cd0092e70090720070071cd0092e80090720070071cd00900700d007", + "0x91cd00900716b0070071cd00938c00945c0070071cd0092dd0097d6007", + "0x2e40070b10091cd0094510095100074510091cd0093ba44f00d42400744f", + "0x1cd0090810090280073a60091cd0093a600902300738a0091cd00938a009", + "0x900700d0070b10813a638a1450090b10091cd0090b10097fd007081009", + "0x2e70090720070071cd0092e80090720070071cd00939d0090400070071cd", + "0x945c0070071cd00938c00945c0070071cd0092dd0097d60070071cd009", + "0x46b0b200d1cd0094560097fe0074560091cd0090072610070071cd00906d", + "0x946b0b300d4240070b30091cd00900716b0070071cd0090b20097ff007", + "0x738a0091cd00938a0092e40074750091cd0094720095100074720091cd", + "0x94750097fd0070740091cd0090740090280070720091cd009072009023", + "0x92e80090720070071cd00900700d00747507407238a1450094750091cd", + "0x38c00945c0070071cd0092dd0097d60070071cd0092e70090720070071cd", + "0xd4240074780091cd00900716b0070071cd00906d00945c0070071cd009", + "0x1cd00938a0092e400747e0091cd00947b00951000747b0091cd00907b478", + "0x7fd00707a0091cd00907a0090280070100091cd00901000902300738a009", + "0x720070071cd00900700d00747e07a01038a14500947e0091cd00947e009", + "0x70071cd0092dd0097d60070071cd0092e70090720070071cd0092e8009", + "0x71cd00914000945c0070071cd0090500098000070071cd00914500945c", + "0xd7ea0074840091cd00936235f00d7ea0074810091cd00931e00902e007", + "0x91cd0090b800900f0070b80091cd0090070260074870091cd009360484", + "0x92e400749f0091cd0090b90097fc0070b90091cd00949d0097fb00749d", + "0x91cd00900d0090280074810091cd0094810090230074870091cd009487", + "0x1cd00900700d00749f00d48148714500949f0091cd00949f0097fd00700d", + "0x92e70090720070071cd0092e80090720070071cd00904f009040007007", + "0x14000945c0070071cd00914500945c0070071cd0092dd0097d60070071cd", + "0x2e40070ba0091cd00931e00902e0070071cd00905a00945c0070071cd009", + "0x1cd00900d00902800731b0091cd0090ba0090230070400091cd009048009", + "0x97fb0074ad0091cd0094ab00900f0074ab0091cd00900702600731c009", + "0x91cd0094bb0097fd0074bb0091cd0094af0097fc0074af0091cd0094ad", + "0x71cd0092e80090720070071cd00900700d0074bb31c31b0401450094bb", + "0x1cd00914500945c0070071cd0092dd0097d60070071cd0092e7009072007", + "0x904b0095100070071cd00905a00945c0070071cd00914000945c007007", + "0x731e0091cd00931e0090230070480091cd0090480092e40074bd0091cd", + "0xd31e0481450094bd0091cd0094bd0097fd00700d0091cd00900d009028", + "0x70093120070070091cd00900700903b0070070091cd0090078010074bd", + "0x91cd01b05a0098020070071cd0090073140070090090090090091cd009", + "0x8092e80098082e70098072e40098062e300980519b0098042e00098032dd", + "0x2800980f02300980e02c00980d0a700980c01e00980b01b00980a016009", + "0x260091cd0090078100070250091cd0090070300070071cd00900700d007", + "0x2f30090820070071cd0090290090340072f302900d1cd009025009032007", + "0x1990262dd14500905a8110070260091cd00902600903b0071990091cd009", + "0x930e0070071cd00900700d00703403203014081202e02b2f41401cd00d", + "0x820091cd0092f400902e0072f40091cd0092f40090230070071cd00902e", + "0x900731b00730b0091cd00902b0090280070380091cd009082009023007", + "0x3430e00d42400730e0091cd00900716b0070071cd00900700d007007813", + "0x70091cd0090070092e400703a0091cd00930f0094c300730f0091cd009", + "0x14000901600700d0091cd00900d0092e30070300091cd009030009023007", + "0x3a0091cd00903a00931e0070320091cd0090320090280071400091cd009", + "0x91cd0090070300070071cd00900700d00703a03214000d0300072dd009", + "0x903400703f31400d1cd00903b0090320073120091cd00900781000703b", + "0x3120091cd00931200903b0070400091cd00903f0090820070071cd009314", + "0x731f31e04414081504331c31b1401cd00d0403122e014500905a814007", + "0x31b0091cd00931b0090230070071cd00904300930e0070071cd00900700d", + "0x31c0090280070380091cd0090470090230070470091cd00931b00902e007", + "0x73240091cd0090480091680070480091cd00900702600730b0091cd009", + "0x90380090230070070091cd0090070092e400732c0091cd00932400942c", + "0x71400091cd00914000901600700d0091cd00900d0092e30070380091cd", + "0xd0380072dd00932c0091cd00932c00931e00730b0091cd00930b009028", + "0x4b00d42400704b0091cd00900716b0070071cd00900700d00732c30b140", + "0x91cd0090070092e40073300091cd00904c0094c300704c0091cd00931f", + "0x901600700d0091cd00900d0092e30070440091cd009044009023007007", + "0x91cd00933000931e00731e0091cd00931e0090280071400091cd009140", + "0x1cd0090074750070071cd00900700d00733031e14000d0440072dd009330", + "0x8180070071cd00904f00981700705004f00d1cd00919b009816007332009", + "0x1cd00933200903b0073380091cd0093360090ab0073360091cd009050009", + "0x91cd00905400903b00705405300d1cd00933233800d140819007332009", + "0x81b0070570091cd00900751200734033d00d1cd00905400700d81a007054", + "0x35300981d00735435300d1cd00934a00981c00734a0091cd00905734000d", + "0x3600091cd00935700951300735f35700d1cd00935400981e0070071cd009", + "0x36200932c0073600091cd0093600091440073620091cd00935f00981f007", + "0x36b0091cd00900759100736a0091cd00936236000d8200073620091cd009", + "0x914582200736a0091cd00936a00982100736b0091cd00936b009360007", + "0x71cd00900700d00738037d37814082337637536d1401cd00d36a36b145", + "0x14082438338100d1cd00d37633d00d2810073760091cd00937600903b007", + "0x902e00736d0091cd00936d0090230070071cd00900700d00706d02d03c", + "0x91cd0093830090790073830091cd00938300907400738a0091cd00936d", + "0x92e300738a0091cd00938a0090230073810091cd0093810092e400738c", + "0x91cd0093750090280071400091cd0091400090160070530091cd009053", + "0x700d00738c37514005338a3812dd00938c0091cd00938c00931e007375", + "0x78250070071cd00906d0090720070071cd00902d0090720070071cd009", + "0x71cd0093920097ff00707239200d1cd00938f0097fe00738f0091cd009", + "0x790094c30070790091cd00907207400d4240070740091cd00900716b007", + "0x36d0091cd00936d00902300703c0091cd00903c0092e40070100091cd009", + "0x3750090280071400091cd0091400090160070530091cd0090530092e3007", + "0x1037514005336d03c2dd0090100091cd00901000931e0073750091cd009", + "0x1cd00938007a00d42400707a0091cd00900716b0070071cd00900700d007", + "0x2300733d0091cd00933d0092e400707d0091cd00907b0094c300707b009", + "0x1cd0091400090160070530091cd0090530092e30073780091cd009378009", + "0x2dd00907d0091cd00907d00931e00737d0091cd00937d009028007140009", + "0x39d00d1cd0092e30098260070071cd00900700d00707d37d14005337833d", + "0x3a00090ab0073a00091cd00939e0098280070071cd00939d00982700739e", + "0x1cd0090810095110070813a600d1cd0093a300700d81a0073a30091cd009", + "0x900782b0073c20091cd00900782a0073bf0091cd0090078290073ba009", + "0x870091cd0093c53c23bf14082c00708a0091cd0090075910073c50091cd", + "0x1400090160070090091cd0090090090230073a60091cd0093a60092e4007", + "0x8a0091cd00908a0093600071450091cd0091450090280071400091cd009", + "0x3a62e082e0070870091cd00908700982d0073ba0091cd0093ba009821007", + "0x1cd00d3d700982f0073d73d408c3cf3cc05a1cd0090873ba08a145140009", + "0x70910091cd0093da0098310070071cd00900700d0073dd0098303da009", + "0x3cf00902e0070071cd00900700d0070920098330930091cd00d091009832", + "0x3cc0091cd0093cc0092e40073e80091cd0090930096f10070900091cd009", + "0x8c00901600700d0091cd00900d0092e30070900091cd009090009023007", + "0x3e80091cd0093e800931e0073d40091cd0093d400902800708c0091cd009", + "0x91cd00900716b0070071cd00900700d0073e83d408c00d0903cc2dd009", + "0x2e40074140091cd0090980094c30070980091cd0090923ea00d4240073ea", + "0x1cd00900d0092e30073cf0091cd0093cf0090230073cc0091cd0093cc009", + "0x31e0073d40091cd0093d400902800708c0091cd00908c00901600700d009", + "0x71cd00900700d0074143d408c00d3cf3cc2dd0094140091cd009414009", + "0x900716b0070071cd00909a0097ff00741a09a00d1cd0093dd0097fe007", + "0xcf0091cd0090cd0094c30070cd0091cd00941a00f00d42400700f0091cd", + "0xd0092e30073cf0091cd0093cf0090230073cc0091cd0093cc0092e4007", + "0x3d40091cd0093d400902800708c0091cd00908c00901600700d0091cd009", + "0x900700d0070cf3d408c00d3cf3cc2dd0090cf0091cd0090cf00931e007", + "0x4220ce1450092dd8350070a10a44220ce1451cd0092e40098340070071cd", + "0x71cd00900700d0070ab0a942e14083618e42b0a60391451cd00d0a10a4", + "0x42b00d8370074310091cd00903900902e0070390091cd009039009023007", + "0x91cd0094310090230074340091cd0094320098380074320091cd00918e", + "0x731b00744d0091cd0094340098390074430091cd0090a6009028007435", + "0x902e00742e0091cd00942e0090230070071cd00900700d00700783a009", + "0x91cd00944f0090230074510091cd0090ab00983b00744f0091cd00942e", + "0x983c00744d0091cd0094510098390074430091cd0090a9009028007435", + "0x91cd0094350090230070070091cd0090070092e40070b10091cd00944d", + "0x90280071400091cd00914000901600700d0091cd00900d0092e3007435", + "0x44314000d4350072dd0090b10091cd0090b100931e0074430091cd009443", + "0x914583e0070b245600d1cd0092e700983d0070071cd00900700d0070b1", + "0x70071cd00900700d00747847547214083f0b346b00d1cd00d0b2456145", + "0x1cd00900702600747b0091cd00946b00902e00746b0091cd00946b009023", + "0x280074840091cd00947b0090230074810091cd00947e00984000747e009", + "0x784200900731b0070b80091cd0094810098410074870091cd0090b3009", + "0x1cd00947200902e0074720091cd0094720090230070071cd00900700d007", + "0x280074840091cd00949d0090230070b90091cd00947800984300749d009", + "0x784200900731b0070b80091cd0090b90098410074870091cd009475009", + "0x1408454ab0ba49f1401cd00d2e81450091408440070071cd00900700d007", + "0x902e00749f0091cd00949f0090230070071cd00900700d0074bb4af4ad", + "0x91cd0094bd0090230074bf0091cd0094ab0098460074bd0091cd00949f", + "0x731b0070c00091cd0094bf0098470074c30091cd0090ba0090280074c4", + "0x902e0074ad0091cd0094ad0090230070071cd00900700d007007848009", + "0x91cd0094c20090230070c10091cd0094bb0098490074c20091cd0094ad", + "0x984a0070c00091cd0090c10098470074c30091cd0094af0090280074c4", + "0x91cd0094c40090230070070091cd0090070092e40074cc0091cd0090c0", + "0x90280071400091cd00914000901600700d0091cd00900d0092e30074c4", + "0x4c314000d4c40072dd0094cc0091cd0094cc00931e0074c30091cd0094c3", + "0xd14500900d84b0070071cd0090160090400070071cd00900700d0074cc", + "0xc20090230070071cd00900700d0074b54b74b814084c4b94c10c21401cd", + "0x4b40091cd0094b900984d0074b60091cd0090c200902e0070c20091cd009", + "0x4b400984e0070c80091cd0094c10090280074b30091cd0094b6009023007", + "0x4b80090230070071cd00900700d00700784f00900731b0074b20091cd009", + "0x4de0091cd0094b50098500070c90091cd0094b800902e0074b80091cd009", + "0x4de00984e0070c80091cd0094b70090280074b30091cd0090c9009023007", + "0x70091cd0090070092e40070ca0091cd0094b20098510074b20091cd009", + "0x14000901600700d0091cd00900d0092e30074b30091cd0094b3009023007", + "0xca0091cd0090ca00931e0070c80091cd0090c80090280071400091cd009", + "0x1cd00901b0090400070071cd00900700d0070ca0c814000d4b30072dd009", + "0x700d0074a64a54a71408534a84a94b11401cd00d14500900d852007007", + "0x74a40091cd0094b100902e0074b10091cd0094b10090230070071cd009", + "0x94a90090280070d00091cd0094a40090230074a30091cd0094a8009854", + "0x700d00700785600900731b0074a00091cd0094a30098550074a20091cd", + "0x70d30091cd0094a700902e0074a70091cd0094a70090230070071cd009", + "0x94a50090280070d00091cd0090d30090230070d10091cd0094a6009857", + "0x70d20091cd0094a00098580074a00091cd0090d10098550074a20091cd", + "0x900d0092e30070d00091cd0090d00090230070070091cd0090070092e4", + "0x74a20091cd0094a20090280071400091cd00914000901600700d0091cd", + "0x1cd00900700d0070d24a214000d0d00072dd0090d20091cd0090d200931e", + "0x85a0d54fe0d41401cd00d14500900d8590070071cd00901e009040007007", + "0x2e0070d40091cd0090d40090230070071cd00900700d0071eb49e4a1140", + "0x1cd0094980090230074970091cd0090d500985b0074980091cd0090d4009", + "0x31b0074940091cd00949700985c0074950091cd0094fe009028007496009", + "0x2e0074a10091cd0094a10090230070071cd00900700d00700785d009007", + "0x1cd0094930090230074920091cd0091eb00985e0074930091cd0094a1009", + "0x85f0074940091cd00949200985c0074950091cd00949e009028007496009", + "0x1cd0094960090230070070091cd0090070092e40074910091cd009494009", + "0x280071400091cd00914000901600700d0091cd00900d0092e3007496009", + "0x14000d4960072dd0094910091cd00949100931e0074950091cd009495009", + "0x86048f49000d1cd00d0a71450091405150070071cd00900700d007491495", + "0x2e0074900091cd0094900090230070071cd00900700d00748c48d48e140", + "0x91cd00948a00984000748a0091cd00900702600748b0091cd009490009", + "0x98410074870091cd00948f0090280074840091cd00948b009023007489", + "0x90230070071cd00900700d00700784200900731b0070b80091cd009489", + "0x91cd00948c0098430070e90091cd00948e00902e00748e0091cd00948e", + "0x98410074870091cd00948d0090280074840091cd0090e90090230070eb", + "0x98610070071cd00900700d00700784200900731b0070b80091cd0090eb", + "0x1408630f148300d1cd00d0ee4861450091458620070ee48600d1cd00902c", + "0x902e0074830091cd0094830090230070071cd00900700d0070f80f747d", + "0xfc0091cd0090ef0098400070ef0091cd0090070260070f90091cd009483", + "0xfc0098410074870091cd0090f10090280074840091cd0090f9009023007", + "0x47d0090230070071cd00900700d00700784200900731b0070b80091cd009", + "0xfe0091cd0090f800984300747a0091cd00947d00902e00747d0091cd009", + "0xfe0098410074870091cd0090f70090280074840091cd00947a009023007", + "0x70091cd0090070092e40071000091cd0090b80098640070b80091cd009", + "0x14000901600700d0091cd00900d0092e30074840091cd009484009023007", + "0x1000091cd00910000931e0074870091cd0094870090280071400091cd009", + "0x231450091408650070071cd00900700d00710048714000d4840072dd009", + "0x90230070071cd00900700d0070fd00c0fa1408661060f31031401cd00d", + "0x91cd0091060098670071040091cd00910300902e0071030091cd009103", + "0x98680074770091cd0090f300902800710f0091cd0091040090230070f2", + "0x90230070071cd00900700d00700786900900731b0071110091cd0090f2", + "0x91cd0090fd00986a00710d0091cd0090fa00902e0070fa0091cd0090fa", + "0x98680074770091cd00900c00902800710f0091cd00910d0090230071f9", + "0x91cd0090070092e400709f0091cd00911100986b0071110091cd0091f9", + "0x901600700d0091cd00900d0092e300710f0091cd00910f009023007007", + "0x91cd00909f00931e0074770091cd0094770090280071400091cd009140", + "0x902800986c0070071cd00900700d00709f47714000d10f0072dd00909f", + "0x46d46e1401cd00d46f1184710561450092dd86d00746f1184710561451cd", + "0x46e0091cd00946e0090230070071cd00900700d00724d46246714086e468", + "0x24c00902300724b0091cd00946800986f00724c0091cd00946e00902e007", + "0x2480091cd00924b0098700072490091cd00946d00902800724a0091cd009", + "0x4670091cd0094670090230070071cd00900700d00700787100900731b007", + "0x46100902300745c0091cd00924d0098720074610091cd00946700902e007", + "0x2480091cd00945c0098700072490091cd00946200902800724a0091cd009", + "0x24a0090230070070091cd0090070092e400745b0091cd009248009873007", + "0x1400091cd00914000901600700d0091cd00900d0092e300724a0091cd009", + "0x24a0072dd00945b0091cd00945b00931e0072490091cd009249009028007", + "0x300070090091cd0090074750070071cd0090070093b200745b24914000d", + "0x1400091cd00914000903b0071400091cd00900742000700d0091cd009007", + "0x3b00705a00900d1cd00900900916e0071450091cd00914000d00d426007", + "0x900900916e0072dd0091cd00905a14500d42600705a0091cd00905a009", + "0x91cd0092e02dd00d4260072e00091cd0092e000903b0072e000900d1cd", + "0x16b0072e30091cd00900919b00d4260070090091cd00900900903b00719b", + "0x1cd0092e70094c30072e70091cd0092e32e400d4240072e40091cd009007", + "0x71cd0090070091dd0072e80090092e80091cd0092e800931e0072e8009", + "0x91cd00900742000700d0091cd0090070300070090091cd009007475007", + "0x16e0071450091cd00914000d00d4260071400091cd00914000903b007140", + "0x5a14500d42600705a0091cd00905a00903b00705a00900d1cd009009009", + "0x91cd0092e000903b0072e000900d1cd00900900916e0072dd0091cd009", + "0x4260070090091cd00900900903b00719b0091cd0092e02dd00d4260072e0", + "0x92e32e400d4240072e40091cd00900716b0072e30091cd00900919b00d", + "0x92e80091cd0092e800931e0072e80091cd0092e70094c30072e70091cd", + "0x90070300070090091cd0090074750070071cd00900700927b0072e8009", + "0x4260071400091cd00914000903b0071400091cd00900742000700d0091cd", + "0x5a00903b00705a00900d1cd00900900916e0071450091cd00914000d00d", + "0xd1cd00900900916e0072dd0091cd00905a14500d42600705a0091cd009", + "0x719b0091cd0092e02dd00d4260072e00091cd0092e000903b0072e0009", + "0x900716b0072e30091cd00900919b00d4260070090091cd00900900903b", + "0x2e80091cd0092e70094c30072e70091cd0092e32e400d4240072e40091cd", + "0x4750070071cd0090070091f70072e80090092e80091cd0092e800931e007", + "0x71400091cd00900742000700d0091cd0090070300070090091cd009007", + "0x900916e0071450091cd00914000d00d4260071400091cd00914000903b", + "0x1cd00905a14500d42600705a0091cd00905a00903b00705a00900d1cd009", + "0x72e00091cd0092e000903b0072e000900d1cd00900900916e0072dd009", + "0x19b00d4260070090091cd00900900903b00719b0091cd0092e02dd00d426", + "0x91cd0092e32e400d4240072e40091cd00900716b0072e30091cd009009", + "0x2e80090092e80091cd0092e800931e0072e80091cd0092e70094c30072e7", + "0x91cd0090070300070090091cd0090074750070071cd009007009244007", + "0xd00d4260071400091cd00914000903b0071400091cd00900742000700d", + "0x1cd00905a00903b00705a00900d1cd00900900916e0071450091cd009140", + "0x2e000900d1cd00900900916e0072dd0091cd00905a14500d42600705a009", + "0x903b00719b0091cd0092e02dd00d4260072e00091cd0092e000903b007", + "0x91cd00900716b0072e30091cd00900919b00d4260070090091cd009009", + "0x31e0072e80091cd0092e70094c30072e70091cd0092e32e400d4240072e4", + "0x90074750070071cd0090070095140072e80090092e80091cd0092e8009", + "0x903b0071400091cd00900742000700d0091cd0090070300070090091cd", + "0x1cd00900900916e0071450091cd00914000d00d4260071400091cd009140", + "0x2dd0091cd00905a14500d42600705a0091cd00905a00903b00705a00900d", + "0xd4260072e00091cd0092e000903b0072e000900d1cd00900900916e007", + "0x900919b00d4260070090091cd00900900903b00719b0091cd0092e02dd", + "0x72e70091cd0092e32e400d4240072e40091cd00900716b0072e30091cd", + "0x8740072e80090092e80091cd0092e800931e0072e80091cd0092e70094c3", + "0x700d0091cd0090070300070090091cd0090074750070071cd009007009", + "0x914000d00d4260071400091cd00914000903b0071400091cd009007420", + "0x5a0091cd00905a00903b00705a00900d1cd00900900916e0071450091cd", + "0x3b0072e000900d1cd00900900916e0072dd0091cd00905a14500d426007", + "0x900900903b00719b0091cd0092e02dd00d4260072e00091cd0092e0009", + "0x72e40091cd00900716b0072e30091cd00900919b00d4260070090091cd", + "0x2e800931e0072e80091cd0092e70094c30072e70091cd0092e32e400d424", + "0x91cd0090074750070071cd0090070098750072e80090092e80091cd009", + "0x914000903b0071400091cd00900742000700d0091cd009007030007009", + "0x900d1cd00900900916e0071450091cd00914000d00d4260071400091cd", + "0x16e0072dd0091cd00905a14500d42600705a0091cd00905a00903b00705a", + "0x2e02dd00d4260072e00091cd0092e000903b0072e000900d1cd009009009", + "0x91cd00900919b00d4260070090091cd00900900903b00719b0091cd009", + "0x94c30072e70091cd0092e32e400d4240072e40091cd00900716b0072e3", + "0x70098760072e80090092e80091cd0092e800931e0072e80091cd0092e7", + "0x742000700d0091cd0090070300070090091cd0090074750070071cd009", + "0x91cd00914000d00d4260071400091cd00914000903b0071400091cd009", + "0x42600705a0091cd00905a00903b00705a00900d1cd00900900916e007145", + "0x2e000903b0072e000900d1cd00900900916e0072dd0091cd00905a14500d", + "0x91cd00900900903b00719b0091cd0092e02dd00d4260072e00091cd009", + "0xd4240072e40091cd00900716b0072e30091cd00900919b00d426007009", + "0x1cd0092e800931e0072e80091cd0092e70094c30072e70091cd0092e32e4", + "0x70090091cd0090074750070071cd00900700910f0072e80090092e8009", + "0x91cd00914000903b0071400091cd00900742000700d0091cd009007030", + "0x705a00900d1cd00900900916e0071450091cd00914000d00d426007140", + "0x900916e0072dd0091cd00905a14500d42600705a0091cd00905a00903b", + "0x1cd0092e02dd00d4260072e00091cd0092e000903b0072e000900d1cd009", + "0x72e30091cd00900919b00d4260070090091cd00900900903b00719b009", + "0x92e70094c30072e70091cd0092e32e400d4240072e40091cd00900716b", + "0x1cd0090070098770072e80090092e80091cd0092e800931e0072e80091cd", + "0x1cd00900742000700d0091cd0090070300070090091cd009007475007007", + "0x71450091cd00914000d00d4260071400091cd00914000903b007140009", + "0x14500d42600705a0091cd00905a00903b00705a00900d1cd00900900916e", + "0x1cd0092e000903b0072e000900d1cd00900900916e0072dd0091cd00905a", + "0x70090091cd00900900903b00719b0091cd0092e02dd00d4260072e0009", + "0x2e32e400d4240072e40091cd00900716b0072e30091cd00900919b00d426", + "0x2e80091cd0092e800931e0072e80091cd0092e70094c30072e70091cd009", + "0x70300070090091cd0090074750070071cd0090070094420072e8009009", + "0x71400091cd00914000903b0071400091cd00900742000700d0091cd009", + "0x903b00705a00900d1cd00900900916e0071450091cd00914000d00d426", + "0x1cd00900900916e0072dd0091cd00905a14500d42600705a0091cd00905a", + "0x19b0091cd0092e02dd00d4260072e00091cd0092e000903b0072e000900d", + "0x716b0072e30091cd00900919b00d4260070090091cd00900900903b007", + "0x91cd0092e70094c30072e70091cd0092e32e400d4240072e40091cd009", + "0x90070071cd0090073140072e80090092e80091cd0092e800931e0072e8", + "0x8790070071cd00900700d0072dd05a00d87814514000d1cd00d00900700d", + "0xd0072e319b00d87b0071cd00d2e000987a0072e000d00d1cd00900d009", + "0x72e70091cd0090070260072e40091cd00914500902e0070071cd009007", + "0x1400092e40070160091cd0092e800987d0072e80091cd0092e700d00d87c", + "0x160091cd00901600987e0072e40091cd0092e40090230071400091cd009", + "0x87f0070071cd0092e30093240070071cd00900700d0070162e4140140009", + "0x91cd0091400092e400701b0091cd00914500902e0070071cd00900d009", + "0x14016300719b0091cd00919b00909b00701b0091cd00901b009023007140", + "0x71cd00900700d00702c0a701e14000902c0a701e1401cd00919b01b140", + "0x1cd0090230098800070230091cd00900730f0070071cd00900d00987f007", + "0x87e0072dd0091cd0092dd00902300705a0091cd00905a0092e4007028009", + "0x3b0070070091cd0090078810070282dd05a1400090280091cd009028009", + "0x78820070090090090090091cd0090070093120070070091cd009007009", + "0x90091cd0090070093120070070091cd00900700903b0070070091cd009", + "0x3120070070091cd00900700903b0070070091cd009007883007009009009", + "0x700903b0070070091cd0090074ea0070090090090090091cd009007009", + "0x1cd0090078840070090090090090091cd0090070093120070070091cd009", + "0x90090090091cd0090070093120070070091cd00900700903b007007009", + "0x70093120070070091cd00900700903b0070070091cd009007885007009", + "0x1cd00900700903b0070070091cd0090078860070090090090090091cd009", + "0x70091cd0090078870070090090090090091cd009007009312007007009", + "0x70090090090090091cd0090070093120070070091cd00900700903b007", + "0x1cd0090070093120070070091cd00900700903b0070070091cd009007888", + "0x70091cd00900700903b0070070091cd009007889007009009009009009", + "0x3b0070070091cd00900788a0070090090090090091cd009007009312007", + "0x788b0070090090090090091cd0090070093120070070091cd009007009", + "0x90091cd0090070093120070070091cd00900700903b0070070091cd009", + "0x3120070070091cd00900700903b0070070091cd00900788c007009009009", + "0x700903b0070070091cd00900788d0070090090090090091cd009007009", + "0x1cd00900788e0070090090090090091cd0090070093120070070091cd009", + "0x90090090091cd0090070093120070070091cd00900700903b007007009", + "0x70093120070070091cd00900700903b0070070091cd00900788f007009", + "0x989214000989100d0091cd1450090098900070090090090090091cd009", + "0x72e02dd00d1cd00900d00938f0070071cd00900700d00705a009893145", + "0x71cd00900700d0072e72e400d8952e319b00d1cd00d2e02dd007140894", + "0x900731b0070160091cd0092e30090740072e80091cd00919b0092e4007", + "0x1cd0090073d10070071cd0092e70090720070071cd00900700d007007896", + "0x31e0072e40091cd0092e40092e400701e0091cd00901b0094c300701b009", + "0x14000938f0070071cd00900700d00701e2e400d00901e0091cd00901e009", + "0x2602500d89702802300d1cd00d02c0a70071403d300702c0a700d1cd009", + "0x1cd0090280090740072e80091cd0090230092e40070071cd00900700d007", + "0x1cd0090260090720070071cd00900700d00700789600900731b007016009", + "0x250092e40072f30091cd0090290094c30070290091cd0090073cb007007", + "0x900700d0072f302500d0092f30091cd0092f300931e0070250091cd009", + "0x2b1401cd0092f419900d8980072f419900d1cd00914500938f0070071cd", + "0x70340091cd00902b00921c0070320091cd00903000700d7ea00703002e", + "0x90320092e40070071cd00900700d0070820098990071cd00d034009414", + "0x70380091cd0090160090790070160091cd00902e0090740072e80091cd", + "0x70382e800d0090380091cd00903800931e0072e80091cd0092e80092e4", + "0x70071cd00902e0090720070071cd00908200941a0070071cd00900700d", + "0x1cd0090320092e400730e0091cd00930b0094c300730b0091cd00900789a", + "0x71cd00900700d00730e03200d00930e0091cd00930e00931e007032009", + "0x700789b0071cd00d03a30f00d7b600703a30f00d1cd00905a00938f007", + "0x3120091cd00903b00900f00703b0091cd0090070260070071cd00900700d", + "0x71cd00900700d00700789c00900731b0073140091cd0093120093cf007", + "0x90400093cf0070400091cd00903f00909a00703f0091cd009007026007", + "0x70070091cd0090070092e400731b0091cd00931400908c0073140091cd", + "0x89e00d0091cd2dd00900989d00731b00700d00931b0091cd00931b00931e", + "0x71cd00900700d0072e00098a22dd0098a105a0098a014500989f140009", + "0x72e40098a40071cd00d2e30098a30072e319b00d1cd00900d009190007", + "0xd0070078a500900731b0070071cd00919b00945c0070071cd00900700d", + "0x945c00701b0162e82e71451cd0092e419b0071408a60070071cd009007", + "0x91cd0092e80090fe00701e0091cd00901b2e700d7ea0070071cd009016", + "0x931e00701e0091cd00901e0092e40070a70091cd0092e80091000072e8", + "0x91400091900070071cd00900700d0070a701e00d0090a70091cd0090a7", + "0x71cd00900700d0070280098a70071cd00d0230098a300702302c00d1cd", + "0x1cd0090250094c30070250091cd00900741d0070071cd00902c00945c007", + "0xd0090260091cd00902600931e0070070091cd0090070092e4007026009", + "0x1992f30291451cd00902802c0071408a60070071cd00900700d007026007", + "0x90fe00702b0091cd0092f402900d7ea0070071cd0092f300945c0072f4", + "0x91cd00902b0092e400702e0091cd0091990091000071990091cd009199", + "0x70071cd00900700d00702e02b00d00902e0091cd00902e00931e00702b", + "0x91d000708203400d1cd0090300091d000703203000d1cd009145009190", + "0x930b0097b400730e08200d1cd0090820097b400730b03800d1cd009032", + "0x731431200d8a803b03a00d1cd00d30f30e0071403d300730f30b00d1cd", + "0x71cd00d30b08200d7b60070071cd00903b0090720070071cd00900700d", + "0x90340090720070071cd0090380090720070071cd00900700d0070078a9", + "0x900700d0070078aa00900731b00703f0091cd00903a0092e40070071cd", + "0x700d00704331c00d8ab31b04000d1cd00d03803403a1403d30070071cd", + "0x2600703f0091cd0090400092e40070071cd00931b0090720070071cd009", + "0x91cd00903f0097dd00731e0091cd00904400900f0070440091cd009007", + "0x1cd00900700d0070078ac00900731b0070470091cd00931e0093cf00731f", + "0x900731b0070480091cd00931c0092e40070071cd009043009072007007", + "0x90820090720070071cd0093140090720070071cd00900700d0070078ad", + "0x30b0090720070071cd0090340090720070071cd0090380090720070071cd", + "0x9a0073240091cd0090070260070480091cd0093120092e40070071cd009", + "0x1cd00932c0093cf00731f0091cd0090480097dd00732c0091cd009324009", + "0x31e00731f0091cd00931f0092e400704b0091cd00904700908c007047009", + "0x5a0091d00070071cd00900700d00704b31f00d00904b0091cd00904b009", + "0x1cd00900700d0073320098ae0071cd00d04c0091bf00733004c00d1cd009", + "0x78b00070071cd00900700d00704f0098af0071cd00d3300091bf007007", + "0x70091cd0090070092e40073360091cd0090500094c30070500091cd009", + "0x2630070071cd00900700d00733600700d0093360091cd00933600931e007", + "0x1cd0090530093ce0070530091cd00933804f00d1c20073380091cd009007", + "0x90740073400091cd00933d00907400733d0091cd00900776d007054009", + "0x72630070071cd00900700d0070078b100900731b0070570091cd009054", + "0x91cd0093530093ce0073530091cd00934a33200d1c200734a0091cd009", + "0x731b0070570091cd0093300090740073400091cd009354009074007354", + "0x1c500735f35700d1cd0092dd0091d00070071cd00900700d0070078b1009", + "0x1cd00d35f0091c50070071cd00900700d0073600098b20071cd00d357009", + "0x94c300736a0091cd0090078b40070071cd00900700d0073620098b3007", + "0x91cd00936b00931e0070070091cd0090070092e400736b0091cd00936a", + "0x3c900736d0091cd0090072630070071cd00900700d00736b00700d00936b", + "0x1cd0090078b50073760091cd0093750093c70073750091cd00936d36200d", + "0x31b0070570091cd0093760090740073400091cd009378009074007378009", + "0xd3c900737d0091cd0090072630070071cd00900700d0070078b1009007", + "0x1cd0093810090740073810091cd0093800093c70073800091cd00937d360", + "0x73830091cd00905734000d3b60070570091cd00935f009074007340009", + "0x90070092e400703c0091cd0093830091000073830091cd0093830090fe", + "0x1cd00900700d00703c00700d00903c0091cd00903c00931e0070070091cd", + "0xd4eb0072e00091cd0092e00098b60070070091cd0090070092e4007007", + "0x14000d1cd00d00900700d8b700706d02d00d00906d02d00d1cd0092e0007", + "0x2e000d1cd00d00d14000d8b90070071cd00900700d0072dd05a00d8b8145", + "0x8bc0072e70091cd0090078bb0070071cd00900700d0072e42e300d8ba19b", + "0x90078be0070160091cd0092e814500d8bd0072e82e700d1cd0092e7009", + "0x160091cd0090160098c000701e0091cd00901b19b00d8bf00701b0091cd", + "0x2302c0a71401cd00901e0162e01408c200701e0091cd00901e0098c1007", + "0x70071cd00900700d0070260098c402502800d1cd00d02c0a700d8c3007", + "0x2500d8c70072f30091cd0090290098c60070290091cd0092e702300d8c5", + "0x91cd0092f40098c90072f40091cd0091990098c80071990091cd0092f3", + "0x2800d00902b0091cd00902b0098ca0070280091cd0090280092e400702b", + "0x1cd0092e70098cb0070071cd0090230094ec0070071cd00900700d00702b", + "0x260092e40070300091cd00902e0098cd00702e0091cd0090078cc007007", + "0x900700d00703002600d0090300091cd0090300098ca0070260091cd009", + "0x8bd00703403200d1cd0090320098bc0070320091cd0090078bb0070071cd", + "0x822e31408ce0070820091cd0090820098c00070820091cd00903414500d", + "0x30b00d8cf00730f03200d1cd0090320098bc00730e30b0381401cd0092e4", + "0x1cd00903230e00d8d100703b0091cd00903a0098d000703a0091cd00930f", + "0x703f0091cd00931403b00d8c70073140091cd0093120098d2007312009", + "0x90380092e400731b0091cd0090400098c90070400091cd00903f0098c8", + "0x1cd00900700d00731b03800d00931b0091cd00931b0098ca0070380091cd", + "0x1cd00900700d00731e04400d8d304331c00d1cd00d00d05a00d8b9007007", + "0x98c10070470091cd00931f04300d8bf00731f0091cd0090078be007007", + "0x78bb00732c3240481401cd0090472dd31c1408d40070470091cd009047", + "0x91cd00904c0098c600704c0091cd00904b32400d8c500704b0091cd009", + "0x8c800704f0091cd00933233000d8c70073320091cd00932c0098d5007330", + "0x1cd0090480092e40073360091cd0090500098c90070500091cd00904f009", + "0x71cd00900700d00733604800d0093360091cd0093360098ca007048009", + "0x33d0091cd0090530098d50070540533381401cd00931e2dd0441408d6007", + "0x98c80070570091cd00934033d00d8c70073400091cd0090540098d7007", + "0x91cd0093380092e40073530091cd00934a0098c900734a0091cd009057", + "0x70091cd0090078d800735333800d0093530091cd0093530098ca007338", + "0x70090090090090091cd0090070093120070070091cd00900700903b007", + "0x1cd0090070093120070070091cd00900700903b0070070091cd0090078d9", + "0x8dd1450098dc1400098db00d0091cd1450090098da007009009009009009", + "0x1408de0072e02dd00d1cd00900d0091d40070071cd00900700d00705a009", + "0x900700d0070162e800d8e02e72e400d8df2e319b00d1cd1402e02dd007", + "0x31b00701e0091cd0092e300912900701b0091cd00919b0092e40070071cd", + "0x78e20070071cd0092e70093b20070071cd00900700d0070078e1009007", + "0x2e40091cd0092e40092e400702c0091cd0090a70094c30070a70091cd009", + "0x3b20070071cd00900700d00702c2e400d00902c0091cd00902c00931e007", + "0x280091cd0090230094c30070230091cd0090073a10070071cd009016009", + "0x282e800d0090280091cd00902800931e0072e80091cd0092e80092e4007", + "0x250071404ed00702602500d1cd0091400091d40070071cd00900700d007", + "0x71cd00900700d00702e02b00d8e42f419900d8e32f302900d1cd140026", + "0x900731b00701e0091cd0092f300912900701b0091cd0090290092e4007", + "0x1cd00900739b0070071cd0092f40093b20070071cd00900700d0070078e1", + "0x31e0071990091cd0091990092e40070320091cd0090300094c3007030009", + "0x2e0093b20070071cd00900700d00703219900d0090320091cd009032009", + "0x2e40070820091cd0090340094c30070340091cd0090078e50070071cd009", + "0xd00708202b00d0090820091cd00908200931e00702b0091cd00902b009", + "0x1cd00930b03800d8e600730b03800d1cd0091450091d40070071cd009007", + "0x3a30f00d1cd00d30e00700d8e700730e0091cd00930e00913200730e009", + "0x912900701b0091cd00930f0092e40070071cd00900700d00703b0098e8", + "0x91cd00901b0092e40073120091cd00901e00945400701e0091cd00903a", + "0x70071cd00900700d00731201b00d0093120091cd00931200931e00701b", + "0x1cd00903b0092e400703f0091cd0093140094c30073140091cd0090078e9", + "0x71cd00900700d00703f03b00d00903f0091cd00903f00931e00703b009", + "0x70078eb0071cd00d31b04000d8ea00731b04000d1cd00905a0091d4007", + "0x430091cd00931c00900f00731c0091cd0090070260070071cd00900700d", + "0x71cd00900700d0070078ec00900731b0070440091cd0090430093cf007", + "0x931f0093cf00731f0091cd00931e00909a00731e0091cd009007026007", + "0x70070091cd0090070092e40070470091cd00904400908c0070440091cd", + "0x14000d1cd00d00900700d8ed00704700700d0090470091cd00904700931e", + "0x2e000d1cd00d00d14000d8ef0070071cd00900700d0072dd05a00d8ee145", + "0x8bc0072e70091cd0090078bb0070071cd00900700d0072e42e300d8f019b", + "0x90078be0070160091cd0092e814500d8f10072e82e700d1cd0092e7009", + "0x160091cd0090160098f300701e0091cd00901b19b00d8f200701b0091cd", + "0x2302c0a71401cd00901e0162e01408f500701e0091cd00901e0098f4007", + "0x70071cd00900700d0070260098f702502800d1cd00d02c0a700d8f6007", + "0x2500d8fa0072f30091cd0090290098f90070290091cd0092e702300d8f8", + "0x91cd0092f40098fc0072f40091cd0091990098fb0071990091cd0092f3", + "0x2800d00902b0091cd00902b0098fd0070280091cd0090280092e400702b", + "0x1cd0092e70098cb0070071cd0090230098fe0070071cd00900700d00702b", + "0x260092e40070300091cd00902e0098ff00702e0091cd0090078cc007007", + "0x900700d00703002600d0090300091cd0090300098fd0070260091cd009", + "0x8f100703403200d1cd0090320098bc0070320091cd0090078bb0070071cd", + "0x822e31409000070820091cd0090820098f30070820091cd00903414500d", + "0x30b00d90100730f03200d1cd0090320098bc00730e30b0381401cd0092e4", + "0x1cd00903230e00d90200703b0091cd00903a00951600703a0091cd00930f", + "0x703f0091cd00931403b00d8fa0073140091cd009312009903007312009", + "0x90380092e400731b0091cd0090400098fc0070400091cd00903f0098fb", + "0x1cd00900700d00731b03800d00931b0091cd00931b0098fd0070380091cd", + "0x1cd00900700d00731e04400d90404331c00d1cd00d00d05a00d8ef007007", + "0x98f40070470091cd00931f04300d8f200731f0091cd0090078be007007", + "0x78bb00732c3240481401cd0090472dd31c1409050070470091cd009047", + "0x91cd00904c0098f900704c0091cd00904b32400d8f800704b0091cd009", + "0x8fb00704f0091cd00933233000d8fa0073320091cd00932c009906007330", + "0x1cd0090480092e40073360091cd0090500098fc0070500091cd00904f009", + "0x71cd00900700d00733604800d0093360091cd0093360098fd007048009", + "0x33d0091cd0090530099060070540533381401cd00931e2dd044140907007", + "0x98fb0070570091cd00934033d00d8fa0073400091cd009054009908007", + "0x91cd0093380092e40073530091cd00934a0098fc00734a0091cd009057", + "0x70091cd00900790900735333800d0093530091cd0093530098fd007338", + "0x70090090090090091cd0090070093120070070091cd00900700903b007", + "0x1cd0090070093120070070091cd00900700903b0070070091cd00900790a", + "0x90e14500990d14000990c00d0091cd14500900990b007009009009009009", + "0x14090f0072e02dd00d1cd00900d0093970070071cd00900700d00705a009", + "0x900700d0070162e800d9112e72e400d9102e319b00d1cd1402e02dd007", + "0x31b00701e0091cd0092e300913200701b0091cd00919b0092e40070071cd", + "0x79130070071cd0092e70091dd0070071cd00900700d007007912009007", + "0x2e40091cd0092e40092e400702c0091cd0090a70094c30070a70091cd009", + "0x1dd0070071cd00900700d00702c2e400d00902c0091cd00902c00931e007", + "0x280091cd0090230094c30070230091cd0090071e10070071cd009016009", + "0x282e800d0090280091cd00902800931e0072e80091cd0092e80092e4007", + "0x2500714091400702602500d1cd0091400093970070071cd00900700d007", + "0x71cd00900700d00702e02b00d9162f419900d9152f302900d1cd140026", + "0x900731b00701e0091cd0092f300913200701b0091cd0090290092e4007", + "0x1cd0090072760070071cd0092f40091dd0070071cd00900700d007007912", + "0x31e0071990091cd0091990092e40070320091cd0090300094c3007030009", + "0x2e0091dd0070071cd00900700d00703219900d0090320091cd009032009", + "0x2e40070820091cd0090340094c30070340091cd0090079170070071cd009", + "0xd00708202b00d0090820091cd00908200931e00702b0091cd00902b009", + "0x1cd00930b03800d91800730b03800d1cd0091450093970070071cd009007", + "0x3a30f00d1cd00d30e00700d91900730e0091cd00930e00913600730e009", + "0x913200701b0091cd00930f0092e40070071cd00900700d00703b00991a", + "0x91cd00901b0092e40073120091cd00901e00945300701e0091cd00903a", + "0x70071cd00900700d00731201b00d0093120091cd00931200931e00701b", + "0x1cd00903b0092e400703f0091cd0093140094c30073140091cd00900791b", + "0x71cd00900700d00703f03b00d00903f0091cd00903f00931e00703b009", + "0x700791d0071cd00d31b04000d91c00731b04000d1cd00905a009397007", + "0x430091cd00931c00900f00731c0091cd0090070260070071cd00900700d", + "0x71cd00900700d00700791e00900731b0070440091cd0090430093cf007", + "0x931f0093cf00731f0091cd00931e00909a00731e0091cd009007026007", + "0x70070091cd0090070092e40070470091cd00904400908c0070440091cd", + "0x14000d1cd00d00900700d91f00704700700d0090470091cd00904700931e", + "0x2e000d1cd00d00d14000d9210070071cd00900700d0072dd05a00d920145", + "0x8bc0072e70091cd0090078bb0070071cd00900700d0072e42e300d92219b", + "0x90078be0070160091cd0092e814500d9230072e82e700d1cd0092e7009", + "0x160091cd00901600992500701e0091cd00901b19b00d92400701b0091cd", + "0x2302c0a71401cd00901e0162e014092600701e0091cd00901e009517007", + "0x70071cd00900700d00702600992802502800d1cd00d02c0a700d927007", + "0x2500d92b0072f30091cd00902900992a0070290091cd0092e702300d929", + "0x91cd0092f400992d0072f40091cd00919900992c0071990091cd0092f3", + "0x2800d00902b0091cd00902b00992e0070280091cd0090280092e400702b", + "0x1cd0092e70098cb0070071cd00902300992f0070071cd00900700d00702b", + "0x260092e40070300091cd00902e00993000702e0091cd0090078cc007007", + "0x900700d00703002600d0090300091cd00903000992e0070260091cd009", + "0x92300703403200d1cd0090320098bc0070320091cd0090078bb0070071cd", + "0x822e31409310070820091cd0090820099250070820091cd00903414500d", + "0x30b00d93200730f03200d1cd0090320098bc00730e30b0381401cd0092e4", + "0x1cd00903230e00d93400703b0091cd00903a00993300703a0091cd00930f", + "0x703f0091cd00931403b00d92b0073140091cd009312009935007312009", + "0x90380092e400731b0091cd00904000992d0070400091cd00903f00992c", + "0x1cd00900700d00731b03800d00931b0091cd00931b00992e0070380091cd", + "0x1cd00900700d00731e04400d93604331c00d1cd00d00d05a00d921007007", + "0x95170070470091cd00931f04300d92400731f0091cd0090078be007007", + "0x78bb00732c3240481401cd0090472dd31c1409370070470091cd009047", + "0x91cd00904c00992a00704c0091cd00904b32400d92900704b0091cd009", + "0x92c00704f0091cd00933233000d92b0073320091cd00932c009938007330", + "0x1cd0090480092e40073360091cd00905000992d0070500091cd00904f009", + "0x71cd00900700d00733604800d0093360091cd00933600992e007048009", + "0x33d0091cd0090530099380070540533381401cd00931e2dd0441404ee007", + "0x992c0070570091cd00934033d00d92b0073400091cd009054009939007", + "0x91cd0093380092e40073530091cd00934a00992d00734a0091cd009057", + "0x70091cd00900793a00735333800d0093530091cd00935300992e007338", + "0x70090090090090091cd0090070093120070070091cd00900700903b007", + "0x1cd0090070093120070070091cd00900700903b0070070091cd00900793b", + "0x93f14500993e14000993d00d0091cd14500900993c007009009009009009", + "0x1409400072e02dd00d1cd00900d0093850070071cd00900700d00705a009", + "0x900700d0070162e800d9422e72e400d9412e319b00d1cd1402e02dd007", + "0x31b00701e0091cd0092e300913600701b0091cd00919b0092e40070071cd", + "0x79440070071cd0092e700927b0070071cd00900700d007007943009007", + "0x2e40091cd0092e40092e400702c0091cd0090a70094c30070a70091cd009", + "0x27b0070071cd00900700d00702c2e400d00902c0091cd00902c00931e007", + "0x280091cd0090230094c30070230091cd0090073720070071cd009016009", + "0x282e800d0090280091cd00902800931e0072e80091cd0092e80092e4007", + "0x2500714094500702602500d1cd0091400093850070071cd00900700d007", + "0x71cd00900700d00702e02b00d9472f419900d9462f302900d1cd140026", + "0x900731b00701e0091cd0092f300913600701b0091cd0090290092e4007", + "0x1cd0090073680070071cd0092f400927b0070071cd00900700d007007943", + "0x31e0071990091cd0091990092e40070320091cd0090300094c3007030009", + "0x2e00927b0070071cd00900700d00703219900d0090320091cd009032009", + "0x2e40070820091cd0090340094c30070340091cd0090079480070071cd009", + "0xd00708202b00d0090820091cd00908200931e00702b0091cd00902b009", + "0x1cd00930b03800d94900730b03800d1cd0091450093850070071cd009007", + "0x3a30f00d1cd00d30e00700d94a00730e0091cd00930e00945000730e009", + "0x913600701b0091cd00930f0092e40070071cd00900700d00703b00994b", + "0x91cd00901b0092e40073120091cd00901e00913800701e0091cd00903a", + "0x70071cd00900700d00731201b00d0093120091cd00931200931e00701b", + "0x1cd00903b0092e400703f0091cd0093140094c30073140091cd00900794c", + "0x71cd00900700d00703f03b00d00903f0091cd00903f00931e00703b009", + "0x700794e0071cd00d31b04000d94d00731b04000d1cd00905a009385007", + "0x430091cd00931c00900f00731c0091cd0090070260070071cd00900700d", + "0x71cd00900700d00700794f00900731b0070440091cd0090430093cf007", + "0x931f0093cf00731f0091cd00931e00909a00731e0091cd009007026007", + "0x70070091cd0090070092e40070470091cd00904400908c0070440091cd", + "0x14000d1cd00d00900700d95000704700700d0090470091cd00904700931e", + "0x2e000d1cd00d00d14000d9520070071cd00900700d0072dd05a00d951145", + "0x8bc0072e70091cd0090078bb0070071cd00900700d0072e42e300d95319b", + "0x90078be0070160091cd0092e814500d9540072e82e700d1cd0092e7009", + "0x160091cd00901600995600701e0091cd00901b19b00d95500701b0091cd", + "0x2302c0a71401cd00901e0162e014095800701e0091cd00901e009957007", + "0x70071cd00900700d00702600995a02502800d1cd00d02c0a700d959007", + "0x2500d95d0072f30091cd00902900995c0070290091cd0092e702300d95b", + "0x91cd0092f400995e0072f40091cd0091990095180071990091cd0092f3", + "0x2800d00902b0091cd00902b00995f0070280091cd0090280092e400702b", + "0x1cd0092e70098cb0070071cd0090230099600070071cd00900700d00702b", + "0x260092e40070300091cd00902e00996100702e0091cd0090078cc007007", + "0x900700d00703002600d0090300091cd00903000995f0070260091cd009", + "0x95400703403200d1cd0090320098bc0070320091cd0090078bb0070071cd", + "0x822e31409620070820091cd0090820099560070820091cd00903414500d", + "0x30b00d96300730f03200d1cd0090320098bc00730e30b0381401cd0092e4", + "0x1cd00903230e00d96500703b0091cd00903a00996400703a0091cd00930f", + "0x703f0091cd00931403b00d95d0073140091cd009312009966007312009", + "0x90380092e400731b0091cd00904000995e0070400091cd00903f009518", + "0x1cd00900700d00731b03800d00931b0091cd00931b00995f0070380091cd", + "0x1cd00900700d00731e04400d96704331c00d1cd00d00d05a00d952007007", + "0x99570070470091cd00931f04300d95500731f0091cd0090078be007007", + "0x78bb00732c3240481401cd0090472dd31c1409680070470091cd009047", + "0x91cd00904c00995c00704c0091cd00904b32400d95b00704b0091cd009", + "0x51800704f0091cd00933233000d95d0073320091cd00932c009969007330", + "0x1cd0090480092e40073360091cd00905000995e0070500091cd00904f009", + "0x71cd00900700d00733604800d0093360091cd00933600995f007048009", + "0x33d0091cd0090530099690070540533381401cd00931e2dd04414096a007", + "0x95180070570091cd00934033d00d95d0073400091cd00905400996b007", + "0x91cd0093380092e40073530091cd00934a00995e00734a0091cd009057", + "0x70091cd00900796c00735333800d0093530091cd00935300995f007338", + "0x70090090090090091cd0090070093120070070091cd00900700903b007", + "0x1cd0090070093120070070091cd00900700903b0070070091cd00900796d", + "0x97114500997014000996f00d0091cd14500900996e007009009009009009", + "0x1409720072e02dd00d1cd00900d00935c0070071cd00900700d00705a009", + "0x900700d0070162e800d9742e72e400d9732e319b00d1cd1402e02dd007", + "0x31b00701e0091cd0092e300945000701b0091cd00919b0092e40070071cd", + "0x79760070071cd0092e70091f70070071cd00900700d007007975009007", + "0x2e40091cd0092e40092e400702c0091cd0090a70094c30070a70091cd009", + "0x1f70070071cd00900700d00702c2e400d00902c0091cd00902c00931e007", + "0x280091cd0090230094c30070230091cd0090071fb0070071cd009016009", + "0x282e800d0090280091cd00902800931e0072e80091cd0092e80092e4007", + "0x2500714097700702602500d1cd00914000935c0070071cd00900700d007", + "0x71cd00900700d00702e02b00d9792f419900d9782f302900d1cd140026", + "0x900731b00701e0091cd0092f300945000701b0091cd0090290092e4007", + "0x1cd0090073430070071cd0092f40091f70070071cd00900700d007007975", + "0x31e0071990091cd0091990092e40070320091cd0090300094c3007030009", + "0x2e0091f70070071cd00900700d00703219900d0090320091cd009032009", + "0x2e40070820091cd0090340094c30070340091cd00900797a0070071cd009", + "0xd00708202b00d0090820091cd00908200931e00702b0091cd00902b009", + "0x1cd00930b03800d97b00730b03800d1cd00914500935c0070071cd009007", + "0x3a30f00d1cd00d30e00700d97c00730e0091cd00930e00913b00730e009", + "0x945000701b0091cd00930f0092e40070071cd00900700d00703b00997d", + "0x91cd00901b0092e40073120091cd00901e00908e00701e0091cd00903a", + "0x70071cd00900700d00731201b00d0093120091cd00931200931e00701b", + "0x1cd00903b0092e400703f0091cd0093140094c30073140091cd009007519", + "0x71cd00900700d00703f03b00d00903f0091cd00903f00931e00703b009", + "0x700797f0071cd00d31b04000d97e00731b04000d1cd00905a00935c007", + "0x430091cd00931c00900f00731c0091cd0090070260070071cd00900700d", + "0x71cd00900700d00700798000900731b0070440091cd0090430093cf007", + "0x931f0093cf00731f0091cd00931e00909a00731e0091cd009007026007", + "0x70070091cd0090070092e40070470091cd00904400908c0070440091cd", + "0x14000d1cd00d00900700d98100704700700d0090470091cd00904700931e", + "0x2e000d1cd00d00d14000d9830070071cd00900700d0072dd05a00d982145", + "0x8bc0072e70091cd0090078bb0070071cd00900700d0072e42e300d98419b", + "0x90078be0070160091cd0092e814500d9850072e82e700d1cd0092e7009", + "0x160091cd00901600998700701e0091cd00901b19b00d98600701b0091cd", + "0x2302c0a71401cd00901e0162e014098900701e0091cd00901e009988007", + "0x70071cd00900700d00702600998b02502800d1cd00d02c0a700d98a007", + "0x2500d98e0072f30091cd00902900998d0070290091cd0092e702300d98c", + "0x91cd0092f40099900072f40091cd00919900998f0071990091cd0092f3", + "0x2800d00902b0091cd00902b0099910070280091cd0090280092e400702b", + "0x1cd0092e70098cb0070071cd0090230099920070071cd00900700d00702b", + "0x260092e40070300091cd00902e00999300702e0091cd0090078cc007007", + "0x900700d00703002600d0090300091cd0090300099910070260091cd009", + "0x98500703403200d1cd0090320098bc0070320091cd0090078bb0070071cd", + "0x822e31404ef0070820091cd0090820099870070820091cd00903414500d", + "0x30b00d99400730f03200d1cd0090320098bc00730e30b0381401cd0092e4", + "0x1cd00903230e00d99600703b0091cd00903a00999500703a0091cd00930f", + "0x703f0091cd00931403b00d98e0073140091cd009312009997007312009", + "0x90380092e400731b0091cd0090400099900070400091cd00903f00998f", + "0x1cd00900700d00731b03800d00931b0091cd00931b0099910070380091cd", + "0x1cd00900700d00731e04400d99804331c00d1cd00d00d05a00d983007007", + "0x99880070470091cd00931f04300d98600731f0091cd0090078be007007", + "0x78bb00732c3240481401cd0090472dd31c1409990070470091cd009047", + "0x91cd00904c00998d00704c0091cd00904b32400d98c00704b0091cd009", + "0x98f00704f0091cd00933233000d98e0073320091cd00932c00999a007330", + "0x1cd0090480092e40073360091cd0090500099900070500091cd00904f009", + "0x71cd00900700d00733604800d0093360091cd009336009991007048009", + "0x33d0091cd00905300999a0070540533381401cd00931e2dd04414099b007", + "0x998f0070570091cd00934033d00d98e0073400091cd00905400999c007", + "0x91cd0093380092e40073530091cd00934a00999000734a0091cd009057", + "0x70091cd00900799d00735333800d0093530091cd009353009991007338", + "0x70090090090090091cd0090070093120070070091cd00900700903b007", + "0x1cd0090070093120070070091cd00900700903b0070070091cd00900799e", + "0x9a21450099a11400099a000d0091cd14500900999f007009009009009009", + "0x1409a30072e02dd00d1cd00900d0092070070071cd00900700d00705a009", + "0x900700d0070162e800d9a52e72e400d9a42e319b00d1cd1402e02dd007", + "0x31b00701e0091cd0092e300913b00701b0091cd00919b0092e40070071cd", + "0x79a70070071cd0092e70092440070071cd00900700d0070079a6009007", + "0x2e40091cd0092e40092e400702c0091cd0090a70094c30070a70091cd009", + "0x2440070071cd00900700d00702c2e400d00902c0091cd00902c00931e007", + "0x280091cd0090230094c30070230091cd0090072100070071cd009016009", + "0x282e800d0090280091cd00902800931e0072e80091cd0092e80092e4007", + "0x250071409a800702602500d1cd0091400092070070071cd00900700d007", + "0x71cd00900700d00702e02b00d9aa2f419900d9a92f302900d1cd140026", + "0x1e00913a00701e0091cd0092f300913b00701b0091cd0090290092e4007", + "0x300091cd00903000931e00701b0091cd00901b0092e40070300091cd009", + "0x724f0070071cd0092f40092440070071cd00900700d00703001b00d009", + "0x1990091cd0091990092e40070340091cd0090320094c30070320091cd009", + "0x2440070071cd00900700d00703419900d0090340091cd00903400931e007", + "0x380091cd0090820094c30070820091cd0090079ab0070071cd00902e009", + "0x3802b00d0090380091cd00903800931e00702b0091cd00902b0092e4007", + "0x90070092e400730e30b00d1cd0091450092070070071cd00900700d007", + "0x730e0091cd00930e00913b00730b0091cd00930b00913b0070070091cd", + "0x99ae03b0091cd00d03a0099ad00703a30f00d1cd00930e30b0071409ac", + "0x931400913b0073140091cd00903b0099af0070071cd00900700d007312", + "0x730f0091cd00930f0092e400703f0091cd00931400913a0073140091cd", + "0x94c30070071cd00900700d00703f30f00d00903f0091cd00903f00931e", + "0x91cd00904000931e00730f0091cd00930f0092e40070400091cd009312", + "0x31c31b00d1cd00905a0092070070071cd00900700d00704030f00d009040", + "0x90070260070071cd00900700d0070079b10071cd00d31c31b00d9b0007", + "0x731e0091cd0090440093cf0070440091cd00904300900f0070430091cd", + "0x9a00731f0091cd0090070260070071cd00900700d0070079b200900731b", + "0x1cd00931e00908c00731e0091cd0090470093cf0070470091cd00931f009", + "0xd0090480091cd00904800931e0070070091cd0090070092e4007048009", + "0x90070300070090091cd0090074750070071cd009007009789007048007", + "0x4260071400091cd00914000903b0071400091cd00900742000700d0091cd", + "0x5a00903b00705a00900d1cd00900900916e0071450091cd00914000d00d", + "0xd1cd00900900916e0072dd0091cd00905a14500d42600705a0091cd009", + "0x719b0091cd0092e02dd00d4260072e00091cd0092e000903b0072e0009", + "0x900716b0072e30091cd00900919b00d4260070090091cd00900900903b", + "0x2e80091cd0092e70094c30072e70091cd0092e32e400d4240072e40091cd", + "0x4750070071cd0090070099b30072e80090092e80091cd0092e800931e007", + "0x71400091cd00900742000700d0091cd0090070300070090091cd009007", + "0x900916e0071450091cd00914000d00d4260071400091cd00914000903b", + "0x1cd00905a14500d42600705a0091cd00905a00903b00705a00900d1cd009", + "0x72e00091cd0092e000903b0072e000900d1cd00900900916e0072dd009", + "0x19b00d4260070090091cd00900900903b00719b0091cd0092e02dd00d426", + "0x91cd0092e32e400d4240072e40091cd00900716b0072e30091cd009009", + "0x2e80090092e80091cd0092e800931e0072e80091cd0092e70094c30072e7", + "0x91cd0090070300070090091cd0090074750070071cd0090070099b4007", + "0xd00d4260071400091cd00914000903b0071400091cd00900742000700d", + "0x1cd00905a00903b00705a00900d1cd00900900916e0071450091cd009140", + "0x2e000900d1cd00900900916e0072dd0091cd00905a14500d42600705a009", + "0x903b00719b0091cd0092e02dd00d4260072e00091cd0092e000903b007", + "0x91cd00900716b0072e30091cd00900919b00d4260070090091cd009009", + "0x31e0072e80091cd0092e70094c30072e70091cd0092e32e400d4240072e4", + "0x90074750070071cd0090070099b50072e80090092e80091cd0092e8009", + "0x903b0071400091cd00900742000700d0091cd0090070300070090091cd", + "0x1cd00900900916e0071450091cd00914000d00d4260071400091cd009140", + "0x2dd0091cd00905a14500d42600705a0091cd00905a00903b00705a00900d", + "0xd4260072e00091cd0092e000903b0072e000900d1cd00900900916e007", + "0x900919b00d4260070090091cd00900900903b00719b0091cd0092e02dd", + "0x72e70091cd0092e32e400d4240072e40091cd00900716b0072e30091cd", + "0x9b60072e80090092e80091cd0092e800931e0072e80091cd0092e70094c3", + "0x700d0091cd0090070300070090091cd0090074750070071cd009007009", + "0x914000d00d4260071400091cd00914000903b0071400091cd009007420", + "0x5a0091cd00905a00903b00705a00900d1cd00900900916e0071450091cd", + "0x3b0072e000900d1cd00900900916e0072dd0091cd00905a14500d426007", + "0x900900903b00719b0091cd0092e02dd00d4260072e00091cd0092e0009", + "0x72e40091cd00900716b0072e30091cd00900919b00d4260070090091cd", + "0x2e800931e0072e80091cd0092e70094c30072e70091cd0092e32e400d424", + "0x91cd0090074750070071cd00900700951a0072e80090092e80091cd009", + "0x914000903b0071400091cd00900742000700d0091cd009007030007009", + "0x900d1cd00900900916e0071450091cd00914000d00d4260071400091cd", + "0x16e0072dd0091cd00905a14500d42600705a0091cd00905a00903b00705a", + "0x2e02dd00d4260072e00091cd0092e000903b0072e000900d1cd009009009", + "0x91cd00900919b00d4260070090091cd00900900903b00719b0091cd009", + "0x94c30072e70091cd0092e32e400d4240072e40091cd00900716b0072e3", + "0x70099b70072e80090092e80091cd0092e800931e0072e80091cd0092e7", + "0x742000700d0091cd0090070300070090091cd0090074750070071cd009", + "0x91cd00914000d00d4260071400091cd00914000903b0071400091cd009", + "0x42600705a0091cd00905a00903b00705a00900d1cd00900900916e007145", + "0x2e000903b0072e000900d1cd00900900916e0072dd0091cd00905a14500d", + "0x91cd00900900903b00719b0091cd0092e02dd00d4260072e00091cd009", + "0xd4240072e40091cd00900716b0072e30091cd00900919b00d426007009", + "0x1cd0092e800931e0072e80091cd0092e70094c30072e70091cd0092e32e4", + "0x70090091cd0090074750070071cd0090070099b80072e80090092e8009", + "0x91cd00914000903b0071400091cd00900742000700d0091cd009007030", + "0x705a00900d1cd00900900916e0071450091cd00914000d00d426007140", + "0x900916e0072dd0091cd00905a14500d42600705a0091cd00905a00903b", + "0x1cd0092e02dd00d4260072e00091cd0092e000903b0072e000900d1cd009", + "0x72e30091cd00900919b00d4260070090091cd00900900903b00719b009", + "0x92e70094c30072e70091cd0092e32e400d4240072e40091cd00900716b", + "0x1cd0090070099b90072e80090092e80091cd0092e800931e0072e80091cd", + "0x1cd00900742000700d0091cd0090070300070090091cd009007475007007", + "0x71450091cd00914000d00d4260071400091cd00914000903b007140009", + "0x14500d42600705a0091cd00905a00903b00705a00900d1cd00900900916e", + "0x1cd0092e000903b0072e000900d1cd00900900916e0072dd0091cd00905a", + "0x70090091cd00900900903b00719b0091cd0092e02dd00d4260072e0009", + "0x2e32e400d4240072e40091cd00900716b0072e30091cd00900919b00d426", + "0x2e80091cd0092e800931e0072e80091cd0092e70094c30072e70091cd009", + "0x70300070090091cd0090074750070071cd0090070099ba0072e8009009", + "0x71400091cd00914000903b0071400091cd00900742000700d0091cd009", + "0x903b00705a00900d1cd00900900916e0071450091cd00914000d00d426", + "0x1cd00900900916e0072dd0091cd00905a14500d42600705a0091cd00905a", + "0x19b0091cd0092e02dd00d4260072e00091cd0092e000903b0072e000900d", + "0x716b0072e30091cd00900919b00d4260070090091cd00900900903b007", + "0x91cd0092e70094c30072e70091cd0092e32e400d4240072e40091cd009", + "0x70071cd0090070099bb0072e80090092e80091cd0092e800931e0072e8", + "0x1400091cd00900742000700d0091cd0090070300070090091cd009007475", + "0x916e0071450091cd00914000d00d4260071400091cd00914000903b007", + "0x905a14500d42600705a0091cd00905a00903b00705a00900d1cd009009", + "0x2e00091cd0092e000903b0072e000900d1cd00900900916e0072dd0091cd", + "0xd4260070090091cd00900900903b00719b0091cd0092e02dd00d426007", + "0x1cd0092e32e400d4240072e40091cd00900716b0072e30091cd00900919b", + "0x90092e80091cd0092e800931e0072e80091cd0092e70094c30072e7009", + "0x1cd0090070300070090091cd0090074750070071cd0090070099bc0072e8", + "0xd4260071400091cd00914000903b0071400091cd00900742000700d009", + "0x905a00903b00705a00900d1cd00900900916e0071450091cd00914000d", + "0x900d1cd00900900916e0072dd0091cd00905a14500d42600705a0091cd", + "0x3b00719b0091cd0092e02dd00d4260072e00091cd0092e000903b0072e0", + "0x1cd00900716b0072e30091cd00900919b00d4260070090091cd009009009", + "0x72e80091cd0092e70094c30072e70091cd0092e32e400d4240072e4009", + "0x74750070071cd0090070099bd0072e80090092e80091cd0092e800931e", + "0x3b0071400091cd00900742000700d0091cd0090070300070090091cd009", + "0x900900916e0071450091cd00914000d00d4260071400091cd009140009", + "0x91cd00905a14500d42600705a0091cd00905a00903b00705a00900d1cd", + "0x4260072e00091cd0092e000903b0072e000900d1cd00900900916e0072dd", + "0x919b00d4260070090091cd00900900903b00719b0091cd0092e02dd00d", + "0x2e70091cd0092e32e400d4240072e40091cd00900716b0072e30091cd009", + "0x72e80090092e80091cd0092e800931e0072e80091cd0092e70094c3007", + "0xd0091cd0090070300070090091cd0090074750070071cd0090070099be", + "0x14000d00d4260071400091cd00914000903b0071400091cd009007420007", + "0x91cd00905a00903b00705a00900d1cd00900900916e0071450091cd009", + "0x72e000900d1cd00900900916e0072dd0091cd00905a14500d42600705a", + "0x900903b00719b0091cd0092e02dd00d4260072e00091cd0092e000903b", + "0x2e40091cd00900716b0072e30091cd00900919b00d4260070090091cd009", + "0x931e0072e80091cd0092e70094c30072e70091cd0092e32e400d424007", + "0x1cd0090074750070071cd0090070099bf0072e80090092e80091cd0092e8", + "0x14000903b0071400091cd00900742000700d0091cd009007030007009009", + "0xd1cd00900900916e0071450091cd00914000d00d4260071400091cd009", + "0x72dd0091cd00905a14500d42600705a0091cd00905a00903b00705a009", + "0x2dd00d4260072e00091cd0092e000903b0072e000900d1cd00900900916e", + "0x1cd00900919b00d4260070090091cd00900900903b00719b0091cd0092e0", + "0x4c30072e70091cd0092e32e400d4240072e40091cd00900716b0072e3009", + "0x99c00072e80090092e80091cd0092e800931e0072e80091cd0092e7009", + "0x42000700d0091cd0090070300070090091cd0090074750070071cd009007", + "0x1cd00914000d00d4260071400091cd00914000903b0071400091cd009007", + "0x705a0091cd00905a00903b00705a00900d1cd00900900916e007145009", + "0x903b0072e000900d1cd00900900916e0072dd0091cd00905a14500d426", + "0x1cd00900900903b00719b0091cd0092e02dd00d4260072e00091cd0092e0", + "0x4240072e40091cd00900716b0072e30091cd00900919b00d426007009009", + "0x92e800931e0072e80091cd0092e70094c30072e70091cd0092e32e400d", + "0x90091cd0090074750070071cd0090070099c10072e80090092e80091cd", + "0x1cd00914000903b0071400091cd00900742000700d0091cd009007030007", + "0x5a00900d1cd00900900916e0071450091cd00914000d00d426007140009", + "0x916e0072dd0091cd00905a14500d42600705a0091cd00905a00903b007", + "0x92e02dd00d4260072e00091cd0092e000903b0072e000900d1cd009009", + "0x2e30091cd00900919b00d4260070090091cd00900900903b00719b0091cd", + "0x2e70094c30072e70091cd0092e32e400d4240072e40091cd00900716b007", + "0x90070099c20072e80090092e80091cd0092e800931e0072e80091cd009", + "0x900742000700d0091cd0090070300070090091cd0090074750070071cd", + "0x1450091cd00914000d00d4260071400091cd00914000903b0071400091cd", + "0xd42600705a0091cd00905a00903b00705a00900d1cd00900900916e007", + "0x92e000903b0072e000900d1cd00900900916e0072dd0091cd00905a145", + "0x90091cd00900900903b00719b0091cd0092e02dd00d4260072e00091cd", + "0x2e400d4240072e40091cd00900716b0072e30091cd00900919b00d426007", + "0x91cd0092e800931e0072e80091cd0092e70094c30072e70091cd0092e3", + "0x300070090091cd0090074750070071cd0090070099c30072e80090092e8", + "0x1400091cd00914000903b0071400091cd00900742000700d0091cd009007", + "0x3b00705a00900d1cd00900900916e0071450091cd00914000d00d426007", + "0x900900916e0072dd0091cd00905a14500d42600705a0091cd00905a009", + "0x91cd0092e02dd00d4260072e00091cd0092e000903b0072e000900d1cd", + "0x16b0072e30091cd00900919b00d4260070090091cd00900900903b00719b", + "0x1cd0092e70094c30072e70091cd0092e32e400d4240072e40091cd009007", + "0xd1cd0090090099c40072e80090092e80091cd0092e800931e0072e8009", + "0x99c60071cd00d1450099c500714514000d1cd00900d00956600700d009", + "0x91cd0090070260070071cd0091400090d10070071cd00900700d00705a", + "0x9c800719b0091cd0092e000900d9c70072e00091cd0092dd0092ff0072dd", + "0x1cd0092e30099c90070070091cd0090070092e40072e30091cd00919b009", + "0x70071cd0090090095670070071cd00900700d0072e300700d0092e3009", + "0x914000916e0072e70091cd0092e405a00d9ca0072e40091cd009007263", + "0xd1cd00d2e800700d2810072e70091cd0092e70099cb0072e814000d1cd", + "0x230091cd00900776d0070071cd00900700d00702c0a701e1409cc01b016", + "0x230090740070250091cd00901b0090740070280091cd0090160092e4007", + "0x1e0092e40070071cd00900700d0070079cd00900731b0070260091cd009", + "0x260091cd0090a70090740070250091cd00902c0090740070280091cd009", + "0x751b0072f30091cd0090290099cf0070292e700d1cd0092e70099ce007", + "0x91cd0091990093600072f42f300d1cd0092f30090c10071990091cd009", + "0x900700d00703203000d9d002e02b00d1cd00d1992f4028140403007199", + "0x2b0092e40070071cd0092f300935f0070071cd0090250090720070071cd", + "0xd1cd00902e02b00d9d100702e0091cd00902e00936000702b0091cd009", + "0x70071cd00900700d00730b0099d30380091cd00d0820099d2007082034", + "0x703b03a30f1401cd00930e0260341401bc00730e0091cd0090380099d4", + "0x1cd00903a0090740073120091cd00930f0092e40070071cd00903b009072", + "0x1cd0091400090d10070071cd00900700d0070079d500900731b007314009", + "0x930b0099d70070071cd0090260090720070071cd0092e70099d6007007", + "0x903f0091cd00903f0099c90070340091cd0090340092e400703f0091cd", + "0x260090720070071cd00903200935f0070071cd00900700d00703f03400d", + "0x72f30091cd0092f30093600070300091cd0090300092e40070071cd009", + "0x430099d831c0091cd00d31b0099d200731b04000d1cd0092f303000d9d1", + "0x440250401401bc0070440091cd00931c0099d40070071cd00900700d007", + "0x91cd00931e0092e40070071cd00904700907200704731f31e1401cd009", + "0x480099da0070480091cd0090079d90073140091cd00931f009074007312", + "0x32c0099dc00704b32c3241401cd0090483143121409db0070480091cd009", + "0x73300091cd0092e700944300704c0091cd00904b0099dd0070071cd009", + "0x33200d9c700704f0091cd00904c0093010073320091cd00933014000d481", + "0x91cd0093240092e40073360091cd0090500099c80070500091cd00904f", + "0x70071cd00900700d00733632400d0093360091cd0093360099c9007324", + "0x71cd0090250090720070071cd0092e70099d60070071cd0091400090d1", + "0x3380099c90070400091cd0090400092e40073380091cd0090430099d7007", + "0x941400714000900d1cd00900900916e00733804000d0093380091cd009", + "0x71cd00900d00935f0070071cd00900700d0071450099de0071cd00d140", + "0xd0070070090090070091cd0090070090b80070071cd0090090090d1007", + "0x16e00705a0091cd0090076b60070071cd00914500941a0070071cd009007", + "0xd0090c10072e00091cd0092dd00900d3ea0072dd05a00d1cd00905a009", + "0x1cd0092e000903b0072e30091cd00919b00700d57d00719b00d00d1cd009", + "0x99df0071cd00d2e40094140072e42e000d1cd0092e000916e0072e0009", + "0x1cd00905a0090d10070071cd00900d00935f0070071cd00900700d0072e7", + "0x72e30090092e30091cd0092e30090b80070071cd0092e00090d1007007", + "0x5a00d1cd00905a00916e0070071cd0092e700941a0070071cd00900700d", + "0x701b00d00d1cd00900d0090c10070160091cd0092e82e000d3ea0072e8", + "0x1600916e0070160091cd00901600903b00701e0091cd00901b2e300d57d", + "0x1cd00900700d00702c0099e00071cd00d0a70094140070a701600d1cd009", + "0x90160090d10070071cd00905a0090d10070071cd00900d00935f007007", + "0x70071cd00900700d00701e00900901e0091cd00901e0090b80070071cd", + "0x2301600d3ea00702305a00d1cd00905a00916e0070071cd00902c00941a", + "0x1cd00902501e00d57d00702500d00d1cd00900d0090c10070280091cd009", + "0x702902800d1cd00902800916e0070280091cd00902800903b007026009", + "0x900d00935f0070071cd00900700d0072f30099e10071cd00d029009414", + "0x260090b80070071cd0090280090d10070071cd00905a0090d10070071cd", + "0x71cd0092f300941a0070071cd00900700d0070260090090260091cd009", + "0xc10072f40091cd00919902800d3ea00719905a00d1cd00905a00916e007", + "0x2f400903b00702e0091cd00902b02600d57d00702b00d00d1cd00900d009", + "0x71cd00d0300094140070302f400d1cd0092f400916e0072f40091cd009", + "0x5a0090d10070071cd00900d00935f0070071cd00900700d0070320099e2", + "0x900902e0091cd00902e0090b80070071cd0092f40090d10070071cd009", + "0x1cd00905a00916e0070071cd00903200941a0070071cd00900700d00702e", + "0xd00d1cd00900d0090c10070820091cd0090342f400d3ea00703405a00d", + "0x16e0070820091cd00908200903b00730b0091cd00903802e00d57d007038", + "0x700d00730f0099e30071cd00d30e00941400730e08200d1cd009082009", + "0x90d10070071cd00905a0090d10070071cd00900d00935f0070071cd009", + "0x1cd00900700d00730b00900930b0091cd00930b0090b80070071cd009082", + "0xd3ea00703a05a00d1cd00905a00916e0070071cd00930f00941a007007", + "0x31230b00d57d00731200d00d1cd00900d0090c100703b0091cd00903a082", + "0x3b00d1cd00903b00916e00703b0091cd00903b00903b0073140091cd009", + "0x935f0070071cd00900700d0070400099e40071cd00d03f00941400703f", + "0xb80070071cd00903b0090d10070071cd00905a0090d10070071cd00900d", + "0x904000941a0070071cd00900700d0073140090093140091cd009314009", + "0x31c0091cd00931b03b00d3ea00731b05a00d1cd00905a00916e0070071cd", + "0x3b0070440091cd00904331400d57d00704300d00d1cd00900d0090c1007", + "0xd31e00941400731e31c00d1cd00931c00916e00731c0091cd00931c009", + "0xd10070071cd00900d00935f0070071cd00900700d00731f0099e50071cd", + "0x440091cd0090440090b80070071cd00931c0090d10070071cd00905a009", + "0x5a00916e0070071cd00931f00941a0070071cd00900700d007044009009", + "0x1cd00900d0090c10070480091cd00904731c00d3ea00704705a00d1cd009", + "0x480091cd00904800903b00732c0091cd00932404400d57d00732400d00d", + "0x704c0099e60071cd00d04b00941400704b04800d1cd00904800916e007", + "0x70071cd00905a0090d10070071cd00900d00935f0070071cd00900700d", + "0x700d00732c00900932c0091cd00932c0090b80070071cd0090480090d1", + "0x733005a00d1cd00905a00916e0070071cd00904c00941a0070071cd009", + "0xd57d00704f00d00d1cd00900d0090c10073320091cd00933004800d3ea", + "0x1cd00933200916e0073320091cd00933200903b0070500091cd00904f32c", + "0x70071cd00900700d0073380099e70071cd00d33600941400733633200d", + "0x71cd0093320090d10070071cd00905a0090d10070071cd00900d00935f", + "0x941a0070071cd00900700d0070500090090500091cd0090500090b8007", + "0x1cd00905333200d3ea00705305a00d1cd00905a00916e0070071cd009338", + "0x3400091cd00933d05000d57d00733d00d00d1cd00900d0090c1007054009", + "0x941400705705400d1cd00905400916e0070540091cd00905400903b007", + "0x71cd00900d00935f0070071cd00900700d00734a0099e80071cd00d057", + "0x1cd0093400090b80070071cd0090540090d10070071cd00905a0090d1007", + "0x16e0070071cd00934a00941a0070071cd00900700d007340009009340009", + "0xd0090c10073540091cd00935305400d3ea00735305a00d1cd00905a009", + "0x1cd00935400903b00735f0091cd00935734000d57d00735700d00d1cd009", + "0x99e90071cd00d36000941400736035400d1cd00935400916e007354009", + "0x1cd00905a0090d10070071cd00900d00935f0070071cd00900700d007362", + "0x735f00900935f0091cd00935f0090b80070071cd0093540090d1007007", + "0x5a00d1cd00905a00916e0070071cd00936200941a0070071cd00900700d", + "0x736d00d00d1cd00900d0090c100736b0091cd00936a35400d3ea00736a", + "0x36b00916e00736b0091cd00936b00903b0073750091cd00936d35f00d57d", + "0x1cd00900700d0073780099ea0071cd00d37600941400737636b00d1cd009", + "0x936b0090d10070071cd00905a0090d10070071cd00900d00935f007007", + "0x70071cd00900700d0073750090093750091cd0093750090b80070071cd", + "0x37d36b00d3ea00737d05a00d1cd00905a00916e0070071cd00937800941a", + "0x1cd00938137500d57d00738100d00d1cd00900d0090c10073800091cd009", + "0x703c38000d1cd00938000916e0073800091cd00938000903b007383009", + "0x900d00935f0070071cd00900700d00702d0099eb0071cd00d03c009414", + "0x3830090b80070071cd0093800090d10070071cd00905a0090d10070071cd", + "0x71cd00902d00941a0070071cd00900700d0073830090093830091cd009", + "0x57d00738a00d00d1cd00900d0090c100706d0091cd00905a38000d3ea007", + "0xd06d00941400706d0091cd00906d00903b00738c0091cd00938a38300d", + "0xb80070071cd00900d00935f0070071cd00900700d00738f0099ec0071cd", + "0x938f00941a0070071cd00900700d00738c00900938c0091cd00938c009", + "0x93920091cd0093920090b80073920091cd00900d38c00d57d0070071cd", + "0xd9ed2dd05a00d1cd00d00900700d0090070071cd009007314007392009", + "0x5a00d9ef0072e30091cd0091400099ee0070071cd00900700d00719b2e0", + "0x99f10070071cd00900700d00701b01600d9f02e82e72e41401cd00d2e3", + "0x1409f302302c0a71401cd00d01e14500d2dd1459f200701e0091cd0092e8", + "0x902e0070a70091cd0090a70090230070071cd00900700d007026025028", + "0x91cd0092e40092e40072f30091cd0092e70096cf0070290091cd0090a7", + "0x96d000702c0091cd00902c0090280070290091cd0090290090230072e4", + "0x2f302c0292e405a6d20070230091cd0090230096d10072f30091cd0092f3", + "0x71cd00900700d00702e02b2f419914500902e02b2f41991451cd009023", + "0x902603000d4240070300091cd00900716b0070071cd0092e70099f4007", + "0x72e40091cd0092e40092e40070340091cd0090320099f50070320091cd", + "0x90340099f60070250091cd0090250090280070280091cd009028009023", + "0x92dd00902e0070071cd00900700d0070340250282e41450090340091cd", + "0x4f000730b0091cd0090070260070380091cd00901b0096cf0070820091cd", + "0x160092e400730f0091cd00930e0099f700730e0091cd00930b145038140", + "0xd0091cd00900d0090280070820091cd0090820090230070160091cd009", + "0x71cd00900700d00730f00d08201614500930f0091cd00930f0099f6007", + "0x91cd00900730f0070071cd0091400096d60070071cd0091450099f8007", + "0x90230072e00091cd0092e00092e400703b0091cd00903a0099f500703a", + "0x91cd00903b0099f600700d0091cd00900d00902800719b0091cd00919b", + "0x91cd0090074750070071cd0090070096f400703b00d19b2e014500903b", + "0x914000903b0071400091cd00900742000700d0091cd009007030007009", + "0x900d1cd00900900916e0071450091cd00914000d00d4260071400091cd", + "0x16e0072dd0091cd00905a14500d42600705a0091cd00905a00903b00705a", + "0x2e02dd00d4260072e00091cd0092e000903b0072e000900d1cd009009009", + "0x91cd00900919b00d4260070090091cd00900900903b00719b0091cd009", + "0x94c30072e70091cd0092e32e400d4240072e40091cd00900716b0072e3", + "0x70090400072e80090092e80091cd0092e800931e0072e80091cd0092e7", + "0x742000700d0091cd0090070300070090091cd0090074750070071cd009", + "0x91cd00914000d00d4260071400091cd00914000903b0071400091cd009", + "0x42600705a0091cd00905a00903b00705a00900d1cd00900900916e007145", + "0x2e000903b0072e000900d1cd00900900916e0072dd0091cd00905a14500d", + "0x91cd00900900903b00719b0091cd0092e02dd00d4260072e00091cd009", + "0xd4240072e40091cd00900716b0072e30091cd00900919b00d426007009", + "0x1cd0092e800931e0072e80091cd0092e70094c30072e70091cd0092e32e4", + "0x70090091cd0090074750070071cd00900700951a0072e80090092e8009", + "0x91cd00914000903b0071400091cd00900742000700d0091cd009007030", + "0x705a00900d1cd00900900916e0071450091cd00914000d00d426007140", + "0x900916e0072dd0091cd00905a14500d42600705a0091cd00905a00903b", + "0x1cd0092e02dd00d4260072e00091cd0092e000903b0072e000900d1cd009", + "0x72e30091cd00900919b00d4260070090091cd00900900903b00719b009", + "0x92e70094c30072e70091cd0092e32e400d4240072e40091cd00900716b", + "0x1cd0090070099f90072e80090092e80091cd0092e800931e0072e80091cd", + "0x1cd00900742000700d0091cd0090070300070090091cd009007475007007", + "0x71450091cd00914000d00d4260071400091cd00914000903b007140009", + "0x14500d42600705a0091cd00905a00903b00705a00900d1cd00900900916e", + "0x1cd0092e000903b0072e000900d1cd00900900916e0072dd0091cd00905a", + "0x70090091cd00900900903b00719b0091cd0092e02dd00d4260072e0009", + "0x2e32e400d4240072e40091cd00900716b0072e30091cd00900919b00d426", + "0x2e80091cd0092e800931e0072e80091cd0092e70094c30072e70091cd009", + "0x70300070090091cd0090074750070071cd0090070099fa0072e8009009", + "0x71400091cd00914000903b0071400091cd00900742000700d0091cd009", + "0x903b00705a00900d1cd00900900916e0071450091cd00914000d00d426", + "0x1cd00900900916e0072dd0091cd00905a14500d42600705a0091cd00905a", + "0x19b0091cd0092e02dd00d4260072e00091cd0092e000903b0072e000900d", + "0x716b0072e30091cd00900919b00d4260070090091cd00900900903b007", + "0x91cd0092e70094c30072e70091cd0092e32e400d4240072e40091cd009", + "0x70071cd0090070099fb0072e80090092e80091cd0092e800931e0072e8", + "0x1400091cd00900742000700d0091cd0090070300070090091cd009007475", + "0x916e0071450091cd00914000d00d4260071400091cd00914000903b007", + "0x905a14500d42600705a0091cd00905a00903b00705a00900d1cd009009", + "0x2e00091cd0092e000903b0072e000900d1cd00900900916e0072dd0091cd", + "0xd4260070090091cd00900900903b00719b0091cd0092e02dd00d426007", + "0x1cd0092e32e400d4240072e40091cd00900716b0072e30091cd00900919b", + "0x90092e80091cd0092e800931e0072e80091cd0092e70094c30072e7009", + "0x1cd0090070300070090091cd0090074750070071cd0090070099fc0072e8", + "0xd4260071400091cd00914000903b0071400091cd00900742000700d009", + "0x905a00903b00705a00900d1cd00900900916e0071450091cd00914000d", + "0x900d1cd00900900916e0072dd0091cd00905a14500d42600705a0091cd", + "0x3b00719b0091cd0092e02dd00d4260072e00091cd0092e000903b0072e0", + "0x1cd00900716b0072e30091cd00900919b00d4260070090091cd009009009", + "0x72e80091cd0092e70094c30072e70091cd0092e32e400d4240072e4009", + "0x903b0070070091cd0090079fd0072e80090092e80091cd0092e800931e", + "0x70099fe0070090090090090091cd0090070093120070070091cd009007", + "0x742000700d0091cd0090070300070090091cd0090074750070071cd009", + "0x91cd00914000d00d4260071400091cd00914000903b0071400091cd009", + "0x42600705a0091cd00905a00903b00705a00900d1cd00900900916e007145", + "0x2e000903b0072e000900d1cd00900900916e0072dd0091cd00905a14500d", + "0x91cd00900900903b00719b0091cd0092e02dd00d4260072e00091cd009", + "0xd4240072e40091cd00900716b0072e30091cd00900919b00d426007009", + "0x1cd0092e800931e0072e80091cd0092e70094c30072e70091cd0092e32e4", + "0x70090091cd0090074750070071cd0090070097390072e80090092e8009", + "0x91cd00914000903b0071400091cd00900742000700d0091cd009007030", + "0x705a00900d1cd00900900916e0071450091cd00914000d00d426007140", + "0x900916e0072dd0091cd00905a14500d42600705a0091cd00905a00903b", + "0x1cd0092e02dd00d4260072e00091cd0092e000903b0072e000900d1cd009", + "0x72e30091cd00900919b00d4260070090091cd00900900903b00719b009", + "0x92e70094c30072e70091cd0092e32e400d4240072e40091cd00900716b", + "0x1cd0090070099ff0072e80090092e80091cd0092e800931e0072e80091cd", + "0x1cd00900742000700d0091cd0090070300070090091cd009007475007007", + "0x71450091cd00914000d00d4260071400091cd00914000903b007140009", + "0x14500d42600705a0091cd00905a00903b00705a00900d1cd00900900916e", + "0x1cd0092e000903b0072e000900d1cd00900900916e0072dd0091cd00905a", + "0x70090091cd00900900903b00719b0091cd0092e02dd00d4260072e0009", + "0x2e32e400d4240072e40091cd00900716b0072e30091cd00900919b00d426", + "0x2e80091cd0092e800931e0072e80091cd0092e70094c30072e70091cd009", + "0x70300070090091cd0090074750070071cd009007009a000072e8009009", + "0x71400091cd00914000903b0071400091cd00900742000700d0091cd009", + "0x903b00705a00900d1cd00900900916e0071450091cd00914000d00d426", + "0x1cd00900900916e0072dd0091cd00905a14500d42600705a0091cd00905a", + "0x19b0091cd0092e02dd00d4260072e00091cd0092e000903b0072e000900d", + "0x716b0072e30091cd00900919b00d4260070090091cd00900900903b007", + "0x91cd0092e70094c30072e70091cd0092e32e400d4240072e40091cd009", + "0x70071cd009007009a010072e80090092e80091cd0092e800931e0072e8", + "0x1400091cd00900742000700d0091cd0090070300070090091cd009007475", + "0x916e0071450091cd00914000d00d4260071400091cd00914000903b007", + "0x905a14500d42600705a0091cd00905a00903b00705a00900d1cd009009", + "0x2e00091cd0092e000903b0072e000900d1cd00900900916e0072dd0091cd", + "0xd4260070090091cd00900900903b00719b0091cd0092e02dd00d426007", + "0x1cd0092e32e400d4240072e40091cd00900716b0072e30091cd00900919b", + "0x90092e80091cd0092e800931e0072e80091cd0092e70094c30072e7009", + "0x1cd0090070300070090091cd0090074750070071cd009007009a020072e8", + "0xd4260071400091cd00914000903b0071400091cd00900742000700d009", + "0x905a00903b00705a00900d1cd00900900916e0071450091cd00914000d", + "0x900d1cd00900900916e0072dd0091cd00905a14500d42600705a0091cd", + "0x3b00719b0091cd0092e02dd00d4260072e00091cd0092e000903b0072e0", + "0x1cd00900716b0072e30091cd00900919b00d4260070090091cd009009009", + "0x72e80091cd0092e70094c30072e70091cd0092e32e400d4240072e4009", + "0x74750070071cd009007009a030072e80090092e80091cd0092e800931e", + "0x3b0071400091cd00900742000700d0091cd0090070300070090091cd009", + "0x900900916e0071450091cd00914000d00d4260071400091cd009140009", + "0x91cd00905a14500d42600705a0091cd00905a00903b00705a00900d1cd", + "0x4260072e00091cd0092e000903b0072e000900d1cd00900900916e0072dd", + "0x919b00d4260070090091cd00900900903b00719b0091cd0092e02dd00d", + "0x2e70091cd0092e32e400d4240072e40091cd00900716b0072e30091cd009", + "0x72e80090092e80091cd0092e800931e0072e80091cd0092e70094c3007", + "0xd0091cd0090070300070090091cd0090074750070071cd009007009a04", + "0x14000d00d4260071400091cd00914000903b0071400091cd009007420007", + "0x91cd00905a00903b00705a00900d1cd00900900916e0071450091cd009", + "0x72e000900d1cd00900900916e0072dd0091cd00905a14500d42600705a", + "0x900903b00719b0091cd0092e02dd00d4260072e00091cd0092e000903b", + "0x2e40091cd00900716b0072e30091cd00900919b00d4260070090091cd009", + "0x931e0072e80091cd0092e70094c30072e70091cd0092e32e400d424007", + "0x900d007145a050070071cd0090073140072e80090092e80091cd0092e8", + "0x2dd00901b0071450091cd0091450092e40072e02dd05a1451451cd009140", + "0x2e00091cd0092e0009a0600705a0091cd00905a0090230072dd0091cd009", + "0x914000900d007145a070070071cd0090073140072e005a2dd145145009", + "0x1cd0092dd00901b0071450091cd0091450092e40072e02dd05a1451451cd", + "0x1450092e00091cd0092e0009a0800705a0091cd00905a0090230072dd009", + "0x1451cd00914000900d007145a090070071cd0090073140072e005a2dd145", + "0x2dd0091cd0092dd00901b0071450091cd0091450092e40072e02dd05a145", + "0x2dd1451450092e00091cd0092e0009a0a00705a0091cd00905a009023007", + "0x93120070070091cd00900700903b0070070091cd00900751c0072e005a", + "0x900700903b0070070091cd009007a0b0070090090090090091cd009007", + "0x1cd0090090097aa0070090090090090091cd0090070093120070070091cd", + "0x2dd0091cd0091450097ab00705a14500d1cd0091400091d000714000d00d", + "0x5a0097ab0070071cd00900700d0072e0009a0c0071cd00d2dd0093d6007", + "0x71cd00900700d0072e3009a0d0071cd00d19b0093d600719b0091cd009", + "0x1cd0092e400900f0072e40091cd0090070260070071cd00900d00945c007", + "0x2e40070160091cd0092e80097fc0072e80091cd0092e70097fb0072e7009", + "0xd00701600700d0090160091cd0090160097fd0070070091cd009007009", + "0x700d007007a0e00900731b0070071cd0092e30097b10070071cd009007", + "0x77b30070071cd00905a0090720070071cd0092e00097b10070071cd009", + "0x701b0091cd00901b0090fe00701e0091cd009007a0f00701b0091cd009", + "0x2802302c0a71451cd00901e01b0071408a600701e0091cd00901e0097e7", + "0x2c0091d00070250091cd0090280a700d7ea0070071cd00902300945c007", + "0x1cd0090290097b40071992f300d1cd00900d0091d000702902600d1cd009", + "0x1cd00d02b2f40251403d300702b19900d1cd0091990097b40072f402900d", + "0x71cd0090300090720070071cd00900700d00703403200da1003002e00d", + "0x2f30090720070071cd00900700d007007a110071cd00d19902900d7b6007", + "0x31b0070820091cd00902e0092e40070071cd0090260090720070071cd009", + "0x3800d1cd00d2f302602e1403d30070071cd00900700d007007a12009007", + "0x2e40070071cd00930b0090720070071cd00900700d00730f30e00da1330b", + "0x91cd00903a00900f00703a0091cd0090070260070820091cd009038009", + "0x731b0073140091cd00903b0093cf0073120091cd0090820097dd00703b", + "0x30e0092e40070071cd00930f0090720070071cd00900700d007007a14009", + "0x340090720070071cd00900700d007007a1500900731b00703f0091cd009", + "0x90720070071cd0092f30090720070071cd0090290090720070071cd009", + "0x703f0091cd0090320092e40070071cd0091990090720070071cd009026", + "0x1cd00903f0097dd00731b0091cd00904000909a0070400091cd009007026", + "0x7fb00731c0091cd0093140097e30073140091cd00931b0093cf007312009", + "0x1cd0093120092e40070440091cd0090430097fc0070430091cd00931c009", + "0x1cd0091450097a900704431200d0090440091cd0090440097fd007312009", + "0xd1cd00919b0097aa00719b05a00d1cd00905a0094e90072e02dd05a140", + "0x70160091cd0092e70097ab0072e82e700d1cd0092e40091d00072e42e3", + "0x92e80097ab0070071cd00900700d00701b009a160071cd00d0160093d6", + "0x70071cd00900700d0070a7009a170071cd00d01e0093d600701e0091cd", + "0x71cd00914000945c0070071cd0092e300945c0070071cd0092dd00945c", + "0x1cd00900900902e0070071cd00905a00945c0070071cd0092e0009251007", + "0x31b0070280091cd00902c0090230070230091cd0090070092e400702c009", + "0x902e0070071cd0090a70097b10070071cd00900700d007007a18009007", + "0x7007a1900900731b0070260091cd0090250090230070250091cd009009", + "0x70071cd0092e80090720070071cd00901b0097b10070071cd00900700d", + "0x92e30091d00070260091cd0090290090230070290091cd00900900902e", + "0x2e02b00d1cd0092f40091d00072f40091cd0090077b30071992f300d1cd", + "0x7400703202e00d1cd00902e0097b400703019900d1cd0091990097b4007", + "0x3800da1a08203400d1cd00d0320300071403d30070320091cd009032009", + "0x1cd00902e0097b40070071cd0090820090720070071cd00900700d00730b", + "0x70071cd00900700d007007a1b0071cd00d30e19900d7b600730e02e00d", + "0x71cd00902e0090720070071cd00902b0090720070071cd00914000945c", + "0x1cd0092e00092510070071cd0092dd00945c0070071cd00905a00945c007", + "0x340092e400730f0091cd00902600902e0070071cd0092f3009072007007", + "0xd007007a1800900731b0070280091cd00930f0090230070230091cd009", + "0x91cd00903a00907400703a02b00d1cd00902b0097b40070071cd009007", + "0x900700d00703f31400da1c31203b00d1cd00d03a2f30341403d300703a", + "0x2b0090720070071cd00914000945c0070071cd0093120090720070071cd", + "0x945c0070071cd00905a00945c0070071cd00902e0090720070071cd009", + "0x70400091cd00902600902e0070071cd0092e00092510070071cd0092dd", + "0x90230097dd0070280091cd0090400090230070230091cd00903b0092e4", + "0x700d007007a1d00900731b00731c0091cd0090280097de00731b0091cd", + "0x2e40070430091cd00902600902e0070071cd00903f0090720070071cd009", + "0x7a1e00900731b00731e0091cd0090430090230070440091cd009314009", + "0x71cd0091990090720070071cd00930b0090720070071cd00900700d007", + "0x90380092e400731f0091cd00902600902e0070071cd0092f3009072007", + "0x70440091cd0090440092e400731e0091cd00931f0090230070440091cd", + "0x4400d7ba0070470091cd0090470090fe0070472dd00d1cd0092dd0094e9", + "0x700d00704b009a1f32c0091cd00d32400924800732404800d1cd009047", + "0x73300091cd00904c0097e300704c0091cd00932c0094610070071cd009", + "0xd00704f009a203320091cd00d3300097bc0073300091cd0093300093cf", + "0x5005a00d1cd00905a0094e90070071cd0093320090400070071cd009007", + "0xd00734033d054140a220533383361401cd00d2e005000d31e145a21007", + "0x570091cd00d0530097c60070530091cd009053009a230070071cd009007", + "0x9007a260073530091cd009007a250070071cd00900700d00734a009a24", + "0x73530091cd0093530090fe0073360091cd0093360090230073540091cd", + "0x36035f3571401cd00d354353338336145a270073540091cd0093540090fe", + "0x73600091cd009360009a230070071cd00900700d00736b36a362140a28", + "0x9007a2a0070071cd00900700d007375009a2936d0091cd00d3600097c6", + "0x3780091cd0093780097e700737837600d1cd0093760097e60073760091cd", + "0xa2b38f38c38a06d02d03c38338138037d2e41cd00d37805a0481407e8007", + "0x70790091cd00938f37d00d7ea0070071cd00900700d007074072392140", + "0xd7ea00707a0091cd00938a01000d7ea0070100091cd00938c07900d7ea", + "0x3c07d00d7ea00707d0091cd00902d07b00d7ea00707b0091cd00906d07a", + "0x1cd00938139e00d7ea00739e0091cd00938339d00d7ea00739d0091cd009", + "0xfe0073a00091cd0093a00092e40073a30091cd0093800097eb0073a0009", + "0x93a60090fe0073a63a300d1cd0093a30094e90071400091cd009140009", + "0x810091cd0090810097e700708137600d1cd0093760097e60073a60091cd", + "0x3c200d1cd0093bf0091d00073bf3ba00d1cd0090813a61403a01457ec007", + "0x8708a00d1cd00d3c502e3ba1403d300702e0091cd00902e0090740073c5", + "0x2e0073570091cd0093570090230070071cd00900700d0073cf3cc00da2c", + "0x91cd0093d400900f0073d40091cd00900702600708c0091cd009357009", + "0x90740073dd0091cd00908c0090230073da0091cd00908a0092e40073d7", + "0x7007a2d00900731b0070930091cd0093d70093cf0070910091cd009087", + "0x91cd00935700902e0073570091cd0093570090230070071cd00900700d", + "0x3cc0092e40073e80091cd00909000909a0070900091cd009007026007092", + "0x910091cd0093cf0090740073dd0091cd0090920090230073da0091cd009", + "0x3da1403d300702b0091cd00902b0090740070930091cd0093e80093cf007", + "0x902e0070071cd00900700d00709a41400da2e0983ea00d1cd00d3c202b", + "0x91cd00941a00902300700f0091cd0093ea0092e400741a0091cd0093dd", + "0x731b0070ce0091cd0090910090740070cf0091cd0090980090740070cd", + "0x7422009a300071cd00d0910091c50070071cd00900700d007007a2f009", + "0x70071cd0090930092510070071cd009057009a310070071cd00900700d", + "0x71cd0093760098000070071cd00936d009a310070071cd00909a009072", + "0x1cd0093dd00902e0070071cd0092dd00945c0070071cd0093a300945c007", + "0x31b0070390091cd0090a40090230070a10091cd0094140092e40070a4009", + "0x2630070a60091cd0093dd00902e0070071cd00900700d007007a32009007", + "0x1cd00918e0093c700718e0091cd00942b42200d3c900742b0091cd009007", + "0x740070cd0091cd0090a600902300700f0091cd0094140092e400742e009", + "0x1cd00d0930097bc0070ce0091cd00942e0090740070cf0091cd00909a009", + "0x2e40070071cd0090a90090400070071cd00900700d0070ab009a330a9009", + "0x1cd0093a30090fe0072dd0091cd0092dd0090fe00700f0091cd00900f009", + "0xd1cd0093763a32dd00f1457ec0073760091cd0093760097e70073a3009", + "0x74340091cd0094340090fe0074340091cd0090ce0cf00d3b6007432431", + "0x700d0070b145144f140a3544d4434351401cd00d43436d35f0cd145a34", + "0x1cd00d432057443435145a340074350091cd0094350090230070071cd009", + "0x94560090230070071cd00900700d0074754720b3140a3646b0b2456140", + "0x746b0091cd00946b0097c800744d0091cd00944d0097c80074560091cd", + "0x700d007487484481140a3847e47b4781401cd00d46b44d0b2456145a37", + "0x70b80091cd00947800902e0074780091cd0094780090230070071cd009", + "0x90b9009a3b0070b90091cd00949d009a3a00749d0091cd00947e009a39", + "0x70b80091cd0090b80090230074310091cd0094310092e400749f0091cd", + "0x47b0b843114500949f0091cd00949f009a3c00747b0091cd00947b009028", + "0x94870ba00d4240070ba0091cd00900716b0070071cd00900700d00749f", + "0x74310091cd0094310092e40074ad0091cd0094ab009a3d0074ab0091cd", + "0x94ad009a3c0074840091cd0094840090280074810091cd009481009023", + "0x944d009a310070071cd00900700d0074ad4844814311450094ad0091cd", + "0xa3d0074bb0091cd0094754af00d4240074af0091cd00900716b0070071cd", + "0x1cd0090b30090230074310091cd0094310092e40074bd0091cd0094bb009", + "0x1450094bd0091cd0094bd009a3c0074720091cd0094720090280070b3009", + "0x945c0070071cd009057009a310070071cd00900700d0074bd4720b3431", + "0x4c40091cd0090b14bf00d4240074bf0091cd00900716b0070071cd009432", + "0x44f0090230074310091cd0094310092e40074c30091cd0094c4009a3d007", + "0x4c30091cd0094c3009a3c0074510091cd00945100902800744f0091cd009", + "0x70071cd0090ab0090400070071cd00900700d0074c345144f431145009", + "0x71cd0090ce0090720070071cd009057009a310070071cd0090cf009072", + "0x1cd0093a300945c0070071cd0093760098000070071cd00936d009a31007", + "0xf0092e40070c00091cd0090cd00902e0070071cd0092dd00945c007007", + "0x74c20091cd0090078b40070390091cd0090c00090230070a10091cd009", + "0x90390090230070a10091cd0090a10092e40070c10091cd0094c2009a3d", + "0x90c10091cd0090c1009a3c00735f0091cd00935f0090280070390091cd", + "0x720070071cd009057009a310070071cd00900700d0070c135f0390a1145", + "0x70071cd00936d009a310070071cd00902e0090720070071cd00902b009", + "0x71cd0092dd00945c0070071cd00914000945c0070071cd009376009800", + "0x39200d7ea0074cc0091cd00935700902e0073570091cd009357009023007", + "0x91cd0090070260074c10091cd0090720c200d7ea0070c20091cd009074", + "0x9a3b0074b70091cd0094b8009a3a0074b80091cd0094b9009a3e0074b9", + "0x91cd0094cc0090230074c10091cd0094c10092e40074b50091cd0094b7", + "0x4c11450094b50091cd0094b5009a3c00735f0091cd00935f0090280074cc", + "0x57009a310070071cd0093750090400070071cd00900700d0074b535f4cc", + "0x945c0070071cd00902e0090720070071cd00902b0090720070071cd009", + "0x2610070071cd0092dd00945c0070071cd00914000945c0070071cd00905a", + "0x1cd0094b40097ff0074b34b400d1cd0094b60097fe0074b60091cd009007", + "0x9a3d0074b20091cd0094b30c800d4240070c80091cd00900716b007007", + "0x91cd0093570090230070480091cd0090480092e40070c90091cd0094b2", + "0x481450090c90091cd0090c9009a3c00735f0091cd00935f009028007357", + "0x57009a310070071cd00914000945c0070071cd00900700d0070c935f357", + "0x945c0070071cd00902e0090720070071cd00902b0090720070071cd009", + "0x4240074de0091cd00900716b0070071cd0092dd00945c0070071cd00905a", + "0x90480092e40074b10091cd0090ca009a3d0070ca0091cd00936b4de00d", + "0x736a0091cd00936a0090280073620091cd0093620090230070480091cd", + "0x70071cd00900700d0074b136a3620481450094b10091cd0094b1009a3c", + "0x71cd00902e0090720070071cd00902b0090720070071cd00914000945c", + "0x1cd0093360090230070071cd0092dd00945c0070071cd00905a00945c007", + "0xa3a0074a80091cd00934a009a3e0074a90091cd00933600902e007336009", + "0x1cd0090480092e40074a50091cd0094a7009a3b0074a70091cd0094a8009", + "0xa3c0073380091cd0093380090280074a90091cd0094a9009023007048009", + "0x45c0070071cd00900700d0074a53384a90481450094a50091cd0094a5009", + "0x70071cd00902e0090720070071cd00902b0090720070071cd009140009", + "0x4a60091cd00900716b0070071cd0092dd00945c0070071cd00905a00945c", + "0x92e40074a30091cd0094a4009a3d0074a40091cd0093404a600d424007", + "0x91cd00933d0090280070540091cd0090540090230070480091cd009048", + "0x1cd00900700d0074a333d0540481450094a30091cd0094a3009a3c00733d", + "0x902b0090720070071cd00914000945c0070071cd00904f009040007007", + "0x2dd00945c0070071cd00905a00945c0070071cd00902e0090720070071cd", + "0x2e40070d00091cd00931e00902e0070071cd0092e00092510070071cd009", + "0x91cd00900702600731c0091cd0090d000902300731b0091cd009048009", + "0x9a3b0070d30091cd0094a0009a3a0074a00091cd0094a2009a3e0074a2", + "0x91cd0090d1009a3c00700d0091cd00900d0090280070d10091cd0090d3", + "0x71cd00914000945c0070071cd00900700d0070d100d31c31b1450090d1", + "0x1cd00905a00945c0070071cd00902e0090720070071cd00902b009072007", + "0x904b009a3d0070071cd0092e00092510070071cd0092dd00945c007007", + "0x731e0091cd00931e0090230070480091cd0090480092e40070d20091cd", + "0xd31e0481450090d20091cd0090d2009a3c00700d0091cd00900d009028", + "0x71cd0090073140070071cd0090077790072dd0091cd00900751d0070d2", + "0xd0070162e82e7140a402e42e319b2e01451cd00d145140009140a3f007", + "0x1cd00905a2dd00da4200705a0091cd0092e42e300da410070071cd009007", + "0xa450070071cd00901b009a4400701e01b00d1cd00905a009a4300705a009", + "0x1cd0090a7009a470070a70091cd0090a7009a460070a70091cd00901e009", + "0x230070070091cd0090070092e40070230091cd00902c00976400702c009", + "0x1cd00919b00902800700d0091cd00900d0092e70072e00091cd0092e0009", + "0x1cd00902319b00d2e000705aa480070230091cd00902300976500719b009", + "0x700d0072f4009a491990091cd00d2f300951f0072f302902602502805a", + "0x702e0091cd009199009a4a00702b0091cd00902500902e0070071cd009", + "0xa4b00708203400d1cd00903202600da4b00703203000d1cd00902e0091d0", + "0x930b00907400730e0091cd009007a4c00730b03800d1cd00903003400d", + "0x1401cd00930e30b0281401bc00730e0091cd00930e009a4d00730b0091cd", + "0x21c0073120091cd00903b00921c0070071cd00903a00907200703b03a30f", + "0x1cd00903f31200d09800703f0091cd009007a4e0073140091cd009082009", + "0x3e80073140091cd00931400903b0070400091cd00904000903b007040009", + "0x931c009a5000731c0091cd00931b009a4f00731b0091cd00931404000d", + "0x730f0091cd00930f0092e40070440091cd00904300951e0070430091cd", + "0x90290090280070380091cd0090380092e700702b0091cd00902b009023", + "0xd00704402903802b30f05a0090440091cd009044009a510070290091cd", + "0x280091cd0090280092e400731e0091cd0092f4009a520070071cd009007", + "0x290090280070260091cd0090260092e70070250091cd009025009023007", + "0x731e02902602502805a00931e0091cd00931e009a510070290091cd009", + "0x731f0091cd00900716b0070071cd0092dd009a530070071cd00900700d", + "0x70092e40070480091cd009047009a520070470091cd00901631f00d424", + "0xd0091cd00900d0092e70072e70091cd0092e70090230070070091cd009", + "0x2e700705a0090480091cd009048009a510072e80091cd0092e8009028007", + "0x14500d1cd0091400091d000714000d00d1cd0090090097aa0070482e800d", + "0x72e0009a540071cd00d2dd0093d60072dd0091cd0091450097ab00705a", + "0x71cd00d19b0093d600719b0091cd00905a0097ab0070071cd00900700d", + "0x90070260070071cd00900d00945c0070071cd00900700d0072e3009a55", + "0x72e80091cd0092e70097fb0072e70091cd0092e400900f0072e40091cd", + "0x90160097fd0070070091cd0090070092e40070160091cd0092e80097fc", + "0x71cd0092e30097b10070071cd00900700d00701600700d0090160091cd", + "0x70071cd0092e00097b10070071cd00900700d007007a5600900731b007", + "0x1e0091cd009007a0f00701b0091cd0090077d90070071cd00905a009072", + "0x71408a600701e0091cd00901e0097e700701b0091cd00901b0090fe007", + "0xa700d7ea0070071cd00902300945c00702802302c0a71451cd00901e01b", + "0x1cd00900d0091d000702902600d1cd00902c0091d00070250091cd009028", + "0x19900d1cd0091990097b40072f402900d1cd0090290097b40071992f300d", + "0x900700d00703403200da5703002e00d1cd00d02b2f40251403d300702b", + "0x7007a580071cd00d19902900d7b60070071cd0090300090720070071cd", + "0x70071cd0090260090720070071cd0092f30090720070071cd00900700d", + "0x70071cd00900700d007007a5900900731b0070820091cd00902e0092e4", + "0x71cd00900700d00730f30e00da5a30b03800d1cd00d2f302602e1403d3", + "0x1cd0090070260070820091cd0090380092e40070071cd00930b009072007", + "0x3cf0073120091cd0090820097dd00703b0091cd00903a00900f00703a009", + "0x720070071cd00900700d007007a5b00900731b0073140091cd00903b009", + "0x7007a5c00900731b00703f0091cd00930e0092e40070071cd00930f009", + "0x70071cd0090290090720070071cd0090340090720070071cd00900700d", + "0x71cd0091990090720070071cd0090260090720070071cd0092f3009072", + "0x904000909a0070400091cd00900702600703f0091cd0090320092e4007", + "0x73140091cd00931b0093cf0073120091cd00903f0097dd00731b0091cd", + "0x90430097fc0070430091cd00931c0097fb00731c0091cd0093140097e3", + "0x90440091cd0090440097fd0073120091cd0093120092e40070440091cd", + "0x70090091cd0090090090fe0070070091cd0090070092e400704431200d", + "0xa5e00705a14500d1cd00900d009007140a5d00700d0091cd00900d0090fe", + "0x92e00095210070162e82e72e42e319b2e02dd19b1cd00914005a145140", + "0x1e0091cd0092e801b00d7ea00701b0091cd0090162dd00d7ea0070071cd", + "0x7ea00702c0091cd0092e40a700d7ea0070a70091cd0092e701e00d7ea007", + "0x919b0090fe0070230091cd0090230092e40070230091cd0092e302c00d", + "0x1cd00900700903b0070070091cd009007a5f00719b02300d00919b0091cd", + "0x70071cd0090073140070090090090090091cd009007009312007007009", + "0xd10072e72e42e31401cd00919b00918e00719b2e000d1cd0092dd0090a6", + "0x160091cd009007a610072e80091cd0092e3009a600070071cd0092e4009", + "0x942e00701b0091cd0090162e800da620072e80091cd0092e8009360007", + "0x1cd00901b01e00da6400701b0091cd00901b009a6300701e0091cd0092e7", + "0x2302c00d1cd00d0a700700da660070a70091cd0090a7009a650070a7009", + "0x90c10070250091cd00902300921a0070071cd00900700d007028009a67", + "0x14000905aa6900702905a00d1cd00905a009a6800702614500d1cd009145", + "0x70071cd00900700d00702e02b2f4140a6a1992f300d1cd00d025029026", + "0x22700708205a00d1cd00905a009a680070340320301401cd0092e0009a6b", + "0x30e0091cd009007a6c00730b0091cd0090074750070380091cd009082009", + "0xd145a6d00730e0091cd00930e00903b00730b0091cd00930b00903b007", + "0x90d10070071cd00903b0090d100731203b03a30f1451cd00930e30b038", + "0xd1cd00903a02c00d81a00703a0091cd00903a00903b0070071cd009312", + "0x47b0070071cd009040009a6f00731b04000d1cd009030009a6e00703f314", + "0x1cd0092f30090230073140091cd0093140092e400731c0091cd00931b009", + "0xa700071990091cd00919900902800730f0091cd00930f0090160072f3009", + "0x904300936000704314500d1cd0091450090c100731c0091cd00931c009", + "0x705a0091cd00905a00982100703f0091cd00903f0091440070430091cd", + "0x4f100704804731f31e04405a1cd00905a03f04331c19930f2f331419ba71", + "0x9324009a730070071cd00900700d00732c009a723240091cd00d048009", + "0x1cd00904c0090d10070071cd00904b009a7400704f33233004c04b05a1cd", + "0x400070071cd00900700d007336009a750500091cd00d04f009832007007", + "0x70071cd0090074e20073380091cd009034009a760070071cd009050009", + "0x90320090d10070071cd00900700d007053009a770071cd00d338009414", + "0x3300098740070071cd0093320093240070071cd00914500935f0070071cd", + "0x733d0091cd0090540090230070540091cd00931e00902e0070071cd009", + "0x70071cd00900700d007007a7800900731b0073400091cd009047009028", + "0x90570098210070570091cd00933233000d8200070071cd00905300941a", + "0x357354140a7935334a00d1cd00d03205714504731e05aa690070570091cd", + "0x934a00902e00734a0091cd00934a0090230070071cd00900700d00735f", + "0x73400091cd00935300902800733d0091cd0093600090230073600091cd", + "0x36a0091cd0093620098400073620091cd0090070260070071cd009007314", + "0x440092e400736d0091cd00936b009a7b00736b0091cd00936a009a7a007", + "0x31f0091cd00931f00901600733d0091cd00933d0090230070440091cd009", + "0x33d04405a00936d0091cd00936d009a7c0073400091cd009340009028007", + "0x93540090230070071cd0090073140070071cd00900700d00736d34031f", + "0x73760091cd00935f0098430073750091cd00935400902e0073540091cd", + "0x90440092e400737d0091cd009378009a7b0073780091cd009376009a7a", + "0x731f0091cd00931f0090160073750091cd0093750090230070440091cd", + "0x31f37504405a00937d0091cd00937d009a7c0073570091cd009357009028", + "0x914500935f0070071cd0090320090d10070071cd00900700d00737d357", + "0x340099d60070071cd0093300098740070071cd0093320093240070071cd", + "0x73810091cd0093360098430073800091cd00931e00902e0070071cd009", + "0x90440092e400703c0091cd009383009a7b0073830091cd009381009a7a", + "0x731f0091cd00931f0090160073800091cd0093800090230070440091cd", + "0x31f38004405a00903c0091cd00903c009a7c0070470091cd009047009028", + "0x914500935f0070071cd0090320090d10070071cd00900700d00703c047", + "0x92e400702d0091cd00932c009a7d0070071cd0090340099d60070071cd", + "0x91cd00931f00901600731e0091cd00931e0090230070440091cd009044", + "0x4405a00902d0091cd00902d009a7c0070470091cd00904700902800731f", + "0x9a7e0070071cd00914500935f0070071cd00900700d00702d04731f31e", + "0x72f40091cd0092f40090230070071cd0092e000942b0070071cd00905a", + "0x938a009a7a00738a0091cd00902e00984300706d0091cd0092f400902e", + "0x702c0091cd00902c0092e400738f0091cd00938c009a7b00738c0091cd", + "0x902b00902800700d0091cd00900d00901600706d0091cd00906d009023", + "0xd00738f02b00d06d02c05a00938f0091cd00938f009a7c00702b0091cd", + "0x42b0070071cd00905a009a7e0070071cd00914500935f0070071cd009007", + "0x720091cd009392009a7d0073920091cd0090072610070071cd0092e0009", + "0xd0090160070090091cd0090090090230070280091cd0090280092e4007", + "0x720091cd009072009a7c0071400091cd00914000902800700d0091cd009", + "0x91cd0090074750070071cd009007009a7f00707214000d00902805a009", + "0x914000903b0071400091cd00900742000700d0091cd009007030007009", + "0x900d1cd00900900916e0071450091cd00914000d00d4260071400091cd", + "0x16e0072dd0091cd00905a14500d42600705a0091cd00905a00903b00705a", + "0x2e02dd00d4260072e00091cd0092e000903b0072e000900d1cd009009009", + "0x91cd00900919b00d4260070090091cd00900900903b00719b0091cd009", + "0x94c30072e70091cd0092e32e400d4240072e40091cd00900716b0072e3", + "0x7009a800072e80090092e80091cd0092e800931e0072e80091cd0092e7", + "0x742000700d0091cd0090070300070090091cd0090074750070071cd009", + "0x91cd00914000d00d4260071400091cd00914000903b0071400091cd009", + "0x42600705a0091cd00905a00903b00705a00900d1cd00900900916e007145", + "0x2e000903b0072e000900d1cd00900900916e0072dd0091cd00905a14500d", + "0x91cd00900900903b00719b0091cd0092e02dd00d4260072e00091cd009", + "0xd4240072e40091cd00900716b0072e30091cd00900919b00d426007009", + "0x1cd0092e800931e0072e80091cd0092e70094c30072e70091cd0092e32e4", + "0x70090091cd0090074750070071cd009007009a810072e80090092e8009", + "0x91cd00914000903b0071400091cd00900742000700d0091cd009007030", + "0x705a00900d1cd00900900916e0071450091cd00914000d00d426007140", + "0x900916e0072dd0091cd00905a14500d42600705a0091cd00905a00903b", + "0x1cd0092e02dd00d4260072e00091cd0092e000903b0072e000900d1cd009", + "0x72e30091cd00900919b00d4260070090091cd00900900903b00719b009", + "0x92e70094c30072e70091cd0092e32e400d4240072e40091cd00900716b", + "0x1cd009007009a820072e80090092e80091cd0092e800931e0072e80091cd", + "0x1cd00900742000700d0091cd0090070300070090091cd009007475007007", + "0x71450091cd00914000d00d4260071400091cd00914000903b007140009", + "0x14500d42600705a0091cd00905a00903b00705a00900d1cd00900900916e", + "0x1cd0092e000903b0072e000900d1cd00900900916e0072dd0091cd00905a", + "0x70090091cd00900900903b00719b0091cd0092e02dd00d4260072e0009", + "0x2e32e400d4240072e40091cd00900716b0072e30091cd00900919b00d426", + "0x2e80091cd0092e800931e0072e80091cd0092e70094c30072e70091cd009", + "0x70300070090091cd0090074750070071cd009007009a830072e8009009", + "0x71400091cd00914000903b0071400091cd00900742000700d0091cd009", + "0x903b00705a00900d1cd00900900916e0071450091cd00914000d00d426", + "0x1cd00900900916e0072dd0091cd00905a14500d42600705a0091cd00905a", + "0x19b0091cd0092e02dd00d4260072e00091cd0092e000903b0072e000900d", + "0x716b0072e30091cd00900919b00d4260070090091cd00900900903b007", + "0x91cd0092e70094c30072e70091cd0092e32e400d4240072e40091cd009", + "0x70071cd009007009a840072e80090092e80091cd0092e800931e0072e8", + "0x1400091cd00900742000700d0091cd0090070300070090091cd009007475", + "0x916e0071450091cd00914000d00d4260071400091cd00914000903b007", + "0x905a14500d42600705a0091cd00905a00903b00705a00900d1cd009009", + "0x2e00091cd0092e000903b0072e000900d1cd00900900916e0072dd0091cd", + "0xd4260070090091cd00900900903b00719b0091cd0092e02dd00d426007", + "0x1cd0092e32e400d4240072e40091cd00900716b0072e30091cd00900919b", + "0x90092e80091cd0092e800931e0072e80091cd0092e70094c30072e7009", + "0x1cd0090070300070090091cd0090074750070071cd009007009a850072e8", + "0xd4260071400091cd00914000903b0071400091cd00900742000700d009", + "0x905a00903b00705a00900d1cd00900900916e0071450091cd00914000d", + "0x900d1cd00900900916e0072dd0091cd00905a14500d42600705a0091cd", + "0x3b00719b0091cd0092e02dd00d4260072e00091cd0092e000903b0072e0", + "0x1cd00900716b0072e30091cd00900919b00d4260070090091cd009009009", + "0x72e80091cd0092e70094c30072e70091cd0092e32e400d4240072e4009", + "0x74750070071cd009007009a860072e80090092e80091cd0092e800931e", + "0x3b0071400091cd00900742000700d0091cd0090070300070090091cd009", + "0x900900916e0071450091cd00914000d00d4260071400091cd009140009", + "0x91cd00905a14500d42600705a0091cd00905a00903b00705a00900d1cd", + "0x4260072e00091cd0092e000903b0072e000900d1cd00900900916e0072dd", + "0x919b00d4260070090091cd00900900903b00719b0091cd0092e02dd00d", + "0x2e70091cd0092e32e400d4240072e40091cd00900716b0072e30091cd009", + "0x72e80090092e80091cd0092e800931e0072e80091cd0092e70094c3007", + "0x1cd0090070093120070070091cd00900700903b0070070091cd009007a87", + "0x70091cd00900700903b0070070091cd009007a88007009009009009009", + "0x3b0070070091cd009007a890070090090090090091cd009007009312007", + "0x9a8a0070090090090090091cd0090070093120070070091cd009007009", + "0x71cd00900700d00705a009a8d145009a8c140009a8b00d0091cd145009", + "0x1d00072e319b00d1cd0092dd0091d00072e02dd00d1cd00900d009190007", + "0xda8e0162e800d1cd00d2e72e30071408940072e72e400d1cd0092e0009", + "0x90a700900f0070a70091cd0090070260070071cd00900700d00701e01b", + "0x70280091cd0090160090740070230091cd0092e80092e400702c0091cd", + "0x70071cd00900700d007007a8f00900731b0070250091cd00902c0093cf", + "0x1cd00901b0092e40070290091cd00902600909a0070260091cd009007026", + "0x8940070250091cd0090290093cf0070280091cd00901e009074007023009", + "0x70071cd00900700d00702b2f400da901992f300d1cd00d2e419b023140", + "0x90280090740070300091cd00919900907400702e0091cd0092f30092e4", + "0xd0280091bf0070071cd00900700d007007a9100900731b0070320091cd", + "0x720070071cd0090250092510070071cd00900700d007034009a920071cd", + "0x7007a9300900731b0070820091cd0092f40092e40070071cd00902b009", + "0x91cd00903803400d1c20070380091cd0090072630070071cd00900700d", + "0x907400702e0091cd0092f40092e400730e0091cd00930b0093ce00730b", + "0x91cd00d0250097bc0070320091cd00930e0090740070300091cd00902b", + "0x92e40070071cd00930f0090400070071cd00900700d00703a009a9430f", + "0x91cd0090320090740073120091cd00903000907400703b0091cd00902e", + "0x71cd00903a0090400070071cd00900700d007007a9500900731b007314", + "0x1cd00902e0092e40070071cd0090320090720070071cd009030009072007", + "0x92e40070400091cd00903f0094c300703f0091cd0090078b0007082009", + "0x700d00704008200d0090400091cd00904000931e0070820091cd009082", + "0x4300d1cd00931b0091d000731c31b00d1cd0091400091900070071cd009", + "0x4700d1cd00d31f0440071403d300731f31e00d1cd00931c0091d0007044", + "0xf00704b0091cd0090070260070071cd00900700d00732c32400da96048", + "0x1cd0090480090740073300091cd0090470092e400704c0091cd00904b009", + "0x900700d007007a9700900731b00704f0091cd00904c0093cf007332009", + "0x92e40073360091cd00905000909a0070500091cd0090070260070071cd", + "0x91cd0093360093cf0073320091cd00932c0090740073300091cd009324", + "0x900700d00733d05400da9805333800d1cd00d31e0433301403d300704f", + "0x740070570091cd0090530090740073400091cd0093380092e40070071cd", + "0x1c50070071cd00900700d007007a9900900731b00734a0091cd009332009", + "0x1cd00904f0092510070071cd00900700d007353009a9a0071cd00d332009", + "0x900731b0073540091cd0090540092e40070071cd00933d009072007007", + "0x35735300d3c90073570091cd0090072630070071cd00900700d007007a9b", + "0x3400091cd0090540092e40073600091cd00935f0093c700735f0091cd009", + "0x4f0097bc00734a0091cd0093600090740070570091cd00933d009074007", + "0x71cd0093620090400070071cd00900700d00736a009a9c3620091cd00d", + "0x34a0090740073120091cd00905700907400703b0091cd0093400092e4007", + "0x91cd00936b0090fe00736b0091cd00931431200d3b60073140091cd009", + "0x931e00703b0091cd00903b0092e400736d0091cd00936b00910000736b", + "0x936a0090400070071cd00900700d00736d03b00d00936d0091cd00936d", + "0x3400092e40070071cd00934a0090720070071cd0090570090720070071cd", + "0x73760091cd0093750094c30073750091cd0090078b40073540091cd009", + "0x737635400d0093760091cd00937600931e0073540091cd0093540092e4", + "0x1cd0090070092e400737d37800d1cd0091450091900070071cd00900700d", + "0x52400737d0091cd00937d0090fe0073780091cd0093780090fe007007009", + "0x7bc00703c38300d1cd009381009a9d00738138000d1cd00937d378007140", + "0x902d0090400070071cd00900700d00706d009a9e02d0091cd00d03c009", + "0x2e400738a0091cd0093830091000073830091cd0093830090fe0070071cd", + "0xd00738a38000d00938a0091cd00938a00931e0073800091cd009380009", + "0xa9f0070071cd00938300945c0070071cd00906d0090400070071cd009007", + "0x91cd0093800092e400738f0091cd00938c0094c300738c0091cd009007", + "0x70071cd00900700d00738f38000d00938f0091cd00938f00931e007380", + "0x945c00707907400d1cd0093920097aa00707239200d1cd00905a009190", + "0xd1cd0090720097aa00707a01000d1cd0090790091d00070071cd009074", + "0x7ab00739e39d00d1cd00907d0091d00070071cd00907b00945c00707d07b", + "0xd3a33a000d7b60073a30091cd00939d0097ab0073a00091cd009010009", + "0x90720070071cd00939e0090720070071cd00900700d007007aa00071cd", + "0x7a0097ab0070071cd00900700d007007aa100900731b0070071cd00907a", + "0x71cd00d0813a600d7b60070810091cd00939e0097ab0073a60091cd009", + "0x93ba00900f0073ba0091cd0090070260070071cd00900700d007007aa2", + "0x700d007007aa300900731b0073c20091cd0093bf0093cf0073bf0091cd", + "0x3cf00708a0091cd0093c500909a0073c50091cd0090070260070071cd009", + "0x1cd0090070092e40070870091cd0093c200908c0073c20091cd00908a009", + "0x91cd009007aa400708700700d0090870091cd00908700931e007007009", + "0x90090090090091cd0090070093120070070091cd00900700903b007007", + "0x90070093120070070091cd00900700903b0070070091cd009007aa5007", + "0x91cd00900700903b0070070091cd009007aa60070090090090090091cd", + "0x70070091cd009007aa70070090090090090091cd009007009312007007", + "0xaa80070090090090090091cd0090070093120070070091cd00900700903b", + "0x91cd0090070093120070070091cd00900700903b0070070091cd009007", + "0x70070091cd00900700903b0070070091cd009007aa9007009009009009", + "0x903b0070070091cd009007aaa0070090090090090091cd009007009312", + "0x9007aab0070090090090090091cd0090070093120070070091cd009007", + "0x90090091cd0090070093120070070091cd00900700903b0070070091cd", + "0x93120070070091cd00900700903b0070070091cd009007aac007009009", + "0x900700903b0070070091cd009007aad0070090090090090091cd009007", + "0x91cd009007aae0070090090090090091cd0090070093120070070091cd", + "0x90090090090091cd0090070093120070070091cd00900700903b007007", + "0x90070093120070070091cd00900700903b0070070091cd009007aaf007", + "0x91cd00900700903b0070070091cd009007ab00070090090090090091cd", + "0x70070091cd009007ab10070090090090090091cd009007009312007007", + "0xab20070090090090090091cd0090070093120070070091cd00900700903b", + "0x91cd0090070093120070070091cd00900700903b0070070091cd009007", + "0xd0072dd05a00dab314514000d1cd00d00900700d981007009009009009", + "0x19b0091cd0092e014500d9850072e00091cd0090078bb0070071cd009007", + "0x92e400909a0072e40091cd0090070260072e30091cd00919b009525007", + "0x70160091cd0092e30090740072e80091cd0091400092e40072e70091cd", + "0x70071cd00900700d007007ab400900731b00701b0091cd0092e70093cf", + "0x1cd0090a700900f0070a70091cd00900702600701e0091cd0092dd009ab5", + "0x3cf0070160091cd00901e0090740072e80091cd00905a0092e400702c009", + "0x2602500dab602802300d1cd00d00d2e800d98100701b0091cd00902c009", + "0x1cd00902902800d9850070290091cd0090078bb0070071cd00900700d007", + "0x2e40072f40091cd00901b0097e30071990091cd0092f30095250072f3009", + "0x1cd0092f40093cf00702e0091cd00919900907400702b0091cd009023009", + "0x1cd009026009ab50070071cd00900700d007007ab700900731b007030009", + "0x3cf00702e0091cd00903200907400702b0091cd0090250092e4007032009", + "0xd7ea0070380820341401cd00902e01600d8980070300091cd00901b009", + "0x1cd00d30e00941400730e0091cd00903400921c00730b0091cd00903802b", + "0x9ab903a0091cd00d0300097bc0070071cd00900700d00730f009ab8007", + "0x1cd00908200921c0070071cd00903a0090400070071cd00900700d00703b", + "0x900700d007007aba00900731b0073140091cd00931200903b007312009", + "0x7abb00703f0091cd00908200921c0070071cd00903b0090400070071cd", + "0x91cd00931b00903b00731b0091cd00904003f00d0980070400091cd009", + "0x71cd00900700d007044009abc04331c00d1cd00d31430b00d29e007314", + "0x31c0092e400731f0091cd00931e009abe00731e0091cd009043009abd007", + "0x900700d00731f31c00d00931f0091cd00931f009abf00731c0091cd009", + "0x92e40070480091cd009047009ac10070470091cd009007ac00070071cd", + "0x700d00704804400d0090480091cd009048009abf0070440091cd009044", + "0x92510070071cd0090820090720070071cd00930f00941a0070071cd009", + "0x732c0091cd009324009ac10073240091cd00900789a0070071cd009030", + "0x732c30b00d00932c0091cd00932c009abf00730b0091cd00930b0092e4", + "0xac40070071cd00900700d007145009ac314000d00d1cd00d00900700dac2", + "0x1cd0a705a009ac500705a0091cd00905a00952800705a0091cd009140009", + "0x2e8009acb2e7009aca2e4009ac92e3009ac819b009ac72e0009ac62dd009", + "0x9ad2023009ad102c009ad00a7009acf01e009ace01b009acd016009acc", + "0x71cd0092dd0090400070071cd00900700d007026009ad4025009ad3028", + "0x92f3009ad70072f30091cd009029009ad60070290091cd009007ad5007", + "0x91990091cd009199009ad800700d0091cd00900d0092e40071990091cd", + "0x9007ad90070071cd0092e00090400070071cd00900700d00719900d00d", + "0x702e0091cd00902b009ad700702b0091cd0092f4009ad60072f40091cd", + "0x702e00d00d00902e0091cd00902e009ad800700d0091cd00900d0092e4", + "0x70300091cd009007ada0070071cd00919b0090400070071cd00900700d", + "0x900d0092e40070340091cd009032009ad70070320091cd009030009ad6", + "0x1cd00900700d00703400d00d0090340091cd009034009ad800700d0091cd", + "0x9082009ad60070820091cd0090075260070071cd0092e3009040007007", + "0x700d0091cd00900d0092e400730b0091cd009038009ad70070380091cd", + "0x90400070071cd00900700d00730b00d00d00930b0091cd00930b009ad8", + "0x730f0091cd00930e009ad600730e0091cd009007a4c0070071cd0092e4", + "0x903a009ad800700d0091cd00900d0092e400703a0091cd00930f009ad7", + "0x71cd0092e70090400070071cd00900700d00703a00d00d00903a0091cd", + "0x9312009ad70073120091cd00903b009ad600703b0091cd009007adb007", + "0x93140091cd009314009ad800700d0091cd00900d0092e40073140091cd", + "0x9007adc0070071cd0092e80090400070071cd00900700d00731400d00d", + "0x731b0091cd009040009ad70070400091cd00903f009ad600703f0091cd", + "0x731b00d00d00931b0091cd00931b009ad800700d0091cd00900d0092e4", + "0x731c0091cd009007add0070071cd0090160090400070071cd00900700d", + "0x900d0092e40070440091cd009043009ad70070430091cd00931c009ad6", + "0x1cd00900700d00704400d00d0090440091cd009044009ad800700d0091cd", + "0x931e009ad600731e0091cd009007ade0070071cd00901b009040007007", + "0x700d0091cd00900d0092e40070470091cd00931f009ad700731f0091cd", + "0x90400070071cd00900700d00704700d00d0090470091cd009047009ad8", + "0x73240091cd009048009ad60070480091cd009007adf0070071cd00901e", + "0x932c009ad800700d0091cd00900d0092e400732c0091cd009324009ad7", + "0x71cd0090a70090400070071cd00900700d00732c00d00d00932c0091cd", + "0x904c009ad700704c0091cd00904b009ad600704b0091cd009007529007", + "0x93300091cd009330009ad800700d0091cd00900d0092e40073300091cd", + "0x9007ae00070071cd00902c0090400070071cd00900700d00733000d00d", + "0x70500091cd00904f009ad700704f0091cd009332009ad60073320091cd", + "0x705000d00d0090500091cd009050009ad800700d0091cd00900d0092e4", + "0x73360091cd009007ae10070071cd0090230090400070071cd00900700d", + "0x900d0092e40070530091cd009338009ad70073380091cd009336009ad6", + "0x1cd00900700d00705300d00d0090530091cd009053009ad800700d0091cd", + "0x9054009ad60070540091cd009007ae20070071cd009028009040007007", + "0x700d0091cd00900d0092e40073400091cd00933d009ad700733d0091cd", + "0x90400070071cd00900700d00734000d00d0093400091cd009340009ad8", + "0x734a0091cd009057009ad60070570091cd009007ae30070071cd009025", + "0x9353009ad800700d0091cd00900d0092e40073530091cd00934a009ad7", + "0x71cd0090260090400070071cd00900700d00735300d00d0093530091cd", + "0x9357009ad70073570091cd009354009ad60073540091cd009007ae4007", + "0x935f0091cd00935f009ad800700d0091cd00900d0092e400735f0091cd", + "0x360009ae60073600091cd009007ae50070071cd00900700d00735f00d00d", + "0x3620091cd009362009ad80071450091cd0091450092e40073620091cd009", + "0x73140070071cd0090077790072dd0091cd009007ae700736214500d009", + "0x230070070091cd0090070092e40072e00091cd009007ae80070071cd009", + "0x1cd00914500976500700d0091cd00900d0092e70070090091cd009009009", + "0x1cd0092e014500d00900705aaea0072e00091cd0092e0009ae9007145009", + "0x1cd00d2e4009aec00705a0091cd00905a2dd00daeb0072e405a2e319b145", + "0x1b0161401cd0092e7009aee0070071cd00900700d0072e8009aed2e7009", + "0x901b009aef0070071cd00901e0090400070071cd009016009a0300701e", + "0x70280091cd009007af10070230091cd00902c009af000702c0a700d1cd", + "0x2319b1404050070280091cd0090280096cb0070230091cd009023009360", + "0x91cd00900751b0070071cd00902600935f0070290260251401cd009028", + "0x72f42f300d1cd0092f30090c100719902900d1cd0090290090c10072f3", + "0x92f30093600070071cd00900700d007007af20071cd00d2f419900d3f7", + "0xd00703203000daf302e02b00d1cd00d0292f30251404030072f30091cd", + "0x70340091cd0090340093810070340091cd0090074f20070071cd009007", + "0x2e300902300702b0091cd00902b0092e40070820091cd0090340a700daf4", + "0x2e0091cd00902e0093600070820091cd009082009ae90072e30091cd009", + "0x91cd00d30e009af600730e30b0381401cd00902e0822e302b145af5007", + "0xaf800703b0091cd00930b00902e0070071cd00900700d00703a009af730f", + "0x1cd0090380092e40070071cd00931400904000731431200d1cd00930f009", + "0x31b00731b0091cd009312009ae90070400091cd00903b00902300703f009", + "0x2e400731c0091cd00903a009afa0070071cd00900700d007007af9009007", + "0x1cd00905a0092e700730b0091cd00930b0090230070380091cd009038009", + "0x5a00931c0091cd00931c009afb0071400091cd00914000902800705a009", + "0xafc0070071cd00903200935f0070071cd00900700d00731c14005a30b038", + "0x440091cd009043009afa0070430091cd0090073fb0070071cd0090a7009", + "0x5a0092e70072e30091cd0092e30090230070300091cd0090300092e4007", + "0x440091cd009044009afb0071400091cd00914000902800705a0091cd009", + "0x71cd00902900935f0070071cd00900700d00704414005a2e303005a009", + "0x1cd009007afd00731e0091cd0092e300902e0070071cd0092f300935f007", + "0x70470091cd00931f0a700daf400731f0091cd00931f00938100731f009", + "0x9047009ae90070400091cd00931e00902300703f0091cd0090250092e4", + "0x70071cd009048009afc00732404800d1cd00931b009aef00731b0091cd", + "0xb0033004c04b1401cd00d32c140040140aff00732c0091cd009324009afe", + "0x2e00704b0091cd00904b0090230070071cd00900700d00705004f332140", + "0x1cd009338009b020073380091cd009330009b010073360091cd00904b009", + "0x2e70073360091cd00933600902300703f0091cd00903f0092e4007053009", + "0x1cd009053009afb00704c0091cd00904c00902800705a0091cd00905a009", + "0x1cd00900716b0070071cd00900700d00705304c05a33603f05a009053009", + "0x73400091cd00933d009afa00733d0091cd00905005400d424007054009", + "0x905a0092e70073320091cd00933200902300703f0091cd00903f0092e4", + "0x93400091cd009340009afb00704f0091cd00904f00902800705a0091cd", + "0x570091cd0092e8009afa0070071cd00900700d00734004f05a33203f05a", + "0x5a0092e70072e30091cd0092e300902300719b0091cd00919b0092e4007", + "0x570091cd009057009afb0071400091cd00914000902800705a0091cd009", + "0xd0091d000714514000d1cd0090090091d000705714005a2e319b05a009", + "0x1cd00905a0097b40072e014000d1cd0091400097b40072dd05a00d1cd009", + "0x92e700700d7ea0072e72e42e31401cd00919b2e000d89800719b05a00d", + "0x1401cd00901614000d8980070162dd00d1cd0092dd0097b40072e80091cd", + "0x1cd00d01e2e302c14089400702c0091cd0090a72e800d7ea0070a701e01b", + "0x290091cd009007b040070071cd00900700d00702602500db0302802300d", + "0x29009b050071990091cd0090280090740072f30091cd0090230092e4007", + "0x9007b070070071cd00900700d007007b0600900731b0072f40091cd009", + "0x71990091cd0090260090740072f30091cd0090250092e400702b0091cd", + "0x2e00d89800702e14500d1cd0091450097b40072f40091cd00902b009b05", + "0x821408940070820091cd0090342f300d7ea0070340320301401cd00905a", + "0x7b040070071cd00900700d00730f30e00db0830b03800d1cd00d032199", + "0x3120091cd00930b00907400703b0091cd0090380092e400703a0091cd009", + "0x71cd00900700d007007b0900900731b0073140091cd00903a009b05007", + "0x930f00907400703b0091cd00930e0092e400703f0091cd009007b07007", + "0xd1cd00d03001b03b1408940073140091cd00903f009b050073120091cd", + "0x70440091cd009007b040070071cd00900700d00704331c00db0a31b040", + "0x9044009b0500731f0091cd00931b00907400731e0091cd0090400092e4", + "0x1cd009007b070070071cd00900700d007007b0b00900731b0070470091cd", + "0xb0500731f0091cd00904300907400731e0091cd00931c0092e4007048009", + "0xd7ea00704b32c3241401cd0092dd14500d8980070470091cd009048009", + "0x4f00db0c33233000d1cd00d32c31f04c14089400704c0091cd00904b31e", + "0x1cd0093300092e40073360091cd009007b040070071cd00900700d007050", + "0x31b0070540091cd009336009b050070530091cd009332009074007338009", + "0x92e400733d0091cd009007b070070071cd00900700d007007b0d009007", + "0x91cd00933d009b050070530091cd0090500090740073380091cd00904f", + "0x740070570091cd009340009b0f0073400091cd0093142f400db0e007054", + "0x35400db1035334a00d1cd00d0570533381408940070570091cd009057009", + "0x1cd00934a0092e400735f0091cd009007b040070071cd00900700d007357", + "0x31b00736a0091cd00935f009b050073620091cd009353009074007360009", + "0x92e400736b0091cd009007b070070071cd00900700d007007b11009007", + "0x91cd00936b009b050073620091cd0093570090740073600091cd009354", + "0xb1300736d0091cd00936d009b1200736d0091cd00905404700db0e00736a", + "0x93760090740073760091cd009375009b140073750091cd00936a36d00d", + "0xd00738138000db1537d37800d1cd00d3763243601408940073760091cd", + "0x93780092e40073830091cd00937d3623122e4145b160070071cd009007", + "0x1cd00900700d00738337800d0093830091cd009383009b170073780091cd", + "0x3800091cd0093800092e400703c0091cd0093813623122e4145b16007007", + "0x90070071cd00900731400703c38000d00903c0091cd00903c009b17007", + "0xb190070071cd00900700d0072e72e400db182e319b00d1cd00d00900700d", + "0x1b0091cd0091450095650070160091cd0090074750072e80091cd009007", + "0x52a0070071cd00900700d00702c009b1a0a701e00d1cd00d01b009431007", + "0x2300d8200070282e800d1cd0092e8009b1b0070232dd00d1cd0092dd009", + "0x91cd0090260094340070260091cd0090a70094320070250091cd009028", + "0x90c10071990091cd00901e00947b0072f30091cd009029009435007029", + "0x1cd0092f300903b0070250091cd0090250098210072f405a00d1cd00905a", + "0x34032030140b1c02e02b00d1cd00d2f30252f41402e305aa690072f3009", + "0x71cd0092e80093240070071cd0090160090d10070071cd00900700d007", + "0x90075120070820091cd00902b00902e00702b0091cd00902b009023007", + "0x70820091cd00908200902300719b0091cd00919b0092e40070380091cd", + "0x9199009a7000702e0091cd00902e00902800700d0091cd00900d009016", + "0x72dd0091cd0092dd00914400705a0091cd00905a0093600071990091cd", + "0x8219b2e3b1d0072e00091cd0092e00098210070380091cd00903800932c", + "0x30f30e30b05a00903b03a30f30e30b05a1cd0092e00382dd05a19902e00d", + "0x905a00935f0070071cd0092e0009a7e0070071cd00900700d00703b03a", + "0x8430073120091cd00903000902e0070300091cd0090300090230070071cd", + "0xb1f00703f0091cd0093142e82dd01619905ab1e0073140091cd009034009", + "0x1cd00931200902300719b0091cd00919b0092e40070400091cd00903f009", + "0xb200070320091cd00903200902800700d0091cd00900d009016007312009", + "0x70071cd00900700d00704003200d31219b05a0090400091cd009040009", + "0x91cd0092e300902e0070071cd00905a00935f0070071cd0092e0009a7e", + "0x2c00947b0070430091cd00931c00984000731c0091cd00900702600731b", + "0x31e009b1f00731e0091cd0090432e82dd01604405ab1e0070440091cd009", + "0x31b0091cd00931b00902300719b0091cd00919b0092e400731f0091cd009", + "0x31f009b200071400091cd00914000902800700d0091cd00900d009016007", + "0x9a7e0070071cd00900700d00731f14000d31b19b05a00931f0091cd009", + "0xa740070071cd00905a00935f0070071cd0092dd0098740070071cd0092e0", + "0x480091cd009047009b210070470091cd00900730f0070071cd009145009", + "0xd0090160072e70091cd0092e70090230072e40091cd0092e40092e4007", + "0x480091cd009048009b200071400091cd00914000902800700d0091cd009", + "0xd0091d000714514000d1cd0090090091d000704814000d2e72e405a009", + "0x1cd00905a0097b40072e014000d1cd0091400097b40072dd05a00d1cd009", + "0x92e700700d7ea0072e72e42e31401cd00919b2e000d89800719b05a00d", + "0x1401cd00901614000d8980070162dd00d1cd0092dd0097b40072e80091cd", + "0x14500d1cd0091450097b400702c0091cd0090a72e800d7ea0070a701e01b", + "0x91cd00902602c00d7ea0070260250281401cd00905a02300d898007023", + "0x900700d00702b2f400db221992f300d1cd00d01e2e3029140894007029", + "0x3d60070071cd00900700d00702e009b230071cd00d01b0093d60070071cd", + "0x91cd0090070260070071cd00900700d007030009b240071cd00d028009", + "0x731b0070820091cd0090340093cf0070340091cd00903200909a007032", + "0x90070260070071cd0090300097b10070071cd00900700d007007b25009", + "0x70820091cd00930b0093cf00730b0091cd00903800900f0070380091cd", + "0xd30e0097bc00730e0091cd00930e0093cf00730e0091cd0090820097e3", + "0x70071cd00930f0090400070071cd00900700d00703a009b2630f0091cd", + "0x931200907400731203b00d1cd00903b0097b400703b0091cd00900776d", + "0xd00731b04000db2703f31400d1cd00d1453122f31403d30073120091cd", + "0x720070071cd0092dd0090720070071cd00903f0090720070071cd009007", + "0x430091cd00931c00900f00731c0091cd0090070260070071cd00903b009", + "0x900731b00731e0091cd0090430093cf0070440091cd0093140092e4007", + "0x903b0090740070071cd00931b0090720070071cd00900700d007007b28", + "0xd00732404800db2904731f00d1cd00d2dd03b0401403d300703b0091cd", + "0xf00732c0091cd0090070260070071cd0090470090720070071cd009007", + "0x1cd00904b0093cf00704c0091cd00931f0092e400704b0091cd00932c009", + "0x1cd0093240090720070071cd00900700d007007b2a00900731b007330009", + "0x480092e400704f0091cd00933200909a0073320091cd009007026007007", + "0x440091cd00904c0097dd0073300091cd00904f0093cf00704c0091cd009", + "0x31e009b2b0070500091cd0090440097dd00731e0091cd009330009b2b007", + "0x3a0090400070071cd00900700d007007b2c00900731b0073360091cd009", + "0x731b0070071cd0091450090720070071cd0092dd0090720070071cd009", + "0x2dd0090720070071cd00902e0097b10070071cd00900700d007007b2d009", + "0x70260070071cd0090280090720070071cd0091450090720070071cd009", + "0x500091cd0092f30092e40070530091cd00933800909a0073380091cd009", + "0x1990090740070540091cd0090500092e40073360091cd0090530093cf007", + "0xd007007b2e00900731b0073400091cd0093360093cf00733d0091cd009", + "0x720070071cd0092dd0090720070071cd0090280090720070071cd009007", + "0x70570091cd0090070260070071cd0091450090720070071cd00901b009", + "0x902b0090740070540091cd0092f40092e400734a0091cd00905700909a", + "0xd1cd00d02533d0541408940073400091cd00934a0093cf00733d0091cd", + "0x91cd0093542e400d3b60070071cd00900700d00735f35700db2f354353", + "0xb310073530091cd0093530092e40073620091cd00934036000db30007360", + "0x3400092510070071cd00900700d00736235300d0093620091cd009362009", + "0x3b600736b0091cd00936a00909a00736a0091cd0090070260070071cd009", + "0x3570092e40073750091cd00936b36d00db3000736d0091cd00935f2e400d", + "0x9007b3200737535700d0093750091cd009375009b310073570091cd009", + "0x90090091cd0090070093120070070091cd00900700903b0070070091cd", + "0x93120070070091cd00900700903b0070070091cd009007b33007009009", + "0x900700903b0070070091cd009007b340070090090090090091cd009007", + "0x71cd0090073140070090090090090091cd0090070093120070070091cd", + "0x71cd00900700d00719b2e000db352dd05a00d1cd00d00900700d009007", + "0x2e8009b362e72e400d1cd00d2e30097500072e30091cd00914000974f007", + "0x1cd0092e700947a0070160091cd0092dd00902e0070071cd00900700d007", + "0x702c0a700d1cd00901e0091d000701e0091cd00901b009b3700701b009", + "0x721e00702802300d1cd00902c00d00da4b00702c0091cd00902c009074", + "0x91cd00902800907400702602500d1cd009025009b380070250091cd009", + "0x2f30291401cd00902602805a14025e0070260091cd00902600921f007028", + "0x907400702b0091cd009199009b390072f40091cd0092f3009b39007199", + "0x903000907400703002e00d1cd0090a702300da4b0070a70091cd0090a7", + "0x1401cd00902503002914025e0070250091cd00902500921f0070300091cd", + "0x730b0091cd009082009b390070380091cd009034009b39007082034032", + "0xdaf400730f0091cd0092f430e00daf400730e0091cd00902b14500daf4", + "0x92e400976400703b0091cd00903803a00daf400703a0091cd00930b30f", + "0x70160091cd0090160090230070320091cd0090320092e40073120091cd", + "0x903b009ae90073120091cd00931200976500702e0091cd00902e0092e7", + "0x14500931b04003f3141451cd00903b31202e01603205aaea00703b0091cd", + "0x76400731c0091cd0092dd00902e0070071cd00900700d00731b04003f314", + "0x9044145043140b3a0070440091cd0090070260070430091cd0092e8009", + "0x705a0091cd00905a0092e400731f0091cd00931e009b3b00731e0091cd", + "0x931f009b3c00700d0091cd00900d0092e700731c0091cd00931c009023", + "0x9140009a030070071cd00900700d00731f00d31c05a14500931f0091cd", + "0x47009b3d0070470091cd00900730f0070071cd009145009afc0070071cd", + "0x19b0091cd00919b0090230072e00091cd0092e00092e40070480091cd009", + "0x19b2e01450090480091cd009048009b3c00700d0091cd00900d0092e7007", + "0xdb3e05a14500d1cd00d00900700d0090070071cd00900731400704800d", + "0x91400090c100719b0091cd009007b3f0070071cd00900700d0072e02dd", + "0x71cd00900700d007007b400071cd00d19b2e300d3f70072e314000d1cd", + "0xd009afc0070071cd00900700d0072e4009b410071cd00d14000919d007", + "0x2e40072e80091cd0092e7009b420072e70091cd0090073fb0070071cd009", + "0x1cd0092e800952b00705a0091cd00905a0090230071450091cd009145009", + "0x91cd00905a00902e0070071cd00900700d0072e805a1451400092e8009", + "0x93ff00701e0091cd00901b2e400d40000701b0091cd009007263007016", + "0x2c0091cd00902c00938100702c0091cd009007b430070a70091cd00901e", + "0x90230071450091cd0091450092e40070230091cd00902c00d00daf4007", + "0x91cd0090a70093600070230091cd009023009ae90070160091cd009016", + "0x70260250281400090260250281401cd0090a7023016145145af50070a7", + "0x290091cd00905a00902e0070071cd00914000935f0070071cd00900700d", + "0x2f300d00daf40072f30091cd0092f30093810072f30091cd009007b44007", + "0x2b0091cd0092f419900db450072f40091cd0090070260071990091cd009", + "0x290090230071450091cd0091450092e400702e0091cd00902b009b46007", + "0x700d00702e02914514000902e0091cd00902e00952b0070290091cd009", + "0x730f0070071cd00900d009afc0070071cd00914000935f0070071cd009", + "0x2dd0091cd0092dd0092e40070320091cd009030009b420070300091cd009", + "0x2e02dd1400090320091cd00903200952b0072e00091cd0092e0009023007", + "0x2e700db472e42e300d1cd00d00900700d0090070071cd009007314007032", + "0x1cd0091450095650070160091cd0090074750070071cd00900700d0072e8", + "0x71cd00900700d00702c009b480a701e00d1cd00d01b00943100701b009", + "0x8200070282e000d1cd0092e0009b1b0070232dd00d1cd0092dd00952a007", + "0x90260094340070260091cd0090a70094320070250091cd00902802300d", + "0x71990091cd00901e00947b0072f30091cd0090290094350070290091cd", + "0x2f300903b0070250091cd0090250098210072f405a00d1cd00905a0090c1", + "0x30140b4902e02b00d1cd00d2f30252f41402e405aa690072f30091cd009", + "0x1cd00d2e00092640070071cd0090074e20070071cd00900700d007034032", + "0x98740070071cd0090160090d10070071cd00900700d007082009b4a007", + "0x380091cd00902b00902e00702b0091cd00902b0090230070071cd0092dd", + "0x76b600730e0091cd00930b00922700730b19b00d1cd00919b009a68007", + "0x3b30f00d1cd00930f00916e00703a0091cd009007a6c00730f0091cd009", + "0xd145a6d00703a0091cd00903a00903b00703b0091cd00903b00903b007", + "0x90d10070071cd00903f0090d100704003f3143121451cd00903a03b30e", + "0xd1cd0093142e300d81a0073140091cd00931400903b0070071cd009040", + "0x90230070440091cd00931b0092e40070430091cd009007b1900731c31b", + "0x91cd00931c00914400731f0091cd00931200901600731e0091cd009038", + "0x731b0073240091cd00904300932c0070480091cd00930f00903b007047", + "0x902e00702b0091cd00902b0090230070071cd00900700d007007b4b009", + "0x91cd00904b08200d17400704b0091cd00900726300732c0091cd00902b", + "0x90230070440091cd0092e30092e40073300091cd00904c00917600704c", + "0x91cd0092dd00914400731f0091cd00900d00901600731e0091cd00932c", + "0x73140073240091cd00933000932c0070480091cd00901600903b007047", + "0x731e0091cd00931e0090230070440091cd0090440092e40070071cd009", + "0x9199009a7000702e0091cd00902e00902800731f0091cd00931f009016", + "0x70470091cd00904700914400705a0091cd00905a0093600071990091cd", + "0x919b0098210070480091cd00904800903b0073240091cd00932400932c", + "0x33205a1cd00919b04832404705a19902e31f31e0442e4b4c00719b0091cd", + "0x9a7e0070071cd00900700d00733833605004f33205a00933833605004f", + "0x70300091cd0090300090230070071cd00905a00935f0070071cd00919b", + "0x1619905ab1e0070540091cd0090340098430070530091cd00903000902e", + "0x92e30092e40073400091cd00933d009b1f00733d0091cd0090542e02dd", + "0x700d0091cd00900d0090160070530091cd0090530090230072e30091cd", + "0xd0532e305a0093400091cd009340009b200070320091cd009032009028", + "0x905a00935f0070071cd00919b009a7e0070071cd00900700d007340032", + "0x984000734a0091cd0090070260070570091cd0092e400902e0070071cd", + "0x2e02dd01635405ab1e0073540091cd00902c00947b0073530091cd00934a", + "0x91cd0092e30092e400735f0091cd009357009b1f0073570091cd009353", + "0x902800700d0091cd00900d0090160070570091cd0090570090230072e3", + "0x35f14000d0572e305a00935f0091cd00935f009b200071400091cd009140", + "0x71cd0092dd0098740070071cd00919b009a7e0070071cd00900700d007", + "0x1cd0092e00093240070071cd009145009a740070071cd00905a00935f007", + "0x2e70092e40073620091cd009360009b210073600091cd00900730f007007", + "0xd0091cd00900d0090160072e80091cd0092e80090230072e70091cd009", + "0x2e82e705a0093620091cd009362009b200071400091cd009140009028007", + "0xb4d2e72e400d1cd00d00900700d0090070071cd00900731400736214000d", + "0x943100701b0091cd0091450095650070071cd00900700d0070162e800d", + "0x92dd00952a0070071cd00900700d00702c009b4e0a701e00d1cd00d01b", + "0x1cd00902802300d8200070282e000d1cd0092e0009b1b0070232dd00d1cd", + "0x4350070290091cd0090260094340070260091cd0090a7009432007025009", + "0x1cd00905a0090c10071990091cd00901e00947b0072f30091cd009029009", + "0x72f30091cd0092f300903b0070250091cd0090250098210072f405a00d", + "0x700d007034032030140b4f02e02b00d1cd00d2f30252f41402e705aa69", + "0x70820091cd0092e0009b500072e00091cd0092e000932c0070071cd009", + "0x900700d00730b009b520380091cd00d082009b510070071cd0090074e2", + "0x2e400730e0091cd00902b00902e00702b0091cd00902b0090230070071cd", + "0x1cd00900d00901600703a0091cd00930e00902300730f0091cd0092e4009", + "0x32c0073140091cd00919b00903b0073120091cd0092dd00914400703b009", + "0x3240070071cd00900700d007007b5300900731b00703f0091cd009038009", + "0x2b0091cd00902b0090230070071cd0092dd0098740070071cd00930b009", + "0x922700731b2e300d1cd0092e3009a680070400091cd00902b00902e007", + "0x91cd00904319b00d3e80070430091cd0090076b600731c0091cd00931b", + "0x4400916e0070440091cd00904400903b00731e0091cd009007a6c007044", + "0x31e31f31c00d145a6d00731e0091cd00931e00903b00731f04400d1cd009", + "0x1cd00932c0090d10070071cd0093240090d100732c3240480471451cd009", + "0x704c04b00d1cd0090482e400d81a0070480091cd00904800903b007007", + "0x1cd00904000902300730f0091cd00904b0092e40073300091cd009007b19", + "0x3b0073120091cd00904c00914400703b0091cd00904700901600703a009", + "0x71cd00900731400703f0091cd00933000932c0073140091cd009044009", + "0x3b00901600703a0091cd00903a00902300730f0091cd00930f0092e4007", + "0x1990091cd009199009a7000702e0091cd00902e00902800703b0091cd009", + "0x3f00932c0073120091cd00931200914400705a0091cd00905a009360007", + "0x2e30091cd0092e30098210073140091cd00931400903b00703f0091cd009", + "0x33605004f33205a1cd0092e331403f31205a19902e03b03a30f2e4b4c007", + "0x1cd0092e3009a7e0070071cd00900700d00733833605004f33205a009338", + "0x3000902e0070300091cd0090300090230070071cd00905a00935f007007", + "0x542e02dd19b19905ab1e0070540091cd0090340098430070530091cd009", + "0x2e40091cd0092e40092e40073400091cd00933d009b1f00733d0091cd009", + "0x3200902800700d0091cd00900d0090160070530091cd009053009023007", + "0x734003200d0532e405a0093400091cd009340009b200070320091cd009", + "0x70071cd00905a00935f0070071cd0092e3009a7e0070071cd00900700d", + "0x1cd00934a00984000734a0091cd0090070260070570091cd0092e700902e", + "0x1cd0093532e02dd19b35405ab1e0073540091cd00902c00947b007353009", + "0x230072e40091cd0092e40092e400735f0091cd009357009b1f007357009", + "0x1cd00914000902800700d0091cd00900d0090160070570091cd009057009", + "0x700d00735f14000d0572e405a00935f0091cd00935f009b20007140009", + "0x9a740070071cd0092e00093240070071cd0092e3009a7e0070071cd009", + "0x8740070071cd00905a00935f0070071cd00919b0090d10070071cd009145", + "0x3620091cd009360009b210073600091cd00900730f0070071cd0092dd009", + "0xd0090160070160091cd0090160090230072e80091cd0092e80092e4007", + "0x3620091cd009362009b200071400091cd00914000902800700d0091cd009", + "0x700d007009009b540071cd00d00700926400736214000d0162e805a009", + "0xb560071400091cd00900d009b5500700d0091cd009007b190070071cd009", + "0x1cd0090072630070071cd00900700d0071400090091400091cd009140009", + "0x72dd0091cd00905a00917600705a0091cd00914500900d174007145009", + "0x2e84a82e00090092e00091cd0092e0009b560072e00091cd0092dd00952e", + "0x2cb2ca2c92c80380072c72e80eb2cf2ce2cd2cc2cb2ca2c92c80380072c7", + "0x90070072e72e42e319b2e02dd05a14514000d0090072c52cf2ce2cd2cc", + "0x2cd2cc2ca0072e82d12cf2c92c70382ce2c82cb2cd2cc2ca0072e807d029", + "0x2e72e42e319b2e02dd05a14514000d0090072d32cf2c92c70382ce2c82cb", + "0x28a00700db590072d3009009009b58007029009010009b570290090073a3", + "0x90072d300700d28700700db5b0072d30091cb009b5a0090072d300700d", + "0x2d300900c009b5e0090072d300700d28400700db5d0072d300900f009b5c", + "0x27e00700db610072d300903c009b600090072d300700d28100700db5f007", + "0x700db6300d0090072d3038007140296038007140b620090072d300700d", + "0xd29900700db650090072d300700d29800700db640090072d300700d297", + "0x2d300700d29b00700db670090072d300700d29a00700db660090072d3007", + "0x700d26800700db6a0072d3009010009b690072d300906d009b68009007", + "0x2c800714029f2c8007140b6c0090072d300700d26900700db6b0090072d3", + "0x2ddb6e14000d0090073022ce0071401742272ce007145b6d00d0090072d3", + "0x17d009b6f05a14514000d0090073032cf2ce00714519e00f1742cf2ce007", + "0xdb720090072d300700d2a100700db710072d3009307009b700072d3009", + "0x90072d32ce2ca00714521f2ce2ca007145b730090072d300700d2a2007", + "0x30d009b7514000d0090072d32ce2ca00714530a2ce2ca007145b7414000d", + "0x145b7714000d0090072d32ce2ca0071452072ce2ca007145b760072d3009", + "0xb790072d3009311009b7814000d0090072d32ce2ca0071453102ce2ca007", + "0x3132ce2ca007145b7a14000d0090072d32ce2ca00714521c2ce2ca007145", + "0x2d3009254009b7c0072d3009315009b7b14000d0090072d32ce2ca007145", + "0x1452172ce2ca007145b7f0072d300902d009b7e0072d300921a009b7d007", + "0x24f24f24f2cb2cd2cc2ddb81029009007b8014000d0090072d32ce2ca007", + "0x13024e02d2cf0382ce0072e0b8205a14514000d0090072d32cb2cd2cc145", + "0x2d02d2cf2ce0072e0b832dd05a14514000d0090073202cf0382ce00705a", + "0x2ddb85029009007b842dd05a14514000d0090073232cf2ce00714520e02d", + "0xb8605a14514000d0090072d32cf2c92c72ce0072dd2ac2cf2c92c72ce007", + "0x1bc009b890072d30091bf009b880072d30091c2009b870072d30091c5009", + "0x2d300907a009b8c0072d3009071009b8b0072d30090a9009b8a0072d3009", + "0xb900072d300931d009b8f0072d30090f9009b8e0072d30090ee009b8d007", + "0x3412ce0071402002ce007140b920072d300916e009b910072d3009215009", + "0xb97029009007b96029009007b95029009007b94029009007b9300d009007", + "0xb9c029009007b9b029009007b9a029009007b99029009007b98029009007", + "0xba1029009007ba0029009007b9f029009007b9e029009007b9d029009007", + "0x27b00700dba40090072d300700d23300700dba3029009007ba2029009007", + "0x29009007ba600d00900738600700d3851c5007140ba50090072d300700d", + "0x700d38b1c2007140ba90090072d300700d27800700dba8029009007ba7", + "0x72d300700d27600700dbac029009007bab029009007baa00d00900738d", + "0x29009007baf029009007bae00d00900739400700d3931bf007140bad009", + "0xd00900739900700d3981bc007140bb10090072d300700d27400700dbb0", + "0x7140bb50090072d300700d27200700dbb4029009007bb3029009007bb2", + "0x27000700dbb8029009007bb7029009007bb600d0090073a100700d39f0a9", + "0x3c1009bbb0072d30091aa009bba0072d300924f009bb90090072d300700d", + "0x2d30093c9009bbe0072d30093c7009bbd0072d30093c4009bbc0072d3009", + "0xbc20072d30093d1009bc10072d30093ce009bc00072d30093cb009bbf007", + "0x3dc009bc50072d30093d9009bc40072d30093d6009bc30072d30093d3009", + "0x2d30093e3009bc80072d30093e1009bc70072d30093df009bc60072d3009", + "0xbcc0072d30091b0009bcb0072d3009230009bca0072d30093e6009bc9007", + "0x5abce00d00900717400900f010174140bcd0090073f400700d1a900700d", + "0x2d300916f009bcf14514000d0090074182cf2ce0071451791782cf2ce007", + "0xbd30072d300941d009bd20072d30093c9009bd10072d3009023009bd0007", + "0x9007bd60072d3009264009bd50072d3009420009bd40072d300941f009", + "0xbda0072d3009241009bd90072d300902e009bd80072d3009424009bd7029", + "0x32009bdd0072d300942f009bdc0072d300942d009bdb0072d300942c009", + "0x25e2ce2ca00714521f2ce2ca007145bdf0072d3009430009bde0072d3009", + "0xbe114000d00900725b2ce2ca0071452072ce2ca007145be014000d009007", + "0x7be3029009007be214000d0090072582ce2ca00714521c2ce2ca007145", + "0x714524e02d2cf2ce00705abe500900732300700d02d00700dbe4029009", + "0x2cf0382ce00705a1352cf0382ce00705abe614514000d0090074522cf2ce", + "0x2d02d007145be800900732300700d02d00700dbe714514000d009007453", + "0x1b500f2cf2c92ce0072e0bea029009007be914000d00900702d00700d08d", + "0x72d3009471009beb2dd05a14514000d00900746f2cf2c92ce00705a22c", + "0x9bef0072d300947a009bee0072d3009477009bed0072d30091f9009bec", + "0x9486009bf20072d3009483009bf10072d300907b009bf00072d300947d", + "0x700d1eb00700dbf6029009007bf5029009007bf4029009007bf30072d3", + "0xbfb029009007bfa029009007bf9029009007bf8029009007bf70090072d3", + "0xc00029009007bff029009007bfe029009007bfd029009007bfc029009007", + "0xc05029009007c04029009007c03029009007c02029009007c01029009007", + "0x700d00f00700dc0700d00900743100700d0a90a9007140c06029009007", + "0x14000d0090073cc2cf0382ce00705a0322cf0382ce00705ac0800900742b", + "0xf0792cf2c92ce00719bc0a00d0090073bf00700d02d02d007140c09145", + "0x2d007140c0b2e02dd05a14514000d00900739d2cf2c92ce00705a1b507a", + "0xc0f029009007c0e029009007c0d029009007c0c00d00900738a00700d02d", + "0x2ce007145c1014514000d0090070820382ce00714501b0320382ce00705a", + "0x907a00f0792cf2c92ce0072e3c1114000d0090072f32ce00714000f01b", + "0x2ce0072e4c1219b2e02dd05a14514000d00900739d2cf2c92ce00705a1b5", + "0x5a14514000d00900739d2cf2c92ce00705a1b501000907a00f0792cf2c9", + "0xc1400700d009009009c132e319b2e02dd" + ], + "contract_class_version": "0.1.0", + "entry_points_by_type": { + "EXTERNAL": [ + { + "selector": "0x1cad42b55a5b2c7366b371db59448730766dfef74c0156c9c6f332c8c5e34d9", + "function_idx": 0 + } + ], + "L1_HANDLER": [], + "CONSTRUCTOR": [] + }, + "abi": "[{\"type\": \"function\", \"name\": \"entry_point\", \"inputs\": [], \"outputs\": [], \"state_mutability\": \"external\" }, {\"type\": \"event\", \"name\": \"cairo_level_tests::contracts::libfuncs_coverage::libfuncs_coverage::Event\", \"kind\": \"enum\", \"variants\": []}]" +} diff --git a/crates/rpc/fixtures/mainnet.sqlite b/crates/rpc/fixtures/mainnet.sqlite index 0c6bb3d1b8..a76a28c4bb 100644 Binary files a/crates/rpc/fixtures/mainnet.sqlite and b/crates/rpc/fixtures/mainnet.sqlite differ diff --git a/crates/rpc/src/context.rs b/crates/rpc/src/context.rs index 71223aa8cb..681933788a 100644 --- a/crates/rpc/src/context.rs +++ b/crates/rpc/src/context.rs @@ -1,7 +1,10 @@ use std::num::{NonZeroU64, NonZeroUsize}; use std::sync::Arc; -use pathfinder_common::{contract_address, ChainId, ConsensusInfo, ContractAddress}; +use pathfinder_common::{ + consensus_info, contract_address, ChainId, ContractAddress, EthereumAddress, + SettlementLayerAddress, +}; use pathfinder_ethereum::EthereumClient; use pathfinder_executor::{NativeClassCache, TraceCache, VersionedConstantsMap}; use pathfinder_storage::Storage; @@ -73,8 +76,13 @@ pub struct RpcConfig { pub versioned_constants_map: VersionedConstantsMap, pub native_execution: bool, pub native_class_cache_size: NonZeroUsize, + pub native_compiler_optimization_level: u8, + pub native_execution_force_use_for_incompatible_classes: bool, pub submission_tracker_time_limit: NonZeroU64, pub submission_tracker_size_limit: NonZeroUsize, + pub block_trace_cache_size: NonZeroUsize, + pub compiler_resource_limits: pathfinder_compiler::ResourceLimits, + pub blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, } #[derive(Clone)] @@ -86,6 +94,7 @@ pub struct RpcContext { pub sync_status: Arc, pub submission_tracker: SubmittedTransactionTracker, pub chain_id: ChainId, + pub is_l3: bool, pub contract_addresses: EthContractAddresses, pub sequencer: SequencerClient, pub websocket: Option, @@ -93,7 +102,7 @@ pub struct RpcContext { pub ethereum: EthereumClient, pub config: RpcConfig, pub native_class_cache: Option, - pub consensus_info_watch: Option>>, + pub consensus_info_watch: Option>, } impl RpcContext { @@ -103,6 +112,7 @@ impl RpcContext { execution_storage: Storage, sync_status: Arc, chain_id: ChainId, + is_l3: bool, contract_addresses: EthContractAddresses, sequencer: SequencerClient, pending_data: tokio_watch::Receiver, @@ -116,17 +126,21 @@ impl RpcContext { ); let pending_watcher = PendingWatcher::new(pending_data.clone()); let native_class_cache = if config.native_execution { - Some(NativeClassCache::spawn(config.native_class_cache_size)) + Some(NativeClassCache::spawn( + config.native_class_cache_size, + config.native_compiler_optimization_level, + )) } else { None }; Self { - cache: Default::default(), + cache: TraceCache::with_size(config.block_trace_cache_size), storage, execution_storage, sync_status, submission_tracker, chain_id, + is_l3, contract_addresses, pending_data: pending_watcher, sequencer, @@ -164,7 +178,7 @@ impl RpcContext { pub fn with_consensus_info_watch( self, - consensus_info_watch: watch::Receiver>, + consensus_info_watch: watch::Receiver, ) -> Self { Self { consensus_info_watch: Some(consensus_info_watch), @@ -238,8 +252,13 @@ impl RpcContext { versioned_constants_map: Default::default(), native_execution: true, native_class_cache_size: NonZeroUsize::new(10).unwrap(), + native_compiler_optimization_level: 0, + native_execution_force_use_for_incompatible_classes: false, submission_tracker_time_limit: NonZeroU64::new(300).unwrap(), submission_tracker_size_limit: NonZeroUsize::new(30000).unwrap(), + block_trace_cache_size: NonZeroUsize::new(1).unwrap(), + compiler_resource_limits: pathfinder_compiler::ResourceLimits::for_test(), + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs::default(), }; let ethereum = @@ -250,6 +269,7 @@ impl RpcContext { storage, sync_state, chain_id, + false, EthContractAddresses::new_known(core_contract_address), sequencer.disable_retry_for_tests(), rx, @@ -259,19 +279,6 @@ impl RpcContext { ) } - #[cfg(test)] - pub async fn for_tests_with_pending() -> Self { - // This is a bit silly with the arc in and out, but since its for tests the - // ergonomics of having Arc also constructed is nice. - let context = Self::for_tests(); - let pending_data = super::test_utils::create_pending_data(context.storage.clone()).await; - - let (tx, rx) = tokio_watch::channel(Default::default()); - tx.send(pending_data).unwrap(); - - context.with_pending_data(rx) - } - #[cfg(test)] pub async fn for_tests_with_pre_confirmed() -> Self { // This is a bit silly with the arc in and out, but since its for tests the diff --git a/crates/rpc/src/dto.rs b/crates/rpc/src/dto.rs index b5f29b637b..48b73ae7dd 100644 --- a/crates/rpc/src/dto.rs +++ b/crates/rpc/src/dto.rs @@ -101,6 +101,16 @@ impl Serializer { BaseSerializer {}.serialize_u128(value) } + pub fn serialize_f32(self, value: f32) -> Result { + use serde::Serializer; + BaseSerializer {}.serialize_f32(value) + } + + pub fn serialize_f64(self, value: f64) -> Result { + use serde::Serializer; + BaseSerializer {}.serialize_f64(value) + } + pub fn serialize_bool(self, value: bool) -> Result { use serde::Serializer; BaseSerializer {}.serialize_bool(value) @@ -622,6 +632,55 @@ impl Map { } } } + + pub fn deserialize_optional_array_or_scalar( + &mut self, + key: &'static str, + cb: impl Fn(Value) -> Result, + ) -> Result, serde_json::Error> { + match &mut self.data { + MapOrArray::Map(data) => { + let value = data.remove(key); + match value { + Some(value) => { + let value1 = Value { + data: value.clone(), + name: Some(key), + version: self.version, + }; + match value1.deserialize_array(&cb) { + Ok(res) => Ok(res), + Err(_) => { + let value2 = Value { + data: value, + name: Some(key), + version: self.version, + }; + let scalar = cb(value2)?; + Ok(vec![scalar]) + } + } + } + None => Ok(vec![]), + } + } + MapOrArray::Array { values, offset } => { + let value = values.get_mut(*offset).map(|value| value.take()); + match value { + Some(value) => { + let value = Value { + data: value, + name: Some(key), + version: self.version, + }; + *offset += 1; + Ok(value.deserialize_array(cb)?) + } + None => Ok(vec![]), + } + } + } + } } #[cfg(test)] diff --git a/crates/rpc/src/dto/block.rs b/crates/rpc/src/dto/block.rs index ae1b2eef0c..8b613de909 100644 --- a/crates/rpc/src/dto/block.rs +++ b/crates/rpc/src/dto/block.rs @@ -1,4 +1,10 @@ -use pathfinder_common::{GasPrice, L1DataAvailabilityMode}; +use pathfinder_common::{ + EventCommitment, + GasPrice, + L1DataAvailabilityMode, + StarknetVersion, + TransactionCommitment, +}; use serde::de::Error; use crate::dto::SerializeStruct; @@ -12,8 +18,8 @@ impl crate::dto::DeserializeForVersion for crate::types::request::BlockId { match value.as_str() { "latest" => Ok(Self::Latest), "l1_accepted" => Ok(Self::L1Accepted), - "pending" if rpc_version < RpcVersion::V09 => Ok(Self::Pending), - "pre_confirmed" if rpc_version >= RpcVersion::V09 => Ok(Self::Pending), + "pending" if rpc_version < RpcVersion::V09 => Ok(Self::PreConfirmed), + "pre_confirmed" if rpc_version >= RpcVersion::V09 => Ok(Self::PreConfirmed), _ => Err(serde_json::Error::custom("Invalid block id")), } } else { @@ -83,6 +89,27 @@ impl crate::dto::SerializeForVersion for pathfinder_common::BlockHeader { )?; } + if serializer.version >= RpcVersion::V10 { + if self.starknet_version < StarknetVersion::V_0_13_2 { + // Pathfinder storage stores 0.13.2-style event and transaction commitments for + // pre-0.13.2 blocks. This is required so that we can serve the + // 0.13.2-style commitments over the P2P sync protocol. To avoid + // confusion, we return zeroed commitments for such blocks. + serializer.serialize_field("event_commitment", &EventCommitment::ZERO)?; + serializer + .serialize_field("transaction_commitment", &TransactionCommitment::ZERO)?; + } else { + serializer.serialize_field("event_commitment", &self.event_commitment)?; + serializer + .serialize_field("transaction_commitment", &self.transaction_commitment)?; + } + serializer.serialize_field("receipt_commitment", &self.receipt_commitment)?; + serializer.serialize_field("state_diff_commitment", &self.state_diff_commitment)?; + serializer.serialize_field("event_count", &self.event_count)?; + serializer.serialize_field("transaction_count", &self.transaction_count)?; + serializer.serialize_field("state_diff_length", &self.state_diff_length)?; + } + serializer.end() } } @@ -90,7 +117,7 @@ impl crate::dto::SerializeForVersion for pathfinder_common::BlockHeader { impl crate::dto::SerializeForVersion for ( pathfinder_common::BlockNumber, - &starknet_gateway_types::reply::PendingBlock, + &starknet_gateway_types::reply::PreLatestBlock, ) { fn serialize( @@ -156,7 +183,11 @@ impl crate::dto::SerializeForVersion for crate::pending::PreConfirmedBlock { serializer: crate::dto::Serializer, ) -> Result { let mut serializer = serializer.serialize_struct()?; - serializer.serialize_field("block_number", &self.number.get())?; + // For backward compatibility with pre-0.9 rpc versions we mustn't include block + // number to mimic the behaviour of "pending" block + if serializer.version >= RpcVersion::V09 { + serializer.serialize_field("block_number", &self.number.get())?; + } serializer.serialize_field("timestamp", &self.timestamp.get())?; serializer.serialize_field("sequencer_address", &self.sequencer_address)?; serializer.serialize_field( @@ -201,24 +232,23 @@ impl crate::dto::SerializeForVersion for crate::pending::PreConfirmedBlock { impl crate::dto::SerializeForVersion for ( - pathfinder_common::BlockNumber, - &crate::pending::PendingBlockVariant, + &Option, + &crate::pending::PreConfirmedBlock, ) { fn serialize( &self, serializer: crate::dto::Serializer, ) -> Result { - let (block_number, pending_block) = *self; - - match pending_block { - crate::pending::PendingBlockVariant::Pending(block) => { - (block_number, block).serialize(serializer) - } - crate::pending::PendingBlockVariant::PreConfirmed { block, .. } => { - block.serialize(serializer) - } + let mut serializer = serializer.serialize_struct()?; + if serializer.version < RpcVersion::V09 { + let parent_hash = self + .0 + .ok_or_else(|| crate::dto::Error::custom("Missing parent block hash"))?; + serializer.serialize_field("parent_hash", &parent_hash)?; } + serializer.flatten(self.1)?; + serializer.end() } } @@ -259,7 +289,7 @@ mod tests { use pathfinder_common::macro_prelude::*; use pathfinder_common::prelude::*; use serde_json::json; - use starknet_gateway_types::reply::{GasPrices, PendingBlock}; + use starknet_gateway_types::reply::{GasPrices, PreLatestBlock}; use crate::dto::{SerializeForVersion, Serializer}; use crate::RpcVersion; @@ -359,7 +389,7 @@ mod tests { #[test] fn pending_block() { let block_number = BlockNumber::new_or_panic(12345); - let pending = PendingBlock { + let pending = PreLatestBlock { l1_gas_price: GasPrices { price_in_wei: GasPrice(0x34795c87c), price_in_fri: GasPrice(0x59425e9d6d3c), diff --git a/crates/rpc/src/dto/primitives.rs b/crates/rpc/src/dto/primitives.rs index 04a08fc7f9..af2d8ad1a5 100644 --- a/crates/rpc/src/dto/primitives.rs +++ b/crates/rpc/src/dto/primitives.rs @@ -241,6 +241,18 @@ mod numerics { serializer.serialize_u64(self.get()) } } + + impl SerializeForVersion for f32 { + fn serialize(&self, serializer: Serializer) -> Result { + serializer.serialize_f32(*self) + } + } + + impl SerializeForVersion for f64 { + fn serialize(&self, serializer: Serializer) -> Result { + serializer.serialize_f64(*self) + } + } } mod strings { @@ -723,6 +735,12 @@ mod pathfinder_common_types { } } + impl SerializeForVersion for pathfinder_common::StateDiffCommitment { + fn serialize(&self, serializer: Serializer) -> Result { + serializer.serialize_str(&hex_str::bytes_to_hex_str_stripped(self.0.as_be_bytes())) + } + } + impl SerializeForVersion for pathfinder_common::StorageAddress { fn serialize(&self, serializer: Serializer) -> Result { serializer.serialize_str(&hex_str::bytes_to_hex_str_stripped(self.0.as_be_bytes())) @@ -802,6 +820,21 @@ mod pathfinder_common_types { serializer.serialize_str(&hex_str::bytes_to_hex_str_stripped(self.0.as_be_bytes())) } } + + impl SerializeForVersion for &pathfinder_common::ProofFactElem { + fn serialize(&self, serializer: Serializer) -> Result { + serializer.serialize_str(&hex_str::bytes_to_hex_str_stripped(self.0.as_be_bytes())) + } + } + + impl SerializeForVersion for &pathfinder_common::Proof { + fn serialize(&self, serializer: Serializer) -> Result { + use base64::Engine; + + let encoded = base64::engine::general_purpose::STANDARD.encode(&self.0); + serializer.serialize_str(&encoded) + } + } } #[cfg(test)] diff --git a/crates/rpc/src/dto/simulation.rs b/crates/rpc/src/dto/simulation.rs index 1f91359f3f..a8dd7e8e40 100644 --- a/crates/rpc/src/dto/simulation.rs +++ b/crates/rpc/src/dto/simulation.rs @@ -1,6 +1,15 @@ use anyhow::anyhow; -use pathfinder_common::{contract_address, entry_point, felt, ContractAddress, ContractNonce}; +use pathfinder_common::{ + contract_address, + entry_point, + felt, + ContractAddress, + ContractNonce, + StorageAddress, +}; +use pathfinder_crypto::Felt; use pathfinder_executor::types::{FunctionInvocation, RevertibleFunctionInvocation}; +use pathfinder_executor::IntoFelt; use serde::ser::Error; use super::SerializeStruct; @@ -160,6 +169,38 @@ impl crate::dto::SerializeForVersion for TransactionTrace { } } +#[derive(Debug)] +pub struct InitialReads<'a> { + pub maps: &'a pathfinder_executor::types::StateMaps, +} + +impl<'a> crate::dto::SerializeForVersion for InitialReads<'a> { + fn serialize(&self, serializer: super::Serializer) -> Result { + let mut serializer = serializer.serialize_struct()?; + serializer.serialize_iter( + "storage", + self.maps.storage.len(), + &mut self.maps.storage.iter().map(StorageValue), + )?; + serializer.serialize_iter( + "nonces", + self.maps.nonces.len(), + &mut self.maps.nonces.iter().map(Nonce), + )?; + serializer.serialize_iter( + "class_hashes", + self.maps.class_hashes.len(), + &mut self.maps.class_hashes.iter().map(ClassHash), + )?; + serializer.serialize_iter( + "declared_contracts", + self.maps.declared_contracts.len(), + &mut self.maps.declared_contracts.iter().map(DeclaredContract), + )?; + serializer.end() + } +} + impl crate::dto::SerializeForVersion for &FunctionInvocation { fn serialize( &self, @@ -469,6 +510,74 @@ impl crate::dto::SerializeForVersion for Nonce<'_> { } } +struct ClassHash<'a>((&'a ContractAddress, &'a pathfinder_common::ClassHash)); + +impl crate::dto::SerializeForVersion for ClassHash<'_> { + fn serialize( + &self, + serializer: crate::dto::Serializer, + ) -> Result { + let mut serializer = serializer.serialize_struct()?; + serializer.serialize_field("contract_address", &self.0 .0)?; + serializer.serialize_field("class_hash", self.0 .1)?; + serializer.end() + } +} + +struct StorageValue<'a>( + ( + &'a (ContractAddress, StorageAddress), + &'a pathfinder_common::StorageValue, + ), +); + +impl crate::dto::SerializeForVersion for StorageValue<'_> { + fn serialize( + &self, + serializer: crate::dto::Serializer, + ) -> Result { + let mut serializer = serializer.serialize_struct()?; + serializer.serialize_field("contract_address", &self.0 .0 .0)?; + serializer.serialize_field("key", &self.0 .0 .1)?; + serializer.serialize_field("value", self.0 .1)?; + serializer.end() + } +} + +struct CompiledClassHash<'a>( + ( + &'a pathfinder_common::ClassHash, + &'a starknet_api::core::CompiledClassHash, + ), +); + +impl crate::dto::SerializeForVersion for CompiledClassHash<'_> { + fn serialize( + &self, + serializer: crate::dto::Serializer, + ) -> Result { + let mut serializer = serializer.serialize_struct()?; + serializer.serialize_field("class_hash", self.0 .0)?; + let cch = self.0 .1 .0.into_felt(); + serializer.serialize_field("compiled_class_hash", &cch)?; + serializer.end() + } +} + +struct DeclaredContract<'a>((&'a pathfinder_common::ClassHash, &'a bool)); + +impl crate::dto::SerializeForVersion for DeclaredContract<'_> { + fn serialize( + &self, + serializer: crate::dto::Serializer, + ) -> Result { + let mut serializer = serializer.serialize_struct()?; + serializer.serialize_field("class_hash", self.0 .0)?; + serializer.serialize_field("is_declared", self.0 .1)?; + serializer.end() + } +} + impl crate::dto::SerializeForVersion for pathfinder_executor::types::ExecutionResources { fn serialize( &self, @@ -551,21 +660,74 @@ impl crate::dto::SerializeForVersion for CallType { } } -#[derive(Debug, Eq, PartialEq)] +#[derive(Debug, Clone, Default, Eq, PartialEq)] +pub struct TraceFlags(pub Vec); + +impl TraceFlags { + pub fn new() -> Self { + Self(Vec::new()) + } + + pub fn contains(&self, flag: &TraceFlag) -> bool { + self.0.contains(flag) + } +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub enum TraceFlag { + ReturnInitialReads, +} + +impl crate::dto::DeserializeForVersion for TraceFlag { + fn deserialize(value: crate::dto::Value) -> Result { + let rpc_version = value.version; + let value: String = value.deserialize()?; + match value.as_str() { + "RETURN_INITIAL_READS" if rpc_version >= RpcVersion::V10 => { + Ok(Self::ReturnInitialReads) + } + _ => Err(serde_json::Error::custom("Invalid trace flag")), + } + } +} + +impl crate::dto::DeserializeForVersion for TraceFlags { + fn deserialize(value: crate::dto::Value) -> Result { + let array = value.deserialize_array(TraceFlag::deserialize)?; + Ok(Self(array)) + } +} + +#[derive(Debug, Clone, Eq, PartialEq)] pub struct SimulationFlags(pub Vec); -#[derive(Debug, Eq, PartialEq)] +impl SimulationFlags { + pub fn new() -> Self { + Self(Vec::new()) + } + + pub fn contains(&self, flag: &SimulationFlag) -> bool { + self.0.contains(flag) + } +} + +#[derive(Debug, Clone, Eq, PartialEq)] pub enum SimulationFlag { SkipFeeCharge, SkipValidate, + ReturnInitialReads, } impl crate::dto::DeserializeForVersion for SimulationFlag { fn deserialize(value: crate::dto::Value) -> Result { + let rpc_version = value.version; let value: String = value.deserialize()?; match value.as_str() { "SKIP_FEE_CHARGE" => Ok(Self::SkipFeeCharge), "SKIP_VALIDATE" => Ok(Self::SkipValidate), + "RETURN_INITIAL_READS" if rpc_version >= RpcVersion::V10 => { + Ok(Self::ReturnInitialReads) + } _ => Err(serde_json::Error::custom("Invalid simulation flag")), } } @@ -618,7 +780,6 @@ mod tests { TransactionTrace, }; use crate::method::call::FunctionCall; - use crate::method::get_state_update::types::{DeployedContract, Nonce, StateDiff}; use crate::method::simulate_transactions::tests::fixtures; use crate::types::request::{ BroadcastedDeclareTransaction, @@ -635,7 +796,7 @@ mod tests { BlockHeader, ContractAddress, ContractAddress, - StorageValue, + pathfinder_common::StorageValue, ) { let test_storage_key = StorageAddress::from_name(b"my_storage_var"); let test_storage_value = storage_value!("0x09"); diff --git a/crates/rpc/src/dto/state_update.rs b/crates/rpc/src/dto/state_update.rs index 0786c1ff98..4b68bf2367 100644 --- a/crates/rpc/src/dto/state_update.rs +++ b/crates/rpc/src/dto/state_update.rs @@ -1,11 +1,20 @@ use std::collections::HashMap; use pathfinder_common::prelude::*; +use serde::de::Error; use serde::Serialize; use crate::dto::{SerializeForVersion, Serializer}; use crate::{dto, RpcVersion}; +#[derive(Clone, Debug, Default, Eq, PartialEq)] +pub struct StorageResponseFlags(pub Vec); + +#[derive(Clone, Debug, Eq, PartialEq)] +pub enum StorageResponseFlag { + IncludeLastUpdateBlock, +} + pub struct StateUpdate<'a>(pub &'a pathfinder_common::StateUpdate); pub struct PendingStateUpdate<'a>(pub &'a pathfinder_common::StateUpdate); @@ -19,6 +28,23 @@ pub struct DeployedContractItem<'a> { class_hash: &'a ClassHash, } +impl crate::dto::DeserializeForVersion for StorageResponseFlag { + fn deserialize(value: crate::dto::Value) -> Result { + let value: String = value.deserialize()?; + match value.as_str() { + "INCLUDE_LAST_UPDATE_BLOCK" => Ok(Self::IncludeLastUpdateBlock), + _ => Err(serde_json::Error::custom("Invalid response flag")), + } + } +} + +impl crate::dto::DeserializeForVersion for StorageResponseFlags { + fn deserialize(value: crate::dto::Value) -> Result { + let array = value.deserialize_array(StorageResponseFlag::deserialize)?; + Ok(Self(array)) + } +} + impl SerializeForVersion for StateUpdate<'_> { fn serialize(&self, serializer: Serializer) -> Result { let mut serializer = serializer.serialize_struct()?; diff --git a/crates/rpc/src/dto/transaction.rs b/crates/rpc/src/dto/transaction.rs index f8e03bb440..fda4e08084 100644 --- a/crates/rpc/src/dto/transaction.rs +++ b/crates/rpc/src/dto/transaction.rs @@ -6,12 +6,41 @@ use super::{DeserializeForVersion, U128Hex, U64Hex}; use crate::dto::{SerializeForVersion, Serializer}; use crate::{dto, RpcVersion}; -pub struct TransactionWithHash<'a>(pub &'a pathfinder_common::transaction::Transaction); +#[derive(Debug, Default, Eq, PartialEq)] +pub struct TransactionResponseFlags(pub Vec); -impl SerializeForVersion for &pathfinder_common::transaction::Transaction { +#[derive(Debug, Eq, PartialEq)] +pub enum TransactionResponseFlag { + IncludeProofFacts, +} + +impl crate::dto::DeserializeForVersion for TransactionResponseFlag { + fn deserialize(value: crate::dto::Value) -> Result { + let value: String = value.deserialize()?; + match value.as_str() { + "INCLUDE_PROOF_FACTS" => Ok(Self::IncludeProofFacts), + _ => Err(serde_json::Error::custom("Invalid response flag")), + } + } +} + +impl crate::dto::DeserializeForVersion for TransactionResponseFlags { + fn deserialize(value: crate::dto::Value) -> Result { + let array = value.deserialize_array(TransactionResponseFlag::deserialize)?; + Ok(Self(array)) + } +} + +pub struct TransactionWithHash<'a> { + pub transaction: &'a pathfinder_common::transaction::Transaction, + pub include_proof_facts: bool, +} + +impl SerializeForVersion for (&pathfinder_common::transaction::Transaction, bool) { fn serialize(&self, serializer: Serializer) -> Result { + let (tx, include_proof_facts) = *self; let mut s = serializer.serialize_struct()?; - match &self.variant { + match &tx.variant { TransactionVariant::DeclareV0(tx) => { s.serialize_field("type", &"DECLARE")?; s.serialize_field("sender_address", &tx.sender_address)?; @@ -168,6 +197,10 @@ impl SerializeForVersion for &pathfinder_common::transaction::Transaction { &tx.nonce_data_availability_mode, )?; s.serialize_field("fee_data_availability_mode", &tx.fee_data_availability_mode)?; + + if include_proof_facts && serializer.version >= RpcVersion::V10 { + s.serialize_field("proof_facts", &tx.proof_facts)?; + } } TransactionVariant::L1Handler(tx) => { s.serialize_field("version", &"0x0")?; @@ -185,8 +218,8 @@ impl SerializeForVersion for &pathfinder_common::transaction::Transaction { impl SerializeForVersion for TransactionWithHash<'_> { fn serialize(&self, serializer: Serializer) -> Result { let mut s = serializer.serialize_struct()?; - s.serialize_field("transaction_hash", &self.0.hash)?; - s.flatten(&self.0)?; + s.serialize_field("transaction_hash", &self.transaction.hash)?; + s.flatten(&(self.transaction, self.include_proof_facts))?; s.end() } } @@ -201,7 +234,7 @@ impl SerializeForVersion for pathfinder_common::transaction::ResourceBounds { serializer.serialize_field("l2_gas", &self.l2_gas)?; if serializer.version >= RpcVersion::V08 { // `l1_data_gas` is serialized as (0, 0) in v0.8+ even if it's not set - // See https://github.com/eqlabs/pathfinder/issues/2571 + // See https://github.com/equilibriumco/pathfinder/issues/2571 serializer.serialize_field("l1_data_gas", &self.l1_data_gas.unwrap_or_default())?; } serializer.end() @@ -217,7 +250,7 @@ impl DeserializeForVersion for pathfinder_common::transaction::ResourceBounds { l2_gas: value.deserialize("l2_gas")?, l1_data_gas: if version >= RpcVersion::V08 { // `l1_data_gas` is *required* in v0.8+ - // See https://github.com/eqlabs/pathfinder/issues/2571 + // See https://github.com/equilibriumco/pathfinder/issues/2571 Some(value.deserialize("l1_data_gas")?) } else { None @@ -330,6 +363,24 @@ impl crate::dto::SerializeForVersion for Vec { + fn serialize( + &self, + serializer: crate::dto::Serializer, + ) -> Result { + serializer.serialize_iter(self.len(), &mut self.iter()) + } +} + +impl crate::dto::SerializeForVersion for pathfinder_common::Proof { + fn serialize( + &self, + serializer: crate::dto::Serializer, + ) -> Result { + (&self).serialize(serializer) + } +} + #[cfg(test)] mod tests { use pathfinder_common::transaction::{ResourceBound, ResourceBounds}; @@ -377,7 +428,7 @@ mod tests { "signature": ["0xa1b1", "0x1a1b"], "class_hash": "0x123", }); - let result = uut + let result = (uut, false) .serialize(Serializer { version: RpcVersion::V07, }) @@ -412,7 +463,7 @@ mod tests { "class_hash": "0x123", "nonce": "0xaabbcc", }); - let result = uut + let result = (uut, false) .serialize(Serializer { version: RpcVersion::V07, }) @@ -450,7 +501,7 @@ mod tests { "nonce": "0xaabbcc", "compiled_class_hash": "0xbbbbb", }); - let result = uut + let result = (uut, false) .serialize(Serializer { version: RpcVersion::V07, }) @@ -514,7 +565,7 @@ mod tests { "paymaster_data": [], "account_deployment_data": [], }); - let result = uut + let result = (uut, false) .serialize(Serializer { version: RpcVersion::V07, }) @@ -547,7 +598,7 @@ mod tests { "constructor_calldata": ["0xbbb0","0xbbb1"], "version": "0x0", }); - let result = uut + let result = (uut, false) .serialize(Serializer { version: RpcVersion::V07, }) @@ -586,7 +637,7 @@ mod tests { "constructor_calldata": ["0xbbb0","0xbbb1"], "class_hash": "0x123", }); - let result = uut + let result = (uut, false) .serialize(Serializer { version: RpcVersion::V07, }) @@ -649,7 +700,7 @@ mod tests { "tip": "0x5", "paymaster_data": [], }); - let result = uut + let result = (uut, false) .serialize(Serializer { version: RpcVersion::V07, }) @@ -686,7 +737,7 @@ mod tests { "max_fee": "0x1111", "signature": ["0xa1b1", "0x1a1b"], }); - let result = uut + let result = (uut, false) .serialize(Serializer { version: RpcVersion::V07, }) @@ -722,7 +773,7 @@ mod tests { "signature": ["0xa1b1", "0x1a1b"], "nonce": "0xaabbcc", }); - let result = uut + let result = (uut, false) .serialize(Serializer { version: RpcVersion::V07, }) @@ -754,6 +805,7 @@ mod tests { tip: Tip(5), paymaster_data: vec![], account_deployment_data: vec![], + proof_facts: vec![], } .into(); let uut = &Transaction { @@ -784,7 +836,7 @@ mod tests { "paymaster_data": [], "account_deployment_data": [], }); - let result = uut + let result = (uut, false) .serialize(Serializer { version: RpcVersion::V07, }) @@ -815,7 +867,7 @@ mod tests { "calldata": ["0xfff1","0xfff0"], "version": "0x0", }); - let result = uut + let result = (uut, false) .serialize(Serializer { version: RpcVersion::V07, }) diff --git a/crates/rpc/src/error.rs b/crates/rpc/src/error.rs index 42a366f470..ff2d2d2dbd 100644 --- a/crates/rpc/src/error.rs +++ b/crates/rpc/src/error.rs @@ -85,8 +85,13 @@ pub enum ApplicationError { UnexpectedError { data: String }, #[error("Too many storage keys requested")] ProofLimitExceeded { limit: u32, requested: u32 }, + #[error("The proof field in the invoke v3 transaction is invalid")] + InvalidProof, #[error("Internal error")] GatewayError(starknet_gateway_types::error::StarknetError), + /// Gateway HTTP errors whose status is forwarded. + #[error("Internal error")] + ForwardedError(reqwest::Error), #[error("Transaction execution error")] TransactionExecutionError { transaction_index: usize, @@ -164,6 +169,7 @@ impl ApplicationError { ApplicationError::UnsupportedTxVersion => 61, ApplicationError::UnsupportedContractClassVersion => 62, ApplicationError::UnexpectedError { .. } => 63, + ApplicationError::InvalidProof => 69, // specs/rpc/pathfinder_rpc_api.json ApplicationError::ProofLimitExceeded { .. } => 10000, ApplicationError::ProofMissing => 10001, @@ -175,6 +181,7 @@ impl ApplicationError { ApplicationError::TooManyBlocksBack { .. } => 68, // https://www.jsonrpc.org/specification#error_object ApplicationError::GatewayError(_) + | ApplicationError::ForwardedError(_) | ApplicationError::Internal(_) | ApplicationError::Custom(_) => -32603, } @@ -248,6 +255,9 @@ impl ApplicationError { ApplicationError::GatewayError(error) => Some(json!({ "error": error, })), + ApplicationError::ForwardedError(error) => Some(json!({ + "error": error.to_string(), + })), ApplicationError::TransactionExecutionError { transaction_index, error, @@ -304,6 +314,7 @@ impl ApplicationError { "limit": limit, "requested": requested, })), + ApplicationError::InvalidProof => None, ApplicationError::StorageProofNotSupported => None, ApplicationError::ProofMissing => None, ApplicationError::SubscriptionTransactionHashNotFound { diff --git a/crates/rpc/src/executor.rs b/crates/rpc/src/executor.rs index 88f9e76b97..f3e78272cd 100644 --- a/crates/rpc/src/executor.rs +++ b/crates/rpc/src/executor.rs @@ -1,16 +1,20 @@ use anyhow::Context; +use pathfinder_common::class_definition::{ + SerializedOpaqueClassDefinition, + SerializedSierraDefinition, +}; use pathfinder_common::transaction::TransactionVariant; -use pathfinder_common::{BlockNumber, ChainId, StarknetVersion}; +use pathfinder_common::{BlockNumber, ChainId, StarknetVersion, TransactionVersion}; +use pathfinder_crypto::Felt; use pathfinder_executor::types::to_starknet_api_transaction; use pathfinder_executor::{ClassInfo, IntoStarkFelt}; use starknet_api::contract_class::SierraVersion; use starknet_api::core::PatriciaKey; -use starknet_api::transaction::fields::Fee; +use starknet_api::transaction::fields::{Fee, ValidResourceBounds}; +use crate::types::class::sierra::SierraContractClass; use crate::types::request::{ - BroadcastedDeployAccountTransaction, - BroadcastedInvokeTransaction, - BroadcastedTransaction, + BroadcastedDeployAccountTransaction, BroadcastedInvokeTransaction, BroadcastedTransaction, }; pub enum ExecutionStateError { @@ -77,6 +81,8 @@ pub(crate) fn signature_elem_limit_exceeded(tx: &BroadcastedTransaction) -> bool pub(crate) fn map_broadcasted_transaction( transaction: &BroadcastedTransaction, chain_id: ChainId, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, skip_validate: bool, skip_fee_charge: bool, ) -> anyhow::Result { @@ -89,8 +95,9 @@ pub(crate) fn map_broadcasted_transaction( .serialize_to_json() .context("Serializing Cairo class to JSON")?; - let contract_class = - pathfinder_executor::parse_deprecated_class_definition(contract_class_json)?; + let contract_class = pathfinder_executor::parse_deprecated_class_definition( + SerializedOpaqueClassDefinition::from_bytes(contract_class_json), + )?; Some(ClassInfo::new( &contract_class, @@ -105,8 +112,9 @@ pub(crate) fn map_broadcasted_transaction( .serialize_to_json() .context("Serializing Cairo class to JSON")?; - let contract_class = - pathfinder_executor::parse_deprecated_class_definition(contract_class_json)?; + let contract_class = pathfinder_executor::parse_deprecated_class_definition( + SerializedOpaqueClassDefinition::from_bytes(contract_class_json), + )?; Some(ClassInfo::new( &contract_class, @@ -116,14 +124,18 @@ pub(crate) fn map_broadcasted_transaction( )?) } BroadcastedTransaction::Declare(BroadcastedDeclareTransaction::V2(tx)) => { - let casm_contract_definition = pathfinder_compiler::compile_to_casm( - &tx.contract_class - .serialize_to_json() + let sierra_version = + SierraVersion::extract_from_program(&tx.contract_class.sierra_program)?; + let sierra_definition = SerializedSierraDefinition::from_bytes( + serde_json::to_vec(&tx.contract_class) .context("Serializing Sierra class definition")?, + ); + let casm_contract_definition = pathfinder_compiler::compile_sierra_to_casm( + &sierra_definition, + compiler_resource_limits, + blockifier_libfuncs, ) .context("Compiling Sierra class definition to CASM")?; - let sierra_version = - SierraVersion::extract_from_program(&tx.contract_class.sierra_program)?; let casm_contract_definition = pathfinder_executor::parse_casm_definition( casm_contract_definition, @@ -138,14 +150,18 @@ pub(crate) fn map_broadcasted_transaction( )?) } BroadcastedTransaction::Declare(BroadcastedDeclareTransaction::V3(tx)) => { - let casm_contract_definition = pathfinder_compiler::compile_to_casm( - &tx.contract_class - .serialize_to_json() + let sierra_version = + SierraVersion::extract_from_program(&tx.contract_class.sierra_program)?; + let sierra_definition = SerializedSierraDefinition::from_bytes( + serde_json::to_vec(&tx.contract_class) .context("Serializing Sierra class definition")?, + ); + let casm_contract_definition = pathfinder_compiler::compile_sierra_to_casm( + &sierra_definition, + compiler_resource_limits, + blockifier_libfuncs, ) .context("Compiling Sierra class definition to CASM")?; - let sierra_version = - SierraVersion::extract_from_program(&tx.contract_class.sierra_program)?; let casm_contract_definition = pathfinder_executor::parse_casm_definition( casm_contract_definition, @@ -275,8 +291,8 @@ pub fn compose_executor_transaction( let class_definition = db_transaction .class_definition(tx.class_hash)? .context("Fetching class definition")?; - let class_definition: crate::types::class::sierra::SierraContractClass = - serde_json::from_str(&String::from_utf8(class_definition)?) + let class_definition: SierraContractClass = + serde_json::from_slice(class_definition.as_bytes()) .context("Deserializing class definition")?; let sierra_version = SierraVersion::extract_from_program(&class_definition.sierra_program)?; @@ -297,8 +313,8 @@ pub fn compose_executor_transaction( let class_definition = db_transaction .class_definition(tx.class_hash)? .context("Fetching class definition")?; - let class_definition: crate::types::class::sierra::SierraContractClass = - serde_json::from_str(&String::from_utf8(class_definition)?) + let class_definition: SierraContractClass = + serde_json::from_slice(class_definition.as_bytes()) .context("Deserializing class definition")?; let sierra_version = SierraVersion::extract_from_program(&class_definition.sierra_program)?; @@ -359,6 +375,24 @@ pub fn compose_executor_transaction( tracing::trace!(%tx_hash, "Converting transaction"); let transaction = to_starknet_api_transaction(transaction.variant.clone())?; + let mut charge_fee = true; + if transaction.version().0 == starknet_types_core::felt::Felt::ZERO { + // Only used during bootstrapper v1 bootstrapping + charge_fee = false; + } else if let Some(resource_bounds) = transaction.resource_bounds() { + match resource_bounds { + ValidResourceBounds::AllResources(all_resources) => { + if all_resources.l2_gas.max_amount.0 == 0 { + charge_fee = false; + } + } + ValidResourceBounds::L1Gas(l1_gas) => { + if l1_gas.max_amount.0 == 0 { + charge_fee = false; + } + } + } + } let tx = pathfinder_executor::Transaction::from_api( transaction, @@ -366,7 +400,12 @@ pub fn compose_executor_transaction( class_info, paid_fee_on_l1, deployed_address, - pathfinder_executor::AccountTransactionExecutionFlags::default(), + pathfinder_executor::AccountTransactionExecutionFlags { + only_query: false, + charge_fee, + validate: true, + strict_nonce_check: true, + }, )?; Ok(tx) diff --git a/crates/rpc/src/felt.rs b/crates/rpc/src/felt.rs index d0e68aa54d..9f6a5354a3 100644 --- a/crates/rpc/src/felt.rs +++ b/crates/rpc/src/felt.rs @@ -22,6 +22,7 @@ //! ``` use pathfinder_common::prelude::*; +use pathfinder_common::ProofFactElem; use pathfinder_crypto::Felt; /// An RPC specific wrapper around [Felt] which implements @@ -188,6 +189,7 @@ rpc_felt_serde!( TransactionSignatureElem, PaymasterDataElem, AccountDeploymentDataElem, + ProofFactElem, ); rpc_felt_251_serde!(ContractAddress, StorageAddress); diff --git a/crates/rpc/src/jsonrpc.rs b/crates/rpc/src/jsonrpc.rs index 244887f988..4f9fccba6c 100644 --- a/crates/rpc/src/jsonrpc.rs +++ b/crates/rpc/src/jsonrpc.rs @@ -20,7 +20,6 @@ pub use router::{ RpcSubscriptionFlow, SubscriptionMessage, }; -use starknet_gateway_types::reply::Block; use tokio::sync::broadcast; #[derive(Debug, PartialEq, Clone)] @@ -42,7 +41,7 @@ impl RequestId { #[derive(Debug, Clone)] pub struct Notifications { pub block_headers: broadcast::Sender>, - pub l2_blocks: broadcast::Sender>, + pub l2_blocks: broadcast::Sender>, pub reorgs: broadcast::Sender>, } diff --git a/crates/rpc/src/jsonrpc/error.rs b/crates/rpc/src/jsonrpc/error.rs index 0ee4c2d9fe..055503a6d3 100644 --- a/crates/rpc/src/jsonrpc/error.rs +++ b/crates/rpc/src/jsonrpc/error.rs @@ -99,3 +99,9 @@ where Self::ApplicationError(value.into()) } } + +impl From for RpcError { + fn from(value: pathfinder_storage::StorageError) -> Self { + Self::InternalError(value.into()) + } +} diff --git a/crates/rpc/src/jsonrpc/response.rs b/crates/rpc/src/jsonrpc/response.rs index 4028df66d3..7782ee7d4a 100644 --- a/crates/rpc/src/jsonrpc/response.rs +++ b/crates/rpc/src/jsonrpc/response.rs @@ -120,13 +120,24 @@ impl IntoResponse for RpcResponse { _ => {} } - serde_json::to_vec( + let mut response = serde_json::to_vec( &self .serialize(crate::dto::Serializer::new(self.version)) .unwrap(), ) .unwrap() - .into_response() + .into_response(); + if let Err(RpcError::ApplicationError(ApplicationError::ForwardedError(error))) = + self.output + { + if let Some(status) = error.status() { + *response.status_mut() = status; + } else { + tracing::warn!(?error, "Forwarded error has no status"); + } + } + + response } } diff --git a/crates/rpc/src/jsonrpc/router.rs b/crates/rpc/src/jsonrpc/router.rs index 1a1dc6a23d..0d843f0f1a 100644 --- a/crates/rpc/src/jsonrpc/router.rs +++ b/crates/rpc/src/jsonrpc/router.rs @@ -124,13 +124,18 @@ impl RpcRouter { return Some(RpcResponse::method_not_found(request.id, self.version)); }; - metrics::increment_counter!("rpc_method_calls_total", "method" => method_name, "version" => self.version.to_str()); + metrics::counter!("rpc_method_calls_total", "method" => method_name, "version" => self.version.to_str()).increment(1); + + let start = std::time::Instant::now(); let method = method .invoke(self.context.clone(), request.params, self.version) .instrument(tracing::debug_span!("rpc_call", method=%method_name)); let result = std::panic::AssertUnwindSafe(method).catch_unwind().await; + let duration = start.elapsed(); + metrics::histogram!("rpc_method_calls_duration_milliseconds", "method" => method_name, "version" => self.version.to_str()).record(duration.as_millis() as f64); + let output = match result { Ok(output) => output, Err(e) => { @@ -142,7 +147,7 @@ impl RpcRouter { }; if output.is_err() { - metrics::increment_counter!("rpc_method_calls_failed_total", "method" => method_name, "version" => self.version.to_str()); + metrics::counter!("rpc_method_calls_failed_total", "method" => method_name, "version" => self.version.to_str()).increment(1); } Some(RpcResponse { @@ -196,10 +201,11 @@ pub async fn rpc_handler( return StatusCode::FORBIDDEN.into_response(); } - ws.on_upgrade(|ws| async move { - let (ws_tx, ws_rx) = split_ws(ws, state.version); - handle_json_rpc_socket(state, ws_tx, ws_rx); - }) + ws.max_message_size(crate::REQUEST_MAX_SIZE) + .on_upgrade(|ws| async move { + let (ws_tx, ws_rx) = split_ws(ws, state.version); + handle_json_rpc_socket(state, ws_tx, ws_rx); + }) } Err(_) => { if method != http::Method::POST { @@ -487,8 +493,6 @@ mod tests { Ok(Value::Number((input.0.iter().sum::()).into())) } - #[derive(Debug, Deserialize, Serialize)] - struct GetDataInput; #[derive(Debug, Deserialize, Serialize)] struct GetDataOutput(Vec); async fn get_data() -> Result { diff --git a/crates/rpc/src/jsonrpc/router/subscription.rs b/crates/rpc/src/jsonrpc/router/subscription.rs index 73728cb051..f3055d5eaf 100644 --- a/crates/rpc/src/jsonrpc/router/subscription.rs +++ b/crates/rpc/src/jsonrpc/router/subscription.rs @@ -209,8 +209,8 @@ where let starting_block = T::starting_block(¶ms); let mut current_block = util::task::spawn_blocking(move |_| -> Result<_, RpcError> { - let mut conn = storage.connection().map_err(RpcError::InternalError)?; - let db = conn.transaction().map_err(RpcError::InternalError)?; + let mut conn = storage.connection()?; + let db = conn.transaction()?; let starting_block = match starting_block { SubscriptionBlockId::Number(starting_block_number) @@ -713,7 +713,7 @@ async fn handle_request( version: state.version, })?; handle.abort(); - metrics::increment_counter!("rpc_method_calls_total", "method" => "starknet_unsubscribe", "version" => state.version.to_str()); + metrics::counter!("rpc_method_calls_total", "method" => "starknet_unsubscribe", "version" => state.version.to_str()).increment(1); return Ok(Some(RpcResponse { output: Ok(true.into()), id: req_id, @@ -725,7 +725,7 @@ async fn handle_request( .subscription_endpoints .get_key_value(rpc_request.method.as_ref()) .ok_or_else(|| RpcResponse::method_not_found(req_id.clone(), state.version))?; - metrics::increment_counter!("rpc_method_calls_total", "method" => method_name, "version" => state.version.to_str()); + metrics::counter!("rpc_method_calls_total", "method" => method_name, "version" => state.version.to_str()).increment(1); let params = serde_json::to_value(rpc_request.params) .map_err(|e| RpcResponse::invalid_params(req_id.clone(), e.to_string(), state.version))?; diff --git a/crates/rpc/src/lib.rs b/crates/rpc/src/lib.rs index cc1fbe8aee..85f2669b34 100644 --- a/crates/rpc/src/lib.rs +++ b/crates/rpc/src/lib.rs @@ -32,7 +32,7 @@ pub use executor::compose_executor_transaction; use http_body::Body; pub use jsonrpc::{Notifications, Reorg}; use pathfinder_common::{integration_testing, AllowedOrigins}; -pub use pending::{FinalizedTxData, PendingBlockVariant, PendingData}; +pub use pending::{FinalizedTxData, PendingBlocks, PendingData}; use tokio::sync::RwLock; use tokio::task::JoinHandle; use tower_http::cors::CorsLayer; @@ -283,6 +283,11 @@ impl crate::dto::DeserializeForVersion for SubscriptionId { pub mod test_utils { use std::collections::HashMap; + use pathfinder_common::class_definition::{ + SerializedCairoDefinition, + SerializedCasmDefinition, + SerializedSierraDefinition, + }; use pathfinder_common::event::Event; use pathfinder_common::macro_prelude::*; use pathfinder_common::prelude::*; @@ -398,11 +403,13 @@ pub mod test_utils { let contract1_update2 = HashMap::from([(storage_addr, storage_value_bytes!(b"storage value 2"))]); - let class0_definition = - starknet_gateway_test_fixtures::class_definitions::CONTRACT_DEFINITION.to_vec(); + let class0_definition = SerializedCairoDefinition::from_slice( + starknet_gateway_test_fixtures::class_definitions::CONTRACT_DEFINITION, + ); let class1_definition = &class0_definition; - let sierra_class_definition = - starknet_gateway_test_fixtures::class_definitions::CAIRO_0_11_SIERRA.to_vec(); + let sierra_class_definition = SerializedSierraDefinition::from_slice( + starknet_gateway_test_fixtures::class_definitions::CAIRO_0_11_SIERRA, + ); db_txn .insert_cairo_class_definition(class0_hash, &class0_definition) @@ -414,7 +421,7 @@ pub mod test_utils { .insert_sierra_class_definition( &sierra_class, &sierra_class_definition, - &[], + &SerializedCasmDefinition::from_slice(&[]), &sierra_casm_hash_v2, ) .unwrap(); @@ -452,6 +459,14 @@ pub mod test_utils { let header0 = BlockHeader::builder() .number(BlockNumber::GENESIS) .calculated_state_commitment(storage_commitment0, class_commitment0) + .event_commitment(event_commitment!("0xec00")) + .event_count(0) + .receipt_commitment(receipt_commitment!("0xdc00")) + .transaction_commitment(transaction_commitment!("0xac00")) + .transaction_count(0) + .state_diff_commitment(state_diff_commitment!("0xfc00")) + .state_diff_length(0) + .starknet_version(StarknetVersion::V_0_13_2) .finalize_with_hash(block_hash_bytes!(b"genesis")); db_txn.insert_block_header(&header0).unwrap(); db_txn @@ -494,6 +509,14 @@ pub mod test_utils { .calculated_state_commitment(storage_commitment1, class_commitment1) .eth_l1_gas_price(GasPrice::from(1)) .sequencer_address(sequencer_address_bytes!(&[1u8])) + .event_commitment(event_commitment!("0xec01")) + .event_count(1) + .receipt_commitment(receipt_commitment!("0xdc01")) + .transaction_commitment(transaction_commitment!("0xac01")) + .transaction_count(1) + .state_diff_commitment(state_diff_commitment!("0xfc01")) + .state_diff_length(1) + .starknet_version(StarknetVersion::V_0_13_2) .finalize_with_hash(block_hash_bytes!(b"block 1")); db_txn.insert_block_header(&header1).unwrap(); db_txn @@ -578,6 +601,14 @@ pub mod test_utils { .calculated_state_commitment(storage_commitment2, class_commitment2) .eth_l1_gas_price(GasPrice::from(2)) .sequencer_address(sequencer_address_bytes!(&[2u8])) + .event_commitment(event_commitment!("0xec02")) + .event_count(2) + .receipt_commitment(receipt_commitment!("0xdc02")) + .transaction_commitment(transaction_commitment!("0xac02")) + .transaction_count(2) + .state_diff_commitment(state_diff_commitment!("0xfc02")) + .state_diff_length(2) + .starknet_version(StarknetVersion::V_0_13_2) .finalize_with_hash(block_hash_bytes!(b"latest")); db_txn.insert_block_header(&header2).unwrap(); @@ -633,7 +664,14 @@ pub mod test_utils { }; let txn6 = Transaction { hash: transaction_hash_bytes!(b"txn 6"), - ..txn1.clone() + variant: TransactionVariant::InvokeV3(InvokeTransactionV3 { + sender_address: contract2_addr, + proof_facts: vec![ + proof_fact_elem_bytes!(b"proof fact 1"), + proof_fact_elem_bytes!(b"proof fact 2"), + ], + ..Default::default() + }), }; let txn_reverted = Transaction { hash: transaction_hash_bytes!(b"txn reverted"), @@ -702,189 +740,6 @@ pub mod test_utils { storage } - /// Creates [PendingData] which correctly links to the provided [Storage]. - /// - /// i.e. the pending block's parent hash will be the latest block's hash - /// from storage, and similarly for the pending state diffs state root. - pub async fn create_pending_data(storage: Storage) -> PendingData { - let storage2 = storage.clone(); - let latest = tokio::task::spawn_blocking(move || { - let mut db = storage2.connection().unwrap(); - let tx = db.transaction().unwrap(); - - tx.block_header(BlockId::Latest) - .unwrap() - .expect("Storage should contain a latest block") - }) - .await - .unwrap(); - - let transactions: Vec = vec![ - Transaction { - hash: transaction_hash_bytes!(b"pending tx hash 0"), - variant: TransactionVariant::InvokeV0(InvokeTransactionV0 { - sender_address: contract_address_bytes!(b"pending contract addr 0"), - entry_point_selector: entry_point_bytes!(b"entry point 0"), - entry_point_type: Some(EntryPointType::External), - ..Default::default() - }), - }, - Transaction { - hash: transaction_hash_bytes!(b"pending tx hash 1"), - variant: TransactionVariant::DeployV0(DeployTransactionV0 { - contract_address: contract_address!("0x1122355"), - contract_address_salt: contract_address_salt_bytes!(b"salty"), - class_hash: class_hash_bytes!(b"pending class hash 1"), - ..Default::default() - }), - }, - Transaction { - hash: transaction_hash_bytes!(b"pending reverted"), - variant: TransactionVariant::InvokeV0(InvokeTransactionV0 { - sender_address: contract_address_bytes!(b"pending contract addr 0"), - entry_point_selector: entry_point_bytes!(b"entry point 0"), - entry_point_type: Some(EntryPointType::External), - ..Default::default() - }), - }, - ]; - - let transaction_receipts = vec![ - ( - Receipt { - actual_fee: Fee::ZERO, - execution_resources: ExecutionResources::default(), - transaction_hash: transactions[0].hash, - transaction_index: TransactionIndex::new_or_panic(0), - ..Default::default() - }, - vec![ - Event { - data: vec![], - from_address: contract_address!("0xabcddddddd"), - keys: vec![event_key_bytes!(b"pending key")], - }, - Event { - data: vec![], - from_address: contract_address!("0xabcddddddd"), - keys: vec![ - event_key_bytes!(b"pending key"), - event_key_bytes!(b"second pending key"), - ], - }, - Event { - data: vec![], - from_address: contract_address!("0xabcaaaaaaa"), - keys: vec![event_key_bytes!(b"pending key 2")], - }, - ], - ), - ( - Receipt { - execution_resources: ExecutionResources::default(), - transaction_hash: transactions[1].hash, - transaction_index: TransactionIndex::new_or_panic(1), - ..Default::default() - }, - vec![], - ), - // Reverted and without events - ( - Receipt { - execution_resources: ExecutionResources::default(), - transaction_hash: transactions[2].hash, - transaction_index: TransactionIndex::new_or_panic(2), - execution_status: ExecutionStatus::Reverted { - reason: "Reverted!".to_owned(), - }, - ..Default::default() - }, - vec![], - ), - ]; - - let transactions = transactions.into_iter().collect(); - let transaction_receipts = transaction_receipts.into_iter().collect(); - - let contract1 = contract_address_bytes!(b"pending contract 1 address"); - let state_update = StateUpdate::default() - .with_parent_state_commitment(latest.state_commitment) - .with_declared_cairo_class(class_hash_bytes!(b"pending class 0 hash")) - .with_declared_cairo_class(class_hash_bytes!(b"pending class 1 hash")) - .with_deployed_contract( - contract_address_bytes!(b"pending contract 0 address"), - class_hash_bytes!(b"pending class 0 hash"), - ) - .with_deployed_contract(contract1, class_hash_bytes!(b"pending class 1 hash")) - .with_storage_update( - contract1, - storage_address_bytes!(b"pending storage key 0"), - storage_value_bytes!(b"pending storage value 0"), - ) - .with_storage_update( - contract1, - storage_address_bytes!(b"pending storage key 1"), - storage_value_bytes!(b"pending storage value 1"), - ) - // This is not a real contract and should be re-worked.. - .with_replaced_class( - contract_address_bytes!(b"pending contract 2 (replaced)"), - class_hash_bytes!(b"pending class 2 hash (replaced)"), - ) - .with_contract_nonce( - contract_address_bytes!(b"contract 1"), - contract_nonce_bytes!(b"pending nonce"), - ); - - let block = starknet_gateway_types::reply::PendingBlock { - l1_gas_price: GasPrices { - price_in_wei: GasPrice::from_be_slice(b"gas price").unwrap(), - price_in_fri: GasPrice::from_be_slice(b"strk gas price").unwrap(), - }, - l1_data_gas_price: GasPrices { - price_in_wei: GasPrice::from_be_slice(b"datgasprice").unwrap(), - price_in_fri: GasPrice::from_be_slice(b"strk datgasprice").unwrap(), - }, - l2_gas_price: GasPrices { - price_in_wei: GasPrice::from_be_slice(b"l2 gas price").unwrap(), - price_in_fri: GasPrice::from_be_slice(b"strk l2gas price").unwrap(), - }, - parent_hash: latest.hash, - sequencer_address: sequencer_address_bytes!(b"pending sequencer address"), - status: starknet_gateway_types::reply::Status::Pending, - timestamp: BlockTimestamp::new_or_panic(1234567), - transaction_receipts, - transactions, - starknet_version: StarknetVersion::new(0, 11, 0, 0), - l1_da_mode: starknet_gateway_types::reply::L1DataAvailabilityMode::Calldata, - }; - - // The class definitions must be inserted into the database. - let state_update_copy = state_update.clone(); - tokio::task::spawn_blocking(move || { - let mut db = storage.connection().unwrap(); - let tx = db.transaction().unwrap(); - let class_definition = - starknet_gateway_test_fixtures::class_definitions::CONTRACT_DEFINITION; - - for cairo in state_update_copy.declared_cairo_classes { - tx.insert_cairo_class_definition(cairo, class_definition) - .unwrap(); - } - - for (sierra, casm) in state_update_copy.declared_sierra_classes { - tx.insert_sierra_class_definition(&sierra, b"sierra def", b"casm def", &casm) - .unwrap(); - } - - tx.commit().unwrap(); - }) - .await - .unwrap(); - - PendingData::from_pending_block(block, state_update, latest.number + 1) - } - /// Creates [PendingData] which correctly links to the provided [Storage]. /// /// For pre-confirmed blocks that means that the block number is the next @@ -1002,8 +857,8 @@ pub mod test_utils { let contract1 = contract_address_bytes!(b"preconfirmed contract 1 address"); let state_update = StateUpdate::default() .with_parent_state_commitment(latest.state_commitment) - .with_declared_cairo_class(class_hash_bytes!(b"pre-confirmed class 0 hash")) - .with_declared_cairo_class(class_hash_bytes!(b"pre-confirmed class 1 hash")) + .with_declared_cairo_class(class_hash_bytes!(b"preconfirmed class 0 hash")) + .with_declared_cairo_class(class_hash_bytes!(b"preconfirmed class 1 hash")) .with_deployed_contract( contract_address_bytes!(b"preconfirmed contract 0 address"), class_hash_bytes!(b"preconfirmed class 0 hash"), @@ -1029,8 +884,8 @@ pub mod test_utils { contract_nonce_bytes!(b"preconfirmed nonce"), ); - let block = crate::pending::PendingBlockVariant::PreConfirmed { - block: crate::pending::PreConfirmedBlock { + let block = crate::pending::PendingBlocks { + pre_confirmed: crate::pending::PreConfirmedBlock { number: latest.number + 1, l1_gas_price: GasPrices { price_in_wei: GasPrice::from_be_slice(b"gas price").unwrap(), @@ -1049,12 +904,11 @@ pub mod test_utils { timestamp: BlockTimestamp::new_or_panic(1234567), transaction_receipts, transactions, - starknet_version: StarknetVersion::new(0, 11, 0, 0), + starknet_version: StarknetVersion::V_0_13_2, l1_da_mode: L1DataAvailabilityMode::Calldata, - } - .into(), + }, + pre_latest: None, candidate_transactions, - pre_latest_data: None, }; // The class definitions must be inserted into the database. @@ -1066,13 +920,21 @@ pub mod test_utils { starknet_gateway_test_fixtures::class_definitions::CONTRACT_DEFINITION; for cairo in state_update_copy.declared_cairo_classes { - tx.insert_cairo_class_definition(cairo, class_definition) - .unwrap(); + tx.insert_cairo_class_definition( + cairo, + &SerializedCairoDefinition::from_slice(class_definition), + ) + .unwrap(); } for (sierra, casm) in state_update_copy.declared_sierra_classes { - tx.insert_sierra_class_definition(&sierra, b"sierra def", b"casm def", &casm) - .unwrap(); + tx.insert_sierra_class_definition( + &sierra, + &SerializedSierraDefinition::from_slice(b"sierra def"), + &SerializedCasmDefinition::from_slice(b"casm def"), + &casm, + ) + .unwrap(); } tx.commit().unwrap(); @@ -1247,7 +1109,7 @@ pub mod test_utils { timestamp: BlockTimestamp::new_or_panic(1234567), transaction_receipts: pre_latest_tx_receipts, transactions: pre_latest_transactions, - starknet_version: StarknetVersion::new(0, 11, 0, 0), + starknet_version: StarknetVersion::V_0_13_2, l1_da_mode: L1DataAvailabilityMode::Calldata, }; @@ -1377,8 +1239,8 @@ pub mod test_utils { contract_nonce_bytes!(b"preconfirmed nonce"), ); - let pre_confirmed_block = crate::pending::PendingBlockVariant::PreConfirmed { - block: crate::pending::PreConfirmedBlock { + let pre_confirmed_block = crate::pending::PendingBlocks { + pre_confirmed: crate::pending::PreConfirmedBlock { // Pre-confirmed block is two blocks after latest when pre-latest // is also present. number: latest.number + 2, @@ -1399,15 +1261,14 @@ pub mod test_utils { timestamp: BlockTimestamp::new_or_panic(1234567), transaction_receipts: pre_confirmed_tx_receipts, transactions: pre_confirmed_transactions, - starknet_version: StarknetVersion::new(0, 11, 0, 0), + starknet_version: StarknetVersion::V_0_13_2, l1_da_mode: L1DataAvailabilityMode::Calldata, - } - .into(), - candidate_transactions, - pre_latest_data: Some(Box::new(PreLatestData { + }, + pre_latest: Some(PreLatestData { block: pre_latest_block, state_update: pre_latest_state_update.clone(), - })), + }), + candidate_transactions, }; let aggregated_state_update = pre_latest_state_update @@ -1423,21 +1284,37 @@ pub mod test_utils { starknet_gateway_test_fixtures::class_definitions::CONTRACT_DEFINITION; for cairo in pre_latest_state_update.declared_cairo_classes { - tx.insert_cairo_class_definition(cairo, class_definition) - .unwrap(); + tx.insert_cairo_class_definition( + cairo, + &SerializedCairoDefinition::from_slice(class_definition), + ) + .unwrap(); } for (sierra, casm) in pre_latest_state_update.declared_sierra_classes { - tx.insert_sierra_class_definition(&sierra, b"sierra def", b"casm def", &casm) - .unwrap(); + tx.insert_sierra_class_definition( + &sierra, + &SerializedSierraDefinition::from_slice(b"sierra def"), + &SerializedCasmDefinition::from_slice(b"casm def"), + &casm, + ) + .unwrap(); } for cairo in pre_confirmed_state_update_copy.declared_cairo_classes { - tx.insert_cairo_class_definition(cairo, class_definition) - .unwrap(); + tx.insert_cairo_class_definition( + cairo, + &SerializedCairoDefinition::from_slice(class_definition), + ) + .unwrap(); } for (sierra, casm) in pre_confirmed_state_update_copy.declared_sierra_classes { - tx.insert_sierra_class_definition(&sierra, b"sierra def", b"casm def", &casm) - .unwrap(); + tx.insert_sierra_class_definition( + &sierra, + &SerializedSierraDefinition::from_slice(b"sierra def"), + &SerializedCasmDefinition::from_slice(b"casm def"), + &casm, + ) + .unwrap(); } tx.commit().unwrap(); @@ -1732,7 +1609,7 @@ mod tests { )); } let (_jh, addr) = RpcServer::new(addr, context, RpcVersion::V07) - .spawn(&PathBuf::default()) + .spawn(&PathBuf::default()) .await .unwrap(); diff --git a/crates/rpc/src/method/add_declare_transaction.rs b/crates/rpc/src/method/add_declare_transaction.rs index b19af5a3db..d8e17e8669 100644 --- a/crates/rpc/src/method/add_declare_transaction.rs +++ b/crates/rpc/src/method/add_declare_transaction.rs @@ -31,6 +31,7 @@ pub enum AddDeclareTransactionError { UnsupportedTransactionVersion, UnsupportedContractClassVersion, UnexpectedError(String), + ForwardedError(reqwest::Error), } impl From for crate::error::ApplicationError { @@ -63,6 +64,7 @@ impl From for crate::error::ApplicationError { Self::UnsupportedContractClassVersion } AddDeclareTransactionError::UnexpectedError(data) => Self::UnexpectedError { data }, + AddDeclareTransactionError::ForwardedError(error) => Self::ForwardedError(error), } } } @@ -134,6 +136,11 @@ impl From for AddDeclareTransactionError { SequencerError::StarknetError(e) if e.code == EntryPointNotFound.into() => { AddDeclareTransactionError::NonAccount } + SequencerError::ReqwestError(e) + if e.status() == Some(reqwest::StatusCode::PAYLOAD_TOO_LARGE) => + { + AddDeclareTransactionError::ForwardedError(e) + } _ => AddDeclareTransactionError::UnexpectedError(e.to_string()), } } @@ -457,6 +464,7 @@ impl crate::dto::SerializeForVersion for Output { mod tests { use std::sync::LazyLock; + use pathfinder_common::class_definition::SerializedOpaqueClassDefinition; use pathfinder_common::macro_prelude::*; use pathfinder_common::prelude::*; use pathfinder_common::transaction::{DataAvailabilityMode, ResourceBound, ResourceBounds}; @@ -465,6 +473,8 @@ mod tests { CAIRO_2_0_0_STACK_OVERFLOW, CONTRACT_DEFINITION, }; + use starknet_gateway_types::error::{test_response_from, KnownStarknetErrorCode}; + use wiremock::{matchers, Mock, MockServer, ResponseTemplate}; use super::*; use crate::types::class::cairo::CairoContractClass; @@ -478,10 +488,12 @@ mod tests { use crate::types::ContractClass; pub static CONTRACT_CLASS: LazyLock = LazyLock::new(|| { - ContractClass::from_definition_bytes(CONTRACT_DEFINITION) - .unwrap() - .as_cairo() - .unwrap() + ContractClass::from_serialized_def(&SerializedOpaqueClassDefinition::from_slice( + CONTRACT_DEFINITION, + )) + .unwrap() + .as_cairo() + .unwrap() }); pub static CONTRACT_CLASS_WITH_INVALID_PRIME: LazyLock = @@ -495,24 +507,26 @@ mod tests { .get_mut("prime") .unwrap() = serde_json::json!("0x1"); let definition = serde_json::to_vec(&definition).unwrap(); - ContractClass::from_definition_bytes(&definition) - .unwrap() - .as_cairo() - .unwrap() + ContractClass::from_serialized_def(&SerializedOpaqueClassDefinition::from_slice( + &definition, + )) + .unwrap() + .as_cairo() + .unwrap() }); pub static SIERRA_CLASS: LazyLock = LazyLock::new(|| { - ContractClass::from_definition_bytes(CAIRO_2_0_0_STACK_OVERFLOW) - .unwrap() - .as_sierra() - .unwrap() + ContractClass::from_serialized_def(&SerializedOpaqueClassDefinition::from_slice( + CAIRO_2_0_0_STACK_OVERFLOW, + )) + .unwrap() + .as_sierra() + .unwrap() }); pub static INTEGRATION_SIERRA_CLASS: LazyLock = LazyLock::new(|| { - ContractClass::from_definition_bytes(include_bytes!( - "../../fixtures/contracts/\ - integration_class_0x5ae9d09292a50ed48c5930904c880dab56e85b825022a7d689cfc9e65e01ee7.\ - json" + ContractClass::from_serialized_def(&SerializedOpaqueClassDefinition::from_slice( + include_bytes!("../../fixtures/contracts/integration_class_0x5ae9d09292a50ed48c5930904c880dab56e85b825022a7d689cfc9e65e01ee7.json") )) .unwrap() .as_sierra() @@ -687,28 +701,31 @@ mod tests { } #[test_log::test(tokio::test)] - #[ignore = "gateway 429"] async fn invalid_contract_definition_v1() { - let context = RpcContext::for_tests(); - - let invalid_contract_class = CairoContractClass { - program: "".to_owned(), - ..CONTRACT_CLASS.clone() - }; - - let declare_transaction = Transaction::Declare(BroadcastedDeclareTransaction::V1( - BroadcastedDeclareTransactionV1 { - version: TransactionVersion::ONE, - max_fee: Fee(Default::default()), - signature: vec![], - nonce: TransactionNonce(Default::default()), - contract_class: invalid_contract_class, - sender_address: ContractAddress::new_or_panic(Felt::from_u64(1)), - }, - )); + let (body, code) = test_response_from(KnownStarknetErrorCode::InvalidContractDefinition); + let server = MockServer::start().await; + Mock::given(matchers::method("POST")) + .and(matchers::path("/gateway/add_transaction")) + .respond_with(ResponseTemplate::new(code).set_body_string(body)) + .mount(&server) + .await; + let mut context = RpcContext::for_tests(); + context.sequencer = + starknet_gateway_client::Client::for_test(server.uri().parse().unwrap()) + .unwrap() + .disable_retry_for_tests(); let input = Input { - declare_transaction, + declare_transaction: Transaction::Declare(BroadcastedDeclareTransaction::V1( + BroadcastedDeclareTransactionV1 { + version: TransactionVersion::ONE, + max_fee: Fee(Default::default()), + signature: vec![], + nonce: TransactionNonce(Default::default()), + contract_class: CONTRACT_CLASS.clone(), + sender_address: ContractAddress::new_or_panic(Felt::from_u64(1)), + }, + )), token: None, }; let error = add_declare_transaction(context, input).await.unwrap_err(); @@ -716,33 +733,34 @@ mod tests { } #[test_log::test(tokio::test)] - #[ignore = "gateway 429"] async fn invalid_contract_definition_v2() { - let context = RpcContext::for_tests_on(pathfinder_common::Chain::SepoliaIntegration); - - let invalid_contract_class = SierraContractClass { - sierra_program: vec![], - ..SIERRA_CLASS.clone() - }; - - let declare_transaction = Transaction::Declare(BroadcastedDeclareTransaction::V2( - BroadcastedDeclareTransactionV2 { - version: TransactionVersion::TWO, - max_fee: Fee(Felt::from_be_slice(&u64::MAX.to_be_bytes()).unwrap()), - signature: vec![], - nonce: TransactionNonce(Default::default()), - contract_class: invalid_contract_class, - sender_address: ContractAddress::new_or_panic(Felt::from_u64(1)), - // Taken from - // https://external.integration.starknet.io/feeder_gateway/get_state_update?blockNumber=283364 - compiled_class_hash: casm_hash!( - "0x711c0c3e56863e29d3158804aac47f424241eda64db33e2cc2999d60ee5105" - ), - }, - )); + let (body, code) = test_response_from(KnownStarknetErrorCode::InvalidContractDefinition); + let server = MockServer::start().await; + Mock::given(matchers::method("POST")) + .and(matchers::path("/gateway/add_transaction")) + .respond_with(ResponseTemplate::new(code).set_body_string(body)) + .mount(&server) + .await; + let mut context = RpcContext::for_tests_on(pathfinder_common::Chain::SepoliaIntegration); + context.sequencer = + starknet_gateway_client::Client::for_test(server.uri().parse().unwrap()) + .unwrap() + .disable_retry_for_tests(); let input = Input { - declare_transaction, + declare_transaction: Transaction::Declare(BroadcastedDeclareTransaction::V2( + BroadcastedDeclareTransactionV2 { + version: TransactionVersion::TWO, + max_fee: Fee(Felt::from_be_slice(&u64::MAX.to_be_bytes()).unwrap()), + signature: vec![], + nonce: TransactionNonce(Default::default()), + contract_class: SIERRA_CLASS.clone(), + sender_address: ContractAddress::new_or_panic(Felt::from_u64(1)), + compiled_class_hash: casm_hash!( + "0x711c0c3e56863e29d3158804aac47f424241eda64db33e2cc2999d60ee5105" + ), + }, + )), token: None, }; let error = add_declare_transaction(context, input).await.unwrap_err(); @@ -750,23 +768,31 @@ mod tests { } #[test_log::test(tokio::test)] - #[ignore = "gateway 429"] async fn invalid_contract_class() { - let context = RpcContext::for_tests(); - - let declare_transaction = Transaction::Declare(BroadcastedDeclareTransaction::V1( - BroadcastedDeclareTransactionV1 { - version: TransactionVersion::ONE, - max_fee: fee!("0xfffffffffff"), - signature: vec![], - nonce: TransactionNonce(Default::default()), - contract_class: CONTRACT_CLASS_WITH_INVALID_PRIME.clone(), - sender_address: ContractAddress::new_or_panic(Felt::from_u64(1)), - }, - )); + let (body, code) = test_response_from(KnownStarknetErrorCode::InvalidProgram); + let server = MockServer::start().await; + Mock::given(matchers::method("POST")) + .and(matchers::path("/gateway/add_transaction")) + .respond_with(ResponseTemplate::new(code).set_body_string(body)) + .mount(&server) + .await; + let mut context = RpcContext::for_tests(); + context.sequencer = + starknet_gateway_client::Client::for_test(server.uri().parse().unwrap()) + .unwrap() + .disable_retry_for_tests(); let input = Input { - declare_transaction, + declare_transaction: Transaction::Declare(BroadcastedDeclareTransaction::V1( + BroadcastedDeclareTransactionV1 { + version: TransactionVersion::ONE, + max_fee: fee!("0xfffffffffff"), + signature: vec![], + nonce: TransactionNonce(Default::default()), + contract_class: CONTRACT_CLASS_WITH_INVALID_PRIME.clone(), + sender_address: ContractAddress::new_or_panic(Felt::from_u64(1)), + }, + )), token: None, }; let error = add_declare_transaction(context, input).await.unwrap_err(); @@ -774,23 +800,31 @@ mod tests { } #[test_log::test(tokio::test)] - #[ignore = "gateway 429"] async fn duplicate_transaction() { - let context = RpcContext::for_tests(); - - let declare_transaction = Transaction::Declare(BroadcastedDeclareTransaction::V1( - BroadcastedDeclareTransactionV1 { - version: TransactionVersion::ONE, - max_fee: Fee(Felt::from_be_slice(&u64::MAX.to_be_bytes()).unwrap()), - signature: vec![], - nonce: TransactionNonce(Default::default()), - contract_class: CONTRACT_CLASS.clone(), - sender_address: ContractAddress::new_or_panic(Felt::from_u64(1)), - }, - )); + let (body, code) = test_response_from(KnownStarknetErrorCode::DuplicatedTransaction); + let server = MockServer::start().await; + Mock::given(matchers::method("POST")) + .and(matchers::path("/gateway/add_transaction")) + .respond_with(ResponseTemplate::new(code).set_body_string(body)) + .mount(&server) + .await; + let mut context = RpcContext::for_tests(); + context.sequencer = + starknet_gateway_client::Client::for_test(server.uri().parse().unwrap()) + .unwrap() + .disable_retry_for_tests(); let input = Input { - declare_transaction, + declare_transaction: Transaction::Declare(BroadcastedDeclareTransaction::V1( + BroadcastedDeclareTransactionV1 { + version: TransactionVersion::ONE, + max_fee: Fee(Felt::from_be_slice(&u64::MAX.to_be_bytes()).unwrap()), + signature: vec![], + nonce: TransactionNonce(Default::default()), + contract_class: CONTRACT_CLASS.clone(), + sender_address: ContractAddress::new_or_panic(Felt::from_u64(1)), + }, + )), token: None, }; let error = add_declare_transaction(context, input).await.unwrap_err(); @@ -798,26 +832,34 @@ mod tests { } #[test_log::test(tokio::test)] - #[ignore = "gateway 429"] async fn insufficient_max_fee() { - let context = RpcContext::for_tests_on(pathfinder_common::Chain::SepoliaIntegration); - - let declare_transaction = Transaction::Declare(BroadcastedDeclareTransaction::V2( - BroadcastedDeclareTransactionV2 { - version: TransactionVersion::TWO, - max_fee: Fee(felt!("0x01")), - signature: vec![], - nonce: TransactionNonce(Default::default()), - contract_class: SIERRA_CLASS.clone(), - sender_address: ContractAddress::new_or_panic(Felt::from_u64(1)), - compiled_class_hash: casm_hash!( - "0x688e44b1d8612222a25cf742c8e1493af4640fa74b1a7707bde2002df51ea8c" - ), - }, - )); + let (body, code) = test_response_from(KnownStarknetErrorCode::InsufficientAccountBalance); + let server = MockServer::start().await; + Mock::given(matchers::method("POST")) + .and(matchers::path("/gateway/add_transaction")) + .respond_with(ResponseTemplate::new(code).set_body_string(body)) + .mount(&server) + .await; + let mut context = RpcContext::for_tests_on(pathfinder_common::Chain::SepoliaIntegration); + context.sequencer = + starknet_gateway_client::Client::for_test(server.uri().parse().unwrap()) + .unwrap() + .disable_retry_for_tests(); let input = Input { - declare_transaction, + declare_transaction: Transaction::Declare(BroadcastedDeclareTransaction::V2( + BroadcastedDeclareTransactionV2 { + version: TransactionVersion::TWO, + max_fee: Fee(felt!("0x01")), + signature: vec![], + nonce: TransactionNonce(Default::default()), + contract_class: SIERRA_CLASS.clone(), + sender_address: ContractAddress::new_or_panic(Felt::from_u64(1)), + compiled_class_hash: casm_hash!( + "0x688e44b1d8612222a25cf742c8e1493af4640fa74b1a7707bde2002df51ea8c" + ), + }, + )), token: None, }; let err = add_declare_transaction(context, input).await.unwrap_err(); @@ -828,26 +870,34 @@ mod tests { } #[test_log::test(tokio::test)] - #[ignore = "gateway 429"] async fn insufficient_account_balance() { - let context = RpcContext::for_tests_on(pathfinder_common::Chain::SepoliaIntegration); - - let declare_transaction = Transaction::Declare(BroadcastedDeclareTransaction::V2( - BroadcastedDeclareTransactionV2 { - version: TransactionVersion::TWO, - max_fee: Fee(Felt::from_be_slice(&u64::MAX.to_be_bytes()).unwrap()), - signature: vec![], - nonce: TransactionNonce(Default::default()), - contract_class: SIERRA_CLASS.clone(), - sender_address: ContractAddress::new_or_panic(Felt::from_u64(1)), - compiled_class_hash: casm_hash!( - "0x688e44b1d8612222a25cf742c8e1493af4640fa74b1a7707bde2002df51ea8c" - ), - }, - )); + let (body, code) = test_response_from(KnownStarknetErrorCode::InsufficientAccountBalance); + let server = MockServer::start().await; + Mock::given(matchers::method("POST")) + .and(matchers::path("/gateway/add_transaction")) + .respond_with(ResponseTemplate::new(code).set_body_string(body)) + .mount(&server) + .await; + let mut context = RpcContext::for_tests_on(pathfinder_common::Chain::SepoliaIntegration); + context.sequencer = + starknet_gateway_client::Client::for_test(server.uri().parse().unwrap()) + .unwrap() + .disable_retry_for_tests(); let input = Input { - declare_transaction, + declare_transaction: Transaction::Declare(BroadcastedDeclareTransaction::V2( + BroadcastedDeclareTransactionV2 { + version: TransactionVersion::TWO, + max_fee: Fee(Felt::from_be_slice(&u64::MAX.to_be_bytes()).unwrap()), + signature: vec![], + nonce: TransactionNonce(Default::default()), + contract_class: SIERRA_CLASS.clone(), + sender_address: ContractAddress::new_or_panic(Felt::from_u64(1)), + compiled_class_hash: casm_hash!( + "0x688e44b1d8612222a25cf742c8e1493af4640fa74b1a7707bde2002df51ea8c" + ), + }, + )), token: None, }; let err = add_declare_transaction(context, input).await.unwrap_err(); @@ -858,49 +908,52 @@ mod tests { } #[tokio::test] - #[ignore = "gateway 429"] // https://external.integration.starknet.io/feeder_gateway/get_transaction?transactionHash=0x41d1f5206ef58a443e7d3d1ca073171ec25fa75313394318fc83a074a6631c3 async fn duplicate_v3_transaction() { - let context = RpcContext::for_tests_on(pathfinder_common::Chain::SepoliaIntegration); - - let input = BroadcastedDeclareTransactionV3 { - version: TransactionVersion::THREE, - signature: vec![ - transaction_signature_elem!( - "0x29a49dff154fede73dd7b5ca5a0beadf40b4b069f3a850cd8428e54dc809ccc" - ), - transaction_signature_elem!( - "0x429d142a17223b4f2acde0f5ecb9ad453e188b245003c86fab5c109bad58fc3" - ), - ], - nonce: transaction_nonce!("0x1"), - resource_bounds: ResourceBounds { - l1_gas: ResourceBound { - max_amount: ResourceAmount(0x186a0), - max_price_per_unit: ResourcePricePerUnit(0x5af3107a4000), - }, - l2_gas: ResourceBound { - max_amount: ResourceAmount(0), - max_price_per_unit: ResourcePricePerUnit(0), - }, - l1_data_gas: None, - }, - tip: Tip(0), - paymaster_data: vec![], - account_deployment_data: vec![], - nonce_data_availability_mode: DataAvailabilityMode::L1, - fee_data_availability_mode: DataAvailabilityMode::L1, - compiled_class_hash: casm_hash!( - "0x1add56d64bebf8140f3b8a38bdf102b7874437f0c861ab4ca7526ec33b4d0f8" - ), - contract_class: INTEGRATION_SIERRA_CLASS.clone(), - sender_address: contract_address!( - "0x2fab82e4aef1d8664874e1f194951856d48463c3e6bf9a8c68e234a629a6f50" - ), - }; + let (body, code) = test_response_from(KnownStarknetErrorCode::InsufficientAccountBalance); + let server = MockServer::start().await; + Mock::given(matchers::method("POST")) + .and(matchers::path("/gateway/add_transaction")) + .respond_with(ResponseTemplate::new(code).set_body_string(body)) + .mount(&server) + .await; + let mut context = RpcContext::for_tests_on(pathfinder_common::Chain::SepoliaIntegration); + context.sequencer = + starknet_gateway_client::Client::for_test(server.uri().parse().unwrap()) + .unwrap() + .disable_retry_for_tests(); let input = Input { - declare_transaction: Transaction::Declare(BroadcastedDeclareTransaction::V3(input)), + declare_transaction: Transaction::Declare(BroadcastedDeclareTransaction::V3( + BroadcastedDeclareTransactionV3 { + version: TransactionVersion::THREE, + signature: vec![], + nonce: transaction_nonce!("0x1"), + resource_bounds: ResourceBounds { + l1_gas: ResourceBound { + max_amount: ResourceAmount(0x186a0), + max_price_per_unit: ResourcePricePerUnit(0x5af3107a4000), + }, + l2_gas: ResourceBound { + max_amount: ResourceAmount(0), + max_price_per_unit: ResourcePricePerUnit(0), + }, + l1_data_gas: None, + }, + tip: Tip(0), + paymaster_data: vec![], + account_deployment_data: vec![], + nonce_data_availability_mode: DataAvailabilityMode::L1, + fee_data_availability_mode: DataAvailabilityMode::L1, + compiled_class_hash: casm_hash!( + "0x1add56d64bebf8140f3b8a38bdf102b7874437f0c861ab4ca7526ec33b4d0f8" + ), + contract_class: INTEGRATION_SIERRA_CLASS.clone(), + sender_address: contract_address!( + "0x2fab82e4aef1d8664874e1f194951856d48463c3e6bf9a8c68e234a629a6f50" + ), + }, + )), token: None, }; diff --git a/crates/rpc/src/method/add_deploy_account_transaction.rs b/crates/rpc/src/method/add_deploy_account_transaction.rs index e81f5ec948..eaf41c252f 100644 --- a/crates/rpc/src/method/add_deploy_account_transaction.rs +++ b/crates/rpc/src/method/add_deploy_account_transaction.rs @@ -112,6 +112,7 @@ pub enum AddDeployAccountTransactionError { NonAccount, UnsupportedTransactionVersion, UnexpectedError(String), + ForwardedError(reqwest::Error), } impl From for AddDeployAccountTransactionError { @@ -133,6 +134,7 @@ impl From for crate::error::ApplicationError { NonAccount => Self::NonAccount, UnsupportedTransactionVersion => Self::UnsupportedTxVersion, UnexpectedError(data) => Self::UnexpectedError { data }, + ForwardedError(error) => Self::ForwardedError(error), } } } @@ -178,6 +180,11 @@ impl From for AddDeployAccountTransactionError { SequencerError::StarknetError(e) if e.code == EntryPointNotFound.into() => { AddDeployAccountTransactionError::NonAccount } + SequencerError::ReqwestError(e) + if e.status() == Some(reqwest::StatusCode::PAYLOAD_TOO_LARGE) => + { + AddDeployAccountTransactionError::ForwardedError(e) + } _ => AddDeployAccountTransactionError::UnexpectedError(e.to_string()), } } @@ -335,6 +342,8 @@ mod tests { use pathfinder_common::macro_prelude::*; use pathfinder_common::prelude::*; use pathfinder_common::transaction::{DataAvailabilityMode, ResourceBound, ResourceBounds}; + use starknet_gateway_types::error::{test_response_from, KnownStarknetErrorCode}; + use wiremock::{matchers, Mock, MockServer, ResponseTemplate}; use super::*; use crate::dto::{SerializeForVersion, Serializer}; @@ -380,11 +389,7 @@ mod tests { #[test] fn unexpected_error_message() { - use starknet_gateway_types::error::{ - KnownStarknetErrorCode, - StarknetError, - StarknetErrorCode, - }; + use starknet_gateway_types::error::{StarknetError, StarknetErrorCode}; let starknet_error = SequencerError::StarknetError(StarknetError { code: StarknetErrorCode::Known(KnownStarknetErrorCode::TransactionLimitExceeded), message: "StarkNet Alpha throughput limit reached, please wait a few minutes and try \ @@ -439,13 +444,21 @@ mod tests { } #[tokio::test] - #[ignore = "gateway 429"] async fn duplicate_transaction() { - let context = RpcContext::for_tests(); - - let input = get_input(); - - let error = add_deploy_account_transaction(context, input) + let (body, code) = test_response_from(KnownStarknetErrorCode::DuplicatedTransaction); + let server = MockServer::start().await; + Mock::given(matchers::method("POST")) + .and(matchers::path("/gateway/add_transaction")) + .respond_with(ResponseTemplate::new(code).set_body_string(body)) + .mount(&server) + .await; + let mut context = RpcContext::for_tests(); + context.sequencer = + starknet_gateway_client::Client::for_test(server.uri().parse().unwrap()) + .unwrap() + .disable_retry_for_tests(); + + let error = add_deploy_account_transaction(context, get_input()) .await .expect_err("add_deploy_account_transaction"); assert_matches::assert_matches!( @@ -455,49 +468,50 @@ mod tests { } #[tokio::test] - #[ignore = "gateway 429"] // https://external.integration.starknet.io/feeder_gateway/get_transaction?transactionHash=0x29fd7881f14380842414cdfdd8d6c0b1f2174f8916edcfeb1ede1eb26ac3ef0 async fn duplicate_v3_transaction() { - let context = RpcContext::for_tests_on(pathfinder_common::Chain::SepoliaIntegration); - - let input = BroadcastedDeployAccountTransactionV3 { - version: TransactionVersion::THREE, - signature: vec![ - transaction_signature_elem!( - "0x6d756e754793d828c6c1a89c13f7ec70dbd8837dfeea5028a673b80e0d6b4ec" - ), - transaction_signature_elem!( - "0x4daebba599f860daee8f6e100601d98873052e1c61530c630cc4375c6bd48e3" - ), - ], - nonce: transaction_nonce!("0x0"), - resource_bounds: ResourceBounds { - l1_gas: ResourceBound { - max_amount: ResourceAmount(0x186a0), - max_price_per_unit: ResourcePricePerUnit(0x5af3107a4000), - }, - l2_gas: ResourceBound { - max_amount: ResourceAmount(0), - max_price_per_unit: ResourcePricePerUnit(0), - }, - l1_data_gas: None, - }, - tip: Tip(0), - paymaster_data: vec![], - nonce_data_availability_mode: DataAvailabilityMode::L1, - fee_data_availability_mode: DataAvailabilityMode::L1, - contract_address_salt: contract_address_salt!("0x0"), - constructor_calldata: vec![call_param!( - "0x5cd65f3d7daea6c63939d659b8473ea0c5cd81576035a4d34e52fb06840196c" - )], - class_hash: class_hash!( - "0x2338634f11772ea342365abd5be9d9dc8a6f44f159ad782fdebd3db5d969738" - ), - }; + let (body, code) = test_response_from(KnownStarknetErrorCode::DuplicatedTransaction); + let server = MockServer::start().await; + Mock::given(matchers::method("POST")) + .and(matchers::path("/gateway/add_transaction")) + .respond_with(ResponseTemplate::new(code).set_body_string(body)) + .mount(&server) + .await; + let mut context = RpcContext::for_tests_on(pathfinder_common::Chain::SepoliaIntegration); + context.sequencer = + starknet_gateway_client::Client::for_test(server.uri().parse().unwrap()) + .unwrap() + .disable_retry_for_tests(); let input = Input { deploy_account_transaction: Transaction::DeployAccount( - BroadcastedDeployAccountTransaction::V3(input), + BroadcastedDeployAccountTransaction::V3(BroadcastedDeployAccountTransactionV3 { + version: TransactionVersion::THREE, + signature: vec![], + nonce: transaction_nonce!("0x0"), + resource_bounds: ResourceBounds { + l1_gas: ResourceBound { + max_amount: ResourceAmount(0x186a0), + max_price_per_unit: ResourcePricePerUnit(0x5af3107a4000), + }, + l2_gas: ResourceBound { + max_amount: ResourceAmount(0), + max_price_per_unit: ResourcePricePerUnit(0), + }, + l1_data_gas: None, + }, + tip: Tip(0), + paymaster_data: vec![], + nonce_data_availability_mode: DataAvailabilityMode::L1, + fee_data_availability_mode: DataAvailabilityMode::L1, + contract_address_salt: contract_address_salt!("0x0"), + constructor_calldata: vec![call_param!( + "0x5cd65f3d7daea6c63939d659b8473ea0c5cd81576035a4d34e52fb06840196c" + )], + class_hash: class_hash!( + "0x2338634f11772ea342365abd5be9d9dc8a6f44f159ad782fdebd3db5d969738" + ), + }), ), }; diff --git a/crates/rpc/src/method/add_invoke_transaction.rs b/crates/rpc/src/method/add_invoke_transaction.rs index 1c1490a601..dba9cd66e4 100644 --- a/crates/rpc/src/method/add_invoke_transaction.rs +++ b/crates/rpc/src/method/add_invoke_transaction.rs @@ -90,6 +90,8 @@ impl Input { fee_data_availability_mode: Default::default(), sender_address: Default::default(), calldata: Default::default(), + proof_facts: Default::default(), + proof: Default::default(), }, )), } @@ -120,7 +122,9 @@ pub enum AddInvokeTransactionError { DuplicateTransaction, NonAccount, UnsupportedTransactionVersion, + InvalidProof, UnexpectedError(String), + ForwardedError(reqwest::Error), } impl From for AddInvokeTransactionError { @@ -147,7 +151,9 @@ impl From for crate::error::ApplicationError { AddInvokeTransactionError::DuplicateTransaction => Self::DuplicateTransaction, AddInvokeTransactionError::NonAccount => Self::NonAccount, AddInvokeTransactionError::UnsupportedTransactionVersion => Self::UnsupportedTxVersion, + AddInvokeTransactionError::InvalidProof => Self::InvalidProof, AddInvokeTransactionError::UnexpectedError(data) => Self::UnexpectedError { data }, + AddInvokeTransactionError::ForwardedError(error) => Self::ForwardedError(error), } } } @@ -159,6 +165,7 @@ impl From for AddInvokeTransactionError { EntryPointNotFound, InsufficientAccountBalance, InsufficientMaxFee, + InvalidProof, InvalidTransactionNonce, InvalidTransactionVersion, ValidateFailure, @@ -189,6 +196,17 @@ impl From for AddInvokeTransactionError { SequencerError::StarknetError(e) if e.code == EntryPointNotFound.into() => { AddInvokeTransactionError::NonAccount } + SequencerError::StarknetError(e) if e.code == InvalidProof.into() => { + // Technically specific to JSON-RPC version >= 0.10, + // but for the earlier versions this error shouldn't + // occur, since there is no proof in the first place. + AddInvokeTransactionError::InvalidProof + } + SequencerError::ReqwestError(e) + if e.status() == Some(reqwest::StatusCode::PAYLOAD_TOO_LARGE) => + { + AddInvokeTransactionError::ForwardedError(e) + } _ => AddInvokeTransactionError::UnexpectedError(e.to_string()), } } @@ -283,6 +301,8 @@ pub(crate) async fn add_invoke_transaction_impl( sender_address: tx.sender_address, calldata: tx.calldata.clone(), account_deployment_data: tx.account_deployment_data.clone(), + proof_facts: tx.proof_facts.clone(), + proof: tx.proof.clone(), }, )) .await?; @@ -297,6 +317,7 @@ pub(crate) async fn add_invoke_transaction_impl( account_deployment_data: tx.account_deployment_data, calldata: tx.calldata, sender_address: tx.sender_address, + proof_facts: tx.proof_facts, }; ( response.transaction_hash, @@ -322,7 +343,9 @@ impl crate::dto::SerializeForVersion for Output { mod tests { use pathfinder_common::macro_prelude::*; use pathfinder_common::transaction::{DataAvailabilityMode, ResourceBound, ResourceBounds}; - use pathfinder_common::{ResourceAmount, ResourcePricePerUnit, Tip, TransactionVersion}; + use pathfinder_common::{Proof, ResourceAmount, ResourcePricePerUnit, Tip, TransactionVersion}; + use starknet_gateway_types::error::{test_response_from, KnownStarknetErrorCode}; + use wiremock::{matchers, Mock, MockServer, ResponseTemplate}; use super::*; use crate::types::request::BroadcastedInvokeTransactionV1; @@ -465,39 +488,33 @@ mod tests { } #[tokio::test] - #[ignore = "gateway 429"] async fn duplicate_transaction() { - use crate::types::request::BroadcastedInvokeTransactionV1; - - let context = RpcContext::for_tests(); - let input = BroadcastedInvokeTransactionV1 { - version: TransactionVersion::ONE, - max_fee: fee!("0x630a0aff77"), - signature: vec![ - transaction_signature_elem!( - "07ccc81b438581c9360120e0ba0ef52c7d031bdf20a4c2bc3820391b29a8945f" - ), - transaction_signature_elem!( - "02c11c60d11daaa0043eccdc824bb44f87bc7eb2e9c2437e1654876ab8fa7cad" - ), - ], - nonce: transaction_nonce!("0x2"), - sender_address: contract_address!( - "03fdcbeb68e607c8febf01d7ef274cbf68091a0bd1556c0b8f8e80d732f7850f" - ), - calldata: vec![ - call_param!("0x1"), - call_param!("01d809111da75d5e735b6f9573a1ddff78fb6ff7633a0b34273e0c5ddeae349a"), - call_param!("0362398bec32bc0ebb411203221a35a0301193a96f317ebe5e40be9f60d15320"), - call_param!("0x0"), - call_param!("0x1"), - call_param!("0x1"), - call_param!("0x1"), - ], - }; + let (body, code) = test_response_from(KnownStarknetErrorCode::DuplicatedTransaction); + let server = MockServer::start().await; + Mock::given(matchers::method("POST")) + .and(matchers::path("/gateway/add_transaction")) + .respond_with(ResponseTemplate::new(code).set_body_string(body)) + .mount(&server) + .await; + let mut context = RpcContext::for_tests(); + context.sequencer = + starknet_gateway_client::Client::for_test(server.uri().parse().unwrap()) + .unwrap() + .disable_retry_for_tests(); let input = Input { - invoke_transaction: Transaction::Invoke(BroadcastedInvokeTransaction::V1(input)), + invoke_transaction: Transaction::Invoke(BroadcastedInvokeTransaction::V1( + crate::types::request::BroadcastedInvokeTransactionV1 { + version: TransactionVersion::ONE, + max_fee: fee!("0x630a0aff77"), + signature: vec![], + nonce: transaction_nonce!("0x2"), + sender_address: contract_address!( + "03fdcbeb68e607c8febf01d7ef274cbf68091a0bd1556c0b8f8e80d732f7850f" + ), + calldata: vec![], + }, + )), }; let error = add_invoke_transaction(context, input).await.unwrap_err(); @@ -505,64 +522,51 @@ mod tests { } #[tokio::test] - #[ignore = "gateway 429"] // https://external.integration.starknet.io/feeder_gateway/get_transaction?transactionHash=0x41906f1c314cca5f43170ea75d3b1904196a10101190d2b12a41cc61cfd17c async fn duplicate_v3_transaction() { - use crate::types::request::BroadcastedInvokeTransactionV3; - - let context = RpcContext::for_tests_on(pathfinder_common::Chain::SepoliaIntegration); - let input = BroadcastedInvokeTransactionV3 { - version: TransactionVersion::THREE, - signature: vec![ - transaction_signature_elem!( - "0xef42616755b8a9b7c97d2deb1ba4a4176d3c838a20c367072f141af446ee7" - ), - transaction_signature_elem!( - "0xc6514ea8a88bcb0f4b2a40ddc609461a35af802ba0b35586ade6d8a4be2934" - ), - ], - nonce: transaction_nonce!("0x8a9"), - resource_bounds: ResourceBounds { - l1_gas: ResourceBound { - max_amount: ResourceAmount(0x186a0), - max_price_per_unit: ResourcePricePerUnit(0x5af3107a4000), - }, - l2_gas: ResourceBound { - max_amount: ResourceAmount(0), - max_price_per_unit: ResourcePricePerUnit(0), - }, - l1_data_gas: None, - }, - tip: Tip(0), - paymaster_data: vec![], - account_deployment_data: vec![], - nonce_data_availability_mode: DataAvailabilityMode::L1, - fee_data_availability_mode: DataAvailabilityMode::L1, - sender_address: contract_address!( - "0x3f6f3bc663aedc5285d6013cc3ffcbc4341d86ab488b8b68d297f8258793c41" - ), - calldata: vec![ - call_param!("0x2"), - call_param!("0x4c312760dfd17a954cdd09e76aa9f149f806d88ec3e402ffaf5c4926f568a42"), - call_param!("0x31aafc75f498fdfa7528880ad27246b4c15af4954f96228c9a132b328de1c92"), - call_param!("0x0"), - call_param!("0x6"), - call_param!("0x450703c32370cf7ffff540b9352e7ee4ad583af143a361155f2b485c0c39684"), - call_param!("0xb17d8a2731ba7ca1816631e6be14f0fc1b8390422d649fa27f0fbb0c91eea8"), - call_param!("0x6"), - call_param!("0x0"), - call_param!("0x6"), - call_param!("0x6333f10b24ed58cc33e9bac40b0d52e067e32a175a97ca9e2ce89fe2b002d82"), - call_param!("0x3"), - call_param!("0x602e89fe5703e5b093d13d0a81c9e6d213338dc15c59f4d3ff3542d1d7dfb7d"), - call_param!("0x20d621301bea11ffd9108af1d65847e9049412159294d0883585d4ad43ad61b"), - call_param!("0x276faadb842bfcbba834f3af948386a2eb694f7006e118ad6c80305791d3247"), - call_param!("0x613816405e6334ab420e53d4b38a0451cb2ebca2755171315958c87d303cf6"), - ], - }; + let (body, code) = test_response_from(KnownStarknetErrorCode::DuplicatedTransaction); + let server = MockServer::start().await; + Mock::given(matchers::method("POST")) + .and(matchers::path("/gateway/add_transaction")) + .respond_with(ResponseTemplate::new(code).set_body_string(body)) + .mount(&server) + .await; + let mut context = RpcContext::for_tests_on(pathfinder_common::Chain::SepoliaIntegration); + context.sequencer = + starknet_gateway_client::Client::for_test(server.uri().parse().unwrap()) + .unwrap() + .disable_retry_for_tests(); let input = Input { - invoke_transaction: Transaction::Invoke(BroadcastedInvokeTransaction::V3(input)), + invoke_transaction: Transaction::Invoke(BroadcastedInvokeTransaction::V3( + crate::types::request::BroadcastedInvokeTransactionV3 { + version: TransactionVersion::THREE, + signature: vec![], + nonce: transaction_nonce!("0x8a9"), + resource_bounds: ResourceBounds { + l1_gas: ResourceBound { + max_amount: ResourceAmount(0x186a0), + max_price_per_unit: ResourcePricePerUnit(0x5af3107a4000), + }, + l2_gas: ResourceBound { + max_amount: ResourceAmount(0), + max_price_per_unit: ResourcePricePerUnit(0), + }, + l1_data_gas: None, + }, + tip: Tip(0), + paymaster_data: vec![], + account_deployment_data: vec![], + nonce_data_availability_mode: DataAvailabilityMode::L1, + fee_data_availability_mode: DataAvailabilityMode::L1, + sender_address: contract_address!( + "0x3f6f3bc663aedc5285d6013cc3ffcbc4341d86ab488b8b68d297f8258793c41" + ), + calldata: vec![], + proof_facts: vec![], + proof: Proof::default(), + }, + )), }; let error = add_invoke_transaction(context, input).await.unwrap_err(); diff --git a/crates/rpc/src/method/call.rs b/crates/rpc/src/method/call.rs index 32bf6fbb31..7954054375 100644 --- a/crates/rpc/src/method/call.rs +++ b/crates/rpc/src/method/call.rs @@ -135,14 +135,14 @@ pub async fn call( .context("Creating database transaction")?; let (header, pending) = match input.block_id { - BlockId::Pending => { + BlockId::PreConfirmed => { let pending = context .pending_data .get(&db_tx, rpc_version) .context("Querying pending data")?; ( - pending.pending_header(), + pending.pre_confirmed_header(), Some(pending.aggregated_state_update()), ) } @@ -162,6 +162,7 @@ pub async fn call( let state = ExecutionState::simulation( context.chain_id, + context.is_l3, header, pending, L1BlobDataAvailability::Disabled, @@ -169,6 +170,9 @@ pub async fn call( context.contract_addresses.eth_l2_token_address, context.contract_addresses.strk_l2_token_address, context.native_class_cache, + context + .config + .native_execution_force_use_for_incompatible_classes, ); let result = pathfinder_executor::call( @@ -253,13 +257,18 @@ mod tests { mod in_memory { use assert_matches::assert_matches; + use pathfinder_common::class_definition::{ + SerializedCairoDefinition, + SerializedCasmDefinition, + SerializedSierraDefinition, + }; use pathfinder_common::felt; use pathfinder_common::prelude::*; use starknet_gateway_test_fixtures::class_definitions::{ CONTRACT_DEFINITION, CONTRACT_DEFINITION_CLASS_HASH, }; - use starknet_gateway_types::reply::{GasPrices, L1DataAvailabilityMode, PendingBlock}; + use starknet_gateway_types::reply::{GasPrices, L1DataAvailabilityMode}; use super::*; use crate::pending::PendingData; @@ -281,6 +290,7 @@ mod tests { let header = BlockHeader::builder() .number(BlockNumber::GENESIS) .timestamp(BlockTimestamp::new_or_panic(0)) + .starknet_version(StarknetVersion::V_0_13_4) .finalize_with_hash(BlockHash(felt!("0xb00"))); tx.insert_block_header(&header).unwrap(); @@ -288,13 +298,17 @@ mod tests { let block1_number = BlockNumber::GENESIS + 1; let block1_hash = BlockHash(felt!("0xb01")); - tx.insert_cairo_class_definition(CONTRACT_DEFINITION_CLASS_HASH, CONTRACT_DEFINITION) - .unwrap(); + tx.insert_cairo_class_definition( + CONTRACT_DEFINITION_CLASS_HASH, + &SerializedCairoDefinition::from_slice(CONTRACT_DEFINITION), + ) + .unwrap(); let header = BlockHeader::builder() .number(block1_number) .timestamp(BlockTimestamp::new_or_panic(1)) .eth_l1_gas_price(GasPrice(1)) + .starknet_version(StarknetVersion::V_0_13_4) .finalize_with_hash(block1_hash); tx.insert_block_header(&header).unwrap(); @@ -347,12 +361,12 @@ mod tests { } #[tokio::test] - async fn storage_updated_in_pending() { + async fn storage_updated_in_pre_confirmed() { let (context, last_block_header, contract_address, test_key, test_value) = test_context().await; let new_value = StorageValue(felt!("0x09")); - let pending_data = pending_data_with_update( + let pending_data = pre_confirmed_data_with_update( last_block_header, StateUpdate::default().with_storage_update(contract_address, test_key, new_value), ); @@ -379,20 +393,20 @@ mod tests { entry_point_selector: EntryPoint::hashed(b"get_value"), calldata: vec![CallParam(*test_key.get())], }, - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, }; let result = call(context, input, RPC_VERSION).await.unwrap(); assert_eq!(result, Output(vec![CallResultValue(new_value.0)])); } #[tokio::test] - async fn contract_deployed_in_pending() { + async fn contract_deployed_in_pre_confirmed() { let (context, last_block_header, _contract_address, test_key, _test_value) = test_context().await; let new_value = storage_value!("0x09"); let new_contract_address = contract_address!("0xdeadbeef"); - let pending_data = pending_data_with_update( + let pending_data = pre_confirmed_data_with_update( last_block_header, StateUpdate::default() .with_deployed_contract(new_contract_address, CONTRACT_DEFINITION_CLASS_HASH) @@ -407,92 +421,12 @@ mod tests { entry_point_selector: EntryPoint::hashed(b"get_value"), calldata: vec![CallParam(*test_key.get())], }, - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, }; let result = call(context.clone(), input, RPC_VERSION).await.unwrap(); assert_eq!(result, Output(vec![CallResultValue(new_value.0)])); } - #[test_log::test(tokio::test)] - async fn contract_declared_and_deployed_in_pending() { - let (context, last_block_header, _contract_address, _test_key, _test_value) = - test_context().await; - - let sierra_definition = include_bytes!("../../fixtures/contracts/storage_access.json"); - let sierra_hash = - sierra_hash!("0x0544b92d358447cb9e50b65092b7169f931d29e05c1404a2cd08c6fd7e32ba90"); - let casm_definition = include_bytes!("../../fixtures/contracts/storage_access.casm"); - let casm_hash = - casm_hash!("0x069032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8"); - let casm_hash_v2 = casm_hash_bytes!(b"casm hash blake"); - - let mut connection = context.storage.connection().unwrap(); - let tx = connection.transaction().unwrap(); - tx.insert_sierra_class_definition( - &sierra_hash, - sierra_definition, - casm_definition, - &casm_hash_v2, - ) - .unwrap(); - tx.commit().unwrap(); - - drop(connection); - - let storage_key = StorageAddress::from_name(b"my_storage_var"); - let storage_value = storage_value!("0x09"); - let new_contract_address = contract_address!("0xdeadbeef"); - let pending_data = pending_data_with_update( - last_block_header, - StateUpdate::default() - .with_declared_sierra_class(sierra_hash, casm_hash) - .with_deployed_contract(new_contract_address, ClassHash(sierra_hash.0)) - .with_storage_update(new_contract_address, storage_key, storage_value), - ); - let (_tx, rx) = tokio::sync::watch::channel(pending_data); - let context = context.with_pending_data(rx); - - let input = Input { - request: FunctionCall { - contract_address: new_contract_address, - entry_point_selector: EntryPoint::hashed(b"get_data"), - calldata: vec![], - }, - block_id: BlockId::Pending, - }; - let result = call(context.clone(), input, RPC_VERSION).await.unwrap(); - assert_eq!(result, Output(vec![CallResultValue(storage_value.0)])); - } - - fn pending_data_with_update( - last_block_header: BlockHeader, - state_update: StateUpdate, - ) -> PendingData { - PendingData::from_pending_block( - PendingBlock { - l1_gas_price: GasPrices { - price_in_wei: last_block_header.eth_l1_gas_price, - price_in_fri: Default::default(), - }, - l2_gas_price: GasPrices { - price_in_wei: last_block_header.eth_l2_gas_price, - price_in_fri: last_block_header.strk_l2_gas_price, - }, - l1_data_gas_price: Default::default(), - parent_hash: last_block_header.hash, - sequencer_address: last_block_header.sequencer_address, - status: starknet_gateway_types::reply::Status::Pending, - timestamp: BlockTimestamp::new_or_panic(last_block_header.timestamp.get() + 1), - transaction_receipts: vec![], - transactions: vec![], - starknet_version: last_block_header.starknet_version, - l1_da_mode: L1DataAvailabilityMode::Calldata, - }, - state_update, - last_block_header.number + 1, - ) - } - #[test_log::test(tokio::test)] async fn contract_declared_and_deployed_in_pre_confirmed() { let (context, last_block_header, _contract_address, _test_key, _test_value) = @@ -510,8 +444,8 @@ mod tests { let tx = connection.transaction().unwrap(); tx.insert_sierra_class_definition( &sierra_hash, - sierra_definition, - casm_definition, + &SerializedSierraDefinition::from_slice(sierra_definition), + &SerializedCasmDefinition::from_slice(casm_definition), &casm_hash_v2, ) .unwrap(); @@ -538,7 +472,7 @@ mod tests { entry_point_selector: EntryPoint::hashed(b"get_data"), calldata: vec![], }, - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, }; let result = call(context.clone(), input.clone(), RpcVersion::V09) .await @@ -546,7 +480,7 @@ mod tests { assert_eq!(result, Output(vec![CallResultValue(storage_value.0)])); // We expect that JSON-RPC versions older than 0.9 do _not_ use the - // pre-committed block. + // pre-confirmed block. let error = call(context.clone(), input.clone(), RpcVersion::V08) .await .unwrap_err(); @@ -562,8 +496,8 @@ mod tests { let aggregated_state_update = state_update.clone(); PendingData::from_parts( - crate::pending::PendingBlockVariant::PreConfirmed { - block: crate::pending::PreConfirmedBlock { + crate::pending::PendingBlocks { + pre_confirmed: crate::pending::PreConfirmedBlock { number: last_block_header.number + 1, l1_gas_price: GasPrices { price_in_wei: last_block_header.eth_l1_gas_price, @@ -583,10 +517,9 @@ mod tests { transactions: vec![], starknet_version: last_block_header.starknet_version, l1_da_mode: L1DataAvailabilityMode::Blob.into(), - } - .into(), + }, + pre_latest: None, candidate_transactions: vec![], - pre_latest_data: None, }, state_update, aggregated_state_update, @@ -617,14 +550,15 @@ mod tests { tx.insert_sierra_class_definition( &sierra_hash, - sierra_definition, - casm_definition, + &SerializedSierraDefinition::from_slice(sierra_definition), + &SerializedCasmDefinition::from_slice(casm_definition), &casm_hash_v2, ) .unwrap(); let header = BlockHeader::builder() .number(block_number) + .starknet_version(StarknetVersion::V_0_13_4) .finalize_with_hash(block_hash!("0xb02")); tx.insert_block_header(&header).unwrap(); @@ -776,15 +710,15 @@ mod tests { tx.insert_sierra_class_definition( &sierra_hash, - sierra_definition, - casm_definition, + &SerializedSierraDefinition::from_slice(sierra_definition), + &SerializedCasmDefinition::from_slice(casm_definition), &casm_hash_v2, ) .unwrap(); tx.insert_sierra_class_definition( &caller_sierra_hash, - &caller_sierra_definition, - caller_casm_definition, + &SerializedSierraDefinition::from_bytes(caller_sierra_definition), + &SerializedCasmDefinition::from_slice(caller_casm_definition), &caller_casm_hash_v2, ) .unwrap(); @@ -824,7 +758,7 @@ mod tests { CallParam(EntryPoint::hashed(b"call").0), // Length of the call data for the called contract call_param!("1"), - // Number of calls, but then no more data; leads to deserailization error + // Number of calls, but then no more data; leads to deserialization error call_param!("0x1"), ], }, diff --git a/crates/rpc/src/method/consensus_info.rs b/crates/rpc/src/method/consensus_info.rs index d85a48e1f9..753ad543eb 100644 --- a/crates/rpc/src/method/consensus_info.rs +++ b/crates/rpc/src/method/consensus_info.rs @@ -1,26 +1,26 @@ +use std::collections::BTreeMap; + +use pathfinder_common::consensus_info::{CachedAtHeight, Decision, FinalizedBlock, ProposalParts}; + use crate::context::RpcContext; -#[derive(Debug, Default, PartialEq, Eq)] +#[derive(Debug, Default, PartialEq)] pub struct Output { - highest_decided_height: Option, - highest_decided_value: Option, + highest_decided: Option, + application_peer_scores: BTreeMap, + cached: BTreeMap, } crate::error::generate_rpc_error_subset!(Error); pub async fn consensus_info(context: RpcContext) -> Result { Ok(if let Some(watch) = context.consensus_info_watch { - let borrow_ref = watch.borrow(); - let info = *borrow_ref; - drop(borrow_ref); - - if let Some(info) = info { - Output { - highest_decided_height: Some(info.highest_decided_height), - highest_decided_value: Some(info.highest_decided_value), - } - } else { - Output::default() + let info = watch.borrow().clone(); + + Output { + highest_decided: info.highest_decision, + application_peer_scores: info.application_peer_scores, + cached: info.cached, } } else { Output::default() @@ -33,8 +33,80 @@ impl crate::dto::SerializeForVersion for Output { serializer: crate::dto::Serializer, ) -> Result { let mut serializer = serializer.serialize_struct()?; - serializer.serialize_optional("highest_decided_height", self.highest_decided_height)?; - serializer.serialize_optional("highest_decided_value", self.highest_decided_value)?; + serializer.serialize_optional("highest_decided", self.highest_decided.as_ref())?; + serializer.serialize_iter( + "application_peer_scores", + self.application_peer_scores.len(), + &mut self.application_peer_scores.iter(), + )?; + serializer.serialize_iter("cached", self.cached.len(), &mut self.cached.iter())?; + serializer.end() + } +} + +impl crate::dto::SerializeForVersion for &Decision { + fn serialize( + &self, + serializer: crate::dto::Serializer, + ) -> Result { + let mut serializer = serializer.serialize_struct()?; + serializer.serialize_field("height", &self.height)?; + serializer.serialize_field("round", &self.round)?; + serializer.serialize_field("value", &self.value)?; + serializer.end() + } +} + +impl crate::dto::SerializeForVersion for (&String, &f64) { + fn serialize( + &self, + serializer: crate::dto::Serializer, + ) -> Result { + let mut serializer = serializer.serialize_struct()?; + serializer.serialize_field("peer_id", self.0)?; + serializer.serialize_field("score", self.1)?; + serializer.end() + } +} + +impl crate::dto::SerializeForVersion for (&u64, &CachedAtHeight) { + fn serialize( + &self, + serializer: crate::dto::Serializer, + ) -> Result { + let mut serializer = serializer.serialize_struct()?; + serializer.serialize_field("height", self.0)?; + serializer.serialize_iter( + "proposals", + self.1.proposals.len(), + &mut self.1.proposals.iter(), + )?; + serializer.serialize_iter("blocks", self.1.blocks.len(), &mut self.1.blocks.iter())?; + serializer.end() + } +} + +impl crate::dto::SerializeForVersion for &ProposalParts { + fn serialize( + &self, + serializer: crate::dto::Serializer, + ) -> Result { + let mut serializer = serializer.serialize_struct()?; + serializer.serialize_field("round", &self.round)?; + serializer.serialize_field("proposer", &self.proposer)?; + serializer.serialize_field("parts_len", &self.parts_len)?; + serializer.end() + } +} + +impl crate::dto::SerializeForVersion for &FinalizedBlock { + fn serialize( + &self, + serializer: crate::dto::Serializer, + ) -> Result { + let mut serializer = serializer.serialize_struct()?; + serializer.serialize_field("round", &self.round)?; + serializer.serialize_field("is_decided", &self.is_decided)?; serializer.end() } } diff --git a/crates/rpc/src/method/estimate_fee.rs b/crates/rpc/src/method/estimate_fee.rs index 0649dcd3f9..5b9255a014 100644 --- a/crates/rpc/src/method/estimate_fee.rs +++ b/crates/rpc/src/method/estimate_fee.rs @@ -80,14 +80,14 @@ pub async fn estimate_fee( .context("Creating database transaction")?; let (header, pending) = match input.block_id { - BlockId::Pending => { + BlockId::PreConfirmed => { let pending = context .pending_data .get(&db_tx, rpc_version) .context("Querying pending data")?; ( - pending.pending_header(), + pending.pre_confirmed_header(), Some(pending.aggregated_state_update()), ) } @@ -107,6 +107,7 @@ pub async fn estimate_fee( let state = ExecutionState::simulation( context.chain_id, + context.is_l3, header, pending, L1BlobDataAvailability::Enabled, @@ -114,6 +115,9 @@ pub async fn estimate_fee( context.contract_addresses.eth_l2_token_address, context.contract_addresses.strk_l2_token_address, context.native_class_cache, + context + .config + .native_execution_force_use_for_incompatible_classes, ); let skip_validate = input @@ -128,6 +132,8 @@ pub async fn estimate_fee( crate::executor::map_broadcasted_transaction( &tx, context.chain_id, + context.config.compiler_resource_limits, + context.config.blockifier_libfuncs, skip_validate, true, ) @@ -227,6 +233,7 @@ impl crate::dto::SerializeForVersion for Output { #[cfg(test)] mod tests { use assert_matches::assert_matches; + use pathfinder_common::class_definition::SerializedOpaqueClassDefinition; use pathfinder_common::macro_prelude::*; use pathfinder_common::prelude::*; use pathfinder_common::transaction::{DataAvailabilityMode, ResourceBound, ResourceBounds}; @@ -260,11 +267,12 @@ mod tests { let casm_hash = casm_hash!("0x069032ff71f77284e1a0864a573007108ca5cc08089416af50f03260f5d6d4d8"); - let contract_class: SierraContractClass = - ContractClass::from_definition_bytes(sierra_definition) - .unwrap() - .as_sierra() - .unwrap(); + let contract_class: SierraContractClass = ContractClass::from_serialized_def( + &SerializedOpaqueClassDefinition::from_slice(sierra_definition), + ) + .unwrap() + .as_sierra() + .unwrap(); assert_eq!(contract_class.class_hash().unwrap().hash(), sierra_hash); @@ -393,6 +401,8 @@ mod tests { account_deployment_data: vec![], nonce_data_availability_mode: DataAvailabilityMode::L1, fee_data_availability_mode: DataAvailabilityMode::L1, + proof_facts: vec![], + proof: Default::default(), }, )) } @@ -597,11 +607,49 @@ mod tests { let casm_hash = casm_hash!("0x02F58B23F7D98FF076AE59C08125AAFFD6DECCF1A7E97378D1A303B1A4223989"); - let contract_class: SierraContractClass = - ContractClass::from_definition_bytes(sierra_definition) - .unwrap() - .as_sierra() - .unwrap(); + let contract_class: SierraContractClass = ContractClass::from_serialized_def( + &SerializedOpaqueClassDefinition::from_slice(sierra_definition), + ) + .unwrap() + .as_sierra() + .unwrap(); + + self::assert_eq!(contract_class.class_hash().unwrap().hash(), sierra_hash); + + BroadcastedTransaction::Declare(BroadcastedDeclareTransaction::V3( + BroadcastedDeclareTransactionV3 { + version: TransactionVersion::THREE, + signature: vec![], + nonce: transaction_nonce!("0x0"), + resource_bounds: ResourceBounds::default(), + tip: Tip(0), + paymaster_data: vec![], + account_deployment_data: vec![], + nonce_data_availability_mode: DataAvailabilityMode::L1, + fee_data_availability_mode: DataAvailabilityMode::L1, + compiled_class_hash: casm_hash, + contract_class, + sender_address, + }, + )) + } + + fn declare_v3_transaction_with_blake2_casm_hash( + sender_address: ContractAddress, + ) -> BroadcastedTransaction { + let sierra_definition = + include_bytes!("../../fixtures/contracts/l2_gas_accounting/l2_gas_accounting.json"); + let sierra_hash = + class_hash!("0x01A48FD3F75D0A7C2288AC23FB6ABA26CD375607BA63E4A3B3ED47FC8E99DC21"); + let casm_hash = + casm_hash!("0x138cd11c6de707426665bd8b0425d7411bb8dc5cbee15867025007a933b3379"); + + let contract_class: SierraContractClass = ContractClass::from_serialized_def( + &SerializedOpaqueClassDefinition::from_slice(sierra_definition), + ) + .unwrap() + .as_sierra() + .unwrap(); self::assert_eq!(contract_class.class_hash().unwrap().hash(), sierra_hash); @@ -661,6 +709,8 @@ mod tests { // calldata_len call_param!("0x0"), ], + proof_facts: vec![], + proof: Default::default(), }, )) } @@ -710,6 +760,8 @@ mod tests { account_deployment_data: vec![], nonce_data_availability_mode: DataAvailabilityMode::L2, fee_data_availability_mode: DataAvailabilityMode::L2, + proof_facts: vec![], + proof: Default::default(), }, )) } @@ -719,6 +771,7 @@ mod tests { #[case::v07(RpcVersion::V07)] #[case::v08(RpcVersion::V08)] #[case::v09(RpcVersion::V09)] + #[case::v10(RpcVersion::V10)] #[tokio::test] async fn declare_deploy_and_invoke_sierra_class_starknet_0_13_4(#[case] version: RpcVersion) { let (context, last_block_header, account_contract_address, universal_deployer_address) = @@ -768,6 +821,117 @@ mod tests { ); } + #[rstest::rstest] + #[case::v06(RpcVersion::V06)] + #[case::v07(RpcVersion::V07)] + #[case::v08(RpcVersion::V08)] + #[case::v09(RpcVersion::V09)] + #[case::v10(RpcVersion::V10)] + #[tokio::test] + async fn declare_deploy_and_invoke_sierra_class_starknet_0_14_0(#[case] version: RpcVersion) { + let (context, last_block_header, account_contract_address, universal_deployer_address) = + crate::test_setup::test_context_with_starknet_version(StarknetVersion::new( + 0, 14, 0, 0, + )) + .await; + + // declare test class + let declare_transaction = declare_v3_transaction(account_contract_address); + // deploy with universal deployer contract + let deploy_transaction = + deploy_v3_transaction(account_contract_address, universal_deployer_address); + // invoke deployed contract + let invoke_transaction = invoke_v3_transaction_with_data_gas( + account_contract_address, + transaction_nonce!("0x2"), + call_param!("7"), + ); + // Invoke once more to test that the execution state updates properly with L2 + // gas accounting aware code. + let invoke_transaction2 = invoke_v3_transaction_with_data_gas( + account_contract_address, + transaction_nonce!("0x3"), + call_param!("7"), + ); + + let input = Input { + request: vec![ + declare_transaction, + deploy_transaction, + invoke_transaction, + invoke_transaction2, + ], + simulation_flags: vec![SimulationFlag::SkipValidate], + block_id: BlockId::Number(last_block_header.number), + }; + let result = super::estimate_fee(context, input, RPC_VERSION) + .await + .unwrap(); + + let output_json = result.serialize(Serializer { version }).unwrap(); + crate::assert_json_matches_fixture!( + output_json, + version, + "fee_estimates/declare_deploy_invoke_sierra_0_14_0.json" + ); + } + + #[rstest::rstest] + #[case::v06(RpcVersion::V06)] + #[case::v07(RpcVersion::V07)] + #[case::v08(RpcVersion::V08)] + #[case::v09(RpcVersion::V09)] + #[case::v10(RpcVersion::V10)] + #[tokio::test] + async fn declare_deploy_and_invoke_sierra_class_starknet_0_14_1(#[case] version: RpcVersion) { + let (context, last_block_header, account_contract_address, universal_deployer_address) = + crate::test_setup::test_context_with_starknet_version(StarknetVersion::new( + 0, 14, 1, 0, + )) + .await; + + // declare test class + let declare_transaction = + declare_v3_transaction_with_blake2_casm_hash(account_contract_address); + // deploy with universal deployer contract + let deploy_transaction = + deploy_v3_transaction(account_contract_address, universal_deployer_address); + // invoke deployed contract + let invoke_transaction = invoke_v3_transaction_with_data_gas( + account_contract_address, + transaction_nonce!("0x2"), + call_param!("7"), + ); + // Invoke once more to test that the execution state updates properly with L2 + // gas accounting aware code. + let invoke_transaction2 = invoke_v3_transaction_with_data_gas( + account_contract_address, + transaction_nonce!("0x3"), + call_param!("7"), + ); + + let input = Input { + request: vec![ + declare_transaction, + deploy_transaction, + invoke_transaction, + invoke_transaction2, + ], + simulation_flags: vec![SimulationFlag::SkipValidate], + block_id: BlockId::Number(last_block_header.number), + }; + let result = super::estimate_fee(context, input, RPC_VERSION) + .await + .unwrap(); + + let output_json = result.serialize(Serializer { version }).unwrap(); + crate::assert_json_matches_fixture!( + output_json, + version, + "fee_estimates/declare_deploy_invoke_sierra_0_14_1.json" + ); + } + /// Invokes the test contract with an invalid entry point so that /// the transaction is expected to be reverted. fn invoke_v3_transaction_with_invalid_entry_point( @@ -813,6 +977,8 @@ mod tests { account_deployment_data: vec![], nonce_data_availability_mode: DataAvailabilityMode::L2, fee_data_availability_mode: DataAvailabilityMode::L2, + proof_facts: vec![], + proof: Default::default(), }, )) } @@ -1119,6 +1285,8 @@ mod tests { nonce_data_availability_mode: DataAvailabilityMode::L1, fee_data_availability_mode: DataAvailabilityMode::L1, sender_address: contract_address!("0xdeadbeef"), + proof_facts: vec![], + proof: Default::default(), }, ); @@ -1157,6 +1325,8 @@ mod tests { fee_data_availability_mode: DataAvailabilityMode::L1, sender_address: contract_address!("0xdeadbeef"), calldata: vec![], + proof_facts: vec![], + proof: Default::default(), }, ); diff --git a/crates/rpc/src/method/estimate_message_fee.rs b/crates/rpc/src/method/estimate_message_fee.rs index 5a623357ec..e24a310b24 100644 --- a/crates/rpc/src/method/estimate_message_fee.rs +++ b/crates/rpc/src/method/estimate_message_fee.rs @@ -77,14 +77,14 @@ pub async fn estimate_message_fee( .context("Creating database transaction")?; let (header, pending) = match input.block_id { - BlockId::Pending => { + BlockId::PreConfirmed => { let pending = context .pending_data .get(&db_tx, rpc_version) .context("Querying pending data")?; ( - pending.pending_header(), + pending.pre_confirmed_header(), Some(pending.aggregated_state_update()), ) } @@ -111,6 +111,7 @@ pub async fn estimate_message_fee( let state = ExecutionState::simulation( context.chain_id, + context.is_l3, header, pending, L1BlobDataAvailability::Enabled, @@ -118,6 +119,9 @@ pub async fn estimate_message_fee( context.contract_addresses.eth_l2_token_address, context.contract_addresses.strk_l2_token_address, context.native_class_cache, + context + .config + .native_execution_force_use_for_incompatible_classes, ); let transaction = create_executor_transaction(input, context.chain_id)?; @@ -266,6 +270,10 @@ impl From for ApplicationError { #[cfg(test)] mod tests { use assert_matches::assert_matches; + use pathfinder_common::class_definition::{ + SerializedCasmDefinition, + SerializedSierraDefinition, + }; use pathfinder_common::macro_prelude::*; use pathfinder_common::prelude::*; use pathfinder_common::L1DataAvailabilityMode; @@ -306,8 +314,8 @@ mod tests { class_hash!("0x032908a85d43275f8509ba5f2acae88811b293463a3521dc05ab06d534b40848"); tx.insert_sierra_class_definition( &SierraHash(class_hash.0), - sierra_json, - casm_json, + &SerializedSierraDefinition::from_slice(sierra_json), + &SerializedCasmDefinition::from_slice(casm_json), &casm_hash_bytes!(b"casm hash blake"), ) .expect("insert class"); diff --git a/crates/rpc/src/method/fetch_proposers.rs b/crates/rpc/src/method/fetch_proposers.rs index eb9a3b1e1f..c910463cdd 100644 --- a/crates/rpc/src/method/fetch_proposers.rs +++ b/crates/rpc/src/method/fetch_proposers.rs @@ -106,7 +106,7 @@ pub async fn fetch_proposers( let span = tracing::Span::current(); let proposers = util::task::spawn_blocking(move |_| { let _g = span.enter(); - consensus_fetcher::get_proposers_at_height(&context.storage, context.chain_id, input.height) + consensus_fetcher::get_proposers_at_height(&context.storage, context.chain_id, context.is_l3, input.height) }) .await .context("Database read panic or shutting down")? diff --git a/crates/rpc/src/method/fetch_validators.rs b/crates/rpc/src/method/fetch_validators.rs index ed18b2d2ef..77851fafcf 100644 --- a/crates/rpc/src/method/fetch_validators.rs +++ b/crates/rpc/src/method/fetch_validators.rs @@ -109,6 +109,7 @@ pub async fn fetch_validators( consensus_fetcher::get_validators_at_height( &context.storage, context.chain_id, + context.is_l3, input.height, ) }) diff --git a/crates/rpc/src/method/get_block_transaction_count.rs b/crates/rpc/src/method/get_block_transaction_count.rs index 866f83ea55..bd068435ed 100644 --- a/crates/rpc/src/method/get_block_transaction_count.rs +++ b/crates/rpc/src/method/get_block_transaction_count.rs @@ -40,12 +40,12 @@ pub async fn get_block_transaction_count( let db = db.transaction().context("Creating database transaction")?; let block_id = match input.block_id { - BlockId::Pending => { + BlockId::PreConfirmed => { let count = context .pending_data .get(&db, rpc_version) .context("Querying pending data")? - .pending_transactions() + .pre_confirmed_transactions() .len() as u64; return Ok(Output(count)); } @@ -91,10 +91,10 @@ mod tests { #[rstest::rstest] #[case::latest(BlockId::Latest, 5)] - #[case::pending(BlockId::Pending, 3)] + #[case::pending(BlockId::PreConfirmed, 3)] #[tokio::test] async fn ok(#[case] input: BlockId, #[case] expected: u64) { - let context = RpcContext::for_tests_with_pending().await; + let context = RpcContext::for_tests_with_pre_confirmed().await; let input = Input { block_id: input }; let result = get_block_transaction_count(context, input, RPC_VERSION) .await @@ -108,7 +108,7 @@ mod tests { let input = Input { block_id: block_hash_bytes!(b"invalid").into(), }; - let context = RpcContext::for_tests_with_pending().await; + let context = RpcContext::for_tests_with_pre_confirmed().await; let result = get_block_transaction_count(context, input, RPC_VERSION).await; assert_matches::assert_matches!(result, Err(Error::BlockNotFound)); diff --git a/crates/rpc/src/method/get_block_with_receipts.rs b/crates/rpc/src/method/get_block_with_receipts.rs index bd8f899167..41ad7298fd 100644 --- a/crates/rpc/src/method/get_block_with_receipts.rs +++ b/crates/rpc/src/method/get_block_with_receipts.rs @@ -3,7 +3,8 @@ use std::sync::Arc; use anyhow::Context; use crate::context::RpcContext; -use crate::pending::PendingBlockVariant; +use crate::dto::TransactionResponseFlags; +use crate::pending::PendingBlocks; use crate::types::BlockId; use crate::RpcVersion; @@ -16,22 +17,40 @@ pub enum Output { Vec, )>, is_l1_accepted: bool, + include_proof_facts: bool, }, Pending { - block: Arc, - block_number: pathfinder_common::BlockNumber, + block: Arc, + // for backward compatibility with pre 0.9 versions we need to + // mimic the structure of the "pending" block, which included parent block hash + parent_hash: Option, + include_proof_facts: bool, }, } +#[derive(Debug, PartialEq)] pub struct Input { pub block_id: BlockId, + pub response_flags: TransactionResponseFlags, } impl crate::dto::DeserializeForVersion for Input { fn deserialize(value: crate::dto::Value) -> Result { + let rpc_version = value.version; + value.deserialize_map(|value| { + let block_id = value.deserialize("block_id")?; + let response_flags = if rpc_version >= RpcVersion::V10 { + value + .deserialize_optional("response_flags")? + .unwrap_or_default() + } else { + TransactionResponseFlags::default() + }; + Ok(Self { - block_id: value.deserialize("block_id")?, + block_id, + response_flags, }) }) } @@ -47,6 +66,13 @@ pub async fn get_block_with_receipts( let span = tracing::Span::current(); util::task::spawn_blocking(move |_| { let _g = span.enter(); + + let include_proof_facts = input + .response_flags + .0 + .iter() + .any(|flag| flag == &crate::dto::TransactionResponseFlag::IncludeProofFacts); + let mut db = context .storage .connection() @@ -55,15 +81,29 @@ pub async fn get_block_with_receipts( let db = db.transaction().context("Creating database transaction")?; let block_id = match input.block_id { - BlockId::Pending => { + BlockId::PreConfirmed => { let pending = context .pending_data .get(&db, rpc_version) .context("Querying pending data")?; + let parent_hash = (rpc_version < RpcVersion::V09) + .then(|| { + // versions before 0.9 don't have access to pre-confirmed data + // so we never need to worry about parent hash coming from pre-latest + Ok::<_, anyhow::Error>( + db.block_header(pathfinder_common::BlockId::Latest) + .context("Querying latest block header")? + .unwrap_or_default() + .hash, + ) + }) + .transpose()?; + return Ok(Output::Pending { block: pending.pending_block(), - block_number: pending.pending_block_number(), + parent_hash, + include_proof_facts, }); } other => other @@ -89,6 +129,7 @@ pub async fn get_block_with_receipts( header: header.into(), body, is_l1_accepted, + include_proof_facts, }) }) .await @@ -106,6 +147,7 @@ impl crate::dto::SerializeForVersion for Output { header, body, is_l1_accepted, + include_proof_facts, } => { let finality = if *is_l1_accepted { crate::dto::TxnFinalityStatus::AcceptedOnL1 @@ -131,14 +173,16 @@ impl crate::dto::SerializeForVersion for Output { receipt, events, finality, + include_proof_facts: *include_proof_facts, }), )?; } Output::Pending { block, - block_number, + parent_hash, + include_proof_facts, } => { - serializer.flatten(&(*block_number, block.as_ref()))?; + serializer.flatten(&(parent_hash, &block.pre_confirmed))?; let transactions = block.transactions(); serializer.serialize_iter( "transactions", @@ -152,6 +196,7 @@ impl crate::dto::SerializeForVersion for Output { receipt, events, finality: block.finality_status(), + include_proof_facts: *include_proof_facts, }), )?; } @@ -165,6 +210,7 @@ struct TransactionWithReceipt<'a> { pub receipt: &'a pathfinder_common::receipt::Receipt, pub events: &'a [pathfinder_common::event::Event], pub finality: crate::dto::TxnFinalityStatus, + pub include_proof_facts: bool, } impl crate::dto::SerializeForVersion for TransactionWithReceipt<'_> { @@ -177,11 +223,17 @@ impl crate::dto::SerializeForVersion for TransactionWithReceipt<'_> { crate::RpcVersion::V07 => { serializer.serialize_field( "transaction", - &crate::dto::TransactionWithHash(self.transaction), + &crate::dto::TransactionWithHash { + transaction: self.transaction, + include_proof_facts: self.include_proof_facts, + }, )?; } _ => { - serializer.serialize_field("transaction", &self.transaction)?; + serializer.serialize_field( + "transaction", + &(self.transaction, self.include_proof_facts), + )?; } } serializer.serialize_field( @@ -204,26 +256,55 @@ mod tests { use crate::dto::{SerializeForVersion, Serializer}; use crate::RpcVersion; - #[rstest::rstest] - #[case::v06(RpcVersion::V06)] - #[case::v07(RpcVersion::V07)] - #[case::v08(RpcVersion::V08)] - #[case::v09(RpcVersion::V09)] - #[case::v10(RpcVersion::V10)] - #[tokio::test] - async fn pending(#[case] version: RpcVersion) { - let context = RpcContext::for_tests_with_pending().await; - let input = Input { - block_id: BlockId::Pending, - }; + mod input { + use super::*; - let output = get_block_with_receipts(context.clone(), input, version) - .await - .unwrap() - .serialize(Serializer { version }) - .unwrap(); + #[test] + fn deserialize_v10_with_response_flags() { + use crate::dto::DeserializeForVersion; - crate::assert_json_matches_fixture!(output, version, "blocks/pending.json"); + let json = r#"{ + "block_id": "latest", + "response_flags": ["INCLUDE_PROOF_FACTS"] + }"#; + let value = crate::dto::Value::new( + serde_json::from_str::(json).unwrap(), + RpcVersion::V10, + ); + let input = Input::deserialize(value).unwrap(); + + assert_eq!( + input, + Input { + block_id: BlockId::Latest, + response_flags: TransactionResponseFlags(vec![ + crate::dto::TransactionResponseFlag::IncludeProofFacts + ]), + } + ); + } + + #[test] + fn deserialize_v10_without_response_flags() { + use crate::dto::DeserializeForVersion; + + let json = r#"{ + "block_id": "latest" + }"#; + let value = crate::dto::Value::new( + serde_json::from_str::(json).unwrap(), + RpcVersion::V10, + ); + let input = Input::deserialize(value).unwrap(); + + assert_eq!( + input, + Input { + block_id: BlockId::Latest, + response_flags: TransactionResponseFlags::default(), + } + ); + } } #[rstest::rstest] @@ -236,7 +317,8 @@ mod tests { async fn pre_confirmed(#[case] version: RpcVersion) { let context = RpcContext::for_tests_with_pre_confirmed().await; let input = Input { - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, + response_flags: TransactionResponseFlags::default(), }; let output = get_block_with_receipts(context.clone(), input, version) @@ -256,9 +338,10 @@ mod tests { #[case::v10(RpcVersion::V10)] #[tokio::test] async fn latest(#[case] version: RpcVersion) { - let context = RpcContext::for_tests_with_pending().await; + let context = RpcContext::for_tests_with_pre_confirmed().await; let input = Input { block_id: BlockId::Latest, + response_flags: TransactionResponseFlags::default(), }; let output = get_block_with_receipts(context.clone(), input, version) diff --git a/crates/rpc/src/method/get_block_with_tx_hashes.rs b/crates/rpc/src/method/get_block_with_tx_hashes.rs index 5857cd35a8..c3d4999413 100644 --- a/crates/rpc/src/method/get_block_with_tx_hashes.rs +++ b/crates/rpc/src/method/get_block_with_tx_hashes.rs @@ -1,10 +1,10 @@ use std::sync::Arc; use anyhow::Context; -use pathfinder_common::{BlockHeader, BlockNumber, TransactionHash}; +use pathfinder_common::{BlockHeader, TransactionHash}; use crate::context::RpcContext; -use crate::pending::PendingBlockVariant; +use crate::pending::PendingBlocks; use crate::types::BlockId; use crate::RpcVersion; @@ -27,8 +27,10 @@ impl crate::dto::DeserializeForVersion for Input { #[derive(Debug)] pub enum Output { Pending { - header: Arc, - block_number: BlockNumber, + block: Arc, + // for backward compatibility with pre 0.9 versions we need to + // mimic the structure of the "pending" block, which included parent block hash + parent_hash: Option, transactions: Vec, }, Full { @@ -57,21 +59,35 @@ pub async fn get_block_with_tx_hashes( .context("Creating database transaction")?; let block_id = match input.block_id { - BlockId::Pending => { + BlockId::PreConfirmed => { let pending = context .pending_data .get(&transaction, rpc_version) .context("Querying pending data")?; let transactions = pending - .pending_transactions() + .pre_confirmed_transactions() .iter() .map(|t| t.hash) .collect(); + let parent_hash = (rpc_version < RpcVersion::V09) + .then(|| { + // versions before 0.9 don't have access to pre-confirmed data + // so we never need to worry about parent hash coming from pre-latest + Ok::<_, anyhow::Error>( + transaction + .block_header(pathfinder_common::BlockId::Latest) + .context("Querying latest block header")? + .unwrap_or_default() + .hash, + ) + }) + .transpose()?; + return Ok(Output::Pending { - header: pending.pending_block(), - block_number: pending.pending_block_number(), + block: pending.pending_block(), + parent_hash, transactions, }); } @@ -109,12 +125,12 @@ impl crate::dto::SerializeForVersion for Output { ) -> Result { match self { Output::Pending { - header, - block_number, + block, + parent_hash, transactions, } => { let mut serializer = serializer.serialize_struct()?; - serializer.flatten(&(*block_number, header.as_ref()))?; + serializer.flatten(&(parent_hash, &block.pre_confirmed))?; serializer.serialize_iter( "transactions", transactions.len(), @@ -154,32 +170,6 @@ mod tests { use crate::dto::{SerializeForVersion, Serializer}; use crate::RpcVersion; - #[rstest::rstest] - #[case::v06(RpcVersion::V06)] - #[case::v07(RpcVersion::V07)] - #[case::v08(RpcVersion::V08)] - #[case::v09(RpcVersion::V09)] - #[case::v10(RpcVersion::V10)] - #[tokio::test] - async fn pending(#[case] version: RpcVersion) { - let context = RpcContext::for_tests_with_pending().await; - - let input = Input { - block_id: BlockId::Pending, - }; - - let output = get_block_with_tx_hashes(context, input, version) - .await - .unwrap(); - let output_json = output.serialize(Serializer { version }).unwrap(); - - crate::assert_json_matches_fixture!( - output_json, - version, - "blocks/pending_with_tx_hashes.json" - ); - } - #[rstest::rstest] #[case::v06(RpcVersion::V06)] #[case::v07(RpcVersion::V07)] @@ -191,7 +181,7 @@ mod tests { let context = RpcContext::for_tests_with_pre_confirmed().await; let input = Input { - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, }; let output = get_block_with_tx_hashes(context, input, version) @@ -214,7 +204,7 @@ mod tests { #[case::v10(RpcVersion::V10)] #[tokio::test] async fn latest(#[case] version: RpcVersion) { - let context = RpcContext::for_tests_with_pending().await; + let context = RpcContext::for_tests_with_pre_confirmed().await; let input = Input { block_id: BlockId::Latest, diff --git a/crates/rpc/src/method/get_block_with_txs.rs b/crates/rpc/src/method/get_block_with_txs.rs index a32bac84cd..9a4b91bcf7 100644 --- a/crates/rpc/src/method/get_block_with_txs.rs +++ b/crates/rpc/src/method/get_block_with_txs.rs @@ -5,21 +5,36 @@ use pathfinder_common::transaction::Transaction; use pathfinder_common::BlockHeader; use crate::context::RpcContext; -use crate::pending::PendingBlockVariant; +use crate::dto::TransactionResponseFlags; +use crate::pending::PendingBlocks; use crate::types::BlockId; use crate::RpcVersion; crate::error::generate_rpc_error_subset!(Error: BlockNotFound); +#[derive(Debug, PartialEq)] pub struct Input { - pub block_id: BlockId, + block_id: BlockId, + response_flags: TransactionResponseFlags, } impl crate::dto::DeserializeForVersion for Input { fn deserialize(value: crate::dto::Value) -> Result { + let rpc_version = value.version; + value.deserialize_map(|value| { + let block_id = value.deserialize("block_id")?; + let response_flags = if rpc_version >= RpcVersion::V10 { + value + .deserialize_optional("response_flags")? + .unwrap_or_default() + } else { + TransactionResponseFlags::default() + }; + Ok(Self { - block_id: value.deserialize("block_id")?, + block_id, + response_flags, }) }) } @@ -28,14 +43,18 @@ impl crate::dto::DeserializeForVersion for Input { #[derive(Debug)] pub enum Output { Pending { - header: Arc, - block_number: pathfinder_common::BlockNumber, + block: Arc, + // for backward compatibility with pre 0.9 versions we need to + // mimic the structure of the "pending" block, which included parent block hash + parent_hash: Option, transactions: Vec, + include_proof_facts: bool, }, Full { header: Box, transactions: Vec, l1_accepted: bool, + include_proof_facts: bool, }, } @@ -48,6 +67,13 @@ pub async fn get_block_with_txs( let span = tracing::Span::current(); util::task::spawn_blocking(move |_| { let _g = span.enter(); + + let include_proof_facts = input + .response_flags + .0 + .iter() + .any(|flag| flag == &crate::dto::TransactionResponseFlag::IncludeProofFacts); + let mut connection = context .storage .connection() @@ -58,18 +84,33 @@ pub async fn get_block_with_txs( .context("Creating database transaction")?; let block_id = match input.block_id { - BlockId::Pending => { + BlockId::PreConfirmed => { let pending = context .pending_data .get(&transaction, rpc_version) .context("Querying pending data")?; - let transactions = pending.pending_transactions().to_vec(); + let transactions = pending.pre_confirmed_transactions().to_vec(); + + let parent_hash = (rpc_version < RpcVersion::V09) + .then(|| { + // versions before 0.9 don't have access to pre-confirmed data + // so we never need to worry about parent hash coming from pre-latest + Ok::<_, anyhow::Error>( + transaction + .block_header(pathfinder_common::BlockId::Latest) + .context("Querying latest block header")? + .unwrap_or_default() + .hash, + ) + }) + .transpose()?; return Ok(Output::Pending { - header: pending.pending_block(), - block_number: pending.pending_block_number(), + block: pending.pending_block(), + parent_hash, transactions, + include_proof_facts, }); } other => other @@ -95,6 +136,7 @@ pub async fn get_block_with_txs( header: Box::new(header), l1_accepted, transactions, + include_proof_facts, }) }) .await @@ -108,16 +150,22 @@ impl crate::dto::SerializeForVersion for Output { ) -> Result { match self { Output::Pending { - header, - block_number, + block, + parent_hash, transactions, + include_proof_facts, } => { let mut serializer = serializer.serialize_struct()?; - serializer.flatten(&(*block_number, header.as_ref()))?; + serializer.flatten(&(parent_hash, &block.pre_confirmed))?; serializer.serialize_iter( "transactions", transactions.len(), - &mut transactions.iter().map(crate::dto::TransactionWithHash), + &mut transactions + .iter() + .map(|transaction| crate::dto::TransactionWithHash { + transaction, + include_proof_facts: *include_proof_facts, + }), )?; serializer.end() } @@ -125,13 +173,19 @@ impl crate::dto::SerializeForVersion for Output { header, transactions, l1_accepted, + include_proof_facts, } => { let mut serializer = serializer.serialize_struct()?; serializer.flatten(header.as_ref())?; serializer.serialize_iter( "transactions", transactions.len(), - &mut transactions.iter().map(crate::dto::TransactionWithHash), + &mut transactions + .iter() + .map(|transaction| crate::dto::TransactionWithHash { + transaction, + include_proof_facts: *include_proof_facts, + }), )?; serializer.serialize_field( "status", @@ -150,27 +204,58 @@ impl crate::dto::SerializeForVersion for Output { #[cfg(test)] mod tests { use super::*; - use crate::dto::{SerializeForVersion, Serializer}; + use crate::dto::{SerializeForVersion, Serializer, TransactionResponseFlag}; use crate::RpcVersion; - #[rstest::rstest] - #[case::v06(RpcVersion::V06)] - #[case::v07(RpcVersion::V07)] - #[case::v08(RpcVersion::V08)] - #[case::v09(RpcVersion::V09)] - #[case::v10(RpcVersion::V10)] - #[tokio::test] - async fn pending(#[case] version: RpcVersion) { - let context = RpcContext::for_tests_with_pending().await; + mod input { + use super::*; - let input = Input { - block_id: BlockId::Pending, - }; + #[test] + fn deserialize_v10_with_response_flags() { + use crate::dto::DeserializeForVersion; - let output = get_block_with_txs(context, input, version).await.unwrap(); - let output_json = output.serialize(Serializer { version }).unwrap(); + let json = r#"{ + "block_id": "latest", + "response_flags": ["INCLUDE_PROOF_FACTS"] + }"#; + let value = crate::dto::Value::new( + serde_json::from_str::(json).unwrap(), + RpcVersion::V10, + ); + let input = Input::deserialize(value).unwrap(); + + assert_eq!( + input, + Input { + block_id: BlockId::Latest, + response_flags: TransactionResponseFlags(vec![ + crate::dto::TransactionResponseFlag::IncludeProofFacts + ]), + } + ); + } + + #[test] + fn deserialize_v10_without_response_flags() { + use crate::dto::DeserializeForVersion; + + let json = r#"{ + "block_id": "latest" + }"#; + let value = crate::dto::Value::new( + serde_json::from_str::(json).unwrap(), + RpcVersion::V10, + ); + let input = Input::deserialize(value).unwrap(); - crate::assert_json_matches_fixture!(output_json, version, "blocks/pending_with_txs.json"); + assert_eq!( + input, + Input { + block_id: BlockId::Latest, + response_flags: TransactionResponseFlags::default(), + } + ); + } } #[rstest::rstest] @@ -184,7 +269,8 @@ mod tests { let context = RpcContext::for_tests_with_pre_confirmed().await; let input = Input { - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, + response_flags: Default::default(), }; let output = get_block_with_txs(context, input, version).await.unwrap(); @@ -205,10 +291,11 @@ mod tests { #[case::v10(RpcVersion::V10)] #[tokio::test] async fn latest(#[case] version: RpcVersion) { - let context = RpcContext::for_tests_with_pending().await; + let context = RpcContext::for_tests_with_pre_confirmed().await; let input = Input { block_id: BlockId::Latest, + response_flags: TransactionResponseFlags::default(), }; let output = get_block_with_txs(context, input, version).await.unwrap(); @@ -216,4 +303,27 @@ mod tests { crate::assert_json_matches_fixture!(output_json, version, "blocks/latest_with_txs.json"); } + + #[tokio::test] + async fn latest_with_proof_facts() { + let context = RpcContext::for_tests_with_pre_confirmed().await; + let version = RpcVersion::V10; + + let input = Input { + block_id: BlockId::Latest, + response_flags: TransactionResponseFlags(vec![ + TransactionResponseFlag::IncludeProofFacts, + ]), + }; + + let output = get_block_with_txs(context, input, version).await.unwrap(); + let output_json = output.serialize(Serializer { version }).unwrap(); + + let expected_json: serde_json::Value = serde_json::from_str(include_str!( + "../../fixtures/0.10.0/blocks/latest_with_txs_including_proof_facts.json" + )) + .unwrap(); + + pretty_assertions_sorted::assert_eq!(output_json, expected_json); + } } diff --git a/crates/rpc/src/method/get_class.rs b/crates/rpc/src/method/get_class.rs index aec4cb3f9f..8b9dea3f13 100644 --- a/crates/rpc/src/method/get_class.rs +++ b/crates/rpc/src/method/get_class.rs @@ -85,7 +85,7 @@ pub async fn get_class( return Err(Error::ClassHashNotFound); }; - let class = ContractClass::from_definition_bytes(&definition) + let class = ContractClass::from_serialized_def(&definition) .context("Parsing class definition")? .into(); @@ -153,15 +153,15 @@ mod tests { const RPC_VERSION: RpcVersion = RpcVersion::V09; #[tokio::test] - async fn pending() { - let context = RpcContext::for_tests_with_pending().await; + async fn pre_confirmed() { + let context = RpcContext::for_tests_with_pre_confirmed().await; // Cairo v0.x class let valid_v0 = class_hash_bytes!(b"class 0 hash"); super::get_class( context.clone(), Input { - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, class_hash: valid_v0, }, RPC_VERSION, @@ -173,19 +173,19 @@ mod tests { super::get_class( context.clone(), Input { - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, class_hash: valid_v1, }, RPC_VERSION, ) .await .unwrap(); - let valid_pending = class_hash_bytes!(b"pending class 0 hash"); + let valid_pre_confirmed = class_hash_bytes!(b"preconfirmed class 0 hash"); super::get_class( context.clone(), Input { - block_id: BlockId::Pending, - class_hash: valid_pending, + block_id: BlockId::PreConfirmed, + class_hash: valid_pre_confirmed, }, RPC_VERSION, ) @@ -196,7 +196,7 @@ mod tests { let error = super::get_class( context, Input { - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, class_hash: invalid, }, RPC_VERSION, @@ -220,7 +220,7 @@ mod tests { let r = super::get_class( context.clone(), Input { - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, class_hash: valid_pre_latest, }, version, @@ -238,7 +238,7 @@ mod tests { let r = super::get_class( context.clone(), Input { - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, class_hash: valid_pre_confirmed, }, version, diff --git a/crates/rpc/src/method/get_class_at.rs b/crates/rpc/src/method/get_class_at.rs index 592abe7a50..6542ca7515 100644 --- a/crates/rpc/src/method/get_class_at.rs +++ b/crates/rpc/src/method/get_class_at.rs @@ -98,8 +98,8 @@ pub async fn get_class_at( .context("Fetching class definition")? .context("Class definition missing from database")?; - let class = ContractClass::from_definition_bytes(&definition) - .context("Parsing class definition")?; + let class = + ContractClass::from_serialized_def(&definition).context("Parsing class definition")?; Ok(class) }); @@ -228,17 +228,6 @@ mod tests { assert_matches!(error, Error::BlockNotFound); } - #[tokio::test] - async fn pending() { - let context = RpcContext::for_tests_with_pending().await; - let input = Input { - block_id: BlockId::Pending, - contract_address: contract_address_bytes!(b"pending contract 0 address"), - }; - - get_class_at(context, input, RPC_VERSION).await.unwrap(); - } - #[rstest::rstest] #[case::v06(RpcVersion::V06)] #[case::v07(RpcVersion::V07)] @@ -250,7 +239,7 @@ mod tests { let context = RpcContext::for_tests_with_pre_latest_and_pre_confirmed().await; let input = Input { - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, contract_address: contract_address_bytes!(b"prelatest contract 0 address"), }; let r = get_class_at(context.clone(), input, version).await; @@ -263,7 +252,7 @@ mod tests { } let input = Input { - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, contract_address: contract_address_bytes!(b"preconfirmed contract 0 address"), }; let r = get_class_at(context, input, version).await; diff --git a/crates/rpc/src/method/get_class_hash_at.rs b/crates/rpc/src/method/get_class_hash_at.rs index 5633ae2af6..fac046ea21 100644 --- a/crates/rpc/src/method/get_class_hash_at.rs +++ b/crates/rpc/src/method/get_class_hash_at.rs @@ -219,7 +219,7 @@ mod tests { let expected = class_hash_bytes!(b"class 0 hash"); let input = Input { - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, contract_address: contract_address_bytes!(b"contract 0"), }; let result = get_class_hash_at(context, input, RPC_VERSION) @@ -229,13 +229,13 @@ mod tests { } #[tokio::test] - async fn pending() { - let context = RpcContext::for_tests_with_pending().await; + async fn pre_confirmed() { + let context = RpcContext::for_tests_with_pre_confirmed().await; // This should still work even though it was deployed in an actual block. let expected = class_hash_bytes!(b"class 0 hash"); let input = Input { - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, contract_address: contract_address_bytes!(b"contract 0"), }; let result = get_class_hash_at(context.clone(), input, RPC_VERSION) @@ -243,11 +243,11 @@ mod tests { .unwrap(); assert_eq!(result.0, expected); - // This is an actual pending deployed contract. - let expected = class_hash_bytes!(b"pending class 0 hash"); + // This is an actual pre-confirmed deployed contract. + let expected = class_hash_bytes!(b"preconfirmed class 0 hash"); let input = Input { - block_id: BlockId::Pending, - contract_address: contract_address_bytes!(b"pending contract 0 address"), + block_id: BlockId::PreConfirmed, + contract_address: contract_address_bytes!(b"preconfirmed contract 0 address"), }; let result = get_class_hash_at(context.clone(), input, RPC_VERSION) .await @@ -255,10 +255,10 @@ mod tests { assert_eq!(result.0, expected); // Replaced class in pending should also work. - let expected = class_hash_bytes!(b"pending class 2 hash (replaced)"); + let expected = class_hash_bytes!(b"preconfirmed class 2 hash rplcd"); let input = Input { - block_id: BlockId::Pending, - contract_address: contract_address_bytes!(b"pending contract 2 (replaced)"), + block_id: BlockId::PreConfirmed, + contract_address: contract_address_bytes!(b"preconfirmed contract 2 rplcd"), }; let result = get_class_hash_at(context.clone(), input, RPC_VERSION) .await @@ -273,6 +273,7 @@ mod tests { let result = get_class_hash_at(context, input, RPC_VERSION).await; assert_matches!(result, Err(Error::ContractNotFound)); } + use crate::dto::{SerializeForVersion, Serializer}; #[rstest::rstest] @@ -297,28 +298,6 @@ mod tests { crate::assert_json_matches_fixture!(output, version, "class_hash/latest.json"); } - #[rstest::rstest] - #[case::v06(RpcVersion::V06)] - #[case::v07(RpcVersion::V07)] - #[case::v08(RpcVersion::V08)] - #[case::v09(RpcVersion::V09)] - #[tokio::test] - async fn json_rpc_pending(#[case] version: RpcVersion) { - let context = RpcContext::for_tests_with_pending().await; - let input = Input { - block_id: BlockId::Pending, - contract_address: contract_address_bytes!(b"pending contract 0 address"), - }; - - let output = get_class_hash_at(context, input, RPC_VERSION) - .await - .unwrap() - .serialize(Serializer { version }) - .unwrap(); - - crate::assert_json_matches_fixture!(output, version, "class_hash/pending.json"); - } - #[rstest::rstest] #[case::v06(RpcVersion::V06)] #[case::v07(RpcVersion::V07)] @@ -329,7 +308,7 @@ mod tests { let context = RpcContext::for_tests_with_pre_latest_and_pre_confirmed().await; let input = Input { - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, contract_address: contract_address_bytes!(b"prelatest contract 0 address"), }; let r = get_class_hash_at(context.clone(), input, version).await; @@ -343,7 +322,7 @@ mod tests { } let input = Input { - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, contract_address: contract_address_bytes!(b"preconfirmed contract 0 address"), }; let r = get_class_hash_at(context, input, version).await; diff --git a/crates/rpc/src/method/get_compiled_casm.rs b/crates/rpc/src/method/get_compiled_casm.rs index d93a0dca5d..633f235933 100644 --- a/crates/rpc/src/method/get_compiled_casm.rs +++ b/crates/rpc/src/method/get_compiled_casm.rs @@ -90,11 +90,8 @@ pub async fn get_compiled_casm(context: RpcContext, input: Input) -> Result, pub to_block: Option, - pub address: Option, + pub addresses: HashSet, pub keys: Vec>, pub chunk_size: usize, /// Offset, measured in events, which points to the requested chunk pub continuation_token: Option, } +impl EventFilter { + fn get_addresses(&self) -> Vec { + let mut addresses: Vec = self.addresses.iter().cloned().collect(); + addresses.sort(); + addresses + } +} + impl crate::dto::DeserializeForVersion for EventFilter { fn deserialize(value: crate::dto::Value) -> Result { + let version = value.version; value.deserialize_map(|value| { + let raw_addresses = if version >= RpcVersion::V10 { + value.deserialize_optional_array_or_scalar("address", |v| v.deserialize())? + } else { + let mut opt_address = vec![]; + if let Some(addr) = value.deserialize_optional("address")? { + opt_address.push(addr); + } + + opt_address + }; + Ok(Self { from_block: value.deserialize_optional("from_block")?, to_block: value.deserialize_optional("to_block")?, - address: value.deserialize_optional("address")?.map(ContractAddress), + addresses: HashSet::from_iter(raw_addresses.into_iter().map(ContractAddress)), keys: value .deserialize_optional_array("keys", |value| { value.deserialize_array(|value| value.deserialize().map(EventKey)) @@ -97,26 +118,27 @@ pub async fn get_events( input: GetEventsInput, rpc_version: RpcVersion, ) -> Result { - // The [Block::Pending] in ranges makes things quite complicated. This + // The [Block::PreConfirmed] in ranges makes things quite complicated. This // implementation splits the ranges into the following buckets: // - // 1. pending : pending -> query pending only - // 2. pending : non-pending -> return empty result - // 3. non-pending : non-pending -> query db only - // 4. non-pending : pending -> query db and potentially append pending - // events + // 1. pre-confirmed : pre-confirmed -> query pre-confirmed only + // 2. pre-confirmed : non-pre-confirmed -> return empty result + // 3. non-pre-confirmed : non-pre-confirmed -> query db only + // 4. non-pre-confirmed : pre-confirmed -> query db and potentially append + // pending events // // The database query for 3 and 4 is combined into one step. // // 4 requires some additional logic to handle some edge cases: - // a) if from_block_number > pending_block_number -> return empty result + // a) if from_block_number > pre_confirmed_block_number -> return empty result // b) Query database // c) if full page -> return page - // check if there are matching events in the pending block - // and return a continuation token for the pending block - // d) else if empty / partially full -> append events from start of pending - // if there are more pending events return a continuation token - // with the appropriate offset within the pending block + // check if there are matching events in the pre-confirmed block + // and return a continuation token for the pre-confirmed block + // d) else if empty / partially full -> append events from start of + // pre-confirmed + // if there are more pre-confirmed events return a continuation token + // with the appropriate offset within the pre-confirmed block use BlockId::*; @@ -165,26 +187,26 @@ pub async fn get_events( .get(&transaction, rpc_version) .context("Querying pending data")?; - // Replace from/to blocks with `BlockId::Pending` if their numbers match the - // pre-latest/pending block number. + // Replace from/to blocks with `BlockId::PreConfirmed` if their numbers match + // the pre-latest/pre-confirmed block number. let from_block_id = request.from_block.map(|from_id| match from_id { - Number(from) if pending.is_pre_latest_or_pending(from) => Pending, + Number(from) if pending.is_pre_latest_or_pre_confirmed(from) => PreConfirmed, _ => from_id, }); let to_block_id = request.to_block.map(|to_id| match to_id { - Number(to) if pending.is_pre_latest_or_pending(to) => Pending, + Number(to) if pending.is_pre_latest_or_pre_confirmed(to) => PreConfirmed, _ => to_id, }); // Handle the trivial (1), (2) and (4a) cases. match (&from_block_id, &to_block_id) { - (Some(Pending), to) => { - if matches!(to, Some(Pending) | None) { + (Some(PreConfirmed), to) => { + if matches!(to, Some(PreConfirmed) | None) { let (pending_events, pending_ct) = get_pending_events( &pending, request.chunk_size, &request.keys, - &request.address, + &request.addresses, request_ct, )?; return Ok(GetEventsResult { @@ -198,8 +220,8 @@ pub async fn get_events( }); } } - (Some(BlockId::Number(from_block)), Some(BlockId::Pending)) - if from_block > &pending.pending_block_number() => + (Some(Number(from_block)), Some(PreConfirmed)) + if from_block > &pending.pre_confirmed_block_number() => { return Ok(GetEventsResult { events: Vec::new(), @@ -235,7 +257,7 @@ pub async fn get_events( let constraints = pathfinder_storage::EventConstraints { from_block, to_block, - contract_address: request.address, + contract_addresses: request.get_addresses(), keys: request.keys.clone(), page_size: request.chunk_size, offset: requested_offset, @@ -259,7 +281,8 @@ pub async fn get_events( }); // TODO: Verify the added `| None` in review. - let append_from_pending = db_ct.is_none() && matches!(to_block_id, Some(Pending) | None); + let append_from_pending = + db_ct.is_none() && matches!(to_block_id, Some(PreConfirmed) | None); let continuation_token = if append_from_pending { if events.len() < request.chunk_size { @@ -268,7 +291,7 @@ pub async fn get_events( &pending, amount_to_take_from_pending, &request.keys, - &request.address, + &request.addresses, request_ct, )?; events.extend(pending_events); @@ -278,7 +301,7 @@ pub async fn get_events( // events. Return a continuation token for the pending block. let pending_block = pending .pre_latest_block_number() - .unwrap_or_else(|| pending.pending_block_number()); + .unwrap_or_else(|| pending.pre_confirmed_block_number()); Some(ContinuationToken { block_number: pending_block, offset: 0, @@ -309,7 +332,7 @@ fn get_pending_events( pending: &PendingData, max_amount: usize, keys: &[Vec], - address: &Option, + addresses: &HashSet, continuation_token: Option, ) -> Result<(Vec, Option), GetEventsError> { let keys: Vec> = keys @@ -317,7 +340,7 @@ fn get_pending_events( .map(|keys| keys.iter().copied().collect()) .collect(); - let pending_block = pending.pending_block_number(); + let pending_block = pending.pre_confirmed_block_number(); // If we have a continuation token and it points to a pre-latest/pending block, // we use its values. Otherwise we take whatever events we have from pending @@ -326,7 +349,7 @@ fn get_pending_events( Some(ct) if ct.block_number > pending_block => { return Err(GetEventsError::InvalidContinuationToken) } - Some(ct) if pending.is_pre_latest_or_pending(ct.block_number) => { + Some(ct) if pending.is_pre_latest_or_pre_confirmed(ct.block_number) => { (ct.block_number, ct.offset) } _ => ( @@ -346,7 +369,8 @@ fn get_pending_events( start_offset, max_amount, &keys, - address, + addresses, + pre_latest_block.number, ); let taken_from_pre_latest = events.len(); @@ -374,13 +398,14 @@ fn get_pending_events( let amount_to_take = max_amount - taken_from_pre_latest; let pending_events_exhausted = match_and_fill_events( - pending.pending_tx_receipts_and_events(), + pending.pre_confirmed_tx_receipts_and_events(), &mut events, // Continuation token was used on pre-latest block, no offset for pending. 0, amount_to_take, &keys, - address, + addresses, + pending_block, ); if pending_events_exhausted { @@ -398,12 +423,13 @@ fn get_pending_events( _ => { // Fetch from pending/pre-confirmed block only. let pending_events_exhausted = match_and_fill_events( - pending.pending_tx_receipts_and_events(), + pending.pre_confirmed_tx_receipts_and_events(), &mut events, start_offset, max_amount, &keys, - address, + addresses, + pending_block, ); if pending_events_exhausted { @@ -452,7 +478,7 @@ fn map_to_block_to_number( Ok(Some(number)) } - Some(Pending) | Some(Latest) | None => Ok(None), + Some(PreConfirmed) | Some(Latest) | None => Ok(None), } } @@ -486,7 +512,7 @@ fn map_from_block_to_number( Ok(Some(number)) } - Some(Pending) | Some(Latest) => { + Some(PreConfirmed) | Some(Latest) => { let number = tx .block_id(pathfinder_common::BlockId::Latest) .context("Querying latest block number")? @@ -512,7 +538,8 @@ fn match_and_fill_events( skip: usize, max_amount: usize, keys: &[std::collections::HashSet], - address: &Option, + addresses: &HashSet, + block_number: BlockNumber, ) -> bool { let original_len = dst.len(); @@ -526,9 +553,12 @@ fn match_and_fill_events( .enumerate(), ) }) - .filter(|(event, _)| match address { - Some(address) => &event.from_address == address, - None => true, + .filter(|(event, _)| { + if addresses.is_empty() { + true + } else { + addresses.contains(&event.from_address) + } }) .filter(|(event, _)| { if key_filter_is_empty { @@ -553,7 +583,7 @@ fn match_and_fill_events( keys: event.keys.clone(), from_address: event.from_address, block_hash: None, - block_number: None, + block_number: Some(block_number), transaction_hash: tx_info.0, transaction_index: tx_info.1, event_index: EventIndex(idx as u64), @@ -688,6 +718,7 @@ impl SerializeForVersion for GetEventsResult { #[cfg(test)] mod tests { use pathfinder_common::macro_prelude::*; + use pathfinder_crypto::Felt; use pathfinder_storage::test_utils; use pretty_assertions_sorted::assert_eq; use serde_json::json; @@ -696,6 +727,17 @@ mod tests { use crate::dto::DeserializeForVersion; use crate::RpcVersion; + fn make_contract_address_filter(addr: &str) -> HashSet { + let f = Felt::from_hex_str(addr).expect("test address to be valid"); + wrap_contract_address_filter(ContractAddress(f)) + } + + fn wrap_contract_address_filter(addr: ContractAddress) -> HashSet { + let mut hs = HashSet::new(); + hs.insert(addr); + hs + } + #[rstest::rstest] #[case::positional_with_optionals(json!([{ "from_block":{"block_number":0}, @@ -719,7 +761,7 @@ mod tests { EventFilter { from_block: Some(BlockId::Number(BlockNumber::new_or_panic(0))), to_block: Some(BlockId::Latest), - address: Some(contract_address!("0x1")), + addresses: make_contract_address_filter("0x1"), keys: vec![vec![event_key!("0x2")], vec![]], chunk_size: 3, continuation_token: Some("4".to_string()), @@ -737,6 +779,58 @@ mod tests { assert_eq!(input, expected); } + #[test] + fn parsing_single_address() { + let input = json!({ + "filter": { + "from_block": {"block_number": 0}, + "to_block": {"block_number": 1000}, + "address": "0x17c378e4fa718fd3405324eee83c5c7c515d72010fb30977b08b84b0fa217a9", + "chunk_size": 1024 + } + }); + + let filter = EventFilter { + from_block: Some(BlockId::Number(BlockNumber::new_or_panic(0))), + to_block: Some(BlockId::Number(BlockNumber::new_or_panic(1000))), + addresses: make_contract_address_filter( + "0x17c378e4fa718fd3405324eee83c5c7c515d72010fb30977b08b84b0fa217a9", + ), + chunk_size: 1024, + ..Default::default() + }; + let expected = GetEventsInput { filter }; + + let input = + GetEventsInput::deserialize(crate::dto::Value::new(input, RpcVersion::V10)).unwrap(); + assert_eq!(input, expected); + } + + #[rstest::rstest] + #[case::positional(json!([{ + "address": ["0x10", "0x20"], + "chunk_size": 5 + }]))] + #[case::named(json!({"filter":{ + "address": ["0x20", "0x10"], + "chunk_size": 5 + }}))] + fn parsing_multiple_addresses(#[case] input: serde_json::Value) { + let mut addresses = HashSet::new(); + addresses.insert(contract_address!("0x10")); + addresses.insert(contract_address!("0x20")); + let filter = EventFilter { + addresses, + chunk_size: 5, + ..Default::default() + }; + let expected = GetEventsInput { filter }; + + let input = + GetEventsInput::deserialize(crate::dto::Value::new(input, RpcVersion::V10)).unwrap(); + assert_eq!(input, expected); + } + #[test] fn continuation_token() { use assert_matches::assert_matches; @@ -824,7 +918,7 @@ mod tests { filter: EventFilter { from_block: Some(expected_event.block_number.unwrap().into()), to_block: Some(expected_event.block_number.unwrap().into()), - address: Some(expected_event.from_address), + addresses: wrap_contract_address_filter(expected_event.from_address), // we're using a key which is present in _all_ events keys: vec![vec![], vec![event_key!("0xdeadbeef")]], chunk_size: test_utils::NUM_EVENTS, @@ -1063,11 +1157,11 @@ mod tests { #[tokio::test] async fn backward_range() { - let context = RpcContext::for_tests_with_pending().await; + let context = RpcContext::for_tests_with_pre_confirmed().await; let input = GetEventsInput { filter: EventFilter { - from_block: Some(BlockId::Pending), + from_block: Some(BlockId::PreConfirmed), to_block: Some(BlockId::Latest), chunk_size: 100, ..Default::default() @@ -1079,7 +1173,7 @@ mod tests { #[tokio::test] async fn all_events() { - let context = RpcContext::for_tests_with_pending().await; + let context = RpcContext::for_tests_with_pre_confirmed().await; let mut input = GetEventsInput { filter: EventFilter { @@ -1094,8 +1188,8 @@ mod tests { .unwrap(); assert_eq!(events.events.len(), 1); - input.filter.from_block = Some(BlockId::Pending); - input.filter.to_block = Some(BlockId::Pending); + input.filter.from_block = Some(BlockId::PreConfirmed); + input.filter.to_block = Some(BlockId::PreConfirmed); let pending_events = get_events(context.clone(), input.clone(), RPC_VERSION) .await .unwrap(); @@ -1118,95 +1212,11 @@ mod tests { #[tokio::test] async fn paging() { - let context = RpcContext::for_tests_with_pending().await; - - let mut input = GetEventsInput { - filter: EventFilter { - to_block: Some(BlockId::Pending), - chunk_size: 1024, - ..Default::default() - }, - }; - - // Block 0 has a single event. Blocks, 1 and 2 have no events. Pending block (3 - // in this case) has 3 events. - let all = get_events(context.clone(), input.clone(), RPC_VERSION) - .await - .unwrap() - .events; - - // Check edge case where the page is full with events from the DB but this was - // the last page from the DB -- should continue from offset 0 of the - // pending block next time - input.filter.chunk_size = 1; - input.filter.continuation_token = None; - let result = get_events(context.clone(), input.clone(), RPC_VERSION) - .await - .unwrap(); - assert_eq!(result.events, &all[0..1]); - assert_eq!(result.continuation_token, Some("3-0".to_string())); - - // Page includes a DB event and an event from the pending block, but there are - // more pending events for the next page - input.filter.chunk_size = 2; - input.filter.continuation_token = None; - let result = get_events(context.clone(), input.clone(), RPC_VERSION) - .await - .unwrap(); - assert_eq!(result.events, &all[0..2]); - assert_eq!(result.continuation_token, Some("3-1".to_string())); - - input.filter.chunk_size = 1; - input.filter.continuation_token = result.continuation_token; - let result = get_events(context.clone(), input.clone(), RPC_VERSION) - .await - .unwrap(); - assert_eq!(result.events, &all[2..3]); - assert_eq!(result.continuation_token, Some("3-2".to_string())); - - input.filter.chunk_size = 100; // Only a single event remains though - input.filter.continuation_token = result.continuation_token; - let result = get_events(context.clone(), input.clone(), RPC_VERSION) - .await - .unwrap(); - assert_eq!(result.events, &all[3..4]); - assert_eq!(result.continuation_token, None); - - // continuing from a page that does exist, should return all events (even from - // pending) - input.filter.chunk_size = 123; - input.filter.continuation_token = Some("0-0".to_string()); - let result = get_events(context.clone(), input.clone(), RPC_VERSION) - .await - .unwrap(); - assert_eq!(result.events, all); - assert_eq!(result.continuation_token, None); - - // nonexistent page: offset too large - input.filter.chunk_size = 123; // Does not matter - input.filter.continuation_token = Some("3-3".to_string()); // Points to after the last event - let result = get_events(context.clone(), input.clone(), RPC_VERSION) - .await - .unwrap(); - assert_eq!(result.events, &[]); - assert_eq!(result.continuation_token, None); - - // nonexistent page: block number - input.filter.chunk_size = 123; // Does not matter - input.filter.continuation_token = Some("4-1".to_string()); // Points to after the last event - let error = get_events(context.clone(), input, RPC_VERSION) - .await - .unwrap_err(); - assert_eq!(error, GetEventsError::InvalidContinuationToken); - } - - #[tokio::test] - async fn paging_with_pre_latest_and_pre_confirmed() { let context = RpcContext::for_tests_with_pre_latest_and_pre_confirmed().await; let mut input = GetEventsInput { filter: EventFilter { - to_block: Some(BlockId::Pending), + to_block: Some(BlockId::PreConfirmed), chunk_size: 1024, ..Default::default() }, @@ -1310,17 +1320,17 @@ mod tests { } #[tokio::test] - async fn paging_with_no_more_matching_events_in_pending() { - let context = RpcContext::for_tests_with_pending().await; + async fn paging_with_no_more_matching_events_in_pre_confirmed() { + let context = RpcContext::for_tests_with_pre_confirmed().await; let mut input = GetEventsInput { filter: EventFilter { from_block: None, - to_block: Some(BlockId::Pending), - address: None, + to_block: Some(BlockId::PreConfirmed), + addresses: HashSet::new(), keys: vec![vec![ event_key_bytes!(b"event 0 key"), - event_key_bytes!(b"pending key 2"), + event_key_bytes!(b"preconfirmed key 2"), ]], chunk_size: 1024, continuation_token: None, @@ -1344,13 +1354,13 @@ mod tests { #[tokio::test] async fn key_matching() { - let context = RpcContext::for_tests_with_pending().await; + let context = RpcContext::for_tests_with_pre_confirmed().await; let mut input = GetEventsInput { filter: EventFilter { - from_block: Some(BlockId::Pending), - to_block: Some(BlockId::Pending), - address: None, + from_block: Some(BlockId::PreConfirmed), + to_block: Some(BlockId::PreConfirmed), + addresses: HashSet::new(), keys: vec![], chunk_size: 1024, continuation_token: None, @@ -1363,14 +1373,14 @@ mod tests { .events; assert_eq!(all.len(), 3); - input.filter.keys = vec![vec![event_key_bytes!(b"pending key 2")]]; + input.filter.keys = vec![vec![event_key_bytes!(b"preconfirmed key 2")]]; let events = get_events(context.clone(), input.clone(), RPC_VERSION) .await .unwrap() .events; assert_eq!(events, &all[2..3]); - input.filter.keys = vec![vec![], vec![event_key_bytes!(b"second pending key")]]; + input.filter.keys = vec![vec![], vec![event_key_bytes!(b"second preconfirmed key")]]; let events = get_events(context.clone(), input.clone(), RPC_VERSION) .await .unwrap() @@ -1379,13 +1389,13 @@ mod tests { } #[tokio::test] - async fn from_block_past_pending() { - let context = RpcContext::for_tests_with_pending().await; + async fn from_block_past_pre_confirmed() { + let context = RpcContext::for_tests_with_pre_confirmed().await; let input = GetEventsInput { filter: EventFilter { from_block: Some(BlockId::Number(BlockNumber::new_or_panic(4))), - to_block: Some(BlockId::Pending), + to_block: Some(BlockId::PreConfirmed), chunk_size: 100, ..Default::default() }, @@ -1395,12 +1405,12 @@ mod tests { } #[tokio::test] - async fn from_block_pending_to_block_none() { - let context = RpcContext::for_tests_with_pending().await; + async fn from_block_pre_confirmed_to_block_none() { + let context = RpcContext::for_tests_with_pre_confirmed().await; let input = GetEventsInput { filter: EventFilter { - from_block: Some(BlockId::Pending), + from_block: Some(BlockId::PreConfirmed), to_block: None, chunk_size: 100, ..Default::default() @@ -1411,7 +1421,7 @@ mod tests { } #[tokio::test] - async fn pending_block_by_number_returns_only_pending_data() { + async fn pre_confirmed_block_by_number_returns_only_pending_data() { let context = RpcContext::for_tests_with_pre_latest_and_pre_confirmed().await; const PRE_LATEST_BLOCK: BlockNumber = BlockNumber::new_or_panic(3); @@ -1429,8 +1439,13 @@ mod tests { .await .unwrap(); assert!(!result.events.is_empty()); - // Events from pending data do not have a block number/hash. - assert!(result.events.iter().all(|e| e.block_number.is_none())); + // Events from pending data have a speculative block number but no + // hash. + assert!(result.events.iter().all(|e| e.block_hash.is_none())); + assert!(result.events.iter().all(|e| { + e.block_number == Some(PRE_LATEST_BLOCK) + || e.block_number == Some(PRE_CONFIRMED_BLOCK) + })); input.filter.from_block = Some(BlockId::Number(PRE_CONFIRMED_BLOCK)); input.filter.to_block = None; @@ -1439,16 +1454,72 @@ mod tests { .await .unwrap(); assert!(!result.events.is_empty()); - // Events from pending data do not have a block number/hash. - assert!(result.events.iter().all(|e| e.block_number.is_none())); + assert!(result.events.iter().all(|e| e.block_hash.is_none())); + assert!(result.events.iter().all(|e| { + e.block_number == Some(PRE_LATEST_BLOCK) + || e.block_number == Some(PRE_CONFIRMED_BLOCK) + })); input.filter.from_block = Some(BlockId::Number(PRE_LATEST_BLOCK)); input.filter.to_block = Some(BlockId::Number(PRE_CONFIRMED_BLOCK)); let result = get_events(context, input, RPC_VERSION).await.unwrap(); assert!(!result.events.is_empty()); - // Events from pending data do not have a block number/hash. - assert!(result.events.iter().all(|e| e.block_number.is_none())); + assert!(result.events.iter().all(|e| e.block_hash.is_none())); + assert!(result.events.iter().all(|e| { + e.block_number == Some(PRE_LATEST_BLOCK) + || e.block_number == Some(PRE_CONFIRMED_BLOCK) + })); + } + + #[tokio::test] + async fn pending_events_have_block_number_but_no_block_hash() { + let context = RpcContext::for_tests_with_pre_latest_and_pre_confirmed().await; + + const PRE_LATEST_BLOCK: BlockNumber = BlockNumber::new_or_panic(3); + const PRE_CONFIRMED_BLOCK: BlockNumber = BlockNumber::new_or_panic(4); + + // Pre-confirmed only. + let input = GetEventsInput { + filter: EventFilter { + from_block: Some(BlockId::PreConfirmed), + to_block: Some(BlockId::PreConfirmed), + chunk_size: 1024, + ..Default::default() + }, + }; + let result = get_events(context.clone(), input, RPC_VERSION) + .await + .unwrap(); + assert!(!result.events.is_empty()); + assert!(result + .events + .iter() + .all(|e| e.block_number.is_some() && e.block_hash.is_none())); + + // All pending events (from pre-latest through pre-confirmed) have + // block_number set and block_hash unset. + let input = GetEventsInput { + filter: EventFilter { + from_block: Some(BlockId::Number(PRE_LATEST_BLOCK)), + to_block: Some(BlockId::Number(PRE_CONFIRMED_BLOCK)), + chunk_size: 1024, + ..Default::default() + }, + }; + let result = get_events(context, input, RPC_VERSION).await.unwrap(); + assert!(!result.events.is_empty()); + assert!(result.events.iter().all(|e| e.block_hash.is_none())); + let has_pre_latest = result + .events + .iter() + .any(|e| e.block_number == Some(PRE_LATEST_BLOCK)); + let has_pre_confirmed = result + .events + .iter() + .any(|e| e.block_number == Some(PRE_CONFIRMED_BLOCK)); + assert!(has_pre_latest); + assert!(has_pre_confirmed); } } } diff --git a/crates/rpc/src/method/get_messages_status.rs b/crates/rpc/src/method/get_messages_status.rs index f244c97cc5..5afa1c5a52 100644 --- a/crates/rpc/src/method/get_messages_status.rs +++ b/crates/rpc/src/method/get_messages_status.rs @@ -1,6 +1,5 @@ use anyhow::Context; use pathfinder_common::{L1TransactionHash, TransactionHash}; -use pathfinder_ethereum::EthereumApi; use crate::context::RpcContext; use crate::dto::TxnExecutionStatus; diff --git a/crates/rpc/src/method/get_nonce.rs b/crates/rpc/src/method/get_nonce.rs index c0000023ca..35a3a62092 100644 --- a/crates/rpc/src/method/get_nonce.rs +++ b/crates/rpc/src/method/get_nonce.rs @@ -179,35 +179,6 @@ mod tests { assert_eq!(nonce.0, contract_nonce!("0x10")); } - #[tokio::test] - async fn pending() { - let context = RpcContext::for_tests_with_pending().await; - - // This contract is created in `setup_storage` and has a nonce set in the - // pending block. - let input = Input { - block_id: BlockId::Pending, - contract_address: contract_address_bytes!(b"contract 1"), - }; - let nonce = get_nonce(context, input, RPC_VERSION).await.unwrap(); - assert_eq!(nonce.0, contract_nonce_bytes!(b"pending nonce")); - } - - #[tokio::test] - async fn pending_defaults_to_latest() { - let context = RpcContext::for_tests(); - - // This contract is created in `setup_storage` and has a nonce set to 0x1, and - // is not overwritten in pending (since this test does not specify any - // pending data). - let input = Input { - block_id: BlockId::Pending, - contract_address: contract_address_bytes!(b"contract 0"), - }; - let nonce = get_nonce(context, input, RPC_VERSION).await.unwrap(); - assert_eq!(nonce.0, contract_nonce!("0x1")); - } - #[tokio::test] async fn pre_confirmed() { let context = RpcContext::for_tests_with_pre_confirmed().await; @@ -215,7 +186,7 @@ mod tests { // This contract is created in `setup_storage` and has a nonce set in the // pending block. let input = Input { - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, contract_address: contract_address_bytes!(b"contract 1"), }; let nonce = get_nonce(context.clone(), input.clone(), RpcVersion::V09) @@ -237,7 +208,7 @@ mod tests { // This contract is created during storage setup and has a nonce set in the // pre-latest block. let input = Input { - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, contract_address: contract_address_bytes!(b"prelatest contract 1 address"), }; let nonce = get_nonce(context.clone(), input.clone(), RpcVersion::V09) @@ -252,6 +223,21 @@ mod tests { assert_matches!(err, Error::ContractNotFound); } + #[tokio::test] + async fn pre_confirmed_defaults_to_latest() { + let context = RpcContext::for_tests(); + + // This contract is created in `setup_storage` and has a nonce set to 0x1, and + // is not overwritten in pre confirmed (since this test does not specify any + // pending data). + let input = Input { + block_id: BlockId::PreConfirmed, + contract_address: contract_address_bytes!(b"contract 0"), + }; + let nonce = get_nonce(context, input, RPC_VERSION).await.unwrap(); + assert_eq!(nonce.0, contract_nonce!("0x1")); + } + #[tokio::test] async fn defaults_to_zero() { let context = RpcContext::for_tests(); @@ -268,14 +254,14 @@ mod tests { } #[tokio::test] - async fn contract_deployed_in_pending_defaults_to_zero() { - let context = RpcContext::for_tests_with_pending().await; + async fn contract_deployed_in_pre_confirmed_defaults_to_zero() { + let context = RpcContext::for_tests_with_pre_confirmed().await; - // This contract is deployed in the pending block but does not have a nonce - // update. + // This contract is deployed in the pre-confirmed block but does not have a + // nonce update. let input = Input { - block_id: BlockId::Pending, - contract_address: contract_address_bytes!(b"pending contract 0 address"), + block_id: BlockId::PreConfirmed, + contract_address: contract_address_bytes!(b"preconfirmed contract 0 address"), }; let nonce = get_nonce(context, input, RPC_VERSION).await.unwrap(); assert_eq!(nonce.0, ContractNonce::ZERO); diff --git a/crates/rpc/src/method/get_state_update.rs b/crates/rpc/src/method/get_state_update.rs index 76691c9f6a..e77fad4ddc 100644 --- a/crates/rpc/src/method/get_state_update.rs +++ b/crates/rpc/src/method/get_state_update.rs @@ -1,7 +1,8 @@ +use std::collections::HashSet; use std::sync::Arc; use anyhow::Context; -use pathfinder_common::StateUpdate; +use pathfinder_common::{ContractAddress, StateUpdate}; use crate::types::BlockId; use crate::{dto, RpcContext, RpcVersion}; @@ -9,13 +10,26 @@ use crate::{dto, RpcContext, RpcVersion}; #[derive(Clone, Debug, PartialEq, Eq)] pub struct Input { block_id: BlockId, + contract_addresses: HashSet, } impl crate::dto::DeserializeForVersion for Input { fn deserialize(value: dto::Value) -> Result { + let rpc_version = value.version; value.deserialize_map(|value| { + let block_id = value.deserialize("block_id")?; + let addresses = if rpc_version >= RpcVersion::V10 { + value + .deserialize_optional_array("contract_addresses", |value| { + value.deserialize().map(ContractAddress) + })? + .unwrap_or_default() + } else { + Vec::default() + }; Ok(Self { - block_id: value.deserialize("block_id")?, + block_id, + contract_addresses: HashSet::from_iter(addresses), }) }) } @@ -54,12 +68,16 @@ pub async fn get_state_update( let tx = db.transaction().context("Creating database transaction")?; if input.block_id.is_pending() { - let state_update = context + let mut state_update = context .pending_data .get(&tx, rpc_version) .context("Query pending data")? - .pending_state_update(); - + .pre_confirmed_state_update(); + if !input.contract_addresses.is_empty() { + let mut own_state_update = state_update.as_ref().clone(); + filter_state_update_contracts(&mut own_state_update, &input.contract_addresses); + state_update = Arc::new(own_state_update); + } return Ok(Output::Pending(state_update)); } @@ -83,10 +101,13 @@ pub async fn get_state_update( } } - let state_update = tx + let mut state_update = tx .state_update(block_id) .context("Fetching state diff")? .ok_or(Error::BlockNotFound)?; + if !input.contract_addresses.is_empty() { + filter_state_update_contracts(&mut state_update, &input.contract_addresses); + } Ok(Output::Full(Box::new(state_update))) }); @@ -94,284 +115,16 @@ pub async fn get_state_update( jh.await.context("Database read panic or shutting down")? } -pub(crate) mod types { - use pathfinder_common::{ - CasmHash, - ClassHash, - ContractAddress, - ContractNonce, - SierraHash, - StorageAddress, - StorageValue, - }; - - use crate::felt::{RpcFelt, RpcFelt251}; - - /// L2 state diff. - #[derive(Clone, Debug, PartialEq, Eq, Default)] - pub struct StateDiff { - pub storage_diffs: Vec, - pub deprecated_declared_classes: Vec, - pub declared_classes: Vec, - pub deployed_contracts: Vec, - pub replaced_classes: Vec, - pub nonces: Vec, - } - - impl From for StateDiff { - fn from(value: pathfinder_executor::types::StateDiff) -> Self { - Self { - storage_diffs: value - .storage_diffs - .into_iter() - .map(|(address, diff)| StorageDiff { - address, - storage_entries: diff.into_iter().map(Into::into).collect(), - }) - .collect(), - deprecated_declared_classes: value - .deprecated_declared_classes - .into_iter() - .collect(), - declared_classes: value.declared_classes.into_iter().map(Into::into).collect(), - deployed_contracts: value - .deployed_contracts - .into_iter() - .map(Into::into) - .collect(), - replaced_classes: value.replaced_classes.into_iter().map(Into::into).collect(), - nonces: value - .nonces - .into_iter() - .map(|(contract_address, nonce)| Nonce { - contract_address, - nonce, - }) - .collect(), - } - } - } - - impl crate::dto::SerializeForVersion for StateDiff { - fn serialize( - &self, - serializer: crate::dto::Serializer, - ) -> Result { - let mut serializer = serializer.serialize_struct()?; - - serializer.serialize_iter( - "storage_diffs", - self.storage_diffs.len(), - &mut self.storage_diffs.clone().into_iter(), - )?; - serializer.serialize_iter( - "deprecated_declared_classes", - self.deprecated_declared_classes.len(), - &mut self - .deprecated_declared_classes - .clone() - .into_iter() - .map(|x| RpcFelt(x.0)), - )?; - serializer.serialize_iter( - "declared_classes", - self.declared_classes.len(), - &mut self.declared_classes.clone().into_iter(), - )?; - serializer.serialize_iter( - "deployed_contracts", - self.deployed_contracts.len(), - &mut self.deployed_contracts.clone().into_iter(), - )?; - serializer.serialize_iter( - "replaced_classes", - self.replaced_classes.len(), - &mut self.replaced_classes.clone().into_iter(), - )?; - serializer.serialize_iter( - "nonces", - self.nonces.len(), - &mut self.nonces.clone().into_iter(), - )?; - - serializer.end() - } - } - - /// L2 storage diff of a contract. - #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] - pub struct StorageDiff { - pub address: ContractAddress, - pub storage_entries: Vec, - } - - impl crate::dto::SerializeForVersion for StorageDiff { - fn serialize( - &self, - serializer: crate::dto::Serializer, - ) -> Result { - let mut serializer = serializer.serialize_struct()?; - - serializer.serialize_field("address", &RpcFelt251(RpcFelt(self.address.0)))?; - serializer.serialize_iter( - "storage_entries", - self.storage_entries.len(), - &mut self.storage_entries.clone().into_iter(), - )?; - - serializer.end() - } - } - - /// A key-value entry of a storage diff. - #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] - pub struct StorageEntry { - pub key: StorageAddress, - pub value: StorageValue, - } - - impl From for StorageEntry { - fn from(d: starknet_gateway_types::reply::state_update::StorageDiff) -> Self { - Self { - key: d.key, - value: d.value, - } - } - } - - impl From for StorageEntry { - fn from(d: pathfinder_executor::types::StorageDiff) -> Self { - Self { - key: d.key, - value: d.value, - } - } - } - - impl crate::dto::SerializeForVersion for StorageEntry { - fn serialize( - &self, - serializer: crate::dto::Serializer, - ) -> Result { - let mut serializer = serializer.serialize_struct()?; - - serializer.serialize_field("key", &RpcFelt(self.key.0))?; - serializer.serialize_field("value", &RpcFelt(self.value.0))?; - - serializer.end() - } - } - - /// L2 state diff declared Sierra class item. - #[derive(Clone, Debug, PartialEq, Eq)] - pub struct DeclaredSierraClass { - pub class_hash: SierraHash, - pub compiled_class_hash: CasmHash, - } - - impl From for DeclaredSierraClass { - fn from(d: pathfinder_executor::types::DeclaredSierraClass) -> Self { - Self { - class_hash: d.class_hash, - compiled_class_hash: d.compiled_class_hash, - } - } - } - - impl crate::dto::SerializeForVersion for DeclaredSierraClass { - fn serialize( - &self, - serializer: crate::dto::Serializer, - ) -> Result { - let mut serializer = serializer.serialize_struct()?; - - serializer.serialize_field("class_hash", &RpcFelt(self.class_hash.0))?; - serializer - .serialize_field("compiled_class_hash", &RpcFelt(self.compiled_class_hash.0))?; - - serializer.end() - } - } - - /// L2 state diff deployed contract item. - #[derive(Clone, Debug, PartialEq, Eq)] - pub struct DeployedContract { - pub address: ContractAddress, - pub class_hash: ClassHash, - } - impl From for DeployedContract { - fn from(d: pathfinder_executor::types::DeployedContract) -> Self { - Self { - address: d.address, - class_hash: d.class_hash, - } - } - } - - impl crate::dto::SerializeForVersion for DeployedContract { - fn serialize( - &self, - serializer: crate::dto::Serializer, - ) -> Result { - let mut serializer = serializer.serialize_struct()?; - - serializer.serialize_field("address", &RpcFelt(self.address.0))?; - serializer.serialize_field("class_hash", &RpcFelt(self.class_hash.0))?; - - serializer.end() - } - } - - /// L2 state diff replaced class item. - #[derive(Clone, Debug, PartialEq, Eq)] - pub struct ReplacedClass { - pub contract_address: ContractAddress, - pub class_hash: ClassHash, - } - - impl From for ReplacedClass { - fn from(d: pathfinder_executor::types::ReplacedClass) -> Self { - Self { - contract_address: d.contract_address, - class_hash: d.class_hash, - } - } - } - - impl crate::dto::SerializeForVersion for ReplacedClass { - fn serialize( - &self, - serializer: crate::dto::Serializer, - ) -> Result { - let mut serializer = serializer.serialize_struct()?; - - serializer.serialize_field("contract_address", &RpcFelt(self.contract_address.0))?; - serializer.serialize_field("class_hash", &RpcFelt(self.class_hash.0))?; - - serializer.end() - } - } - - /// L2 state diff nonce item. - #[derive(Clone, Debug, PartialEq, Eq)] - pub struct Nonce { - pub contract_address: ContractAddress, - pub nonce: ContractNonce, - } - - impl crate::dto::SerializeForVersion for Nonce { - fn serialize( - &self, - serializer: crate::dto::Serializer, - ) -> Result { - let mut serializer = serializer.serialize_struct()?; - - serializer.serialize_field("contract_address", &RpcFelt(self.contract_address.0))?; - serializer.serialize_field("nonce", &RpcFelt(self.nonce.0))?; - - serializer.end() - } - } +fn filter_state_update_contracts( + state_update: &mut StateUpdate, + sought_addresses: &HashSet, +) { + state_update + .contract_updates + .retain(|addr, _| sought_addresses.contains(addr)); + state_update + .system_contract_updates + .retain(|addr, _| sought_addresses.contains(addr)); } #[cfg(test)] @@ -406,8 +159,8 @@ mod tests { } #[rstest::rstest] - #[case::pending_by_position(json!(["pending"]), BlockId::Pending)] - #[case::pending_by_name(json!({"block_id": "pending"}), BlockId::Pending)] + #[case::pending_by_position(json!(["pending"]), BlockId::PreConfirmed)] + #[case::pending_by_name(json!({"block_id": "pending"}), BlockId::PreConfirmed)] #[case::latest_by_position(json!(["latest"]), BlockId::Latest)] #[case::latest_by_name(json!({"block_id": "latest"}), BlockId::Latest)] #[case::number_by_position(json!([{"block_number":123}]), BlockNumber::new_or_panic(123).into())] @@ -417,7 +170,29 @@ mod tests { fn input_parsing(#[case] input: serde_json::Value, #[case] block_id: BlockId) { let input = Input::deserialize(crate::dto::Value::new(input, RpcVersion::V07)).unwrap(); - let expected = Input { block_id }; + let expected = Input { + block_id, + contract_addresses: HashSet::default(), + }; + + assert_eq!(input, expected); + } + + #[rstest::rstest] + #[case::by_position(json!(["latest", ["0x42"]]), BlockId::Latest)] + #[case::by_name(json!({"block_id": "latest", "contract_addresses": ["0x42"]}), BlockId::Latest)] + fn input_parsing_contract_addresses( + #[case] input: serde_json::Value, + #[case] block_id: BlockId, + ) { + let input = Input::deserialize(crate::dto::Value::new(input, RpcVersion::V10)).unwrap(); + + let mut contract_addresses = HashSet::new(); + contract_addresses.insert(contract_address!("0x42")); + let expected = Input { + block_id, + contract_addresses, + }; assert_eq!(input, expected); } @@ -520,6 +295,7 @@ mod tests { ctx, Input { block_id: BlockId::Latest, + contract_addresses: HashSet::default(), }, RPC_VERSION, ) @@ -530,6 +306,34 @@ mod tests { assert_eq!(*result, in_storage.pop().unwrap()); } + #[tokio::test] + async fn latest_with_filter() { + let (mut in_storage, ctx) = context_with_state_updates(); + + let full_update = in_storage.pop().unwrap(); + let contract_addresses: Vec = full_update + .contract_updates + .iter() + .take(1) + .map(|(k, _v)| *k) + .collect(); + let exp_len = contract_addresses.len(); + // the update is not filtered if contract_addresses is empty + let maybe_partial_update = get_state_update( + ctx, + Input { + block_id: BlockId::Latest, + contract_addresses: HashSet::from_iter(contract_addresses), + }, + RpcVersion::V10, + ) + .await + .unwrap() + .unwrap_full(); + + assert_eq!(maybe_partial_update.contract_updates.len(), exp_len); + } + #[tokio::test] async fn by_number() { let (in_storage, ctx) = context_with_state_updates(); @@ -538,6 +342,7 @@ mod tests { ctx, Input { block_id: BlockId::Number(BlockNumber::GENESIS), + contract_addresses: HashSet::default(), }, RPC_VERSION, ) @@ -556,6 +361,7 @@ mod tests { ctx, Input { block_id: BlockId::Hash(in_storage[1].block_hash), + contract_addresses: HashSet::default(), }, RPC_VERSION, ) @@ -574,6 +380,7 @@ mod tests { ctx, Input { block_id: BlockId::Number(BlockNumber::MAX), + contract_addresses: HashSet::default(), }, RPC_VERSION, ) @@ -590,6 +397,7 @@ mod tests { ctx, Input { block_id: BlockId::Hash(block_hash_bytes!(b"non-existent")), + contract_addresses: HashSet::default(), }, RPC_VERSION, ) @@ -598,31 +406,18 @@ mod tests { assert_eq!(result, Err(Error::BlockNotFound)); } - #[tokio::test] - async fn pending() { - let context = RpcContext::for_tests_with_pending().await; - let input = Input { - block_id: BlockId::Pending, - }; - - let expected = context.pending_data.get_unchecked().pending_state_update(); - - let result = get_state_update(context, input, RPC_VERSION) - .await - .unwrap() - .unwrap_pending(); - - assert_eq!(result, expected); - } - #[tokio::test] async fn pre_confirmed() { let context = RpcContext::for_tests_with_pre_confirmed().await; let input = Input { - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, + contract_addresses: HashSet::default(), }; - let expected = context.pending_data.get_unchecked().pending_state_update(); + let expected = context + .pending_data + .get_unchecked() + .pre_confirmed_state_update(); let result = get_state_update(context.clone(), input.clone(), RpcVersion::V09) .await diff --git a/crates/rpc/src/method/get_storage_at.rs b/crates/rpc/src/method/get_storage_at.rs index 4a5de05bf0..ba4d902203 100644 --- a/crates/rpc/src/method/get_storage_at.rs +++ b/crates/rpc/src/method/get_storage_at.rs @@ -1,7 +1,14 @@ use anyhow::Context; -use pathfinder_common::{ContractAddress, StorageAddress, StorageValue}; +use pathfinder_common::{ + BlockNumber, + ContractAddress, + FoundStorageValue, + StorageAddress, + StorageValue, +}; use crate::context::RpcContext; +use crate::dto::{StorageResponseFlag, StorageResponseFlags}; use crate::types::BlockId; use crate::RpcVersion; @@ -10,22 +17,39 @@ pub struct Input { pub contract_address: ContractAddress, pub key: StorageAddress, pub block_id: BlockId, + pub response_flags: StorageResponseFlags, } impl crate::dto::DeserializeForVersion for Input { fn deserialize(value: crate::dto::Value) -> Result { + let rpc_version = value.version; value.deserialize_map(|value| { + let contract_address = value.deserialize("contract_address").map(ContractAddress)?; + let key = value.deserialize("key").map(StorageAddress)?; + let block_id = value.deserialize("block_id")?; + let response_flags = if rpc_version >= RpcVersion::V10 { + value + .deserialize_optional("response_flags")? + .unwrap_or_default() + } else { + StorageResponseFlags::default() + }; Ok(Self { - contract_address: value.deserialize("contract_address").map(ContractAddress)?, - key: value.deserialize("key").map(StorageAddress)?, - block_id: value.deserialize("block_id")?, + contract_address, + key, + block_id, + response_flags, }) }) } } #[derive(Debug)] -pub struct Output(StorageValue); +pub struct Output { + value: StorageValue, + last_update_block: BlockNumber, + include_last_update_block: bool, +} crate::error::generate_rpc_error_subset!(Error: ContractNotFound, BlockNotFound); @@ -38,6 +62,13 @@ pub async fn get_storage_at( let span = tracing::Span::current(); let jh = util::task::spawn_blocking(move |_| { let _g = span.enter(); + + let include_last_update_block = input + .response_flags + .0 + .iter() + .any(|flag| flag == &StorageResponseFlag::IncludeLastUpdateBlock); + let mut db = context .storage .connection() @@ -46,14 +77,21 @@ pub async fn get_storage_at( let tx = db.transaction().context("Creating database transaction")?; if input.block_id.is_pending() { - let storage_value = context + let pending_data = context .pending_data .get(&tx, rpc_version) - .context("Querying pending data")? - .find_storage_value(input.contract_address, input.key); - - if let Some(value) = storage_value { - return Ok(Output(value)); + .context("Querying pending data")?; + let opt_found = pending_data.find_storage_value(input.contract_address, input.key); + if let Some(found) = opt_found { + let (value, last_update_block) = match found { + FoundStorageValue::Zero => (StorageValue::ZERO, BlockNumber::new_or_panic(0)), + FoundStorageValue::Set(v) => (v, pending_data.pre_confirmed_block_number()), + }; + return Ok(Output { + value, + last_update_block, + include_last_update_block, + }); } } @@ -65,15 +103,22 @@ pub async fn get_storage_at( return Err(Error::BlockNotFound); } - let value = tx - .storage_value(block_id, input.contract_address, input.key) + let opt_pair = tx + .storage_value_with_block(block_id, input.contract_address, input.key) .context("Querying storage value")?; - - match value { - Some(value) => Ok(Output(value)), + match opt_pair { + Some(pair) => Ok(Output { + value: pair.0, + last_update_block: pair.1, + include_last_update_block, + }), None => { if tx.contract_exists(input.contract_address, block_id)? { - Ok(Output(StorageValue::ZERO)) + Ok(Output { + value: StorageValue::ZERO, + last_update_block: BlockNumber::new_or_panic(0), + include_last_update_block, + }) } else { Err(Error::ContractNotFound) } @@ -89,7 +134,14 @@ impl crate::dto::SerializeForVersion for Output { &self, serializer: crate::dto::Serializer, ) -> Result { - serializer.serialize(&self.0) + if self.include_last_update_block { + let mut serializer = serializer.serialize_struct()?; + serializer.serialize_field("value", &self.value)?; + serializer.serialize_field("last_update_block", &self.last_update_block)?; + serializer.end() + } else { + serializer.serialize(&self.value) + } } } @@ -101,7 +153,7 @@ mod tests { use serde_json::json; use super::*; - use crate::dto::DeserializeForVersion; + use crate::dto::{DeserializeForVersion, SerializeForVersion, Serializer}; use crate::RpcVersion; /// # Important @@ -117,6 +169,7 @@ mod tests { contract_address: contract_address!("0x1"), key: storage_address!("0x2"), block_id: BlockId::Latest, + response_flags: StorageResponseFlags::default(), }; let input = Input::deserialize(crate::dto::Value::new(input, RpcVersion::V07)).unwrap(); @@ -124,30 +177,72 @@ mod tests { assert_eq!(input, expected); } - const RPC_VERSION: RpcVersion = RpcVersion::V09; + #[rstest::rstest] + #[case::positional(json!(["1", "2", "latest"]))] + #[case::named(json!({"contract_address": "0x1", "key": "0x2", "block_id": "latest"}))] + fn deserialize_v10_with_default(#[case] input: serde_json::Value) { + let expected = Input { + contract_address: contract_address!("0x1"), + key: storage_address!("0x2"), + block_id: BlockId::Latest, + response_flags: StorageResponseFlags::default(), + }; - #[tokio::test] - async fn pending() { - let ctx = RpcContext::for_tests_with_pending().await; - let contract_address = contract_address_bytes!(b"pending contract 1 address"); - let key = storage_address_bytes!(b"pending storage key 0"); - let block_id = BlockId::Pending; + let input = Input::deserialize(crate::dto::Value::new(input, RpcVersion::V10)).unwrap(); - let result = get_storage_at( - ctx, + assert_eq!(input, expected); + } + + #[rstest::rstest] + #[case::positional(json!(["1", "2", "latest", ["INCLUDE_LAST_UPDATE_BLOCK"]]))] + #[case::named(json!({"contract_address": "0x1", "key": "0x2", "block_id": "latest", "response_flags": ["INCLUDE_LAST_UPDATE_BLOCK"]}))] + fn deserialize_v10_with_flag(#[case] json: serde_json::Value) { + use crate::dto::DeserializeForVersion; + + let value = crate::dto::Value::new(json, RpcVersion::V10); + let input = Input::deserialize(value).unwrap(); + + assert_eq!( + input, Input { - contract_address, - key, - block_id, - }, - RPC_VERSION, - ) - .await - .unwrap(); + contract_address: contract_address!("0x1"), + key: storage_address!("0x2"), + block_id: BlockId::Latest, + response_flags: StorageResponseFlags(vec![ + StorageResponseFlag::IncludeLastUpdateBlock + ]), + } + ); + } + + #[test] + fn deserialize_v10_without_response_flags() { + use crate::dto::DeserializeForVersion; + + let json = r#"{ + "contract_address": "0x1", + "key": "0x2", + "block_id": "latest" + }"#; + let value = crate::dto::Value::new( + serde_json::from_str::(json).unwrap(), + RpcVersion::V10, + ); + let input = Input::deserialize(value).unwrap(); - assert_eq!(result.0, storage_value_bytes!(b"pending storage value 0")); + assert_eq!( + input, + Input { + contract_address: contract_address!("0x1"), + key: storage_address!("0x2"), + block_id: BlockId::Latest, + response_flags: StorageResponseFlags::default(), + } + ); } + const RPC_VERSION: RpcVersion = RpcVersion::V09; + #[tokio::test] async fn pre_confirmed() { let ctx = RpcContext::for_tests_with_pre_confirmed().await; @@ -157,14 +252,15 @@ mod tests { let input = Input { contract_address: contract_address_bytes!(b"preconfirmed contract 1 address"), key: storage_address_bytes!(b"preconfirmed storage key 0"), - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, + response_flags: StorageResponseFlags::default(), }; let result = get_storage_at(ctx.clone(), input.clone(), RpcVersion::V09) .await .unwrap(); assert_eq!( - result.0, + result.value, storage_value_bytes!(b"preconfirmed storage value 0") ); @@ -184,13 +280,17 @@ mod tests { let input = Input { contract_address: contract_address_bytes!(b"prelatest contract 1 address"), key: storage_address_bytes!(b"prelatest storage key 0"), - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, + response_flags: StorageResponseFlags::default(), }; let result = get_storage_at(ctx.clone(), input.clone(), RpcVersion::V09) .await .unwrap(); - assert_eq!(result.0, storage_value_bytes!(b"prelatest storage value 0")); + assert_eq!( + result.value, + storage_value_bytes!(b"prelatest storage value 0") + ); // JSON-RPC version before 0.9 are expected to ignore the pre-latest block. let err = get_storage_at(ctx, input, RpcVersion::V08) @@ -200,11 +300,11 @@ mod tests { } #[tokio::test] - async fn pending_falls_back_to_latest() { - let ctx = RpcContext::for_tests_with_pending().await; + async fn pre_confirmed_falls_back_to_latest() { + let ctx = RpcContext::for_tests_with_pre_confirmed().await; let contract_address = contract_address_bytes!(b"contract 1"); let key = storage_address_bytes!(b"storage addr 0"); - let block_id = BlockId::Pending; + let block_id = BlockId::PreConfirmed; let result = get_storage_at( ctx, @@ -212,22 +312,24 @@ mod tests { contract_address, key, block_id, + response_flags: StorageResponseFlags::default(), }, RPC_VERSION, ) .await .unwrap(); - assert_eq!(result.0, storage_value_bytes!(b"storage value 2")); + assert_eq!(result.value, storage_value_bytes!(b"storage value 2")); } #[tokio::test] - async fn pending_deployed_defaults_to_zero() { - let ctx = RpcContext::for_tests_with_pending().await; + async fn pre_confirmed_deployed_defaults_to_zero() { + let ctx = RpcContext::for_tests_with_pre_confirmed().await; // Contract is deployed in pending block, but has no storage values set. - let contract_address = contract_address_bytes!(b"pending contract 0 address"); + let contract_address = contract_address_bytes!(b"preconfirmed contract 0 address"); let key = storage_address_bytes!(b"non-existent"); - let block_id = BlockId::Pending; + let block_id = BlockId::PreConfirmed; + let response_flags = StorageResponseFlags::default(); let result = get_storage_at( ctx, @@ -235,21 +337,24 @@ mod tests { contract_address, key, block_id, + response_flags, }, RPC_VERSION, ) .await .unwrap(); - assert_eq!(result.0, StorageValue::ZERO); + assert_eq!(result.value, StorageValue::ZERO); + assert_eq!(result.last_update_block, BlockNumber::new_or_panic(0)); } #[tokio::test] async fn latest() { - let ctx = RpcContext::for_tests_with_pending().await; + let ctx = RpcContext::for_tests_with_pre_confirmed().await; let contract_address = contract_address_bytes!(b"contract 1"); let key = storage_address_bytes!(b"storage addr 0"); let block_id = BlockId::Latest; + let response_flags = StorageResponseFlags::default(); let result = get_storage_at( ctx, @@ -257,21 +362,83 @@ mod tests { contract_address, key, block_id, + response_flags, }, RPC_VERSION, ) .await .unwrap(); - assert_eq!(result.0, storage_value_bytes!(b"storage value 2")); + assert_eq!(result.value, storage_value_bytes!(b"storage value 2")); + } + + #[tokio::test] + async fn latest_with_update_block() { + let ctx = RpcContext::for_tests_with_pre_confirmed().await; + let version = RpcVersion::V10; + let contract_address = contract_address_bytes!(b"contract 1"); + let key = storage_address_bytes!(b"storage addr 0"); + let block_id = BlockId::Latest; + let response_flags = + StorageResponseFlags(vec![StorageResponseFlag::IncludeLastUpdateBlock]); + + let output = get_storage_at( + ctx, + Input { + contract_address, + key, + block_id, + response_flags, + }, + version, + ) + .await + .unwrap(); + let output_json = output.serialize(Serializer { version }).unwrap(); + + let expected_json: serde_json::Value = serde_json::from_str(include_str!( + "../../fixtures/0.10.0/storage_at/latest_with_update_block.json" + )) + .unwrap(); + pretty_assertions_sorted::assert_eq!(output_json, expected_json); + } + + #[tokio::test] + async fn latest_without_update_block() { + let ctx = RpcContext::for_tests_with_pre_confirmed().await; + let version = RpcVersion::V10; + let contract_address = contract_address_bytes!(b"contract 1"); + let key = storage_address_bytes!(b"storage addr 0"); + let block_id = BlockId::Latest; + let response_flags = StorageResponseFlags::default(); + + let output = get_storage_at( + ctx, + Input { + contract_address, + key, + block_id, + response_flags, + }, + version, + ) + .await + .unwrap(); + let output_json = output.serialize(Serializer { version }).unwrap(); + + let expected_json: serde_json::Value = + serde_json::from_str(include_str!("../../fixtures/0.10.0/storage_at/latest.json")) + .unwrap(); + pretty_assertions_sorted::assert_eq!(output_json, expected_json); } #[tokio::test] async fn l1_accepted() { - let ctx = RpcContext::for_tests_with_pending().await; + let ctx = RpcContext::for_tests_with_pre_confirmed().await; let contract_address = contract_address_bytes!(b"contract 1"); let key = storage_address_bytes!(b"storage addr 0"); let block_id = BlockId::L1Accepted; + let response_flags = StorageResponseFlags::default(); let result = get_storage_at( ctx, @@ -279,21 +446,23 @@ mod tests { contract_address, key, block_id, + response_flags, }, RPC_VERSION, ) .await .unwrap(); - assert_eq!(result.0, storage_value_bytes!(b"storage value 1")); + assert_eq!(result.value, storage_value_bytes!(b"storage value 1")); } #[tokio::test] async fn defaults_to_zero() { - let ctx = RpcContext::for_tests_with_pending().await; + let ctx = RpcContext::for_tests_with_pre_confirmed().await; let contract_address = contract_address_bytes!(b"contract 1"); let key = storage_address_bytes!(b"non-existent"); let block_id = BlockId::Latest; + let response_flags = StorageResponseFlags::default(); let result = get_storage_at( ctx, @@ -301,21 +470,24 @@ mod tests { contract_address, key, block_id, + response_flags, }, RPC_VERSION, ) .await .unwrap(); - assert_eq!(result.0, StorageValue::ZERO); + assert_eq!(result.value, StorageValue::ZERO); + assert_eq!(result.last_update_block, BlockNumber::new_or_panic(0)); } #[tokio::test] async fn by_hash() { - let ctx = RpcContext::for_tests_with_pending().await; + let ctx = RpcContext::for_tests_with_pre_confirmed().await; let contract_address = contract_address_bytes!(b"contract 1"); let key = storage_address_bytes!(b"storage addr 0"); let block_id = BlockId::Hash(block_hash_bytes!(b"block 1")); + let response_flags = StorageResponseFlags::default(); let result = get_storage_at( ctx, @@ -323,21 +495,23 @@ mod tests { contract_address, key, block_id, + response_flags, }, RPC_VERSION, ) .await .unwrap(); - assert_eq!(result.0, storage_value_bytes!(b"storage value 1")); + assert_eq!(result.value, storage_value_bytes!(b"storage value 1")); } #[tokio::test] async fn by_number() { - let ctx = RpcContext::for_tests_with_pending().await; + let ctx = RpcContext::for_tests_with_pre_confirmed().await; let contract_address = contract_address_bytes!(b"contract 1"); let key = storage_address_bytes!(b"storage addr 0"); let block_id = BlockId::Number(BlockNumber::GENESIS + 1); + let response_flags = StorageResponseFlags::default(); let result = get_storage_at( ctx, @@ -345,21 +519,23 @@ mod tests { contract_address, key, block_id, + response_flags, }, RPC_VERSION, ) .await .unwrap(); - assert_eq!(result.0, storage_value_bytes!(b"storage value 1")); + assert_eq!(result.value, storage_value_bytes!(b"storage value 1")); } #[tokio::test] async fn unknown_contract() { - let ctx = RpcContext::for_tests_with_pending().await; + let ctx = RpcContext::for_tests_with_pre_confirmed().await; let contract_address = contract_address_bytes!(b"non-existent"); let key = storage_address_bytes!(b"storage addr 0"); let block_id = BlockId::Latest; + let response_flags = StorageResponseFlags::default(); let result = get_storage_at( ctx, @@ -367,6 +543,7 @@ mod tests { contract_address, key, block_id, + response_flags, }, RPC_VERSION, ) @@ -377,10 +554,11 @@ mod tests { #[tokio::test] async fn contract_is_unknown_before_deployment() { - let ctx = RpcContext::for_tests_with_pending().await; + let ctx = RpcContext::for_tests_with_pre_confirmed().await; let contract_address = contract_address_bytes!(b"contract 1"); let key = storage_address_bytes!(b"storage addr 0"); let block_id = BlockId::Hash(block_hash_bytes!(b"genesis")); + let response_flags = StorageResponseFlags::default(); let result = get_storage_at( ctx, @@ -388,6 +566,7 @@ mod tests { contract_address, key, block_id, + response_flags, }, RPC_VERSION, ) @@ -398,10 +577,11 @@ mod tests { #[tokio::test] async fn block_not_found_by_number() { - let ctx = RpcContext::for_tests_with_pending().await; + let ctx = RpcContext::for_tests_with_pre_confirmed().await; let contract_address = contract_address_bytes!(b"contract 1"); let key = storage_address_bytes!(b"storage addr 0"); let block_id = BlockId::Number(BlockNumber::MAX); + let response_flags = StorageResponseFlags::default(); let result = get_storage_at( ctx, @@ -409,6 +589,7 @@ mod tests { contract_address, key, block_id, + response_flags, }, RPC_VERSION, ) @@ -419,10 +600,11 @@ mod tests { #[tokio::test] async fn block_not_found_by_hash() { - let ctx = RpcContext::for_tests_with_pending().await; + let ctx = RpcContext::for_tests_with_pre_confirmed().await; let contract_address = contract_address_bytes!(b"contract 1"); let key = storage_address_bytes!(b"storage addr 0"); let block_id = BlockId::Hash(block_hash_bytes!(b"unknown")); + let response_flags = StorageResponseFlags::default(); let result = get_storage_at( ctx, @@ -430,6 +612,7 @@ mod tests { contract_address, key, block_id, + response_flags, }, RPC_VERSION, ) diff --git a/crates/rpc/src/method/get_storage_proof.rs b/crates/rpc/src/method/get_storage_proof.rs index 40e83a702c..ed9a937542 100644 --- a/crates/rpc/src/method/get_storage_proof.rs +++ b/crates/rpc/src/method/get_storage_proof.rs @@ -289,8 +289,8 @@ pub async fn get_storage_proof(context: RpcContext, input: Input) -> Result { - // Getting proof of a pending block is not supported. + BlockId::PreConfirmed => { + // Getting proof of a pre-confirmed block is not supported. return Err(Error::ProofMissing); } other => other @@ -506,6 +506,7 @@ mod tests { use pathfinder_common::*; use pathfinder_merkle_tree::starknet_state::update_starknet_state; use pathfinder_storage::fake::{Block, Config, OccurrencePerBlock}; + use pathfinder_storage::TriePruneMode; use super::*; use crate::dto::SerializeForVersion; @@ -782,10 +783,10 @@ mod tests { } #[tokio::test] - async fn pending_block() { + async fn pre_confirmed_block() { let context = RpcContext::for_tests(); let input = Input { - block_id: BlockId::Pending, + block_id: BlockId::PreConfirmed, class_hashes: None, contract_addresses: None, contracts_storage_keys: None, @@ -813,7 +814,12 @@ mod tests { #[tokio::test] async fn chain_without_declarations_and_contract_updates() { - let storage = pathfinder_storage::StorageBuilder::in_memory().unwrap(); + let storage = + pathfinder_storage::StorageBuilder::in_tempdir_with_trie_pruning_and_pool_size( + TriePruneMode::Archive, + NonZeroU32::new(32).unwrap(), + ) + .unwrap(); let blocks = pathfinder_storage::fake::generate::with_config( 1, Config { diff --git a/crates/rpc/src/method/get_transaction_by_block_id_and_index.rs b/crates/rpc/src/method/get_transaction_by_block_id_and_index.rs index f9817667f7..6d24b96e2f 100644 --- a/crates/rpc/src/method/get_transaction_by_block_id_and_index.rs +++ b/crates/rpc/src/method/get_transaction_by_block_id_and_index.rs @@ -3,6 +3,7 @@ use pathfinder_common::transaction::Transaction; use pathfinder_common::TransactionIndex; use crate::context::RpcContext; +use crate::dto::TransactionResponseFlags; use crate::types::BlockId; use crate::RpcVersion; @@ -10,21 +11,38 @@ use crate::RpcVersion; pub struct Input { block_id: BlockId, index: TransactionIndex, + response_flags: TransactionResponseFlags, } impl crate::dto::DeserializeForVersion for Input { fn deserialize(value: crate::dto::Value) -> Result { + let rpc_version = value.version; + value.deserialize_map(|value| { + let block_id = value.deserialize("block_id")?; + let index = value.deserialize("index")?; + let response_flags = if rpc_version >= RpcVersion::V10 { + value + .deserialize_optional("response_flags")? + .unwrap_or_default() + } else { + TransactionResponseFlags::default() + }; + Ok(Self { - block_id: value.deserialize("block_id")?, - index: value.deserialize("index")?, + block_id, + index, + response_flags, }) }) } } #[derive(Debug, PartialEq, Eq)] -pub struct Output(Transaction); +pub struct Output { + transaction: Transaction, + include_proof_facts: bool, +} crate::error::generate_rpc_error_subset!( GetTransactionByBlockIdAndIndexError: BlockNotFound, @@ -42,10 +60,17 @@ pub async fn get_transaction_by_block_id_and_index( .try_into() .map_err(|_| GetTransactionByBlockIdAndIndexError::InvalidTxnIndex)?; + let include_proof_facts = input + .response_flags + .0 + .iter() + .any(|flag| flag == &crate::dto::TransactionResponseFlag::IncludeProofFacts); + let storage = context.storage.clone(); let span = tracing::Span::current(); let jh = util::task::spawn_blocking(move |_| { let _g = span.enter(); + let mut db = storage .connection() .context("Opening database connection")?; @@ -53,16 +78,19 @@ pub async fn get_transaction_by_block_id_and_index( let db_tx = db.transaction().context("Creating database transaction")?; let block_id = match input.block_id { - BlockId::Pending => { + BlockId::PreConfirmed => { let result = context .pending_data .get(&db_tx, rpc_version) .context("Querying pending dat")? - .pending_transactions() + .pre_confirmed_transactions() .get(index) .cloned() .ok_or(GetTransactionByBlockIdAndIndexError::InvalidTxnIndex); - return result.map(Output); + return result.map(|transaction| Output { + transaction, + include_proof_facts, + }); } other => other .to_common_or_panic(&db_tx) @@ -74,7 +102,10 @@ pub async fn get_transaction_by_block_id_and_index( .transaction_at_block(block_id, index) .context("Reading transaction from database")? { - Some(transaction) => Ok(Output(transaction)), + Some(transaction) => Ok(Output { + transaction, + include_proof_facts, + }), None => { // We now need to check whether it was the block hash or transaction index which // were invalid. We do this by checking if the block exists @@ -100,7 +131,10 @@ impl crate::dto::SerializeForVersion for Output { &self, serializer: crate::dto::Serializer, ) -> Result { - serializer.serialize(&crate::dto::TransactionWithHash(&self.0)) + serializer.serialize(&crate::dto::TransactionWithHash { + transaction: &self.transaction, + include_proof_facts: self.include_proof_facts, + }) } } @@ -123,7 +157,7 @@ mod tests { 1 ]); - let positional = crate::dto::Value::new(positional_json, crate::RpcVersion::V08); + let positional = crate::dto::Value::new(positional_json, crate::RpcVersion::V10); let input = Input::deserialize(positional).unwrap(); assert_eq!( @@ -131,6 +165,7 @@ mod tests { Input { block_id: BlockId::Hash(block_hash!("0xdeadbeef")), index: TransactionIndex::new_or_panic(1), + response_flags: TransactionResponseFlags::default(), } ) } @@ -142,7 +177,28 @@ mod tests { "index": 1 }); - let named = crate::dto::Value::new(named_args_json, crate::RpcVersion::V08); + let named = crate::dto::Value::new(named_args_json, crate::RpcVersion::V10); + + let input = Input::deserialize(named).unwrap(); + assert_eq!( + input, + Input { + block_id: BlockId::Hash(block_hash!("0xdeadbeef")), + index: TransactionIndex::new_or_panic(1), + response_flags: TransactionResponseFlags::default(), + } + ) + } + + #[test] + fn named_args_with_response_flags() { + let named_args_json = json!({ + "block_id": {"block_hash": "0xdeadbeef"}, + "index": 1, + "response_flags": ["INCLUDE_PROOF_FACTS"] + }); + + let named = crate::dto::Value::new(named_args_json, crate::RpcVersion::V10); let input = Input::deserialize(named).unwrap(); assert_eq!( @@ -150,6 +206,9 @@ mod tests { Input { block_id: BlockId::Hash(block_hash!("0xdeadbeef")), index: TransactionIndex::new_or_panic(1), + response_flags: TransactionResponseFlags(vec![ + crate::dto::TransactionResponseFlag::IncludeProofFacts + ]), } ) } diff --git a/crates/rpc/src/method/get_transaction_by_hash.rs b/crates/rpc/src/method/get_transaction_by_hash.rs index ce46ef10c5..a3046e44d8 100644 --- a/crates/rpc/src/method/get_transaction_by_hash.rs +++ b/crates/rpc/src/method/get_transaction_by_hash.rs @@ -5,31 +5,54 @@ use pathfinder_common::transaction::Transaction; use pathfinder_common::TransactionHash; use crate::context::RpcContext; +use crate::dto::TransactionResponseFlags; use crate::RpcVersion; #[derive(Debug, PartialEq, Eq)] pub struct Input { transaction_hash: TransactionHash, + response_flags: TransactionResponseFlags, } impl crate::dto::DeserializeForVersion for Input { fn deserialize(value: crate::dto::Value) -> Result { + let rpc_version = value.version; + value.deserialize_map(|value| { + let transaction_hash = value.deserialize("transaction_hash").map(TransactionHash)?; + let response_flags = if rpc_version >= RpcVersion::V10 { + value + .deserialize_optional("response_flags")? + .unwrap_or_default() + } else { + TransactionResponseFlags::default() + }; + Ok(Self { - transaction_hash: value.deserialize("transaction_hash").map(TransactionHash)?, + transaction_hash, + response_flags, }) }) } } #[derive(Debug, PartialEq, Eq)] -pub struct Output(Transaction); +pub struct Output { + transaction: Transaction, + include_proof_facts: bool, +} pub async fn get_transaction_by_hash( context: RpcContext, input: Input, rpc_version: RpcVersion, ) -> Result { + let include_proof_facts = input + .response_flags + .0 + .iter() + .any(|flag| flag == &crate::dto::TransactionResponseFlag::IncludeProofFacts); + let storage = context.storage.clone(); let span = tracing::Span::current(); let jh = util::task::spawn_blocking(move |_| { @@ -41,13 +64,16 @@ pub async fn get_transaction_by_hash( let db_tx = db.transaction().context("Creating database transaction")?; // Check pending transactions. - if let Some(tx) = context + if let Some(transaction) = context .pending_data .get(&db_tx, rpc_version) .context("Querying pending data")? .find_transaction(input.transaction_hash) { - return Ok(Output(tx)); + return Ok(Output { + transaction, + include_proof_facts, + }); } // Get the transaction from storage. @@ -55,7 +81,10 @@ pub async fn get_transaction_by_hash( .transaction(input.transaction_hash) .context("Reading transaction from database")? .ok_or(GetTransactionByHashError::TxnHashNotFound) - .map(Output) + .map(|transaction| Output { + transaction, + include_proof_facts, + }) }); jh.await.context("Database read panic or shutting down")? @@ -66,7 +95,10 @@ impl crate::dto::SerializeForVersion for Output { &self, serializer: crate::dto::Serializer, ) -> Result { - serializer.serialize(&crate::dto::TransactionWithHash(&self.0)) + serializer.serialize(&crate::dto::TransactionWithHash { + transaction: &self.transaction, + include_proof_facts: self.include_proof_facts, + }) } } @@ -92,7 +124,8 @@ mod tests { assert_eq!( input, Input { - transaction_hash: transaction_hash!("0xdeadbeef") + transaction_hash: transaction_hash!("0xdeadbeef"), + response_flags: TransactionResponseFlags::default(), } ) } @@ -109,7 +142,8 @@ mod tests { assert_eq!( input, Input { - transaction_hash: transaction_hash!("0xdeadbeef") + transaction_hash: transaction_hash!("0xdeadbeef"), + response_flags: TransactionResponseFlags::default(), } ) } @@ -133,6 +167,7 @@ mod tests { let tx_hash = transaction_hash_bytes!(b"txn 1"); let input = Input { transaction_hash: tx_hash, + response_flags: TransactionResponseFlags::default(), }; let output = get_transaction_by_hash(context, input, version) .await @@ -143,32 +178,6 @@ mod tests { crate::assert_json_matches_fixture!(output_json, version, "transactions/txn_1.json"); } - #[rstest::rstest] - #[case::v06(RpcVersion::V06)] - #[case::v07(RpcVersion::V07)] - #[case::v08(RpcVersion::V08)] - #[case::v09(RpcVersion::V09)] - #[case::v10(RpcVersion::V10)] - #[tokio::test] - async fn pending(#[case] version: RpcVersion) { - let context = RpcContext::for_tests_with_pending().await; - let tx_hash = transaction_hash_bytes!(b"pending tx hash 0"); - let input = Input { - transaction_hash: tx_hash, - }; - let output = get_transaction_by_hash(context, input, version) - .await - .unwrap(); - - let output_json = output.serialize(Serializer { version }).unwrap(); - - crate::assert_json_matches_fixture!( - output_json, - version, - "transactions/txn_pending_hash_0.json" - ); - } - #[rstest::rstest] #[case::v06(RpcVersion::V06)] #[case::v07(RpcVersion::V07)] @@ -181,6 +190,7 @@ mod tests { let tx_hash = transaction_hash_bytes!(b"preconfirmed tx hash 0"); let input = Input { transaction_hash: tx_hash, + response_flags: TransactionResponseFlags::default(), }; let result = get_transaction_by_hash(context, input, version).await; @@ -223,6 +233,7 @@ mod tests { let tx_hash = transaction_hash_bytes!(b"candidate tx hash 0"); let input = Input { transaction_hash: tx_hash, + response_flags: TransactionResponseFlags::default(), }; let result = get_transaction_by_hash(context, input, version).await; @@ -265,6 +276,7 @@ mod tests { let tx_hash = transaction_hash_bytes!(b"prelatest tx hash 0"); let input = Input { transaction_hash: tx_hash, + response_flags: TransactionResponseFlags::default(), }; let result = get_transaction_by_hash(context, input, version).await; @@ -303,9 +315,10 @@ mod tests { #[case::v10(RpcVersion::V10)] #[tokio::test] async fn reverted(#[case] version: RpcVersion) { - let context = RpcContext::for_tests_with_pending().await; + let context = RpcContext::for_tests_with_pre_confirmed().await; let input = Input { transaction_hash: transaction_hash_bytes!(b"txn reverted"), + response_flags: TransactionResponseFlags::default(), }; let output = get_transaction_by_hash(context.clone(), input, version) .await @@ -316,18 +329,25 @@ mod tests { crate::assert_json_matches_fixture!(output_json, version, "transactions/txn_reverted.json"); let input = Input { - transaction_hash: transaction_hash_bytes!(b"pending reverted"), + transaction_hash: transaction_hash_bytes!(b"preconfirmed reverted"), + response_flags: TransactionResponseFlags::default(), }; - let output = get_transaction_by_hash(context, input, version) - .await - .unwrap(); + let output = get_transaction_by_hash(context, input, version).await; + + if version < RpcVersion::V09 { + assert_matches::assert_matches!( + output, + Err(GetTransactionByHashError::TxnHashNotFound) + ); + return; + } - let output_json = output.serialize(Serializer { version }).unwrap(); + let output_json = output.unwrap().serialize(Serializer { version }).unwrap(); crate::assert_json_matches_fixture!( output_json, version, - "transactions/txn_pending_reverted.json" + "transactions/txn_preconfirmed_reverted.json" ); } } diff --git a/crates/rpc/src/method/get_transaction_receipt.rs b/crates/rpc/src/method/get_transaction_receipt.rs index 46c5fd2fbd..f28d3bc0f5 100644 --- a/crates/rpc/src/method/get_transaction_receipt.rs +++ b/crates/rpc/src/method/get_transaction_receipt.rs @@ -208,32 +208,6 @@ mod tests { ); } - #[rstest::rstest] - #[case::v06(RpcVersion::V06)] - #[case::v07(RpcVersion::V07)] - #[case::v08(RpcVersion::V08)] - #[case::v09(RpcVersion::V09)] - #[case::v10(RpcVersion::V10)] - #[tokio::test] - async fn pending(#[case] version: RpcVersion) { - let context = RpcContext::for_tests_with_pending().await; - let tx_hash = transaction_hash_bytes!(b"pending tx hash 0"); - let input = Input { - transaction_hash: tx_hash, - }; - let output = get_transaction_receipt(context, input, version) - .await - .unwrap(); - - let output_json = output.serialize(Serializer { version }).unwrap(); - - crate::assert_json_matches_fixture!( - output_json, - version, - "transactions/receipt_pending.json" - ); - } - #[rstest::rstest] #[case::v06(RpcVersion::V06)] #[case::v07(RpcVersion::V07)] @@ -320,7 +294,7 @@ mod tests { #[case::v10(RpcVersion::V10)] #[tokio::test] async fn reverted(#[case] version: RpcVersion) { - let context = RpcContext::for_tests_with_pending().await; + let context = RpcContext::for_tests_with_pre_confirmed().await; let input = Input { transaction_hash: transaction_hash_bytes!(b"txn reverted"), }; @@ -337,18 +311,21 @@ mod tests { ); let input = Input { - transaction_hash: transaction_hash_bytes!(b"pending reverted"), + transaction_hash: transaction_hash_bytes!(b"preconfirmed reverted"), }; - let output = get_transaction_receipt(context, input, version) - .await - .unwrap(); + let output = get_transaction_receipt(context, input, version).await; - let output_json = output.serialize(Serializer { version }).unwrap(); + if version < RpcVersion::V09 { + assert_matches::assert_matches!(output, Err(Error::TxnHashNotFound)); + return; + } + + let output_json = output.unwrap().serialize(Serializer { version }).unwrap(); crate::assert_json_matches_fixture!( output_json, version, - "transactions/receipt_reverted_pending.json" + "transactions/receipt_reverted_preconfirmed.json" ); } } diff --git a/crates/rpc/src/method/get_transaction_status.rs b/crates/rpc/src/method/get_transaction_status.rs index b99bef2e01..105a55ea76 100644 --- a/crates/rpc/src/method/get_transaction_status.rs +++ b/crates/rpc/src/method/get_transaction_status.rs @@ -86,7 +86,8 @@ pub async fn get_transaction_status( if pending_data .candidate_transactions() - .is_some_and(|txs| txs.iter().any(|tx| tx.hash == input.transaction_hash)) + .iter() + .any(|tx| tx.hash == input.transaction_hash) { return Ok(Some(Output::Candidate)); } @@ -285,32 +286,6 @@ mod tests { pretty_assertions_sorted::assert_eq!(output_json, expected_json); } - #[rstest::rstest] - #[case::v06(RpcVersion::V06)] - #[case::v07(RpcVersion::V07)] - #[case::v08(RpcVersion::V08)] - #[case::v09(RpcVersion::V09)] - #[case::v10(RpcVersion::V10)] - #[tokio::test] - async fn pending(#[case] version: RpcVersion) { - let context = RpcContext::for_tests_with_pending().await; - let tx_hash = transaction_hash_bytes!(b"pending tx hash 0"); - let input = Input { - transaction_hash: tx_hash, - }; - let status = get_transaction_status(context, input, version) - .await - .unwrap(); - - let output_json = status.serialize(Serializer { version }).unwrap(); - - crate::assert_json_matches_fixture!( - output_json, - version, - "transactions/status_pending.json" - ); - } - #[rstest::rstest] #[case::v06(RpcVersion::V06)] #[case::v07(RpcVersion::V07)] @@ -498,7 +473,7 @@ mod tests { #[case::v10(RpcVersion::V10)] #[tokio::test] async fn reverted(#[case] version: RpcVersion) { - let context = RpcContext::for_tests_with_pending().await; + let context = RpcContext::for_tests_with_pre_confirmed().await; let input = Input { transaction_hash: transaction_hash_bytes!(b"txn reverted"), }; @@ -515,13 +490,16 @@ mod tests { ); let input = Input { - transaction_hash: transaction_hash_bytes!(b"pending reverted"), + transaction_hash: transaction_hash_bytes!(b"preconfirmed reverted"), }; - let status = get_transaction_status(context, input, version) - .await - .unwrap(); + let status = get_transaction_status(context, input, version).await; - let output_json = status.serialize(Serializer { version }).unwrap(); + if version < RpcVersion::V09 { + assert_matches::assert_matches!(status, Err(Error::TxnHashNotFound)); + return; + } + + let output_json = status.unwrap().serialize(Serializer { version }).unwrap(); crate::assert_json_matches_fixture!( output_json, @@ -532,7 +510,7 @@ mod tests { #[tokio::test] async fn txn_hash_not_found() { - let context = RpcContext::for_tests_with_pending().await; + let context = RpcContext::for_tests_with_pre_confirmed().await; let input = Input { transaction_hash: transaction_hash_bytes!(b"non-existent"), }; diff --git a/crates/rpc/src/method/simulate_transactions.rs b/crates/rpc/src/method/simulate_transactions.rs index e764fe1a0c..55deceb212 100644 --- a/crates/rpc/src/method/simulate_transactions.rs +++ b/crates/rpc/src/method/simulate_transactions.rs @@ -13,7 +13,7 @@ use crate::types::request::BroadcastedTransaction; use crate::types::BlockId; use crate::RpcVersion; -#[derive(Debug)] +#[derive(Debug, Clone, PartialEq)] pub struct SimulateTransactionInput { pub block_id: BlockId, pub transactions: Vec, @@ -35,7 +35,10 @@ impl crate::dto::DeserializeForVersion for SimulateTransactionInput { } #[derive(Debug)] -pub struct Output(Vec); +pub struct Output { + simulations: Vec, + initial_reads: Option, +} pub async fn simulate_transactions( context: RpcContext, @@ -63,15 +66,13 @@ pub async fn simulate_transactions( let skip_validate = input .simulation_flags - .0 - .iter() - .any(|flag| flag == &crate::dto::SimulationFlag::SkipValidate); - + .contains(&crate::dto::SimulationFlag::SkipValidate); let skip_fee_charge = input .simulation_flags - .0 - .iter() - .any(|flag| flag == &crate::dto::SimulationFlag::SkipFeeCharge); + .contains(&crate::dto::SimulationFlag::SkipFeeCharge); + let return_initial_reads = input + .simulation_flags + .contains(&crate::dto::SimulationFlag::ReturnInitialReads); let mut db_conn = context .execution_storage @@ -82,14 +83,14 @@ pub async fn simulate_transactions( .context("Creating database transaction")?; let (header, pending) = match input.block_id { - BlockId::Pending => { + BlockId::PreConfirmed => { let pending = context .pending_data .get(&db_tx, rpc_version) .context("Querying pending data")?; ( - pending.pending_header(), + pending.pre_confirmed_header(), Some(pending.aggregated_state_update()), ) } @@ -109,6 +110,7 @@ pub async fn simulate_transactions( let state = pathfinder_executor::ExecutionState::simulation( context.chain_id, + context.is_l3, header, pending, pathfinder_executor::L1BlobDataAvailability::Enabled, @@ -116,6 +118,9 @@ pub async fn simulate_transactions( context.contract_addresses.eth_l2_token_address, context.contract_addresses.strk_l2_token_address, context.native_class_cache, + context + .config + .native_execution_force_use_for_incompatible_classes, ); let transactions = input @@ -125,19 +130,25 @@ pub async fn simulate_transactions( crate::executor::map_broadcasted_transaction( &tx, context.chain_id, + context.config.compiler_resource_limits, + context.config.blockifier_libfuncs, skip_validate, skip_fee_charge, ) }) .collect::, _>>()?; - let txs = pathfinder_executor::simulate( + let (simulations, initial_reads) = pathfinder_executor::simulate( db_tx, state, transactions, context.config.fee_estimation_epsilon, + return_initial_reads, )?; - Ok(Output(txs)) + Ok(Output { + simulations, + initial_reads, + }) }) .await .context("Simulating transaction")? @@ -148,7 +159,52 @@ impl crate::dto::SerializeForVersion for Output { &self, serializer: crate::dto::Serializer, ) -> Result { - serializer.serialize_iter(self.0.len(), &mut self.0.iter().map(TransactionSimulation)) + fn serialize_as_array( + serializer: crate::dto::Serializer, + simulations: &[pathfinder_executor::types::TransactionSimulation], + ) -> Result { + serializer.serialize_iter( + simulations.len(), + &mut simulations.iter().map(TransactionSimulation), + ) + } + + fn serialize_as_object( + serializer: crate::dto::Serializer, + initial_reads: &pathfinder_executor::types::StateMaps, + simulations: &[pathfinder_executor::types::TransactionSimulation], + ) -> Result { + let mut serializer = serializer.serialize_struct()?; + serializer.serialize_iter( + "simulated_transactions", + simulations.len(), + &mut simulations.iter().map(TransactionSimulation), + )?; + serializer.serialize_field( + "initial_reads", + &crate::dto::InitialReads { + maps: initial_reads, + }, + )?; + serializer.end() + } + + let rpc_version = serializer.version; + if rpc_version >= RpcVersion::V10 { + match self.initial_reads.as_ref() { + Some(initial_reads) => { + serialize_as_object(serializer, initial_reads, &self.simulations) + } + None => serialize_as_array(serializer, &self.simulations), + } + } else { + debug_assert!( + self.initial_reads.is_none(), + "initial_reads was introduced in {}, but is present in earlier version", + RpcVersion::V10.to_str(), + ); + serialize_as_array(serializer, &self.simulations) + } } } @@ -242,6 +298,7 @@ pub(crate) mod tests { use std::collections::{BTreeMap, HashSet}; use assert_matches::assert_matches; + use pathfinder_common::class_definition::SerializedOpaqueClassDefinition; use pathfinder_common::macro_prelude::*; use pathfinder_common::prelude::*; use pathfinder_common::transaction::{DataAvailabilityMode, ResourceBound, ResourceBounds}; @@ -266,6 +323,8 @@ pub(crate) mod tests { use crate::types::request::{ BroadcastedDeclareTransaction, BroadcastedDeclareTransactionV1, + BroadcastedDeployAccountTransaction, + BroadcastedDeployAccountTransactionV1, BroadcastedDeployAccountTransactionV3, BroadcastedTransaction, }; @@ -304,6 +363,93 @@ pub(crate) mod tests { ) } + #[rstest::rstest] + #[case::v07(RpcVersion::V07)] + #[case::v08(RpcVersion::V08)] + #[case::v09(RpcVersion::V09)] + #[case::v10(RpcVersion::V10)] + fn input_deserialization_happy_path(#[case] rpc_version: RpcVersion) { + let simulation_flags = if rpc_version >= RpcVersion::V10 { + vec!["SKIP_FEE_CHARGE", "RETURN_INITIAL_READS"] + } else { + vec!["SKIP_FEE_CHARGE"] + }; + let input_json = serde_json::json!({ + "block_id": {"block_number": 1}, + "transactions": [ + { + "contract_address_salt": "0x46c0d4abf0192a788aca261e58d7031576f7d8ea5229f452b0f23e691dd5971", + "max_fee": "0x0", + "signature": [], + "class_hash": crate::test_setup::OPENZEPPELIN_ACCOUNT_CLASS_HASH, + "nonce": "0x0", + "version": TransactionVersion::ONE_WITH_QUERY_VERSION, + "constructor_calldata": ["0x1"], + "type": "DEPLOY_ACCOUNT" + } + ], + "simulation_flags": simulation_flags, + }); + + let value = crate::dto::Value::new(input_json, rpc_version); + let input = SimulateTransactionInput::deserialize(value).unwrap(); + let expected_input = SimulateTransactionInput { + block_id: BlockId::Number(BlockNumber::new_or_panic(1)), + transactions: vec![BroadcastedTransaction::DeployAccount( + BroadcastedDeployAccountTransaction::V1(BroadcastedDeployAccountTransactionV1 { + contract_address_salt: contract_address_salt!( + "0x46c0d4abf0192a788aca261e58d7031576f7d8ea5229f452b0f23e691dd5971" + ), + class_hash: crate::test_setup::OPENZEPPELIN_ACCOUNT_CLASS_HASH, + constructor_calldata: vec![call_param!("0x1")], + version: TransactionVersion::ONE_WITH_QUERY_VERSION, + max_fee: fee!("0x0"), + signature: vec![], + nonce: transaction_nonce!("0x0"), + }), + )], + simulation_flags: crate::dto::SimulationFlags(if rpc_version >= RpcVersion::V10 { + vec![ + crate::dto::SimulationFlag::SkipFeeCharge, + crate::dto::SimulationFlag::ReturnInitialReads, + ] + } else { + vec![crate::dto::SimulationFlag::SkipFeeCharge] + }), + }; + assert_eq!(input, expected_input); + } + + #[rstest::rstest] + #[case::v07(RpcVersion::V07)] + #[case::v08(RpcVersion::V08)] + #[case::v09(RpcVersion::V09)] + #[case::v10(RpcVersion::V10)] + fn input_deserialization_rejects_return_initial_reads_pre_v10(#[case] rpc_version: RpcVersion) { + let input_json = serde_json::json!({ + "block_id": {"block_number": 1}, + "transactions": [], + "simulation_flags": ["RETURN_INITIAL_READS"] + }); + + let value = crate::dto::Value::new(input_json, rpc_version); + let deserialization_result = SimulateTransactionInput::deserialize(value); + if rpc_version >= RpcVersion::V10 { + let input = deserialization_result.unwrap(); + let expected_input = SimulateTransactionInput { + block_id: BlockId::Number(BlockNumber::new_or_panic(1)), + transactions: vec![], + simulation_flags: crate::dto::SimulationFlags(vec![ + crate::dto::SimulationFlag::ReturnInitialReads, + ]), + }; + assert_eq!(input, expected_input); + } else { + let err = deserialization_result.unwrap_err(); + assert_eq!(err.to_string(), "Invalid simulation flag"); + } + } + #[tokio::test] async fn test_simulate_transaction_with_skip_fee_charge() { let (context, _, _, _) = crate::test_setup::test_context().await; @@ -331,7 +477,8 @@ pub(crate) mod tests { const DEPLOYED_CONTRACT_ADDRESS: ContractAddress = contract_address!("0xf3805e4f045a8b48e7e9e6cd5d910973a22360572207f3ae625c5cec2a3232"); - let expected = crate::method::simulate_transactions::Output(vec![ + let expected = crate::method::simulate_transactions::Output { + simulations: vec![ pathfinder_executor::types::TransactionSimulation{ fee_estimation: pathfinder_executor::types::FeeEstimate { l1_gas_consumed: 0x15.into(), @@ -458,10 +605,11 @@ pub(crate) mod tests { contract_nonce!("0x1"), )]), }, - }, - ), - } - ]).serialize(Serializer { + }), + }, + ], + initial_reads: None, + }.serialize(Serializer { version: RpcVersion::V07, }).unwrap(); @@ -476,6 +624,93 @@ pub(crate) mod tests { pretty_assertions_sorted::assert_eq!(result, expected); } + #[rstest::rstest] + #[case::v07(RpcVersion::V07)] + #[case::v08(RpcVersion::V08)] + #[case::v09(RpcVersion::V09)] + #[case::v10(RpcVersion::V10)] + #[test_log::test(tokio::test)] + async fn test_simulate_transaction_with_return_initial_reads(#[case] rpc_version: RpcVersion) { + fn fixture( + rpc_version: RpcVersion, + simulation_flags: &crate::dto::SimulationFlags, + ) -> serde_json::Result { + let fixture_str = match rpc_version { + RpcVersion::V07 => { + include_str!("../../fixtures/0.7.0/simulations/simulate_transaction.json") + } + RpcVersion::V08 => { + include_str!("../../fixtures/0.8.0/simulations/simulate_transaction.json") + } + RpcVersion::V09 => { + include_str!("../../fixtures/0.9.0/simulations/simulate_transaction.json") + } + RpcVersion::V10 => { + if simulation_flags.contains(&crate::dto::SimulationFlag::ReturnInitialReads) { + include_str!( + "../../fixtures/0.10.0/simulations/\ + simulate_transaction_with_return_initial_reads.json" + ) + } else { + include_str!("../../fixtures/0.10.0/simulations/simulate_transaction.json") + } + } + RpcVersion::V06 | RpcVersion::PathfinderV01 => unreachable!("no such test case"), + }; + serde_json::from_str(fixture_str) + } + + let (context, _, _, _) = crate::test_setup::test_context().await; + + let input_json = serde_json::json!({ + "block_id": {"block_number": 1}, + "transactions": [ + { + "contract_address_salt": "0x46c0d4abf0192a788aca261e58d7031576f7d8ea5229f452b0f23e691dd5971", + "max_fee": "0x0", + "signature": [], + "class_hash": crate::test_setup::OPENZEPPELIN_ACCOUNT_CLASS_HASH, + "nonce": "0x0", + "version": TransactionVersion::ONE_WITH_QUERY_VERSION, + "constructor_calldata": ["0x1"], + "type": "DEPLOY_ACCOUNT" + } + ], + "simulation_flags": ["SKIP_FEE_CHARGE"], + }); + let value = crate::dto::Value::new(input_json, rpc_version); + let mut input = SimulateTransactionInput::deserialize(value).unwrap(); + + // First test without `RETURN_INITIAL_READS`. + let output_json = simulate_transactions(context.clone(), input.clone(), rpc_version) + .await + .unwrap() + .serialize(Serializer { + version: rpc_version, + }) + .unwrap(); + let expected_json = fixture(rpc_version, &input.simulation_flags).unwrap(); + pretty_assertions_sorted::assert_eq!(output_json, expected_json); + + // Then, for RpcVersion that support `RETURN_INITIAL_READS` (i.e. after + // RpcVersion::V10), test with the flag enabled. + if rpc_version >= RpcVersion::V10 { + input + .simulation_flags + .0 + .push(crate::dto::SimulationFlag::ReturnInitialReads); + let output_json = simulate_transactions(context, input.clone(), rpc_version) + .await + .unwrap() + .serialize(Serializer { + version: rpc_version, + }) + .unwrap(); + let expected_json = fixture(rpc_version, &input.simulation_flags).unwrap(); + pretty_assertions_sorted::assert_eq!(output_json, expected_json); + } + } + #[tokio::test] async fn declare_cairo_v0_class() { pub const CAIRO0_DEFINITION: &[u8] = @@ -484,10 +719,12 @@ pub(crate) mod tests { pub const CAIRO0_HASH: ClassHash = class_hash!("02c52e7084728572ea940b4df708a2684677c19fa6296de2ea7ba5327e3a84ef"); - let contract_class = crate::types::ContractClass::from_definition_bytes(CAIRO0_DEFINITION) - .unwrap() - .as_cairo() - .unwrap(); + let contract_class = crate::types::ContractClass::from_serialized_def( + &SerializedOpaqueClassDefinition::from_slice(CAIRO0_DEFINITION), + ) + .unwrap() + .as_cairo() + .unwrap(); assert_eq!(contract_class.class_hash().unwrap().hash(), CAIRO0_HASH); @@ -514,7 +751,8 @@ pub(crate) mod tests { const OVERALL_FEE: u64 = 15720; - let expected = crate::method::simulate_transactions::Output(vec![ + let expected = crate::method::simulate_transactions::Output { + simulations: vec![ pathfinder_executor::types::TransactionSimulation{ trace: pathfinder_executor::types::TransactionTrace::Declare(pathfinder_executor::types::DeclareTransactionTrace { execution_info: DeclareTransactionExecutionInfo { @@ -632,9 +870,11 @@ pub(crate) mod tests { l2_gas_price: 1.into(), overall_fee: OVERALL_FEE.into(), unit: pathfinder_executor::types::PriceUnit::Wei, - } + }, } - ]).serialize(Serializer { + ], + initial_reads: None, + }.serialize(Serializer { version: RpcVersion::V07, }).unwrap(); @@ -654,6 +894,7 @@ pub(crate) mod tests { pub(crate) mod fixtures { use pathfinder_common::{CasmHash, ContractAddress, Fee}; + use pathfinder_executor::types::StorageDiff; use super::*; @@ -683,6 +924,7 @@ pub(crate) mod tests { use super::*; use crate::types::request::{ BroadcastedDeclareTransactionV2, + BroadcastedDeclareTransactionV3, BroadcastedInvokeTransaction, BroadcastedInvokeTransactionV1, BroadcastedInvokeTransactionV3, @@ -690,11 +932,12 @@ pub(crate) mod tests { }; pub fn declare(account_contract_address: ContractAddress) -> BroadcastedTransaction { - let contract_class = - crate::types::ContractClass::from_definition_bytes(SIERRA_DEFINITION) - .unwrap() - .as_sierra() - .unwrap(); + let contract_class = crate::types::ContractClass::from_serialized_def( + &SerializedOpaqueClassDefinition::from_slice(SIERRA_DEFINITION), + ) + .unwrap() + .as_sierra() + .unwrap(); assert_eq!(contract_class.class_hash().unwrap().hash(), SIERRA_HASH); @@ -711,9 +954,59 @@ pub(crate) mod tests { )) } + pub fn declare_integration( + account_contract_address: ContractAddress, + ) -> (BroadcastedTransaction, ClassHash) { + let contract_definition = + include_bytes!("../../fixtures/contracts/libfuncs_coverage.json"); + let contract_class = crate::types::ContractClass::from_serialized_def( + &SerializedOpaqueClassDefinition::from_slice(contract_definition), + ) + .unwrap() + .as_sierra() + .unwrap(); + let contract_hash = contract_class.class_hash().unwrap().hash(); + let declare_tx = BroadcastedTransaction::Declare( + BroadcastedDeclareTransaction::V3(BroadcastedDeclareTransactionV3 { + version: TransactionVersion::THREE, + signature: vec![], + nonce: transaction_nonce!("0x0"), + resource_bounds: ResourceBounds { + l1_gas: ResourceBound { + max_amount: ResourceAmount(100000), + max_price_per_unit: ResourcePricePerUnit(10), + }, + l2_gas: Default::default(), + l1_data_gas: Default::default(), + }, + tip: Tip(0), + paymaster_data: vec![], + account_deployment_data: vec![], + nonce_data_availability_mode: DataAvailabilityMode::L1, + fee_data_availability_mode: DataAvailabilityMode::L1, + contract_class, + sender_address: account_contract_address, + compiled_class_hash: CASM_HASH, + }), + ); + (declare_tx, contract_hash) + } + pub fn universal_deployer( account_contract_address: ContractAddress, universal_deployer_address: ContractAddress, + ) -> BroadcastedTransaction { + universal_deployer_ex( + account_contract_address, + universal_deployer_address, + SIERRA_HASH, + ) + } + + pub fn universal_deployer_ex( + account_contract_address: ContractAddress, + universal_deployer_address: ContractAddress, + contract_hash: ClassHash, ) -> BroadcastedTransaction { BroadcastedTransaction::Invoke(BroadcastedInvokeTransaction::V1( BroadcastedInvokeTransactionV1 { @@ -733,7 +1026,7 @@ pub(crate) mod tests { // AccountCallArray::data_len call_param!("4"), // classHash - CallParam(SIERRA_HASH.0), + CallParam(contract_hash.0), // salt call_param!("0x0"), // unique @@ -802,6 +1095,8 @@ pub(crate) mod tests { // AccountCallArray::data_len call_param!("0"), ], + proof_facts: vec![], + proof: Default::default(), }, )) } @@ -845,21 +1140,25 @@ pub(crate) mod tests { // AccountCallArray::data_len call_param!("0"), ], + proof_facts: vec![], + proof: Default::default(), }, )) } } + type StorageDiffs = (ContractAddress, Vec); + pub mod expected_output_0_13_1_1 { use pathfinder_common::{BlockHeader, ContractAddress, SierraHash, StorageValue}; use super::*; - use crate::method::get_state_update::types::{StorageDiff, StorageEntry}; const DECLARE_OVERALL_FEE: u64 = 1262; const DECLARE_GAS_CONSUMED: u64 = 878; const DECLARE_DATA_GAS_CONSUMED: u64 = 192; + pub fn declare( account_contract_address: ContractAddress, last_block_header: &BlockHeader, @@ -932,25 +1231,11 @@ pub(crate) mod tests { fn declare_state_diff( account_contract_address: ContractAddress, - storage_diffs: Vec, + storage_diffs: Vec, ) -> pathfinder_executor::types::StateDiff { pathfinder_executor::types::StateDiff { storage_diffs: BTreeMap::from_iter( - storage_diffs - .into_iter() - .map(|diff| { - ( - diff.address, - diff.storage_entries - .into_iter() - .map(|entry| pathfinder_executor::types::StorageDiff { - key: entry.key, - value: entry.value, - }) - .collect(), - ) - }) - .collect::>(), + storage_diffs.into_iter().collect::>(), ), deprecated_declared_classes: HashSet::new(), declared_classes: vec![pathfinder_executor::types::DeclaredSierraClass { @@ -964,20 +1249,18 @@ pub(crate) mod tests { } } - fn declare_fee_transfer_storage_diffs() -> Vec { - vec![StorageDiff { - address: ETH_FEE_TOKEN_ADDRESS, - storage_entries: vec![ - StorageEntry { + fn declare_fee_transfer_storage_diffs() -> Vec { + vec![(ETH_FEE_TOKEN_ADDRESS, vec![ + StorageDiff { key: storage_address!("0x032a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e"), value: storage_value!("0x000000000000000000000000000000000000fffffffffffffffffffffffffb12") }, - StorageEntry { + StorageDiff { key: storage_address!("0x05496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a"), value: StorageValue(DECLARE_OVERALL_FEE.into()), }, - ], - }] + ]) + ] } fn declare_fee_transfer( @@ -1138,25 +1421,11 @@ pub(crate) mod tests { fn universal_deployer_state_diff( account_contract_address: ContractAddress, - storage_diffs: Vec, + storage_diffs: Vec, ) -> pathfinder_executor::types::StateDiff { pathfinder_executor::types::StateDiff { storage_diffs: BTreeMap::from_iter( - storage_diffs - .into_iter() - .map(|diff| { - ( - diff.address, - diff.storage_entries - .into_iter() - .map(|entry| pathfinder_executor::types::StorageDiff { - key: entry.key, - value: entry.value, - }) - .collect(), - ) - }) - .collect::>(), + storage_diffs.into_iter().collect::>(), ), deprecated_declared_classes: HashSet::new(), declared_classes: vec![], @@ -1172,20 +1441,20 @@ pub(crate) mod tests { fn universal_deployer_fee_transfer_storage_diffs( overall_fee_correction: u64, - ) -> Vec { - vec![StorageDiff { - address: ETH_FEE_TOKEN_ADDRESS, - storage_entries: vec![ - StorageEntry { + ) -> Vec { + vec![( + ETH_FEE_TOKEN_ADDRESS, + vec![ + StorageDiff { key: storage_address!("0x032a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e"), value: StorageValue((0xfffffffffffffffffffffffff93fu128 + u128::from(overall_fee_correction)).into()), }, - StorageEntry { + StorageDiff { key: storage_address!("0x05496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a"), value: StorageValue((DECLARE_OVERALL_FEE + UNIVERSAL_DEPLOYER_OVERALL_FEE - overall_fee_correction).into()), }, ], - }] + )] } fn universal_deployer_validate( @@ -1464,25 +1733,11 @@ pub(crate) mod tests { fn invoke_state_diff( account_contract_address: ContractAddress, - storage_diffs: Vec, + storage_diffs: Vec, ) -> pathfinder_executor::types::StateDiff { pathfinder_executor::types::StateDiff { storage_diffs: BTreeMap::from_iter( - storage_diffs - .into_iter() - .map(|diff| { - ( - diff.address, - diff.storage_entries - .into_iter() - .map(|entry| pathfinder_executor::types::StorageDiff { - key: entry.key, - value: entry.value, - }) - .collect(), - ) - }) - .collect::>(), + storage_diffs.into_iter().collect::>(), ), deprecated_declared_classes: HashSet::new(), declared_classes: vec![], @@ -1493,20 +1748,19 @@ pub(crate) mod tests { } } - fn invoke_fee_transfer_storage_diffs(overall_fee_correction: u64) -> Vec { - vec![StorageDiff { - address: ETH_FEE_TOKEN_ADDRESS, - storage_entries: vec![ - StorageEntry { + fn invoke_fee_transfer_storage_diffs(overall_fee_correction: u64) -> Vec { + vec![(ETH_FEE_TOKEN_ADDRESS, + vec![ + StorageDiff { key: storage_address!("0x032a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e"), value: StorageValue((0xfffffffffffffffffffffffff831u128 + u128::from(2 * overall_fee_correction)).into()), }, - StorageEntry { + StorageDiff { key: storage_address!("0x05496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a"), value: StorageValue((DECLARE_OVERALL_FEE + UNIVERSAL_DEPLOYER_OVERALL_FEE + INVOKE_OVERALL_FEE - 2 * overall_fee_correction).into()), }, ], - }] + )] } fn invoke_validate( @@ -1642,7 +1896,6 @@ pub(crate) mod tests { use pathfinder_common::{BlockHeader, ContractAddress, SierraHash, StorageValue}; use super::*; - use crate::method::get_state_update::types::{StorageDiff, StorageEntry}; const DECLARE_OVERALL_FEE: u64 = 1266; const DECLARE_GAS_CONSUMED: u64 = 882; @@ -1719,25 +1972,11 @@ pub(crate) mod tests { fn declare_state_diff( account_contract_address: ContractAddress, - storage_diffs: Vec, + storage_diffs: Vec, ) -> pathfinder_executor::types::StateDiff { pathfinder_executor::types::StateDiff { storage_diffs: BTreeMap::from_iter( - storage_diffs - .into_iter() - .map(|diff| { - ( - diff.address, - diff.storage_entries - .into_iter() - .map(|entry| pathfinder_executor::types::StorageDiff { - key: entry.key, - value: entry.value, - }) - .collect(), - ) - }) - .collect::>(), + storage_diffs.into_iter().collect::>(), ), deprecated_declared_classes: HashSet::new(), declared_classes: vec![pathfinder_executor::types::DeclaredSierraClass { @@ -1751,20 +1990,20 @@ pub(crate) mod tests { } } - fn declare_fee_transfer_storage_diffs() -> Vec { - vec![StorageDiff { - address: ETH_FEE_TOKEN_ADDRESS, - storage_entries: vec![ - StorageEntry { + fn declare_fee_transfer_storage_diffs() -> Vec { + vec![( + ETH_FEE_TOKEN_ADDRESS, + vec![ + StorageDiff { key: storage_address!("0x032a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e"), value: storage_value!("0x000000000000000000000000000000000000fffffffffffffffffffffffffb12") }, - StorageEntry { + StorageDiff { key: storage_address!("0x05496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a"), value: StorageValue(DECLARE_OVERALL_FEE.into()), }, ], - }] + )] } fn declare_fee_transfer( @@ -1925,25 +2164,11 @@ pub(crate) mod tests { fn universal_deployer_state_diff( account_contract_address: ContractAddress, - storage_diffs: Vec, + storage_diffs: Vec, ) -> pathfinder_executor::types::StateDiff { pathfinder_executor::types::StateDiff { storage_diffs: BTreeMap::from_iter( - storage_diffs - .into_iter() - .map(|diff| { - ( - diff.address, - diff.storage_entries - .into_iter() - .map(|entry| pathfinder_executor::types::StorageDiff { - key: entry.key, - value: entry.value, - }) - .collect(), - ) - }) - .collect::>(), + storage_diffs.into_iter().collect::>(), ), deprecated_declared_classes: HashSet::new(), declared_classes: vec![], @@ -1959,20 +2184,19 @@ pub(crate) mod tests { fn universal_deployer_fee_transfer_storage_diffs( overall_fee_correction: u64, - ) -> Vec { - vec![StorageDiff { - address: ETH_FEE_TOKEN_ADDRESS, - storage_entries: vec![ - StorageEntry { + ) -> Vec { + vec![(ETH_FEE_TOKEN_ADDRESS, + vec![ + StorageDiff { key: storage_address!("0x032a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e"), value: StorageValue((0xfffffffffffffffffffffffff93fu128 + u128::from(overall_fee_correction)).into()), }, - StorageEntry { + StorageDiff { key: storage_address!("0x05496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a"), value: StorageValue((DECLARE_OVERALL_FEE + UNIVERSAL_DEPLOYER_OVERALL_FEE - overall_fee_correction).into()), }, ], - }] + )] } fn universal_deployer_validate( @@ -2251,25 +2475,11 @@ pub(crate) mod tests { fn invoke_state_diff( account_contract_address: ContractAddress, - storage_diffs: Vec, + storage_diffs: Vec, ) -> pathfinder_executor::types::StateDiff { pathfinder_executor::types::StateDiff { storage_diffs: BTreeMap::from_iter( - storage_diffs - .into_iter() - .map(|diff| { - ( - diff.address, - diff.storage_entries - .into_iter() - .map(|entry| pathfinder_executor::types::StorageDiff { - key: entry.key, - value: entry.value, - }) - .collect(), - ) - }) - .collect::>(), + storage_diffs.into_iter().collect::>(), ), deprecated_declared_classes: HashSet::new(), declared_classes: vec![], @@ -2280,20 +2490,19 @@ pub(crate) mod tests { } } - fn invoke_fee_transfer_storage_diffs(overall_fee_correction: u64) -> Vec { - vec![StorageDiff { - address: ETH_FEE_TOKEN_ADDRESS, - storage_entries: vec![ - StorageEntry { + fn invoke_fee_transfer_storage_diffs(overall_fee_correction: u64) -> Vec { + vec![(ETH_FEE_TOKEN_ADDRESS, + vec![ + StorageDiff { key: storage_address!("0x032a4edd4e4cffa71ee6d0971c54ac9e62009526cd78af7404aa968c3dc3408e"), value: StorageValue((0xfffffffffffffffffffffffff831u128 + u128::from(2 * overall_fee_correction)).into()), }, - StorageEntry { + StorageDiff { key: storage_address!("0x05496768776e3db30053404f18067d81a6e06f5a2b0de326e21298fd9d569a9a"), value: StorageValue((DECLARE_OVERALL_FEE + UNIVERSAL_DEPLOYER_OVERALL_FEE + INVOKE_OVERALL_FEE - 2 * overall_fee_correction).into()), }, ], - }] + )] } fn invoke_validate( @@ -2449,19 +2658,11 @@ pub(crate) mod tests { block_id: BlockId::Number(last_block_header.number), simulation_flags: crate::dto::SimulationFlags(vec![]), }; - let result = simulate_transactions(context, input, version) + let result_serialized = simulate_transactions(context, input, version) .await + .unwrap() + .serialize(crate::dto::Serializer { version }) .unwrap(); - - let serializer = crate::dto::Serializer { version }; - let result_serializable = result.0.into_iter().collect::>(); - let result_serialized = serializer - .serialize_iter( - result_serializable.len(), - &mut result_serializable.into_iter(), - ) - .unwrap(); - crate::assert_json_matches_fixture!( result_serialized, version, @@ -2497,19 +2698,11 @@ pub(crate) mod tests { crate::dto::SimulationFlag::SkipFeeCharge, ]), }; - let result = simulate_transactions(context, input, version) + let result_serialized = simulate_transactions(context, input, version) .await + .unwrap() + .serialize(crate::dto::Serializer { version }) .unwrap(); - - let serializer = crate::dto::Serializer { version }; - let result_serializable = result.0.into_iter().collect::>(); - let result_serialized = serializer - .serialize_iter( - result_serializable.len(), - &mut result_serializable.into_iter(), - ) - .unwrap(); - crate::assert_json_matches_fixture!( result_serialized, version, @@ -2546,19 +2739,11 @@ pub(crate) mod tests { ]), }; - let result = simulate_transactions(context, input, version) + let result_serialized = simulate_transactions(context, input, version) .await + .unwrap() + .serialize(crate::dto::Serializer { version }) .unwrap(); - - let serializer = crate::dto::Serializer { version }; - let result_serializable = result.0.into_iter().collect::>(); - let result_serialized = serializer - .serialize_iter( - result_serializable.len(), - &mut result_serializable.into_iter(), - ) - .unwrap(); - crate::assert_json_matches_fixture!( result_serialized, version, @@ -2590,19 +2775,11 @@ pub(crate) mod tests { block_id: BlockId::Number(last_block_header.number), simulation_flags: crate::dto::SimulationFlags(vec![]), }; - let result = simulate_transactions(context, input, version) + let result_serialized = simulate_transactions(context, input, version) .await + .unwrap() + .serialize(crate::dto::Serializer { version }) .unwrap(); - - let serializer = crate::dto::Serializer { version }; - let result_serializable = result.0.into_iter().collect::>(); - let result_serialized = serializer - .serialize_iter( - result_serializable.len(), - &mut result_serializable.into_iter(), - ) - .unwrap(); - crate::assert_json_matches_fixture!( result_serialized, version, @@ -2634,19 +2811,11 @@ pub(crate) mod tests { block_id: BlockId::Number(last_block_header.number), simulation_flags: crate::dto::SimulationFlags(vec![]), }; - let result = simulate_transactions(context, input, version) + let result_serialized = simulate_transactions(context, input, version) .await + .unwrap() + .serialize(crate::dto::Serializer { version }) .unwrap(); - - let serializer = crate::dto::Serializer { version }; - let result_serializable = result.0.into_iter().collect::>(); - let result_serialized = serializer - .serialize_iter( - result_serializable.len(), - &mut result_serializable.into_iter(), - ) - .unwrap(); - crate::assert_json_matches_fixture!( result_serialized, version, @@ -2654,6 +2823,38 @@ pub(crate) mod tests { ); } + #[test_log::test(tokio::test)] + async fn declare_and_deploy_integration_test() { + let version = RpcVersion::V10; + let (storage, last_block_header, account_contract_address, universal_deployer_address, _) = + setup_storage_with_starknet_version(StarknetVersion::new(0, 14, 0, 0)).await; + let context = RpcContext::for_tests().with_storage(storage); + + let (declare_tx, contract_hash) = + fixtures::input::declare_integration(account_contract_address); + let input = SimulateTransactionInput { + transactions: vec![ + declare_tx, + fixtures::input::universal_deployer_ex( + account_contract_address, + universal_deployer_address, + contract_hash, + ), + ], + block_id: BlockId::Number(last_block_header.number), + simulation_flags: crate::dto::SimulationFlags(vec![]), + }; + let result_serialized = simulate_transactions(context, input, version) + .await + .unwrap() + .serialize(crate::dto::Serializer { version }) + .unwrap(); + let fixture_str = + include_str!("../../fixtures/0.10.0/simulations/declare_and_deploy_integration.json"); + let fixture_json: serde_json::Value = serde_json::from_str(fixture_str).unwrap(); + pretty_assertions_sorted::assert_eq!(result_serialized, fixture_json); + } + #[test_log::test(tokio::test)] async fn deploy_account_starknet_0_14_0() { let starknet_version = StarknetVersion::new(0, 14, 0, 0); @@ -2721,7 +2922,7 @@ pub(crate) mod tests { overall_fee: 0xb96e2.into(), unit: PriceUnit::Fri, }; - assert_eq!(result.0[0].fee_estimation, expected_fee_estimate); + assert_eq!(result.simulations[0].fee_estimation, expected_fee_estimate); } #[test_log::test(tokio::test)] @@ -2782,7 +2983,7 @@ pub(crate) mod tests { overall_fee: 0xb96e2.into(), unit: PriceUnit::Fri, }; - assert_eq!(result.0[0].fee_estimation, expected_fee_estimate); + assert_eq!(result.simulations[0].fee_estimation, expected_fee_estimate); } const RPC_VERSION: RpcVersion = RpcVersion::V09; diff --git a/crates/rpc/src/method/subscribe_events.rs b/crates/rpc/src/method/subscribe_events.rs index bb6b21e61f..fa18cce88d 100644 --- a/crates/rpc/src/method/subscribe_events.rs +++ b/crates/rpc/src/method/subscribe_events.rs @@ -20,7 +20,7 @@ pub struct SubscribeEvents; #[derive(Debug, Clone, Default)] pub struct Params { - from_address: Option, + from_addresses: HashSet, keys: Option>>, block_id: Option, finality_status: NewTxnFinalityStatus, @@ -28,10 +28,8 @@ pub struct Params { impl Params { fn matches(&self, event: &pathfinder_common::event::Event) -> bool { - if let Some(from_address) = self.from_address { - if event.from_address != from_address { - return false; - } + if !self.from_addresses.is_empty() && !self.from_addresses.contains(&event.from_address) { + return false; } if let Some(keys) = &self.keys { let no_key_constraints = keys.iter().flatten().count() == 0; @@ -50,6 +48,12 @@ impl Params { true } } + + fn get_addresses(&self) -> Vec { + let mut addresses: Vec = self.from_addresses.iter().cloned().collect(); + addresses.sort(); + addresses + } } impl crate::dto::DeserializeForVersion for Option { @@ -60,6 +64,16 @@ impl crate::dto::DeserializeForVersion for Option { } let version = value.version; value.deserialize_map(|value| { + let raw_addresses = if version >= RpcVersion::V10 { + value.deserialize_optional_array_or_scalar("from_address", |v| v.deserialize())? + } else { + let mut opt_address = vec![]; + if let Some(addr) = value.deserialize_optional("from_address")? { + opt_address.push(addr); + } + + opt_address + }; let finality_status = if version < RpcVersion::V09 { NewTxnFinalityStatus::default() } else { @@ -68,9 +82,7 @@ impl crate::dto::DeserializeForVersion for Option { .unwrap_or_default() }; Ok(Some(Params { - from_address: value - .deserialize_optional("from_address")? - .map(ContractAddress), + from_addresses: HashSet::from_iter(raw_addresses.into_iter().map(ContractAddress)), keys: value.deserialize_optional_array("keys", |value| { value.deserialize_array(|value| Ok(EventKey(value.deserialize()?))) })?, @@ -169,8 +181,8 @@ impl RpcSubscriptionFlow for SubscribeEvents { let params = params.clone().unwrap_or_default(); let storage = state.storage.clone(); let (events, last_l1_block, last_block) = util::task::spawn_blocking(move |_| -> Result<_, RpcError> { - let mut conn = storage.connection().map_err(RpcError::InternalError)?; - let db = conn.transaction().map_err(RpcError::InternalError)?; + let mut conn = storage.connection()?; + let db = conn.transaction()?; if db.blockchain_pruning_enabled() { let blockchain_history_tip = db @@ -199,7 +211,7 @@ impl RpcSubscriptionFlow for SubscribeEvents { .events_in_range( from, to, - params.from_address, + params.get_addresses(), params.keys.unwrap_or_default(), ) .map_err(RpcError::InternalError)?; @@ -295,8 +307,8 @@ impl RpcSubscriptionFlow for SubscribeEvents { block = blocks.recv() => { match block { Ok(block) => { - let block_number = block.block_number; - let block_hash = block.block_hash; + let block_number = block.header.number; + let block_hash = block.header.hash; tracing::trace!(%block_number, %block_hash, "Received new block"); @@ -306,10 +318,15 @@ impl RpcSubscriptionFlow for SubscribeEvents { .remove(&block_number) .unwrap_or_default(); + let l2_txs_and_receipts = block + .transactions_and_receipts + .iter() + .zip(block.events.iter()); + // Send all events that might have been missed in the pending data. This should only // happen if the subscription started after the transactions were already evicted // from pending data but before receiving the L2 block that contains them. - for (receipt, events) in &block.transaction_receipts { + for ((_, receipt), events) in l2_txs_and_receipts { let tx_and_finality = (receipt.transaction_hash, TxnFinalityStatus::AcceptedOnL2); if sent_updates.contains(&tx_and_finality) { continue; @@ -360,23 +377,23 @@ impl RpcSubscriptionFlow for SubscribeEvents { let pending = pending_data.borrow_and_update().clone(); // pre-confirmed data is returned only if explicitly requested - if pending.is_pre_confirmed() && !params.finality_status.is_pre_confirmed() { + if !params.finality_status.is_pre_confirmed() { continue; } - tracing::trace!(block_number=%pending.pending_block_number(), "Received pending block update"); + tracing::trace!(block_number=%pending.pre_confirmed_block_number(), "Received pre-confirmed block update"); let pending_finality = pending.finality_status(); - let pending_block_number = pending.pending_block_number(); + let pre_confirmed_block_number = pending.pre_confirmed_block_number(); let sent_pending_updates = sent_updates_per_block - .entry(pending_block_number) + .entry(pre_confirmed_block_number) .or_default(); if send_event_updates( - pending.pending_tx_receipts_and_events(), + pending.pre_confirmed_tx_receipts_and_events(), sent_pending_updates, None, - pending_block_number, + pre_confirmed_block_number, pending_finality, ¶ms, &tx @@ -405,7 +422,7 @@ impl RpcSubscriptionFlow for SubscribeEvents { sent_pre_latest_updates, None, pre_latest_block_number, - TxnFinalityStatus::AcceptedOnL2, + TxnFinalityStatus::PreConfirmed, ¶ms, &tx, ) @@ -473,9 +490,11 @@ mod tests { use pathfinder_common::prelude::*; use pathfinder_common::receipt::Receipt; use pathfinder_common::transaction::{Transaction, TransactionVariant}; + use pathfinder_common::L2Block; use pathfinder_crypto::Felt; use pathfinder_storage::StorageBuilder; - use starknet_gateway_types::reply::{Block, PendingBlock, PreConfirmedBlock}; + use pretty_assertions_sorted::assert_eq; + use starknet_gateway_types::reply::PreConfirmedBlock; use tokio::sync::mpsc; use crate::context::{RpcContext, WebsocketContext}; @@ -685,15 +704,16 @@ mod tests { #[tokio::test] async fn filter_from_address_and_keys() { + let rpc_version = RpcVersion::V10; let (router, _pending_data_tx) = - setup(SubscribeEvents::CATCH_UP_BATCH_SIZE + 10, RpcVersion::V08).await; + setup(SubscribeEvents::CATCH_UP_BATCH_SIZE + 10, rpc_version).await; let (sender_tx, mut sender_rx) = mpsc::channel(1024); let (receiver_tx, receiver_rx) = mpsc::channel(1024); handle_json_rpc_socket(router.clone(), sender_tx, receiver_rx); let params = serde_json::json!( { "block_id": {"block_number": 0}, - "from_address": "0xdc", + "from_address": ["0xfe", "0xdc"], "keys": [["0x16"], [], ["0x17", "0x18"]], } ); @@ -720,7 +740,7 @@ mod tests { } _ => panic!("Expected text message"), }; - let expected = sample_event_message(0x16, subscription_id, RpcVersion::V08); + let expected = sample_event_message(0x16, subscription_id, rpc_version); let event = sender_rx.recv().await.unwrap().unwrap(); let json: serde_json::Value = match event { Message::Text(json) => serde_json::from_str(&json).unwrap(), @@ -742,7 +762,7 @@ mod tests { .l2_blocks .send(sample_block(0x16).into()) .unwrap(); - let expected = sample_event_message(0x16, subscription_id, RpcVersion::V08); + let expected = sample_event_message(0x16, subscription_id, rpc_version); let event = sender_rx.recv().await.unwrap().unwrap(); let json: serde_json::Value = match event { Message::Text(json) => serde_json::from_str(&json).unwrap(), @@ -753,9 +773,9 @@ mod tests { } #[test_log::test(tokio::test)] - async fn filter_keys_pending() { + async fn filter_keys_pre_confirmed() { let num_blocks = SubscribeEvents::CATCH_UP_BATCH_SIZE + 10; - let (router, pending_data_tx) = setup(num_blocks, RpcVersion::V08).await; + let (router, pending_data_tx) = setup(num_blocks, RpcVersion::V09).await; let (sender_tx, mut sender_rx) = mpsc::channel(1024); let (receiver_tx, receiver_rx) = mpsc::channel(1024); handle_json_rpc_socket(router.clone(), sender_tx, receiver_rx); @@ -763,6 +783,7 @@ mod tests { { "block_id": {"block_number": 0}, "keys": [["0x16", format!("{:x}", num_blocks), format!("{:x}", num_blocks + 1)]], + "finality_status": "PRE_CONFIRMED", } ); receiver_tx @@ -789,7 +810,7 @@ mod tests { _ => panic!("Expected text message"), }; - let expected = sample_event_message(0x16, subscription_id, RpcVersion::V08); + let expected = sample_event_message(0x16, subscription_id, RpcVersion::V09); let event = sender_rx.recv().await.unwrap().unwrap(); let json: serde_json::Value = match event { Message::Text(json) => serde_json::from_str(&json).unwrap(), @@ -799,11 +820,13 @@ mod tests { let next_block_number = SubscribeEvents::CATCH_UP_BATCH_SIZE + 10; pending_data_tx - .send(crate::PendingData::from_pending_block( - sample_pending_block(next_block_number), - StateUpdate::default(), - BlockNumber::new_or_panic(next_block_number), - )) + .send( + crate::PendingData::try_from_pre_confirmed_block( + sample_pre_confirmed_block(next_block_number).into(), + BlockNumber::new_or_panic(next_block_number), + ) + .unwrap(), + ) .unwrap(); let expected = sample_event_message_without_block_hash(next_block_number, subscription_id); let event = sender_rx.recv().await.unwrap().unwrap(); @@ -820,6 +843,14 @@ mod tests { .send(sample_block(next_block_number).into()) .unwrap(); + let expected = sample_event_message(next_block_number, subscription_id, RpcVersion::V09); + let event = sender_rx.recv().await.unwrap().unwrap(); + let json: serde_json::Value = match event { + Message::Text(json) => serde_json::from_str(&json).unwrap(), + _ => panic!("Expected text message"), + }; + assert_eq!(json, expected); + let next_block_number = next_block_number + 1; assert_eq!( router @@ -831,7 +862,7 @@ mod tests { 1 ); - let expected = sample_event_message(next_block_number, subscription_id, RpcVersion::V08); + let expected = sample_event_message(next_block_number, subscription_id, RpcVersion::V09); let event = sender_rx.recv().await.unwrap().unwrap(); let json: serde_json::Value = match event { Message::Text(json) => serde_json::from_str(&json).unwrap(), @@ -1294,26 +1325,14 @@ mod tests { } } - fn sample_block(block_number: u64) -> Block { - Block { - block_hash: BlockHash(Felt::from_u64(100 * block_number)), - block_number: BlockNumber::new_or_panic(block_number), - transaction_receipts: vec![( + fn sample_block(block_number: u64) -> L2Block { + L2Block { + header: sample_header(block_number), + transactions_and_receipts: vec![( + sample_transaction(block_number), sample_receipt(block_number), - vec![sample_event(block_number)], )], - transactions: vec![sample_transaction(block_number)], - ..Default::default() - } - } - - fn sample_pending_block(block_number: u64) -> PendingBlock { - PendingBlock { - transaction_receipts: vec![( - sample_receipt(block_number), - vec![sample_event(block_number)], - )], - transactions: vec![sample_transaction(block_number)], + events: vec![vec![sample_event(block_number)]], ..Default::default() } } @@ -1353,6 +1372,10 @@ mod tests { if version >= RpcVersion::V09 { result["finality_status"] = "ACCEPTED_ON_L2".into(); } + if version >= RpcVersion::V10 { + result["transaction_index"] = 0.into(); + result["event_index"] = 0.into(); + } serde_json::json!({ "jsonrpc":"2.0", "method":"starknet_subscriptionEvents", @@ -1372,6 +1395,8 @@ mod tests { .as_object_mut() .unwrap() .remove("block_hash"); + message["params"]["result"]["finality_status"] = "PRE_CONFIRMED".into(); + message } diff --git a/crates/rpc/src/method/subscribe_new_heads.rs b/crates/rpc/src/method/subscribe_new_heads.rs index 19cb0f1c73..bf6f73242b 100644 --- a/crates/rpc/src/method/subscribe_new_heads.rs +++ b/crates/rpc/src/method/subscribe_new_heads.rs @@ -69,8 +69,8 @@ impl RpcSubscriptionFlow for SubscribeNewHeads { ) -> Result, RpcError> { let storage = state.storage.clone(); let headers = util::task::spawn_blocking(move |_| -> Result<_, RpcError> { - let mut conn = storage.connection().map_err(RpcError::InternalError)?; - let db = conn.transaction().map_err(RpcError::InternalError)?; + let mut conn = storage.connection()?; + let db = conn.transaction()?; db.block_range(from, to).map_err(RpcError::InternalError) }) .await diff --git a/crates/rpc/src/method/subscribe_new_transaction_receipts.rs b/crates/rpc/src/method/subscribe_new_transaction_receipts.rs index 168d8ce381..4be9988e41 100644 --- a/crates/rpc/src/method/subscribe_new_transaction_receipts.rs +++ b/crates/rpc/src/method/subscribe_new_transaction_receipts.rs @@ -200,24 +200,24 @@ impl RpcSubscriptionFlow for SubscribeNewTransactionReceipts { return Ok(()); } Ok(block) => { - tracing::trace!(block_number=%block.block_number, "New block header"); + tracing::trace!(block_number=%block.header.number, "New block header"); // We won't be needing to keep track of updates for this block anymore, // so we remove it from the map. let sent_updates = sent_updates_per_block - .remove(&block.block_number) + .remove(&block.header.number) .unwrap_or_default(); let l2_txs_and_receipts = block - .transactions + .transactions_and_receipts .iter() - .zip(block.transaction_receipts.iter()); + .zip(block.events.iter()); // Send all transaction receipts that might have been missed in the pending data. // This should only happen if the subscription started after the transactions were // already evicted from pending data but before receiving the L2 block that contains // them. - for (tx, (receipt, events)) in l2_txs_and_receipts { + for ((tx, receipt), events) in l2_txs_and_receipts { let sender_address = tx.variant.sender_address(); if !params.matches(&sender_address, TxnFinalityStatus::AcceptedOnL2) { continue; @@ -228,8 +228,8 @@ impl RpcSubscriptionFlow for SubscribeNewTransactionReceipts { } let notification = Notification::EmittedTransaction(Box::new(TransactionWithReceipt { - block_hash: Some(block.block_hash), - block_number: block.block_number, + block_hash: Some(block.header.hash), + block_number: block.header.number, receipt: receipt.clone(), transaction: tx.clone(), events: events.clone(), @@ -237,7 +237,7 @@ impl RpcSubscriptionFlow for SubscribeNewTransactionReceipts { })); let msg = SubscriptionMessage { notification, - block_number: block.block_number, + block_number: block.header.number, subscription_name: SUBSCRIPTION_NAME, }; if msg_tx.send(msg).await.is_err() { @@ -255,25 +255,25 @@ impl RpcSubscriptionFlow for SubscribeNewTransactionReceipts { } let pending = pending_data.borrow_and_update().clone(); - let pending_block_number = pending.pending_block_number(); + let pre_confirmed_block_number = pending.pre_confirmed_block_number(); let pending_finality_status = pending.pending_block().finality_status(); tracing::trace!( - block_number = %pending_block_number, + block_number = %pre_confirmed_block_number, finality_status = ?pending_finality_status, "Pre-confirmed block update" ); let sent_pending_updates = sent_updates_per_block - .entry(pending_block_number) + .entry(pre_confirmed_block_number) .or_default(); let pending_txs_and_receipts = pending - .pending_transactions() + .pre_confirmed_transactions() .iter() .zip( pending - .pending_tx_receipts_and_events() + .pre_confirmed_tx_receipts_and_events() .iter() ); @@ -281,7 +281,7 @@ impl RpcSubscriptionFlow for SubscribeNewTransactionReceipts { pending_txs_and_receipts, sent_pending_updates, None, - pending_block_number, + pre_confirmed_block_number, pending_finality_status, ¶ms, &msg_tx @@ -317,7 +317,7 @@ impl RpcSubscriptionFlow for SubscribeNewTransactionReceipts { sent_pre_latest_updates, None, pre_latest_block_number, - TxnFinalityStatus::AcceptedOnL2, + TxnFinalityStatus::PreConfirmed, ¶ms, &msg_tx, ) @@ -380,6 +380,7 @@ mod tests { use pathfinder_common::macro_prelude::*; use pathfinder_common::prelude::*; use pathfinder_common::transaction::{DeclareTransactionV0V1, Transaction, TransactionVariant}; + use pathfinder_common::L2Block; use pathfinder_crypto::Felt; use pathfinder_storage::StorageBuilder; use pretty_assertions_sorted::assert_eq; @@ -973,33 +974,28 @@ mod tests { fn sample_block( block_number: BlockNumber, txs: Vec<(ContractAddress, TransactionHash)>, - ) -> starknet_gateway_types::reply::Block { - starknet_gateway_types::reply::Block { - block_hash: BlockHash(Felt::from_u64(block_number.get())), - block_number, - parent_block_hash: BlockHash::ZERO, - transactions: txs - .iter() - .map(|(sender_address, hash)| Transaction { - variant: TransactionVariant::DeclareV0(DeclareTransactionV0V1 { - sender_address: *sender_address, - ..Default::default() - }), - hash: *hash, - }) - .collect(), - transaction_receipts: txs + ) -> L2Block { + L2Block { + header: sample_header(block_number.get()), + transactions_and_receipts: txs .iter() - .map(|(_sender_address, hash)| { - ( - pathfinder_common::receipt::Receipt { - transaction_hash: *hash, + .map(|(sender_address, hash)| { + let tx = Transaction { + variant: TransactionVariant::DeclareV0(DeclareTransactionV0V1 { + sender_address: *sender_address, ..Default::default() - }, - vec![], - ) + }), + hash: *hash, + }; + let receipt = pathfinder_common::receipt::Receipt { + transaction_hash: *hash, + ..Default::default() + }; + + (tx, receipt) }) .collect(), + events: vec![vec![]; txs.len()], ..Default::default() } } diff --git a/crates/rpc/src/method/subscribe_new_transactions.rs b/crates/rpc/src/method/subscribe_new_transactions.rs index fed2dd5b99..1722a34fcb 100644 --- a/crates/rpc/src/method/subscribe_new_transactions.rs +++ b/crates/rpc/src/method/subscribe_new_transactions.rs @@ -7,7 +7,7 @@ use tokio::sync::mpsc; use super::REORG_SUBSCRIPTION_NAME; use crate::context::RpcContext; -use crate::dto::TransactionWithHash; +use crate::dto::{TransactionResponseFlag, TransactionWithHash}; use crate::jsonrpc::{RpcError, RpcSubscriptionFlow, SubscriptionMessage}; use crate::{Reorg, RpcVersion}; @@ -17,6 +17,7 @@ pub struct SubscribeNewTransactions; pub struct Params { finality_status: Vec, sender_address: Option>, + include_proof_facts: bool, } impl Default for Params { @@ -24,6 +25,7 @@ impl Default for Params { Params { finality_status: vec![TxnFinalityStatusWithoutL1Accepted::AcceptedOnL2], sender_address: None, + include_proof_facts: false, } } } @@ -48,18 +50,35 @@ impl crate::dto::DeserializeForVersion for Option { if value.is_null() { return Ok(None); } + let rpc_version = value.version; + value.deserialize_map(|value| { - Ok(Some(Params { - finality_status: value - .deserialize_optional_array("finality_status", |v| { - v.deserialize::() + let finality_status = value + .deserialize_optional_array("finality_status", |v| { + v.deserialize::() + })? + .unwrap_or_else(|| vec![TxnFinalityStatusWithoutL1Accepted::AcceptedOnL2]); + let sender_address = value + .deserialize_optional_array("sender_address", |addr| { + Ok(ContractAddress(addr.deserialize()?)) + })? + .map(|addrs| addrs.into_iter().collect()); + + let tags = if rpc_version >= RpcVersion::V10 { + value + .deserialize_optional_array("tags", |tag| { + tag.deserialize::() })? - .unwrap_or_else(|| vec![TxnFinalityStatusWithoutL1Accepted::AcceptedOnL2]), - sender_address: value - .deserialize_optional_array("sender_address", |addr| { - Ok(ContractAddress(addr.deserialize()?)) - })? - .map(|addrs| addrs.into_iter().collect()), + .unwrap_or_default() + } else { + vec![] + }; + let include_proof_facts = tags.contains(&TransactionResponseFlag::IncludeProofFacts); + + Ok(Some(Params { + finality_status, + sender_address, + include_proof_facts, })) }) } @@ -114,13 +133,19 @@ pub enum Notification { pub struct TransactionWithFinality { transaction: Transaction, finality: TxnFinalityStatusWithoutL1Accepted, + include_proof_facts: bool, } impl Notification { - fn new_transaction(tx: Transaction, finality: TxnFinalityStatusWithoutL1Accepted) -> Self { + fn new_transaction( + tx: Transaction, + finality: TxnFinalityStatusWithoutL1Accepted, + include_proof_facts: bool, + ) -> Self { Notification::EmittedTransaction(Box::new(TransactionWithFinality { transaction: tx, finality, + include_proof_facts, })) } @@ -147,7 +172,10 @@ impl crate::dto::SerializeForVersion for TransactionWithFinality { serializer: crate::dto::Serializer, ) -> Result { let mut serializer = serializer.serialize_struct()?; - serializer.flatten(&TransactionWithHash(&self.transaction))?; + serializer.flatten(&TransactionWithHash { + transaction: &self.transaction, + include_proof_facts: self.include_proof_facts, + })?; serializer.serialize_field("finality_status", &self.finality)?; serializer.end() } @@ -222,19 +250,19 @@ impl RpcSubscriptionFlow for SubscribeNewTransactions { return Ok(()); } Ok(block) => { - tracing::trace!(block_number=%block.block_number, "New block header"); + tracing::trace!(block_number=%block.header.number, "New block header"); // We won't be needing to keep track of updates for this block anymore, // so we remove it from the map. let sent_updates = sent_updates_per_block - .remove(&block.block_number) + .remove(&block.header.number) .unwrap_or_default(); // Send all transactions that might have been missed in the pending data. This // should only happen if the subscription started after the transactions were // already evicted from pending data but before receiving the L2 block that // contains them. - for tx in &block.transactions { + for (tx, _) in &block.transactions_and_receipts { let sender_address = tx.variant.sender_address(); if !params.matches(&sender_address, TxnFinalityStatusWithoutL1Accepted::AcceptedOnL2) { continue; @@ -247,9 +275,10 @@ impl RpcSubscriptionFlow for SubscribeNewTransactions { let msg = SubscriptionMessage { notification: Notification::new_transaction( tx.clone(), - TxnFinalityStatusWithoutL1Accepted::AcceptedOnL2 + TxnFinalityStatusWithoutL1Accepted::AcceptedOnL2, + params.include_proof_facts, ), - block_number: block.block_number, + block_number: block.header.number, subscription_name: SUBSCRIPTION_NAME, }; if msg_tx.send(msg).await.is_err() { @@ -267,39 +296,34 @@ impl RpcSubscriptionFlow for SubscribeNewTransactions { } let pending = pending_data.borrow_and_update().clone(); - let pending_block_number = pending.pending_block_number(); - let pending_finality_status = if pending.is_pre_confirmed() { - TxnFinalityStatusWithoutL1Accepted::PreConfirmed - } else { - TxnFinalityStatusWithoutL1Accepted::AcceptedOnL2 - }; + let pre_confirmed_block_number = pending.pre_confirmed_block_number(); + let pending_finality_status = TxnFinalityStatusWithoutL1Accepted::PreConfirmed; tracing::trace!( - block_number = %pending_block_number, + block_number = %pre_confirmed_block_number, finality_status = ?pending_finality_status, "Pre-confirmed block update" ); let sent_pending_updates = sent_updates_per_block - .entry(pending_block_number) + .entry(pre_confirmed_block_number) .or_default(); let pending_txs = pending - .pending_transactions() + .pre_confirmed_transactions() .iter() .zip(std::iter::repeat(pending_finality_status)) .chain( pending .candidate_transactions() - .into_iter() - .flatten() + .iter() .zip(std::iter::repeat(TxnFinalityStatusWithoutL1Accepted::Candidate)), ); if send_tx_updates( pending_txs, sent_pending_updates, - pending_block_number, + pre_confirmed_block_number, ¶ms, &msg_tx, ) @@ -327,7 +351,7 @@ impl RpcSubscriptionFlow for SubscribeNewTransactions { let pre_latest_txs = pre_latest_block .transactions .iter() - .zip(std::iter::repeat(TxnFinalityStatusWithoutL1Accepted::AcceptedOnL2)); + .zip(std::iter::repeat(TxnFinalityStatusWithoutL1Accepted::PreConfirmed)); if send_tx_updates( pre_latest_txs, @@ -371,6 +395,7 @@ impl RpcSubscriptionFlow for SubscribeNewTransactions { variant, }, TxnFinalityStatusWithoutL1Accepted::Received, + params.include_proof_facts, ); if msg_tx .send(SubscriptionMessage { @@ -420,7 +445,11 @@ async fn send_tx_updates( } let msg = SubscriptionMessage { - notification: Notification::new_transaction(tx.clone(), finality_status), + notification: Notification::new_transaction( + tx.clone(), + finality_status, + params.include_proof_facts, + ), block_number, subscription_name: SUBSCRIPTION_NAME, }; @@ -437,7 +466,8 @@ mod tests { use axum::extract::ws::Message; use pathfinder_common::macro_prelude::*; use pathfinder_common::prelude::*; - use pathfinder_common::transaction::{DeclareTransactionV0V1, Transaction, TransactionVariant}; + use pathfinder_common::transaction::{InvokeTransactionV3, Transaction, TransactionVariant}; + use pathfinder_common::L2Block; use pathfinder_crypto::Felt; use pathfinder_storage::StorageBuilder; use starknet_gateway_types::reply::PreConfirmedBlock; @@ -448,7 +478,7 @@ mod tests { use crate::jsonrpc::websocket::WebsocketHistory; use crate::jsonrpc::{handle_json_rpc_socket, RpcResponse}; use crate::tracker::SubmittedTransactionTracker; - use crate::{v09, Notifications, PendingData, Reorg, RpcVersion}; + use crate::{v10, Notifications, PendingData, Reorg, RpcVersion}; #[test] fn parse_params() { @@ -474,6 +504,37 @@ mod tests { .cloned() .collect() ), + include_proof_facts: false, + } + ); + } + + #[test] + fn parse_params_with_tags() { + let params = crate::dto::Value::new( + serde_json::json!({ + "finality_status": ["ACCEPTED_ON_L2", "PRE_CONFIRMED", "CANDIDATE"], + "sender_address": ["0x1", "0x2"], + "tags": ["INCLUDE_PROOF_FACTS"] + }), + RpcVersion::V10, + ); + let params: Option = params.deserialize().unwrap(); + assert_eq!( + params.unwrap(), + Params { + finality_status: vec![ + TxnFinalityStatusWithoutL1Accepted::AcceptedOnL2, + TxnFinalityStatusWithoutL1Accepted::PreConfirmed, + TxnFinalityStatusWithoutL1Accepted::Candidate + ], + sender_address: Some( + [contract_address!("0x1"), contract_address!("0x2")] + .iter() + .cloned() + .collect() + ), + include_proof_facts: true, } ); } @@ -557,6 +618,68 @@ mod tests { assert_recv_nothing(&mut rx).await; } + #[test_log::test(tokio::test)] + async fn received_no_filtering_include_proof_facts() { + let Setup { + tx, + mut rx, + #[allow(unused_variables)] + pending_data_tx, + submission_tracker, + .. + } = setup(); + tx.send(Ok(Message::Text( + serde_json::json!({ + "jsonrpc": "2.0", + "id": 1, + "method": "starknet_subscribeNewTransactions", + "params": { + "finality_status": ["RECEIVED"], + "tags": ["INCLUDE_PROOF_FACTS"] + } + }) + .to_string() + .into(), + ))) + .await + .unwrap(); + let response = rx.recv().await.unwrap().unwrap(); + let subscription_id = match response { + Message::Text(json) => { + let json: serde_json::Value = serde_json::from_str(&json).unwrap(); + assert_eq!(json["jsonrpc"], "2.0"); + assert_eq!(json["id"], 1); + json["result"].as_str().unwrap().parse().unwrap() + } + _ => { + panic!("Expected text message"); + } + }; + assert_recv_nothing(&mut rx).await; + + // First received update. + let block_number = BlockNumber::new_or_panic(1); + submission_tracker.insert( + transaction_hash!("0x3"), + block_number, + sample_transaction_variant(contract_address!("0x1")), + ); + submission_tracker.insert( + transaction_hash!("0x4"), + block_number, + sample_transaction_variant(contract_address!("0x2")), + ); + assert_eq!( + recv(&mut rx).await, + sample_received_transaction_message_with_proof_facts("0x1", "0x3", subscription_id) + ); + assert_eq!( + recv(&mut rx).await, + sample_received_transaction_message_with_proof_facts("0x2", "0x4", subscription_id) + ); + assert_recv_nothing(&mut rx).await; + } + #[test_log::test(tokio::test)] async fn received_with_pre_confirmed() { let Setup { @@ -1308,8 +1431,12 @@ mod tests { transactions: txs .iter() .map(|(sender_address, hash)| Transaction { - variant: TransactionVariant::DeclareV0(DeclareTransactionV0V1 { + variant: TransactionVariant::InvokeV3(InvokeTransactionV3 { sender_address: *sender_address, + proof_facts: vec![ + proof_fact_elem_bytes!(b"proof 0"), + proof_fact_elem_bytes!(b"proof 1"), + ], ..Default::default() }), hash: *hash, @@ -1318,8 +1445,12 @@ mod tests { candidate_txs .iter() .map(|(sender_address, hash)| Transaction { - variant: TransactionVariant::DeclareV0(DeclareTransactionV0V1 { + variant: TransactionVariant::InvokeV3(InvokeTransactionV3 { sender_address: *sender_address, + proof_facts: vec![ + proof_fact_elem_bytes!(b"proof 0"), + proof_fact_elem_bytes!(b"proof 1"), + ], ..Default::default() }), hash: *hash, @@ -1353,6 +1484,18 @@ mod tests { sample_transaction_message_ex(sender_address, hash, subscription_id, "RECEIVED") } + fn sample_received_transaction_message_with_proof_facts( + sender_address: &str, + hash: &str, + subscription_id: u64, + ) -> serde_json::Value { + let mut message = + sample_transaction_message_ex(sender_address, hash, subscription_id, "RECEIVED"); + message["params"]["result"]["proof_facts"] = + serde_json::json!(["0x70726f6f662030", "0x70726f6f662031"]); + message + } + fn sample_pre_confirmed_transaction_message( sender_address: &str, hash: &str, @@ -1388,13 +1531,32 @@ mod tests { "method":"starknet_subscriptionNewTransaction", "params": { "result": { - "class_hash": "0x0", - "max_fee": "0x0", + "account_deployment_data": [], + "calldata": [], + "fee_data_availability_mode": "L1", + "nonce": "0x0", + "nonce_data_availability_mode": "L1", + "paymaster_data": [], + "resource_bounds": { + "l1_data_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l1_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + }, + "l2_gas": { + "max_amount": "0x0", + "max_price_per_unit": "0x0" + } + }, "sender_address": sender_address, "signature": [], + "tip": "0x0", "transaction_hash": hash, - "type": "DECLARE", - "version": "0x0", + "type": "INVOKE", + "version": "0x3", "finality_status": finality_status, }, "subscription_id": subscription_id.to_string() @@ -1405,31 +1567,29 @@ mod tests { fn sample_block( block_number: BlockNumber, txs: Vec<(ContractAddress, TransactionHash)>, - ) -> starknet_gateway_types::reply::Block { - starknet_gateway_types::reply::Block { - block_hash: BlockHash(Felt::from_u64(block_number.get())), - block_number, - parent_block_hash: BlockHash::ZERO, - transactions: txs - .iter() - .map(|(sender_address, hash)| Transaction { - variant: TransactionVariant::DeclareV0(DeclareTransactionV0V1 { - sender_address: *sender_address, - ..Default::default() - }), - hash: *hash, - }) - .collect(), - transaction_receipts: txs + ) -> L2Block { + L2Block { + header: sample_header(block_number.get()), + transactions_and_receipts: txs .iter() - .map(|(_sender_address, hash)| { - ( - pathfinder_common::receipt::Receipt { - transaction_hash: *hash, + .map(|(sender_address, hash)| { + let tx = Transaction { + variant: TransactionVariant::InvokeV3(InvokeTransactionV3 { + sender_address: *sender_address, + proof_facts: vec![ + proof_fact_elem_bytes!(b"proof 0"), + proof_fact_elem_bytes!(b"proof 1"), + ], ..Default::default() - }, - vec![], - ) + }), + hash: *hash, + }; + let receipt = pathfinder_common::receipt::Receipt { + transaction_hash: *hash, + ..Default::default() + }; + + (tx, receipt) }) .collect(), ..Default::default() @@ -1437,8 +1597,12 @@ mod tests { } fn sample_transaction_variant(sender_address: ContractAddress) -> TransactionVariant { - TransactionVariant::DeclareV0(DeclareTransactionV0V1 { + TransactionVariant::InvokeV3(InvokeTransactionV3 { sender_address, + proof_facts: vec![ + proof_fact_elem_bytes!(b"proof 0"), + proof_fact_elem_bytes!(b"proof 1"), + ], ..Default::default() }) } @@ -1468,7 +1632,7 @@ mod tests { .with_pending_data(pending_data.clone()) .with_websockets(WebsocketContext::new(WebsocketHistory::Unlimited)); let submission_tracker = ctx.submission_tracker.clone(); - let router = v09::register_routes().build(ctx); + let router = v10::register_routes().build(ctx); let (sender_tx, sender_rx) = mpsc::channel(1024); let (receiver_tx, receiver_rx) = mpsc::channel(1024); handle_json_rpc_socket(router.clone(), sender_tx, receiver_rx); diff --git a/crates/rpc/src/method/subscribe_pending_transactions.rs b/crates/rpc/src/method/subscribe_pending_transactions.rs index 4895a9ce45..1d94e54f3e 100644 --- a/crates/rpc/src/method/subscribe_pending_transactions.rs +++ b/crates/rpc/src/method/subscribe_pending_transactions.rs @@ -1,19 +1,25 @@ use std::collections::HashSet; +use std::future::Future; -use pathfinder_common::transaction::Transaction; -use pathfinder_common::{BlockNumber, ContractAddress, TransactionHash}; +use pathfinder_common::ContractAddress; use tokio::sync::mpsc; use crate::context::RpcContext; use crate::jsonrpc::{RpcError, RpcSubscriptionFlow, SubscriptionMessage}; use crate::RpcVersion; +// JSON-RPC 0.9.0 has removed `starknet_subscribePendingTransactions`, and +// pre-0.9.0 APIs should not have access to pre-confirmed data. That +// is, if the update is from a pre-confirmed block, we should just +// ignore it. Note that this renders this method mostly useless, +// since after the Starknet 0.14.0 update no transactions will be +// sent over this subscription. pub struct SubscribePendingTransactions; #[derive(Debug, Clone, Default)] pub struct Params { - transaction_details: Option, - sender_address: Option>, + _transaction_details: Option, + _sender_address: Option>, } impl crate::dto::DeserializeForVersion for Option { @@ -23,8 +29,8 @@ impl crate::dto::DeserializeForVersion for Option { } value.deserialize_map(|value| { Ok(Some(Params { - transaction_details: value.deserialize_optional_serde("transaction_details")?, - sender_address: value + _transaction_details: value.deserialize_optional_serde("transaction_details")?, + _sender_address: value .deserialize_optional_array("sender_address", |addr| { Ok(ContractAddress(addr.deserialize()?)) })? @@ -35,484 +41,27 @@ impl crate::dto::DeserializeForVersion for Option { } #[derive(Debug)] -pub enum Notification { - Transaction(Box), - TransactionHash(TransactionHash), -} +pub struct Notification; impl crate::dto::SerializeForVersion for Notification { fn serialize( &self, serializer: crate::dto::Serializer, ) -> Result { - match self { - Notification::Transaction(transaction) => { - crate::dto::TransactionWithHash(transaction).serialize(serializer) - } - Notification::TransactionHash(transaction_hash) => { - transaction_hash.0.serialize(serializer) - } - } + serializer.serialize_unit() } } -const SUBSCRIPTION_NAME: &str = "starknet_subscriptionPendingTransactions"; - impl RpcSubscriptionFlow for SubscribePendingTransactions { type Params = Option; type Notification = Notification; - async fn subscribe( - state: RpcContext, + fn subscribe( + _state: RpcContext, _version: RpcVersion, - params: Self::Params, - tx: mpsc::Sender>, - ) -> Result<(), RpcError> { - let params = params.unwrap_or_default(); - let mut pending_data = state.pending_data.0.clone(); - // Last block sent to the subscriber. Initial value doesn't really matter. - let mut last_block = BlockNumber::GENESIS; - // Hashes of transactions that have already been sent to the subscriber, as part - // of `last_block` block. It is necessary to keep track of this because the - // pending data updates might include new transactions for the same - // block number. - let mut sent_txs = HashSet::new(); - loop { - let pending = pending_data.borrow_and_update().clone(); - // JSON-RPC 0.9.0 has removed `starknet_subscribePendingTransactions`, and - // pre-0.9.0 APIs should not have access to pre-confirmed data. That - // is, if the update is from a pre-confirmed block, we should just - // ignore it. Note that this renders this method mostly useless, - // since after the Starknet 0.14.0 update no transactions will be - // sent over this subscription. - if pending.is_pre_confirmed() { - if pending_data.changed().await.is_err() { - tracing::debug!("Pending data channel closed, stopping subscription"); - return Ok(()); - } - continue; - } - - if pending.pending_block_number() != last_block { - last_block = pending.pending_block_number(); - sent_txs.clear(); - } - for transaction in pending.pending_transactions().iter() { - if sent_txs.contains(&transaction.hash) { - continue; - } - // Filter the transactions by sender address. - if let Some(sender_address) = ¶ms.sender_address { - use pathfinder_common::transaction::TransactionVariant::*; - let address = match &transaction.variant { - DeclareV0(tx) => tx.sender_address, - DeclareV1(tx) => tx.sender_address, - DeclareV2(tx) => tx.sender_address, - DeclareV3(tx) => tx.sender_address, - DeployV0(tx) => tx.contract_address, - DeployV1(tx) => tx.contract_address, - DeployAccountV1(tx) => tx.contract_address, - DeployAccountV3(tx) => tx.contract_address, - InvokeV0(tx) => tx.sender_address, - InvokeV1(tx) => tx.sender_address, - InvokeV3(tx) => tx.sender_address, - L1Handler(tx) => tx.contract_address, - }; - if !sender_address.contains(&address) { - continue; - } - } - let notification = match params.transaction_details { - Some(true) => Notification::Transaction(transaction.clone().into()), - Some(false) | None => Notification::TransactionHash(transaction.hash), - }; - sent_txs.insert(transaction.hash); - if tx - .send(SubscriptionMessage { - notification, - block_number: pending.pending_block_number(), - subscription_name: SUBSCRIPTION_NAME, - }) - .await - .is_err() - { - // Subscription has been closed. - return Ok(()); - } - } - if pending_data.changed().await.is_err() { - tracing::debug!("Pending data channel closed, stopping subscription"); - return Ok(()); - } - } - } -} - -#[cfg(test)] -mod tests { - use axum::extract::ws::Message; - use pathfinder_common::macro_prelude::*; - use pathfinder_common::prelude::*; - use pathfinder_common::transaction::{DeclareTransactionV0V1, Transaction, TransactionVariant}; - use pathfinder_crypto::Felt; - use pathfinder_storage::StorageBuilder; - use starknet_gateway_types::reply::PendingBlock; - use tokio::sync::{mpsc, watch}; - - use crate::context::{RpcContext, WebsocketContext}; - use crate::jsonrpc::websocket::WebsocketHistory; - use crate::jsonrpc::{handle_json_rpc_socket, RpcResponse}; - use crate::{v08, Notifications, PendingData}; - - #[tokio::test] - async fn no_filtering_no_details() { - let Setup { - tx, - mut rx, - pending_data_tx, - } = setup(); - tx.send(Ok(Message::Text( - serde_json::json!({ - "jsonrpc": "2.0", - "id": 1, - "method": "starknet_subscribePendingTransactions", - }) - .to_string() - .into(), - ))) - .await - .unwrap(); - let response = rx.recv().await.unwrap().unwrap(); - let subscription_id = match response { - Message::Text(json) => { - let json: serde_json::Value = serde_json::from_str(&json).unwrap(); - assert_eq!(json["jsonrpc"], "2.0"); - assert_eq!(json["id"], 1); - json["result"].as_str().unwrap().parse().unwrap() - } - _ => { - panic!("Expected text message"); - } - }; - pending_data_tx - .send(sample_block( - BlockNumber::GENESIS, - vec![ - (contract_address!("0x1"), transaction_hash!("0x1")), - (contract_address!("0x2"), transaction_hash!("0x2")), - ], - )) - .unwrap(); - assert_eq!( - recv(&mut rx).await, - sample_message_no_details("0x1", subscription_id) - ); - assert_eq!( - recv(&mut rx).await, - sample_message_no_details("0x2", subscription_id) - ); - assert!(rx.is_empty()); - pending_data_tx - .send(sample_block( - BlockNumber::GENESIS, - vec![ - (contract_address!("0x1"), transaction_hash!("0x1")), - (contract_address!("0x2"), transaction_hash!("0x2")), - (contract_address!("0x3"), transaction_hash!("0x3")), - (contract_address!("0x4"), transaction_hash!("0x4")), - (contract_address!("0x5"), transaction_hash!("0x5")), - ], - )) - .unwrap(); - // Assert that same transactions are not sent twice. - assert_eq!( - recv(&mut rx).await, - sample_message_no_details("0x3", subscription_id) - ); - assert_eq!( - recv(&mut rx).await, - sample_message_no_details("0x4", subscription_id) - ); - assert_eq!( - recv(&mut rx).await, - sample_message_no_details("0x5", subscription_id) - ); - // Assert that transactions from new blocks are sent correctly. - pending_data_tx - .send(sample_block( - BlockNumber::GENESIS + 1, - vec![(contract_address!("0x1"), transaction_hash!("0x1"))], - )) - .unwrap(); - assert_eq!( - recv(&mut rx).await, - sample_message_no_details("0x1", subscription_id) - ); - assert!(rx.is_empty()); - } - - #[tokio::test] - async fn no_filtering_with_details() { - let Setup { - tx, - mut rx, - pending_data_tx, - } = setup(); - tx.send(Ok(Message::Text( - serde_json::json!({ - "jsonrpc": "2.0", - "id": 1, - "method": "starknet_subscribePendingTransactions", - "params": { - "transaction_details": true - } - }) - .to_string() - .into(), - ))) - .await - .unwrap(); - let response = rx.recv().await.unwrap().unwrap(); - let subscription_id = match response { - Message::Text(json) => { - let json: serde_json::Value = serde_json::from_str(&json).unwrap(); - assert_eq!(json["jsonrpc"], "2.0"); - assert_eq!(json["id"], 1); - json["result"].as_str().unwrap().parse().unwrap() - } - _ => { - panic!("Expected text message"); - } - }; - assert!(rx.is_empty()); - pending_data_tx - .send(sample_block( - BlockNumber::GENESIS, - vec![ - (contract_address!("0x1"), transaction_hash!("0x3")), - (contract_address!("0x2"), transaction_hash!("0x4")), - ], - )) - .unwrap(); - assert_eq!( - recv(&mut rx).await, - sample_message_with_details("0x1", "0x3", subscription_id) - ); - assert_eq!( - recv(&mut rx).await, - sample_message_with_details("0x2", "0x4", subscription_id) - ); - assert!(rx.is_empty()); - } - - #[tokio::test] - async fn filtering_one_address() { - let Setup { - tx, - mut rx, - pending_data_tx, - } = setup(); - tx.send(Ok(Message::Text( - serde_json::json!({ - "jsonrpc": "2.0", - "id": 1, - "method": "starknet_subscribePendingTransactions", - "params": { - "sender_address": ["0x1"] - } - }) - .to_string() - .into(), - ))) - .await - .unwrap(); - let response = rx.recv().await.unwrap().unwrap(); - let subscription_id = match response { - Message::Text(json) => { - let json: serde_json::Value = serde_json::from_str(&json).unwrap(); - assert_eq!(json["jsonrpc"], "2.0"); - assert_eq!(json["id"], 1); - json["result"].as_str().unwrap().parse().unwrap() - } - _ => { - panic!("Expected text message"); - } - }; - assert!(rx.is_empty()); - pending_data_tx - .send(sample_block( - BlockNumber::GENESIS, - vec![ - (contract_address!("0x1"), transaction_hash!("0x1")), - (contract_address!("0x2"), transaction_hash!("0x2")), - ], - )) - .unwrap(); - assert_eq!( - recv(&mut rx).await, - sample_message_no_details("0x1", subscription_id) - ); - assert!(rx.is_empty()); - } - - #[tokio::test] - async fn filtering_two_addresses() { - let Setup { - tx, - mut rx, - pending_data_tx, - } = setup(); - tx.send(Ok(Message::Text( - serde_json::json!({ - "jsonrpc": "2.0", - "id": 1, - "method": "starknet_subscribePendingTransactions", - "params": { - "sender_address": ["0x1", "0x2"] - } - }) - .to_string() - .into(), - ))) - .await - .unwrap(); - let response = rx.recv().await.unwrap().unwrap(); - let subscription_id = match response { - Message::Text(json) => { - let json: serde_json::Value = serde_json::from_str(&json).unwrap(); - assert_eq!(json["jsonrpc"], "2.0"); - assert_eq!(json["id"], 1); - json["result"].as_str().unwrap().parse().unwrap() - } - _ => { - panic!("Expected text message"); - } - }; - assert!(rx.is_empty()); - pending_data_tx - .send(sample_block( - BlockNumber::GENESIS, - vec![ - (contract_address!("0x1"), transaction_hash!("0x3")), - (contract_address!("0x2"), transaction_hash!("0x4")), - (contract_address!("0x3"), transaction_hash!("0x5")), - ], - )) - .unwrap(); - assert_eq!( - recv(&mut rx).await, - sample_message_no_details("0x3", subscription_id) - ); - assert_eq!( - recv(&mut rx).await, - sample_message_no_details("0x4", subscription_id) - ); - assert!(rx.is_empty()); - } - - async fn recv(rx: &mut mpsc::Receiver>) -> serde_json::Value { - let res = rx.recv().await.unwrap().unwrap(); - match res { - Message::Text(json) => serde_json::from_str(&json).unwrap(), - _ => panic!("Expected text message"), - } - } - - fn sample_block( - block_number: BlockNumber, - txs: Vec<(ContractAddress, TransactionHash)>, - ) -> PendingData { - PendingData::from_pending_block( - PendingBlock { - transactions: txs - .into_iter() - .map(|(sender_address, hash)| Transaction { - variant: TransactionVariant::DeclareV0(DeclareTransactionV0V1 { - sender_address, - ..Default::default() - }), - hash, - }) - .collect(), - ..Default::default() - }, - StateUpdate::default(), - block_number, - ) - } - - fn sample_message_no_details(hash: &str, subscription_id: u64) -> serde_json::Value { - serde_json::json!({ - "jsonrpc":"2.0", - "method":"starknet_subscriptionPendingTransactions", - "params": { - "result": hash, - "subscription_id": subscription_id.to_string() - } - }) - } - - fn sample_message_with_details( - sender_address: &str, - hash: &str, - subscription_id: u64, - ) -> serde_json::Value { - serde_json::json!({ - "jsonrpc":"2.0", - "method":"starknet_subscriptionPendingTransactions", - "params": { - "result": { - "class_hash": "0x0", - "max_fee": "0x0", - "sender_address": sender_address, - "signature": [], - "transaction_hash": hash, - "type": "DECLARE", - "version": "0x0" - }, - "subscription_id": subscription_id.to_string() - } - }) - } - - fn sample_header(block_number: u64) -> BlockHeader { - BlockHeader { - hash: BlockHash(Felt::from_u64(block_number)), - number: BlockNumber::new_or_panic(block_number), - parent_hash: BlockHash::ZERO, - ..Default::default() - } - } - - fn setup() -> Setup { - let storage = StorageBuilder::in_memory().unwrap(); - { - let mut conn = storage.connection().unwrap(); - let db = conn.transaction().unwrap(); - db.insert_block_header(&sample_header(0)).unwrap(); - db.commit().unwrap(); - } - let (pending_data_tx, pending_data) = tokio::sync::watch::channel(Default::default()); - let notifications = Notifications::default(); - let ctx = RpcContext::for_tests() - .with_storage(storage) - .with_notifications(notifications) - .with_pending_data(pending_data.clone()) - .with_websockets(WebsocketContext::new(WebsocketHistory::Unlimited)); - let router = v08::register_routes().build(ctx); - let (sender_tx, sender_rx) = mpsc::channel(1024); - let (receiver_tx, receiver_rx) = mpsc::channel(1024); - handle_json_rpc_socket(router.clone(), sender_tx, receiver_rx); - Setup { - tx: receiver_tx, - rx: sender_rx, - pending_data_tx, - } - } - - struct Setup { - tx: mpsc::Sender>, - rx: mpsc::Receiver>, - pending_data_tx: watch::Sender, + _params: Self::Params, + _tx: mpsc::Sender>, + ) -> impl Future> { + std::future::pending() } } diff --git a/crates/rpc/src/method/subscribe_transaction_status.rs b/crates/rpc/src/method/subscribe_transaction_status.rs index e6e0adadc0..09ecb3b92d 100644 --- a/crates/rpc/src/method/subscribe_transaction_status.rs +++ b/crates/rpc/src/method/subscribe_transaction_status.rs @@ -13,7 +13,7 @@ use tokio::time::MissedTickBehavior; use super::REORG_SUBSCRIPTION_NAME; use crate::context::RpcContext; use crate::jsonrpc::{RpcError, RpcSubscriptionFlow, SubscriptionMessage}; -use crate::pending::PendingBlockVariant; +use crate::pending::PendingBlocks; use crate::{tracker, PendingData, Reorg, RpcVersion}; pub struct SubscribeTransactionStatus; @@ -271,13 +271,19 @@ impl RpcSubscriptionFlow for SubscribeTransactionStatus { } } + let status_in_l2 = l2_block.transactions_and_receipts + .iter() + .find_map(|(tx, receipt)| { + (tx.hash == tx_hash).then_some(&receipt.execution_status) + }); + // 2. Transactions accepted on L2. - if let Some(receipt) = find_tx_receipt(&l2_block.transaction_receipts, tx_hash) { + if let Some(status) = status_in_l2 { if sender .send_and_update( - l2_block.block_number, + l2_block.header.number, FinalityStatus::AcceptedOnL2, - Some(receipt.execution_status.clone()), + Some(status.clone()), ) .await .is_err() @@ -290,8 +296,8 @@ impl RpcSubscriptionFlow for SubscribeTransactionStatus { // 3. Transactions accepted on L1. let storage = state.storage.clone(); let l1_state = util::task::spawn_blocking(move |_| -> Result<_, RpcError> { - let mut conn = storage.connection().map_err(RpcError::InternalError)?; - let db = conn.transaction().map_err(RpcError::InternalError)?; + let mut conn = storage.connection()?; + let db = conn.transaction()?; let l1_state = db.latest_l1_state().map_err(RpcError::InternalError)?; Ok(l1_state) }).await.map_err(|e| RpcError::InternalError(e.into()))??; @@ -324,6 +330,7 @@ impl RpcSubscriptionFlow for SubscribeTransactionStatus { } } } + Ok(()) } } @@ -341,8 +348,8 @@ async fn current_known_tx_status( // pending data and DB, the DB would contain "fresher" transaction status // information. let (l1_state, tx_with_receipt) = util::task::spawn_blocking(move |_| -> Result<_, RpcError> { - let mut conn = storage.connection().map_err(RpcError::InternalError)?; - let db = conn.transaction().map_err(RpcError::InternalError)?; + let mut conn = storage.connection()?; + let db = conn.transaction()?; let l1_block_number = db.latest_l1_state().map_err(RpcError::InternalError)?; let tx_with_receipt = db .transaction_with_receipt(tx_hash) @@ -397,46 +404,36 @@ fn pending_data_tx_status( if status_in_pre_latest.is_some() { return Some(( pre_latest_block.number, - FinalityStatus::AcceptedOnL2, + FinalityStatus::PreConfirmed, status_in_pre_latest, )); } } - let block_number = pending_data.pending_block_number(); - match pending_data.pending_block().as_ref() { - PendingBlockVariant::Pending(block) => { - find_tx_receipt(&block.transaction_receipts, tx_hash).map(|receipt| { - ( - block_number, - FinalityStatus::AcceptedOnL2, - Some(receipt.execution_status.clone()), - ) - }) - } - PendingBlockVariant::PreConfirmed { - block, - candidate_transactions, - .. - } => { - let is_candidate = candidate_transactions.iter().any(|tx| tx.hash == tx_hash); - if is_candidate { - return Some((block_number, FinalityStatus::Candidate, None)); - } - - let status_in_pre_confirmed = find_tx_receipt(&block.transaction_receipts, tx_hash) - .map(|r| r.execution_status.clone()); - if status_in_pre_confirmed.is_some() { - return Some(( - block_number, - FinalityStatus::PreConfirmed, - status_in_pre_confirmed, - )); - } + let block_number = pending_data.pre_confirmed_block_number(); + let pending_block = pending_data.pending_block(); + let PendingBlocks { + pre_confirmed, + candidate_transactions, + .. + } = pending_block.as_ref(); + + let is_candidate = candidate_transactions.iter().any(|tx| tx.hash == tx_hash); + if is_candidate { + return Some((block_number, FinalityStatus::Candidate, None)); + } - None - } + let status_in_pre_confirmed = find_tx_receipt(&pre_confirmed.transaction_receipts, tx_hash) + .map(|r| r.execution_status.clone()); + if status_in_pre_confirmed.is_some() { + return Some(( + block_number, + FinalityStatus::PreConfirmed, + status_in_pre_confirmed, + )); } + + None } fn find_tx_receipt( @@ -513,11 +510,12 @@ mod tests { use pathfinder_common::prelude::*; use pathfinder_common::receipt::{ExecutionStatus, Receipt}; use pathfinder_common::transaction::Transaction; + use pathfinder_common::L2Block; use pathfinder_crypto::Felt; use pathfinder_ethereum::EthereumStateUpdate; use pathfinder_storage::StorageBuilder; use pretty_assertions_sorted::assert_eq; - use starknet_gateway_types::reply::{Block, PendingBlock, PreConfirmedBlock, PreLatestBlock}; + use starknet_gateway_types::reply::{PreConfirmedBlock, PreLatestBlock}; use tokio::sync::mpsc; use crate::context::{RpcContext, WebsocketContext}; @@ -557,7 +555,7 @@ mod tests { // Irrelevant pending update. pending_sender.send_modify(|pending| { - *pending.pending_block_number_mut() = BlockNumber::GENESIS + 1; + *pending.pre_confirmed_block_number_mut() = BlockNumber::GENESIS + 1; }); // No message expected. @@ -570,9 +568,12 @@ mod tests { .notifications .l2_blocks .send( - Block { - block_number: BlockNumber::GENESIS + 1, - block_hash: BlockHash(Felt::from_u64(1)), + L2Block { + header: BlockHeader { + number: BlockNumber::GENESIS + 1, + hash: BlockHash(Felt::from_u64(1)), + ..Default::default() + }, ..Default::default() } .into(), @@ -606,9 +607,12 @@ mod tests { .notifications .l2_blocks .send( - Block { - block_number: BlockNumber::GENESIS + 2, - block_hash: BlockHash(Felt::from_u64(2)), + L2Block { + header: BlockHeader { + number: BlockNumber::GENESIS + 2, + hash: BlockHash(Felt::from_u64(2)), + ..Default::default() + }, ..Default::default() } .into(), @@ -735,67 +739,79 @@ mod tests { async fn transaction_status_streaming() { test_transaction_status_streaming(|subscription_id| { vec![ - TestEvent::Pending(PendingData::from_pending_block( - PendingBlock { - transactions: vec![Transaction { - hash: TransactionHash(Felt::from_u64(2)), - variant: Default::default(), - }], - transaction_receipts: vec![( - Receipt { - transaction_hash: TransactionHash(Felt::from_u64(2)), - execution_status: ExecutionStatus::Succeeded, - ..Default::default() - }, - vec![], - )], - ..Default::default() - }, - StateUpdate::default(), - BlockNumber::GENESIS + 1, - )), + TestEvent::Pending( + PendingData::try_from_pre_confirmed_block( + PreConfirmedBlock { + transactions: vec![Transaction { + hash: TransactionHash(Felt::from_u64(2)), + variant: Default::default(), + }], + transaction_receipts: vec![Some(( + Receipt { + transaction_hash: TransactionHash(Felt::from_u64(2)), + execution_status: ExecutionStatus::Succeeded, + ..Default::default() + }, + vec![], + ))], + ..Default::default() + } + .into(), + BlockNumber::GENESIS + 1, + ) + .unwrap(), + ), TestEvent::L2Block( - Block { - block_number: BlockNumber::GENESIS + 1, - block_hash: BlockHash(Felt::from_u64(1)), + L2Block { + header: BlockHeader { + number: BlockNumber::GENESIS + 1, + hash: BlockHash(Felt::from_u64(1)), + ..Default::default() + }, ..Default::default() } .into(), ), - TestEvent::Pending(PendingData::from_pending_block( - PendingBlock { - transactions: vec![Transaction { - hash: TARGET_TX_HASH, - variant: Default::default(), - }], - transaction_receipts: vec![( - Receipt { - transaction_hash: TARGET_TX_HASH, - execution_status: ExecutionStatus::Succeeded, - ..Default::default() - }, - vec![], - )], - ..Default::default() - }, - StateUpdate::default(), - BlockNumber::GENESIS + 2, - )), + TestEvent::Pending( + PendingData::try_from_pre_confirmed_block( + PreConfirmedBlock { + transactions: vec![Transaction { + hash: TARGET_TX_HASH, + variant: Default::default(), + }], + transaction_receipts: vec![Some(( + Receipt { + transaction_hash: TARGET_TX_HASH, + execution_status: ExecutionStatus::Succeeded, + ..Default::default() + }, + vec![], + ))], + ..Default::default() + } + .into(), + BlockNumber::GENESIS + 2, + ) + .unwrap(), + ), TestEvent::L2Block( - Block { - block_number: BlockNumber::GENESIS + 2, - block_hash: BlockHash(Felt::from_u64(2)), - transactions: vec![Transaction { - hash: TARGET_TX_HASH, + L2Block { + header: BlockHeader { + number: BlockNumber::GENESIS + 2, + hash: BlockHash(Felt::from_u64(2)), ..Default::default() - }], - transaction_receipts: vec![( + }, + transactions_and_receipts: vec![( + Transaction { + hash: TARGET_TX_HASH, + ..Default::default() + }, Receipt { transaction_hash: TARGET_TX_HASH, ..Default::default() }, - vec![], )], + events: vec![vec![]], ..Default::default() } .into(), @@ -807,7 +823,7 @@ mod tests { "result": { "transaction_hash": "0x1", "status": { - "finality_status": "ACCEPTED_ON_L2", + "finality_status": "PRE_CONFIRMED", "execution_status": "SUCCEEDED", } }, @@ -816,20 +832,23 @@ mod tests { })), // Irrelevant block. TestEvent::L2Block( - Block { - block_number: BlockNumber::GENESIS + 3, - block_hash: BlockHash(Felt::from_u64(3)), - transactions: vec![Transaction { - hash: TransactionHash(Felt::from_u64(5)), + L2Block { + header: BlockHeader { + number: BlockNumber::GENESIS + 3, + hash: BlockHash(Felt::from_u64(3)), ..Default::default() - }], - transaction_receipts: vec![( + }, + transactions_and_receipts: vec![( + Transaction { + hash: TransactionHash(Felt::from_u64(5)), + ..Default::default() + }, Receipt { transaction_hash: TransactionHash(Felt::from_u64(5)), ..Default::default() }, - vec![], )], + events: vec![vec![]], ..Default::default() } .into(), @@ -840,13 +859,30 @@ mod tests { block_hash: Default::default(), }), TestEvent::L2Block( - Block { - block_number: BlockNumber::GENESIS + 4, - block_hash: BlockHash(Felt::from_u64(4)), + L2Block { + header: BlockHeader { + number: BlockNumber::GENESIS + 4, + hash: BlockHash(Felt::from_u64(4)), + ..Default::default() + }, ..Default::default() } .into(), ), + TestEvent::Message(serde_json::json!({ + "jsonrpc": "2.0", + "method": "starknet_subscriptionTransactionStatus", + "params": { + "result": { + "transaction_hash": "0x1", + "status": { + "finality_status": "ACCEPTED_ON_L2", + "execution_status": "SUCCEEDED" + } + }, + "subscription_id": subscription_id + } + })), TestEvent::Message(serde_json::json!({ "jsonrpc": "2.0", "method": "starknet_subscriptionTransactionStatus", @@ -899,94 +935,6 @@ mod tests { .await; } - #[tokio::test] - async fn transaction_found_in_pending_block() { - test_transaction_status_streaming(|subscription_id| { - vec![ - TestEvent::Pending(PendingData::from_pending_block( - PendingBlock { - transactions: vec![Transaction { - hash: TransactionHash(Felt::from_u64(2)), - variant: Default::default(), - }], - transaction_receipts: vec![( - Receipt { - transaction_hash: TransactionHash(Felt::from_u64(2)), - execution_status: ExecutionStatus::Succeeded, - ..Default::default() - }, - vec![], - )], - ..Default::default() - }, - StateUpdate::default(), - BlockNumber::GENESIS + 1, - )), - TestEvent::L2Block( - Block { - block_number: BlockNumber::GENESIS + 1, - block_hash: BlockHash(Felt::from_u64(1)), - ..Default::default() - } - .into(), - ), - TestEvent::Pending(PendingData::from_pending_block( - PendingBlock { - transactions: vec![Transaction { - hash: TARGET_TX_HASH, - variant: Default::default(), - }], - transaction_receipts: vec![( - Receipt { - transaction_hash: TARGET_TX_HASH, - execution_status: ExecutionStatus::Succeeded, - ..Default::default() - }, - vec![], - )], - ..Default::default() - }, - StateUpdate::default(), - BlockNumber::GENESIS + 2, - )), - TestEvent::L2Block( - Block { - block_number: BlockNumber::GENESIS + 2, - block_hash: BlockHash(Felt::from_u64(2)), - transactions: vec![Transaction { - hash: TARGET_TX_HASH, - ..Default::default() - }], - transaction_receipts: vec![( - Receipt { - transaction_hash: TARGET_TX_HASH, - ..Default::default() - }, - vec![], - )], - ..Default::default() - } - .into(), - ), - TestEvent::Message(serde_json::json!({ - "jsonrpc": "2.0", - "method": "starknet_subscriptionTransactionStatus", - "params": { - "result": { - "transaction_hash": "0x1", - "status": { - "finality_status": "ACCEPTED_ON_L2", - "execution_status": "SUCCEEDED", - } - }, - "subscription_id": subscription_id - } - })), - ] - }) - .await; - } - #[tokio::test] async fn transaction_found_in_pre_confirmed_block() { test_transaction_status_streaming(|subscription_id| { @@ -1006,9 +954,12 @@ mod tests { .unwrap(), ), TestEvent::L2Block( - Block { - block_number: BlockNumber::GENESIS + 1, - block_hash: BlockHash(Felt::from_u64(1)), + L2Block { + header: BlockHeader { + number: BlockNumber::GENESIS + 1, + hash: BlockHash(Felt::from_u64(1)), + ..Default::default() + }, ..Default::default() } .into(), @@ -1037,20 +988,23 @@ mod tests { .unwrap(), ), TestEvent::L2Block( - Block { - block_number: BlockNumber::GENESIS + 2, - block_hash: BlockHash(Felt::from_u64(2)), - transactions: vec![Transaction { - hash: TARGET_TX_HASH, + L2Block { + header: BlockHeader { + number: BlockNumber::GENESIS + 2, + hash: BlockHash(Felt::from_u64(2)), ..Default::default() - }], - transaction_receipts: vec![( + }, + transactions_and_receipts: vec![( + Transaction { + hash: TARGET_TX_HASH, + ..Default::default() + }, Receipt { transaction_hash: TARGET_TX_HASH, ..Default::default() }, - vec![], )], + events: vec![vec![]], ..Default::default() } .into(), @@ -1089,7 +1043,7 @@ mod tests { } #[tokio::test] - async fn transaction_found_in_pre_latest_and_and_l2_block_sends_update_once() { + async fn pre_confirmed_promoted_to_pre_latest_does_not_send_duplicate_notification() { test_transaction_status_streaming(|subscription_id| { vec![ TestEvent::Pending( @@ -1107,9 +1061,12 @@ mod tests { .unwrap(), ), TestEvent::L2Block( - Block { - block_number: BlockNumber::GENESIS + 1, - block_hash: BlockHash(Felt::from_u64(1)), + L2Block { + header: BlockHeader { + number: BlockNumber::GENESIS + 1, + hash: BlockHash(Felt::from_u64(1)), + ..Default::default() + }, ..Default::default() } .into(), @@ -1170,7 +1127,9 @@ mod tests { .into(), BlockNumber::GENESIS + 3, Some(Box::new(( - // Previous block promoted to pre-latest. + // Previous block promoted to pre-latest. This should not result in + // a notification because it would have a duplicate `PRE_CONFIRMED` + // status. BlockNumber::GENESIS + 2, PreLatestBlock { parent_hash: BlockHash(Felt::from_u64(2)), @@ -1209,6 +1168,30 @@ mod tests { ) .unwrap(), ), + // No message expected for the pre-latest update since it would be a duplicate + // of the pre-confirmed update. + TestEvent::L2Block( + L2Block { + header: BlockHeader { + number: BlockNumber::GENESIS + 2, + hash: BlockHash(Felt::from_u64(2)), + ..Default::default() + }, + transactions_and_receipts: vec![( + Transaction { + hash: TARGET_TX_HASH, + ..Default::default() + }, + Receipt { + transaction_hash: TARGET_TX_HASH, + ..Default::default() + }, + )], + events: vec![vec![]], + ..Default::default() + } + .into(), + ), TestEvent::Message(serde_json::json!({ "jsonrpc": "2.0", "method": "starknet_subscriptionTransactionStatus", @@ -1223,26 +1206,6 @@ mod tests { "subscription_id": subscription_id } })), - TestEvent::L2Block( - Block { - block_number: BlockNumber::GENESIS + 2, - block_hash: BlockHash(Felt::from_u64(2)), - transactions: vec![Transaction { - hash: TARGET_TX_HASH, - ..Default::default() - }], - transaction_receipts: vec![( - Receipt { - transaction_hash: TARGET_TX_HASH, - ..Default::default() - }, - vec![], - )], - ..Default::default() - } - .into(), - ), - // No message received with a duplicate ACCEPTED_ON_L2 status. ] }) .await; @@ -1267,9 +1230,12 @@ mod tests { .unwrap(), ), TestEvent::L2Block( - Block { - block_number: BlockNumber::GENESIS + 1, - block_hash: BlockHash(Felt::from_u64(1)), + L2Block { + header: BlockHeader { + number: BlockNumber::GENESIS + 1, + hash: BlockHash(Felt::from_u64(1)), + ..Default::default() + }, ..Default::default() } .into(), @@ -1292,20 +1258,23 @@ mod tests { .unwrap(), ), TestEvent::L2Block( - Block { - block_number: BlockNumber::GENESIS + 2, - block_hash: BlockHash(Felt::from_u64(2)), - transactions: vec![Transaction { - hash: TARGET_TX_HASH, + L2Block { + header: BlockHeader { + number: BlockNumber::GENESIS + 2, + hash: BlockHash(Felt::from_u64(2)), ..Default::default() - }], - transaction_receipts: vec![( + }, + transactions_and_receipts: vec![( + Transaction { + hash: TARGET_TX_HASH, + ..Default::default() + }, Receipt { transaction_hash: TARGET_TX_HASH, ..Default::default() }, - vec![], )], + events: vec![vec![]], ..Default::default() } .into(), @@ -1406,49 +1375,58 @@ mod tests { handle_test_events( |subscription_id| { vec![ - TestEvent::Pending(PendingData::from_pending_block( - // Irrelevant pending update. - PendingBlock { - transactions: vec![Transaction { - hash: TransactionHash(Felt::from_u64(2)), - variant: Default::default(), - }], - transaction_receipts: vec![( - Receipt { - transaction_hash: TransactionHash(Felt::from_u64(2)), - ..Default::default() - }, - vec![], - )], - ..Default::default() - }, - StateUpdate::default(), - BlockNumber::GENESIS + 1, - )), + TestEvent::Pending( + PendingData::try_from_pre_confirmed_block( + // Irrelevant pending update. + PreConfirmedBlock { + transactions: vec![Transaction { + hash: TransactionHash(Felt::from_u64(2)), + variant: Default::default(), + }], + transaction_receipts: vec![Some(( + Receipt { + transaction_hash: TransactionHash(Felt::from_u64(2)), + ..Default::default() + }, + vec![], + ))], + ..Default::default() + } + .into(), + BlockNumber::GENESIS + 1, + ) + .unwrap(), + ), // Irrelevant block update. TestEvent::L2Block( - Block { - block_number: BlockNumber::GENESIS + 1, - block_hash: BlockHash(Felt::from_u64(1)), + L2Block { + header: BlockHeader { + number: BlockNumber::GENESIS + 1, + hash: BlockHash(Felt::from_u64(1)), + ..Default::default() + }, ..Default::default() } .into(), ), TestEvent::L2Block( - Block { - block_number: BlockNumber::GENESIS + 2, - block_hash: BlockHash(Felt::from_u64(2)), - transactions: vec![Transaction { - hash: TARGET_TX_HASH, + L2Block { + header: BlockHeader { + number: BlockNumber::GENESIS + 2, + hash: BlockHash(Felt::from_u64(2)), ..Default::default() - }], - transaction_receipts: vec![( + }, + transactions_and_receipts: vec![( + Transaction { + hash: TARGET_TX_HASH, + ..Default::default() + }, Receipt { transaction_hash: TARGET_TX_HASH, ..Default::default() }, - vec![], )], + events: vec![vec![]], ..Default::default() } .into(), @@ -1574,22 +1552,16 @@ mod tests { let mut conn = storage.connection().unwrap(); let db = conn.transaction().unwrap(); db.insert_block_header(&BlockHeader { - hash: block.block_hash, - number: block.block_number, - parent_hash: BlockHash(block.block_hash.0 - Felt::from_u64(1)), + hash: block.header.hash, + number: block.header.number, + parent_hash: BlockHash(block.header.hash.0 - Felt::from_u64(1)), ..Default::default() }) .unwrap(); - let (transactions, events_per_tx): (Vec<_>, Vec<_>) = block - .transactions - .into_iter() - .zip(block.transaction_receipts) - .map(|(tx, (receipt, events))| ((tx, receipt), events)) - .unzip(); db.insert_transaction_data( - block.block_number, - &transactions, - Some(&events_per_tx), + block.header.number, + &block.transactions_and_receipts, + Some(&block.events), ) .unwrap(); db.commit().unwrap(); @@ -1748,7 +1720,7 @@ mod tests { #[derive(Debug)] enum TestEvent { Pending(PendingData), - L2Block(Box), + L2Block(Box), Reorg(Reorg), L1State(EthereumStateUpdate), Message(serde_json::Value), diff --git a/crates/rpc/src/method/trace_block_transactions.rs b/crates/rpc/src/method/trace_block_transactions.rs index 4fd69ddf96..185f8f300f 100644 --- a/crates/rpc/src/method/trace_block_transactions.rs +++ b/crates/rpc/src/method/trace_block_transactions.rs @@ -2,6 +2,7 @@ use anyhow::Context; use pathfinder_common::ChainId; use pathfinder_executor::types::InnerCallExecutionResources; use pathfinder_executor::TransactionExecutionError; +use serde::de::Error; use starknet_gateway_client::GatewayApi; use crate::context::RpcContext; @@ -17,26 +18,63 @@ use crate::{compose_executor_transaction, RpcVersion}; #[derive(Debug, Clone)] pub struct TraceBlockTransactionsInput { pub block_id: BlockId, + pub trace_flags: crate::dto::TraceFlags, } impl crate::dto::DeserializeForVersion for TraceBlockTransactionsInput { fn deserialize(value: crate::dto::Value) -> Result { + let rpc_version = value.version; value.deserialize_map(|value| { Ok(Self { block_id: value.deserialize("block_id")?, + trace_flags: if rpc_version >= RpcVersion::V10 { + value + .deserialize_optional("trace_flags")? + .unwrap_or_default() + } else if !value.contains_key("trace_flags") { + crate::dto::TraceFlags::default() + } else { + let err = serde_json::Error::custom(format!( + "Trace flags are not supported in RPC version {}. Use RPC version {} or \ + higher.", + rpc_version.to_str(), + RpcVersion::V10.to_str(), + )); + return Err(err); + }, }) }) } } +#[derive(Debug)] pub struct TraceBlockTransactionsOutput { - traces: Vec<( - pathfinder_common::TransactionHash, - pathfinder_executor::types::TransactionTrace, - )>, + output_format: TraceOutputFormat, include_state_diffs: bool, } +#[derive(Debug)] +enum TraceOutputFormat { + /// Traces should be serialized as an array. This variant is picked + /// when the `RETURN_INITIAL_READS` [trace flag](crate::dto::TraceFlag) + /// is not set. + Array(pathfinder_executor::TransactionTraces), + /// Traces should be serialized as an object with `traces` and + /// `initial_reads` fields. This variant is picked when the + /// `RETURN_INITIAL_READS` [trace flag](crate::dto::TraceFlag) + /// is set. + /// + /// When local traces are not supported for the requested block (i.e. + /// they are fetched from the feeder gateway), the `initial_reads` + /// field will be `None`. When local traces are available, it will + /// contain the aggregate of the initial reads across all transactions + /// that were traced. + Object { + traces: pathfinder_executor::TransactionTraces, + initial_reads: Option, + }, +} + pub async fn trace_block_transactions( context: RpcContext, input: TraceBlockTransactionsInput, @@ -55,6 +93,11 @@ pub async fn trace_block_transactions( let span = tracing::Span::current(); let storage = context.execution_storage.clone(); + + let return_initial_reads = input + .trace_flags + .contains(&crate::dto::TraceFlag::ReturnInitialReads); + let traces = util::task::spawn_blocking(move |_| { let _g = span.enter(); @@ -62,20 +105,21 @@ pub async fn trace_block_transactions( let db_tx = db_conn.transaction()?; let (block_id, header, transactions, cache) = match input.block_id { - BlockId::Pending => { + BlockId::PreConfirmed => { let pending = context .pending_data .get(&db_tx, rpc_version) .context("Querying pending data")?; - let header = pending.pending_header(); - let transactions = pending.pending_transactions().to_vec(); + let header = pending.pre_confirmed_header(); + let transactions = pending.pre_confirmed_transactions().to_vec(); ( None, header, transactions, - // Can't use the cache for pending blocks since they have no block hash. + // Can't use the cache for pending blocks since they have no + // block hash. pathfinder_executor::TraceCache::default(), ) } @@ -102,14 +146,14 @@ pub async fn trace_block_transactions( < VERSIONS_LOWER_THAN_THIS_SHOULD_FALL_BACK_TO_FETCHING_TRACE_FROM_GATEWAY { match input.block_id { - BlockId::Pending => { + BlockId::PreConfirmed => { return Err(TraceBlockTransactionsError::Internal(anyhow::anyhow!( "Traces are not supported for pending blocks by the feeder gateway" ))) } _ => { return Ok::<_, TraceBlockTransactionsError>(LocalExecution::Unsupported(( - block_id.expect("Pending was handled explicitly above"), + block_id.expect("Pre-confirmed was handled explicitly above"), transactions, ))); } @@ -121,7 +165,7 @@ pub async fn trace_block_transactions( // when these blocks were produced). We should fall back to fetching // traces from the feeder gateway instead. if context.chain_id == ChainId::MAINNET - && input.block_id != BlockId::Pending + && !input.block_id.is_pending() && header.number >= MAINNET_RANGE_WHERE_RE_EXECUTION_IS_IMPOSSIBLE_START && header.number <= MAINNET_RANGE_WHERE_RE_EXECUTION_IS_IMPOSSIBLE_END { @@ -139,26 +183,40 @@ pub async fn trace_block_transactions( let hash = header.hash; let state = pathfinder_executor::ExecutionState::trace( context.chain_id, + context.is_l3, header, None, context.config.versioned_constants_map, context.contract_addresses.eth_l2_token_address, context.contract_addresses.strk_l2_token_address, context.native_class_cache, + context + .config + .native_execution_force_use_for_incompatible_classes, ); - let traces = - match pathfinder_executor::trace(db_tx, state, cache, hash, executor_transactions) { - Ok(traces) => traces, - Err(e) => return Err(e.into()), - }; - - let traces = traces - .into_iter() - .map(|(hash, trace)| Ok((hash, trace))) - .collect::, TraceBlockTransactionsError>>()?; + let block_traces = pathfinder_executor::trace( + db_tx, + state, + cache, + hash, + executor_transactions, + return_initial_reads, + )?; + let output_format = match block_traces { + pathfinder_executor::BlockTraces::TracesOnly(traces) => { + TraceOutputFormat::Array(traces) + } + pathfinder_executor::BlockTraces::TracesWithInitialReads { + traces, + initial_reads, + } => TraceOutputFormat::Object { + traces, + initial_reads: Some(initial_reads), + }, + }; Ok(LocalExecution::Success(TraceBlockTransactionsOutput { - traces, + output_format, include_state_diffs: true, })) }) @@ -177,18 +235,23 @@ pub async fn trace_block_transactions( .context("Forwarding to feeder gateway") .map_err(TraceBlockTransactionsError::from) .map(|trace| { + let traces = trace + .traces + .into_iter() + .zip(transactions.into_iter()) + .map(|(trace, tx)| Ok((tx.hash, map_gateway_trace(tx, trace)?))) + .collect::, TraceBlockTransactionsError>>()?; + let output_format = if return_initial_reads { + TraceOutputFormat::Object { + traces, + // Gateway traces do not include initial reads. + initial_reads: None, + } + } else { + TraceOutputFormat::Array(traces) + }; Ok(TraceBlockTransactionsOutput { - traces: trace - .traces - .into_iter() - .zip(transactions.into_iter()) - .map(|(trace, tx)| { - let transaction_hash = tx.hash; - let trace_root = map_gateway_trace(tx, trace)?; - - Ok((transaction_hash, trace_root)) - }) - .collect::, TraceBlockTransactionsError>>()?, + output_format, // State diffs are not available for traces fetched from the gateway. include_state_diffs: false, }) @@ -597,21 +660,92 @@ impl crate::dto::SerializeForVersion for TraceBlockTransactionsOutput { &self, serializer: crate::dto::Serializer, ) -> Result { - serializer.serialize_iter( - self.traces.len(), - &mut self.traces.iter().map(|(hash, trace)| Trace { - transaction_hash: hash, - transaction_trace: trace, - include_state_diff: self.include_state_diffs, - }), - ) + fn serialize_as_array( + serializer: crate::dto::Serializer, + traces: &[( + pathfinder_common::TransactionHash, + pathfinder_executor::types::TransactionTrace, + )], + include_state_diffs: bool, + ) -> Result { + serializer.serialize_iter( + traces.len(), + &mut traces.iter().map(|(hash, tx)| Trace { + transaction_hash: hash, + transaction_trace: tx, + include_state_diffs, + }), + ) + } + + fn serialize_as_object( + serializer: crate::dto::Serializer, + initial_reads: Option<&pathfinder_executor::types::StateMaps>, + traces: &[( + pathfinder_common::TransactionHash, + pathfinder_executor::types::TransactionTrace, + )], + include_state_diffs: bool, + ) -> Result { + let mut serializer = serializer.serialize_struct()?; + serializer.serialize_iter( + "traces", + traces.len(), + &mut traces.iter().map(|(hash, tx)| Trace { + transaction_hash: hash, + transaction_trace: tx, + include_state_diffs, + }), + )?; + if let Some(maps) = initial_reads { + serializer.serialize_field("initial_reads", &crate::dto::InitialReads { maps })?; + } else { + serializer.serialize_field("initial_reads", &EmptyObject)?; + } + serializer.end() + } + + let rpc_version = serializer.version; + match &self.output_format { + TraceOutputFormat::Array(traces) => { + serialize_as_array(serializer, traces, self.include_state_diffs) + } + TraceOutputFormat::Object { + traces, + initial_reads, + } => { + debug_assert!( + rpc_version >= RpcVersion::V10, + "initial_reads was introduced in {}, but is present in earlier version", + RpcVersion::V10.to_str(), + ); + serialize_as_object( + serializer, + initial_reads.as_ref(), + traces, + self.include_state_diffs, + ) + } + } + } +} + +struct EmptyObject; + +impl crate::dto::SerializeForVersion for EmptyObject { + fn serialize( + &self, + serializer: crate::dto::Serializer, + ) -> Result { + let serializer = serializer.serialize_struct()?; + serializer.end() } } struct Trace<'a> { pub transaction_hash: &'a pathfinder_common::TransactionHash, pub transaction_trace: &'a pathfinder_executor::types::TransactionTrace, - pub include_state_diff: bool, + pub include_state_diffs: bool, } impl crate::dto::SerializeForVersion for Trace<'_> { @@ -625,7 +759,7 @@ impl crate::dto::SerializeForVersion for Trace<'_> { "trace_root", &crate::dto::TransactionTrace { trace: self.transaction_trace.clone(), - include_state_diff: self.include_state_diff, + include_state_diff: self.include_state_diffs, }, )?; serializer.end() @@ -645,6 +779,12 @@ impl From for TraceBlockTransactionsError { } } +impl From for TraceBlockTransactionsError { + fn from(value: pathfinder_storage::StorageError) -> Self { + Self::Internal(value.into()) + } +} + impl From for crate::error::ApplicationError { fn from(value: TraceBlockTransactionsError) -> Self { match value { @@ -683,16 +823,29 @@ impl From for TraceBlockTransactionsError { #[cfg(test)] pub(crate) mod tests { + use assert_matches::assert_matches; + use pathfinder_common::class_definition::{ + SerializedCasmDefinition, + SerializedSierraDefinition, + }; use pathfinder_common::macro_prelude::*; use pathfinder_common::prelude::*; use pathfinder_common::receipt::Receipt; + use pathfinder_common::Chain; use pathfinder_crypto::Felt; use starknet_gateway_types::reply::{GasPrices, L1DataAvailabilityMode}; + use wiremock::{matchers, Mock, MockServer, ResponseTemplate}; use super::*; - use crate::dto::{SerializeForVersion, Serializer}; + use crate::dto::{DeserializeForVersion, SerializeForVersion, Serializer}; + use crate::method::simulate_transactions::tests::{ + fixtures, + setup_storage_with_starknet_version, + }; use crate::RpcVersion; + const RPC_VERSION: RpcVersion = RpcVersion::V09; + #[derive(Debug)] pub struct Trace { pub transaction_hash: TransactionHash, @@ -701,28 +854,34 @@ pub(crate) mod tests { pub(crate) async fn setup_multi_tx_trace_test( ) -> anyhow::Result<(RpcContext, BlockHeader, Vec)> { - use super::super::simulate_transactions::tests::{ - fixtures, - setup_storage_with_starknet_version, - }; + setup_multi_tx_trace_test_with_starknet_version_and_chain( + VERSIONS_LOWER_THAN_THIS_SHOULD_FALL_BACK_TO_FETCHING_TRACE_FROM_GATEWAY, + Chain::SepoliaTestnet, + ) + .await + } + pub(crate) async fn setup_multi_tx_trace_test_with_starknet_version_and_chain( + starknet_version: StarknetVersion, + chain: Chain, + ) -> anyhow::Result<(RpcContext, BlockHeader, Vec)> { let ( storage, last_block_header, account_contract_address, universal_deployer_address, test_storage_value, - ) = setup_storage_with_starknet_version(StarknetVersion::new(0, 13, 1, 1)).await; - let context = RpcContext::for_tests().with_storage(storage.clone()); + ) = setup_storage_with_starknet_version(starknet_version).await; + let context = RpcContext::for_tests_on(chain).with_storage(storage.clone()); let (next_block_header, transactions, traces) = { - let mut db = storage.connection()?; + let mut db = storage.connection().map_err(anyhow::Error::from)?; let tx = db.transaction()?; tx.insert_sierra_class_definition( &SierraHash(fixtures::SIERRA_HASH.0), - fixtures::SIERRA_DEFINITION, - fixtures::CASM_DEFINITION, + &SerializedSierraDefinition::from_slice(fixtures::SIERRA_DEFINITION), + &SerializedCasmDefinition::from_slice(fixtures::CASM_DEFINITION), &casm_hash_bytes!(b"casm hash blake"), )?; @@ -809,6 +968,73 @@ pub(crate) mod tests { Ok((context, next_block_header, traces)) } + #[rstest::rstest] + #[case::v07(RpcVersion::V07)] + #[case::v08(RpcVersion::V08)] + #[case::v09(RpcVersion::V09)] + #[case::v10(RpcVersion::V10)] + fn input_deserialization_happy_path(#[case] rpc_version: RpcVersion) { + let input_json = if rpc_version >= RpcVersion::V10 { + serde_json::json!({ + "block_id": {"block_number": 1}, + "trace_flags": ["RETURN_INITIAL_READS"] + }) + } else { + serde_json::json!({ + "block_id": {"block_number": 1}, + }) + }; + + let value = crate::dto::Value::new(input_json, rpc_version); + let input = TraceBlockTransactionsInput::deserialize(value).unwrap(); + + assert_matches!( + input.block_id, + BlockId::Number(num) if num.get() == 1 + ); + let expected_flags = if rpc_version >= RpcVersion::V10 { + vec![crate::dto::TraceFlag::ReturnInitialReads] + } else { + vec![] + }; + assert_eq!(input.trace_flags.0, expected_flags); + } + + #[rstest::rstest] + #[case::v07(RpcVersion::V07)] + #[case::v08(RpcVersion::V08)] + #[case::v09(RpcVersion::V09)] + #[case::v10(RpcVersion::V10)] + #[tokio::test] + async fn input_deserialization_trace_flags_rejected_pre_v10(#[case] rpc_version: RpcVersion) { + let input_json = serde_json::json!({ + "block_id": {"block_number": 1}, + "trace_flags": ["RETURN_INITIAL_READS"] + }); + + let value = crate::dto::Value::new(input_json, rpc_version); + let result = TraceBlockTransactionsInput::deserialize(value); + + if rpc_version >= RpcVersion::V10 { + assert!( + result.is_ok(), + "Expected success for trace_flags in RPC version {}", + rpc_version.to_str() + ); + } else { + let err = result.unwrap_err(); + assert_eq!( + err.to_string(), + format!( + "Trace flags are not supported in RPC version {}. Use RPC version {} or \ + higher.", + rpc_version.to_str(), + RpcVersion::V10.to_str() + ), + ); + } + } + #[rstest::rstest] #[case::v07(RpcVersion::V07)] #[case::v08(RpcVersion::V08)] @@ -820,6 +1046,7 @@ pub(crate) mod tests { let input = TraceBlockTransactionsInput { block_id: next_block_header.hash.into(), + trace_flags: crate::dto::TraceFlags::new(), }; let output = trace_block_transactions(context, input, version) .await @@ -832,7 +1059,62 @@ pub(crate) mod tests { Ok(()) } - const RPC_VERSION: RpcVersion = RpcVersion::V09; + #[rstest::rstest] + #[case::v07(RpcVersion::V07)] + #[case::v08(RpcVersion::V08)] + #[case::v09(RpcVersion::V09)] + #[case::v10(RpcVersion::V10)] + #[tokio::test] + async fn test_multiple_pre_confirmed_transactions( + #[case] version: RpcVersion, + ) -> anyhow::Result<()> { + let (context, _expected_traces) = setup_multi_tx_trace_pre_confirmed_test().await?; + + let input = TraceBlockTransactionsInput { + block_id: BlockId::PreConfirmed, + trace_flags: crate::dto::TraceFlags::new(), + }; + let output = trace_block_transactions(context, input, version) + .await + .unwrap() + .serialize(Serializer { version }) + .unwrap(); + + crate::assert_json_matches_fixture!( + output, + version, + "traces/multiple_pre_confirmed_txs.json" + ); + + Ok(()) + } + + #[rstest::rstest] + #[case::v07(RpcVersion::V07)] + #[case::v08(RpcVersion::V08)] + #[case::v09(RpcVersion::V09)] + #[case::v10(RpcVersion::V10)] + #[tokio::test] + async fn test_multiple_pre_latest_transactions( + #[case] version: RpcVersion, + ) -> anyhow::Result<()> { + let (context, _expected_traces) = setup_multi_tx_trace_pre_latest_test().await?; + + let input = TraceBlockTransactionsInput { + block_id: BlockId::PreConfirmed, + trace_flags: crate::dto::TraceFlags::new(), + }; + let output = trace_block_transactions(context, input, version) + .await + .unwrap() + .serialize(Serializer { version }) + .unwrap(); + + // trace_block_transactions only looks into the pre-confirmed block + assert!(output.as_array().unwrap().is_empty()); + + Ok(()) + } /// Test that multiple requests for the same block return correctly. This /// checks that the trace request coalescing doesn't do anything @@ -845,6 +1127,7 @@ pub(crate) mod tests { let input = TraceBlockTransactionsInput { block_id: next_block_header.hash.into(), + trace_flags: crate::dto::TraceFlags::new(), }; let mut joins = tokio::task::JoinSet::new(); for _ in 0..NUM_REQUESTS { @@ -871,10 +1154,12 @@ pub(crate) mod tests { for _ in 0..NUM_REQUESTS { expected.push( TraceBlockTransactionsOutput { - traces: traces - .iter() - .map(|t| (t.transaction_hash, t.trace_root.clone())) - .collect(), + output_format: TraceOutputFormat::Array( + traces + .iter() + .map(|t| (t.transaction_hash, t.trace_root.clone())) + .collect(), + ), include_state_diffs: true, } .serialize(Serializer { @@ -888,125 +1173,6 @@ pub(crate) mod tests { Ok(()) } - pub(crate) async fn setup_multi_tx_trace_pending_test( - ) -> anyhow::Result<(RpcContext, Vec)> { - use super::super::simulate_transactions::tests::{ - fixtures, - setup_storage_with_starknet_version, - }; - - let ( - storage, - last_block_header, - account_contract_address, - universal_deployer_address, - test_storage_value, - ) = setup_storage_with_starknet_version(StarknetVersion::new(0, 13, 1, 1)).await; - let context = RpcContext::for_tests().with_storage(storage.clone()); - - let transactions = vec![ - fixtures::input::declare(account_contract_address).try_into_common(context.chain_id)?, - fixtures::input::universal_deployer( - account_contract_address, - universal_deployer_address, - ) - .try_into_common(context.chain_id)?, - fixtures::input::invoke(account_contract_address).try_into_common(context.chain_id)?, - ]; - - let traces = vec![ - fixtures::expected_output_0_13_1_1::declare( - account_contract_address, - &last_block_header, - ), - fixtures::expected_output_0_13_1_1::universal_deployer( - account_contract_address, - &last_block_header, - universal_deployer_address, - ), - fixtures::expected_output_0_13_1_1::invoke( - account_contract_address, - &last_block_header, - test_storage_value, - ), - ]; - - let pending_block = { - let mut db = storage.connection()?; - let tx = db.transaction()?; - - tx.insert_sierra_class_definition( - &SierraHash(fixtures::SIERRA_HASH.0), - fixtures::SIERRA_DEFINITION, - fixtures::CASM_DEFINITION, - &casm_hash_bytes!(b"casm hash blake"), - )?; - - let dummy_receipt = Receipt { - transaction_hash: TransactionHash(felt!("0x1")), - transaction_index: TransactionIndex::new_or_panic(0), - ..Default::default() - }; - - let transaction_receipts = vec![(dummy_receipt, vec![]); 3]; - - let pending_block = starknet_gateway_types::reply::PendingBlock { - l1_gas_price: GasPrices { - price_in_wei: last_block_header.eth_l1_gas_price, - price_in_fri: last_block_header.strk_l1_gas_price, - }, - l1_data_gas_price: GasPrices { - price_in_wei: last_block_header.eth_l1_data_gas_price, - price_in_fri: last_block_header.strk_l1_data_gas_price, - }, - l2_gas_price: GasPrices { - price_in_wei: last_block_header.eth_l2_gas_price, - price_in_fri: last_block_header.strk_l2_gas_price, - }, - parent_hash: last_block_header.hash, - sequencer_address: last_block_header.sequencer_address, - status: starknet_gateway_types::reply::Status::Pending, - timestamp: last_block_header.timestamp, - transaction_receipts, - transactions: transactions.to_vec(), - starknet_version: last_block_header.starknet_version, - l1_da_mode: L1DataAvailabilityMode::Blob, - }; - - tx.commit()?; - - pending_block - }; - - let pending_data = crate::pending::PendingData::from_pending_block( - pending_block, - Default::default(), - last_block_header.number + 1, - ); - - let (tx, rx) = tokio::sync::watch::channel(Default::default()); - tx.send(pending_data).unwrap(); - - let context = context.with_pending_data(rx); - - let traces = vec![ - Trace { - transaction_hash: transactions[0].hash, - trace_root: traces[0].trace.clone(), - }, - Trace { - transaction_hash: transactions[1].hash, - trace_root: traces[1].trace.clone(), - }, - Trace { - transaction_hash: transactions[2].hash, - trace_root: traces[2].trace.clone(), - }, - ]; - - Ok((context, traces)) - } - pub(crate) async fn setup_multi_tx_trace_pre_latest_test( ) -> anyhow::Result<(RpcContext, Vec)> { use super::super::simulate_transactions::tests::{ @@ -1023,7 +1189,7 @@ pub(crate) mod tests { ) = setup_storage_with_starknet_version(StarknetVersion::new(0, 14, 0, 0)).await; let context = RpcContext::for_tests().with_storage(storage.clone()); - let pre_latest_transactions = vec![ + let pre_latest_transactions = [ fixtures::input::declare(account_contract_address).try_into_common(context.chain_id)?, fixtures::input::universal_deployer( account_contract_address, @@ -1033,7 +1199,7 @@ pub(crate) mod tests { fixtures::input::invoke(account_contract_address).try_into_common(context.chain_id)?, ]; - let traces = vec![ + let traces = &[ fixtures::expected_output_0_14_0_0::declare( account_contract_address, &last_block_header, @@ -1051,13 +1217,13 @@ pub(crate) mod tests { ]; let pending_data = { - let mut db = storage.connection()?; + let mut db = storage.connection().map_err(anyhow::Error::from)?; let tx = db.transaction()?; tx.insert_sierra_class_definition( &SierraHash(fixtures::SIERRA_HASH.0), - fixtures::SIERRA_DEFINITION, - fixtures::CASM_DEFINITION, + &SerializedSierraDefinition::from_slice(fixtures::SIERRA_DEFINITION), + &SerializedCasmDefinition::from_slice(fixtures::CASM_DEFINITION), &casm_hash_bytes!(b"casm hash blake"), )?; @@ -1087,7 +1253,7 @@ pub(crate) mod tests { status: starknet_gateway_types::reply::Status::Pending, timestamp: last_block_header.timestamp, transaction_receipts, - transactions: pre_latest_transactions.clone(), + transactions: pre_latest_transactions.clone().into(), starknet_version: last_block_header.starknet_version, l1_da_mode: L1DataAvailabilityMode::Blob, }; @@ -1179,7 +1345,7 @@ pub(crate) mod tests { fixtures::input::invoke(account_contract_address).try_into_common(context.chain_id)?, ]; - let traces = vec![ + let traces = &[ fixtures::expected_output_0_14_0_0::declare( account_contract_address, &last_block_header, @@ -1197,13 +1363,13 @@ pub(crate) mod tests { ]; let pending_data = { - let mut db = storage.connection()?; + let mut db = storage.connection().map_err(anyhow::Error::from)?; let tx = db.transaction()?; tx.insert_sierra_class_definition( &SierraHash(fixtures::SIERRA_HASH.0), - fixtures::SIERRA_DEFINITION, - fixtures::CASM_DEFINITION, + &SerializedSierraDefinition::from_slice(fixtures::SIERRA_DEFINITION), + &SerializedCasmDefinition::from_slice(fixtures::CASM_DEFINITION), &casm_hash_bytes!(b"casm hash blake"), )?; @@ -1285,20 +1451,179 @@ pub(crate) mod tests { #[case::v09(RpcVersion::V09)] #[case::v10(RpcVersion::V10)] #[tokio::test] - async fn test_multiple_pending_transactions(#[case] version: RpcVersion) -> anyhow::Result<()> { + async fn test_trace_block_transactions_return_initial_reads( + #[case] rpc_version: RpcVersion, + ) -> anyhow::Result<()> { + fn fixture( + rpc_version: RpcVersion, + trace_flags: &crate::dto::TraceFlags, + ) -> serde_json::Result { + let fixture_str = match rpc_version { + RpcVersion::V07 => include_str!("../../fixtures/0.7.0/traces/multiple_txs.json"), + RpcVersion::V08 => include_str!("../../fixtures/0.8.0/traces/multiple_txs.json"), + RpcVersion::V09 => include_str!("../../fixtures/0.9.0/traces/multiple_txs.json"), + RpcVersion::V10 => { + if trace_flags.contains(&crate::dto::TraceFlag::ReturnInitialReads) { + include_str!( + "../../fixtures/0.10.0/traces/multiple_txs_with_initial_reads.json" + ) + } else { + include_str!("../../fixtures/0.10.0/traces/multiple_txs.json") + } + } + RpcVersion::V06 | RpcVersion::PathfinderV01 => unreachable!("no such test case"), + }; + serde_json::from_str(fixture_str) + } + let (context, next_block_header, _) = setup_multi_tx_trace_test().await?; - let input = TraceBlockTransactionsInput { + let mut input = TraceBlockTransactionsInput { block_id: next_block_header.hash.into(), + trace_flags: crate::dto::TraceFlags::new(), }; - let output = trace_block_transactions(context, input, RPC_VERSION) + // First test without `RETURN_INITIAL_READS`. + let output_json = trace_block_transactions(context.clone(), input.clone(), rpc_version) .await .unwrap() - .serialize(Serializer { version }) - .unwrap(); + .serialize(Serializer { + version: rpc_version, + })?; + let expected_json = fixture(rpc_version, &input.trace_flags)?; + pretty_assertions_sorted::assert_eq!(output_json, expected_json); + + // Then, for RpcVersion that support `RETURN_INITIAL_READS` (i.e. after + // RpcVersion::V10), test with the flag enabled. + // + // NB: Testing twice with a different set of flags also serves as a guarantee + // that we don't accidentally cache results based solely on the block + // identifier. + if rpc_version >= RpcVersion::V10 { + input + .trace_flags + .0 + .push(crate::dto::TraceFlag::ReturnInitialReads); + let output_json = trace_block_transactions(context, input.clone(), rpc_version) + .await + .unwrap() + .serialize(Serializer { + version: rpc_version, + })?; + let expected_json = fixture(rpc_version, &input.trace_flags)?; + pretty_assertions_sorted::assert_eq!(output_json, expected_json); + } - crate::assert_json_matches_fixture!(output, version, "traces/multiple_pending_txs.json"); + Ok(()) + } + + #[rstest::rstest] + #[case::v10(RpcVersion::V10)] + #[tokio::test] + async fn test_trace_block_transactions_return_initial_reads_when_fetching_from_fgw( + #[case] rpc_version: RpcVersion, + ) -> anyhow::Result<()> { + async fn setup( + starknet_version: StarknetVersion, + block_num_to_insert: BlockNumber, + ) -> anyhow::Result<(RpcContext, TraceBlockTransactionsInput, MockServer)> { + let (mut context, _, _) = setup_multi_tx_trace_test_with_starknet_version_and_chain( + starknet_version, + Chain::Mainnet, + ) + .await?; + + let mut conn = context.storage.connection().unwrap(); + let tx = conn.transaction().unwrap(); + tx.insert_block_header(&BlockHeader { + number: block_num_to_insert, + starknet_version, + ..Default::default() + })?; + tx.commit()?; + + let server = MockServer::start().await; + Mock::given(matchers::path("/feeder_gateway/get_block_traces")) + .and(matchers::query_param( + "blockNumber", + block_num_to_insert.get().to_string(), + )) + .respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({ + "traces": [] + }))) + .mount(&server) + .await; + context.sequencer = + starknet_gateway_client::Client::for_test(server.uri().parse().unwrap()) + .unwrap() + .disable_retry_for_tests(); + + let input = TraceBlockTransactionsInput { + block_id: block_num_to_insert.into(), + trace_flags: crate::dto::TraceFlags(vec![ + crate::dto::TraceFlag::ReturnInitialReads, + ]), + }; + + Ok((context, input, server)) + } + + // First test that with a Starknet version that requires fetching traces from + // the gateway, we get an empty "initial_reads" object when + // `RETURN_INITIAL_READS` is set. + let (block_with_fallback, starknet_version_with_fallback) = ( + BlockNumber::new_or_panic(632905), // Must be lower than 632915. + StarknetVersion::new(0, 13, 1, 0), // Version for block 632905 on mainnet. + ); + assert!( + starknet_version_with_fallback + < VERSIONS_LOWER_THAN_THIS_SHOULD_FALL_BACK_TO_FETCHING_TRACE_FROM_GATEWAY, + ); + let (context, input, _handle) = + setup(starknet_version_with_fallback, block_with_fallback).await?; + + let output_json = trace_block_transactions(context, input, rpc_version) + .await + .unwrap() + .serialize(Serializer { + version: rpc_version, + })?; + + let initial_reads = output_json.get("initial_reads").unwrap(); + assert!(initial_reads.is_object()); + assert_eq!(initial_reads.to_string(), "{}"); + + // Next test that we get an empty "initial_reads" object when these conditions + // are fulfilled: + // - Starknet version is new enough to support local tracing + // - Block number is in the range where we fetch traces from the gateway + // - `RETURN_INITIAL_READS` is set + let (re_execution_impossible_block, re_execution_impossible_starknet_version) = ( + // 1943704 + 10 = 1943714. + MAINNET_RANGE_WHERE_RE_EXECUTION_IS_IMPOSSIBLE_START + 10, + // Version for block 1943714 on mainnet. + StarknetVersion::new(0, 13, 6, 0), + ); + assert!( + re_execution_impossible_starknet_version + >= VERSIONS_LOWER_THAN_THIS_SHOULD_FALL_BACK_TO_FETCHING_TRACE_FROM_GATEWAY, + ); + let (context, input, _handle) = setup( + re_execution_impossible_starknet_version, + re_execution_impossible_block, + ) + .await?; + + let output_json = trace_block_transactions(context, input, rpc_version) + .await + .unwrap() + .serialize(Serializer { + version: rpc_version, + })?; + + let initial_reads = output_json.get("initial_reads").unwrap(); + assert!(initial_reads.is_object()); + assert_eq!(initial_reads.to_string(), "{}"); Ok(()) } @@ -1307,7 +1632,7 @@ pub(crate) mod tests { /// with blockifier. #[tokio::test] async fn mainnet_blockifier_backwards_incompatible_transaction_tracing() { - let context = RpcContext::for_tests_on(pathfinder_common::Chain::Mainnet); + let mut context = RpcContext::for_tests_on(pathfinder_common::Chain::Mainnet); let mut connection = context.storage.connection().unwrap(); let transaction = connection.transaction().unwrap(); @@ -1382,11 +1707,28 @@ pub(crate) mod tests { transaction.commit().unwrap(); drop(connection); + let server = MockServer::start().await; + Mock::given(matchers::path("/feeder_gateway/get_block_traces")) + .and(matchers::query_param( + "blockNumber", + block.block_number.get().to_string(), + )) + .respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({ + "traces": [] + }))) + .mount(&server) + .await; + context.sequencer = + starknet_gateway_client::Client::for_test(server.uri().parse().unwrap()) + .unwrap() + .disable_retry_for_tests(); + // The tracing succeeds. trace_block_transactions( context.clone(), TraceBlockTransactionsInput { block_id: BlockId::Number(block.block_number), + trace_flags: crate::dto::TraceFlags::new(), }, RPC_VERSION, ) @@ -1398,7 +1740,7 @@ pub(crate) mod tests { /// traces are missing the `call_type` field. #[tokio::test] async fn mainnet_pre_0_9_traces() { - let context = RpcContext::for_tests_on(pathfinder_common::Chain::Mainnet); + let mut context = RpcContext::for_tests_on(pathfinder_common::Chain::Mainnet); let mut connection = context.storage.connection().unwrap(); let transaction = connection.transaction().unwrap(); @@ -1473,11 +1815,31 @@ pub(crate) mod tests { transaction.commit().unwrap(); drop(connection); + // Use a pre-0.9 format trace fixture (no `call_type` field) to verify + // that the gateway fallback path handles the old schema correctly. + let traces_json = + String::from_utf8(starknet_gateway_test_fixtures::traces::TESTNET_GENESIS.to_vec()) + .unwrap(); + let server = MockServer::start().await; + Mock::given(matchers::path("/feeder_gateway/get_block_traces")) + .and(matchers::query_param( + "blockNumber", + block.block_number.get().to_string(), + )) + .respond_with(ResponseTemplate::new(200).set_body_string(traces_json)) + .mount(&server) + .await; + context.sequencer = + starknet_gateway_client::Client::for_test(server.uri().parse().unwrap()) + .unwrap() + .disable_retry_for_tests(); + // The tracing succeeds. trace_block_transactions( context.clone(), TraceBlockTransactionsInput { block_id: BlockId::Number(block.block_number), + trace_flags: crate::dto::TraceFlags::new(), }, RPC_VERSION, ) diff --git a/crates/rpc/src/method/trace_transaction.rs b/crates/rpc/src/method/trace_transaction.rs index cd57713ba5..103bd81ff8 100644 --- a/crates/rpc/src/method/trace_transaction.rs +++ b/crates/rpc/src/method/trace_transaction.rs @@ -73,11 +73,11 @@ pub async fn trace_transaction( .context("Querying pending data")?; let (header, transactions, cache) = if let Some(pending_tx) = pending - .pending_transactions() + .pre_confirmed_transactions() .iter() .find(|tx| tx.hash == input.transaction_hash) { - let header = pending.pending_header(); + let header = pending.pre_confirmed_header(); if header.starknet_version < VERSIONS_LOWER_THAN_THIS_SHOULD_FALL_BACK_TO_FETCHING_TRACE_FROM_GATEWAY @@ -87,7 +87,7 @@ pub async fn trace_transaction( ( header, - pending.pending_transactions().to_vec(), + pending.pre_confirmed_transactions().to_vec(), // Can't use the cache for pending blocks since they have no block hash. pathfinder_executor::TraceCache::default(), ) @@ -170,22 +170,37 @@ pub async fn trace_transaction( let hash = header.hash; let state = pathfinder_executor::ExecutionState::trace( context.chain_id, + context.is_l3, header, None, context.config.versioned_constants_map, context.contract_addresses.eth_l2_token_address, context.contract_addresses.strk_l2_token_address, context.native_class_cache, + context + .config + .native_execution_force_use_for_incompatible_classes, ); + // The flag is not included in the spec for this method. Moreover, it isn't + // possible to return per-transaction initial reads at the moment. + let return_initial_reads = false; + let executor_transactions = transactions .iter() .map(|transaction| compose_executor_transaction(transaction, &db_tx)) .collect::, _>>()?; - match pathfinder_executor::trace(db_tx, state, cache, hash, executor_transactions) { - Ok(txs) => { - let trace = txs + match pathfinder_executor::trace( + db_tx, + state, + cache, + hash, + executor_transactions, + return_initial_reads, + ) { + Ok(pathfinder_executor::BlockTraces::TracesOnly(traces)) => { + let trace = traces .into_iter() .find_map(|(tx_hash, trace)| { if tx_hash == input.transaction_hash { @@ -202,6 +217,9 @@ pub async fn trace_transaction( })?; Ok(LocalExecution::Success(trace)) } + Ok(pathfinder_executor::BlockTraces::TracesWithInitialReads { .. }) => { + unreachable!("return_initial_reads is false") + } Err(e) => Err(e.into()), } }) @@ -301,7 +319,6 @@ impl From for ApplicationError { pub mod tests { use super::super::trace_block_transactions::tests::{ - setup_multi_tx_trace_pending_test, setup_multi_tx_trace_pre_confirmed_test, setup_multi_tx_trace_pre_latest_test, setup_multi_tx_trace_test, @@ -344,38 +361,6 @@ pub mod tests { Ok(()) } - #[tokio::test] - async fn test_multiple_pending_transactions() -> anyhow::Result<()> { - let (context, traces) = setup_multi_tx_trace_pending_test().await?; - - for trace in traces { - let input = Input { - transaction_hash: trace.transaction_hash, - }; - let output = trace_transaction(context.clone(), input, RPC_VERSION) - .await - .unwrap(); - let expected = Output(crate::dto::TransactionTrace { - trace: trace.trace_root, - include_state_diff: false, - }); - pretty_assertions_sorted::assert_eq!( - output - .serialize(Serializer { - version: RPC_VERSION - }) - .unwrap(), - expected - .serialize(Serializer { - version: RPC_VERSION - }) - .unwrap() - ); - } - - Ok(()) - } - #[tokio::test] async fn test_multiple_pre_latest_transactions() -> anyhow::Result<()> { let (context, traces) = setup_multi_tx_trace_pre_latest_test().await?; diff --git a/crates/rpc/src/pending.rs b/crates/rpc/src/pending.rs index 3b1b78507d..f9b21d9bea 100644 --- a/crates/rpc/src/pending.rs +++ b/crates/rpc/src/pending.rs @@ -14,7 +14,7 @@ use pathfinder_common::{ StateUpdate, }; use pathfinder_storage::Transaction; -use starknet_gateway_types::reply::{GasPrices, PendingBlock, Status}; +use starknet_gateway_types::reply::{GasPrices, Status}; use tokio::sync::watch::Receiver as WatchReceiver; use crate::RpcVersion; @@ -85,112 +85,75 @@ pub struct PreLatestData { pub state_update: StateUpdate, } -#[derive(Clone, Debug, PartialEq)] -pub enum PendingBlockVariant { - Pending(PendingBlock), - PreConfirmed { - block: Box, - candidate_transactions: Vec, - pre_latest_data: Option>, - }, -} - -impl Default for PendingBlockVariant { - fn default() -> Self { - Self::Pending(PendingBlock::default()) - } +/// Currently known chain data that is yet to be confirmed on L2 +#[derive(Clone, Default, Debug, PartialEq)] +pub struct PendingBlocks { + /// Pre confirmed block, sequencer's nightly state + pub pre_confirmed: PreConfirmedBlock, + /// Pre-latest parent of pre-confirmed block, exists if not yet confirmed + pub pre_latest: Option, + /// Txs submitted but not yet executed + pub candidate_transactions: Vec, } -impl PendingBlockVariant { +impl PendingBlocks { pub fn transactions(&self) -> &[pathfinder_common::transaction::Transaction] { - match self { - PendingBlockVariant::Pending(block) => &block.transactions, - PendingBlockVariant::PreConfirmed { block, .. } => &block.transactions, - } + &self.pre_confirmed.transactions } pub fn pre_latest_transactions( &self, ) -> Option<&[pathfinder_common::transaction::Transaction]> { - let PendingBlockVariant::PreConfirmed { - pre_latest_data, .. - } = self - else { - return None; - }; - pre_latest_data + self.pre_latest .as_ref() .map(|data| data.block.transactions.as_slice()) } pub fn tx_receipts_and_events(&self) -> &[TxnReceiptAndEvents] { - match self { - PendingBlockVariant::Pending(block) => &block.transaction_receipts, - PendingBlockVariant::PreConfirmed { block, .. } => &block.transaction_receipts, - } + &self.pre_confirmed.transaction_receipts } pub fn pre_latest_tx_receipts_and_events(&self) -> Option<&[TxnReceiptAndEvents]> { - let PendingBlockVariant::PreConfirmed { - pre_latest_data, .. - } = self - else { - return None; - }; - pre_latest_data + self.pre_latest .as_ref() .map(|data| data.block.transaction_receipts.as_slice()) } pub fn finality_status(&self) -> crate::dto::TxnFinalityStatus { - match self { - PendingBlockVariant::Pending(_) => crate::dto::TxnFinalityStatus::AcceptedOnL2, - PendingBlockVariant::PreConfirmed { .. } => crate::dto::TxnFinalityStatus::PreConfirmed, - } + // For more info: + // - on why `AcceptedOnL2` is wrong: https://github.com/equilibriumco/pathfinder/issues/3259 + // - on why `PendingBlockVariant::Pending` case was dead code: + // https://github.com/equilibriumco/pathfinder/issues/3272 + crate::dto::TxnFinalityStatus::PreConfirmed } } #[derive(Clone, Default, Debug, PartialEq)] pub struct PendingData { - /// The pending block, either in the pending or pre-confirmed - /// [variant](PendingBlockVariant). - block: Arc, - /// The pending state update, either from the pending or pre-confirmed - /// [variant](PendingBlockVariant). + /// The blocks container, holding pre-confirmed, pre-latest, and candidate + /// data. + blocks: Arc, + /// The state update of the pre-confirmed block. /// /// Does not include the [pre-latest](PreLatestData) state update. state_update: Arc, /// The aggregated state update. Contains the merged state update from - /// the pre-latest block (if exists) and the pending/pre-confirmed block. + /// the pre-latest block (if exists) and the pre-confirmed block. aggregated_state_update: Arc, - /// The block number of the pending/pre-confirmed block. + /// The block number of the pre-confirmed block. number: BlockNumber, } impl PendingData { - pub fn from_pending_block( - block: PendingBlock, - state_update: StateUpdate, - number: BlockNumber, - ) -> Self { - let state_update = Arc::new(state_update); - Self { - block: Arc::new(PendingBlockVariant::Pending(block)), - state_update: Arc::clone(&state_update), - aggregated_state_update: state_update, - number, - } - } - #[cfg(test)] pub fn from_parts( - block: PendingBlockVariant, + blocks: PendingBlocks, state_update: StateUpdate, aggregated_state_update: StateUpdate, number: BlockNumber, ) -> Self { Self { - block: Arc::new(block), + blocks: Arc::new(blocks), state_update: Arc::new(state_update), aggregated_state_update: Arc::new(aggregated_state_update), number, @@ -306,11 +269,10 @@ impl PendingData { transactions: pre_latest_block.transactions, transaction_receipts: pre_latest_block.transaction_receipts, }; - let data = PreLatestData { + PreLatestData { block: pre_latest_block, state_update: pre_latest_state_update, - }; - Box::new(data) + } }); let aggregated_state_update = Arc::new( @@ -322,10 +284,10 @@ impl PendingData { ); Ok(Self { - block: Arc::new(PendingBlockVariant::PreConfirmed { - block: pre_confirmed_block.into(), + blocks: Arc::new(PendingBlocks { + pre_confirmed: pre_confirmed_block, + pre_latest: pre_latest_data, candidate_transactions, - pre_latest_data, }), state_update: pre_confirmed_state_update, aggregated_state_update, @@ -333,35 +295,7 @@ impl PendingData { }) } - fn empty_pending(latest: &BlockHeader) -> Self { - let block = PendingBlock { - l1_gas_price: GasPrices { - price_in_wei: latest.eth_l1_gas_price, - price_in_fri: latest.strk_l1_gas_price, - }, - l1_data_gas_price: GasPrices { - price_in_wei: latest.eth_l1_data_gas_price, - price_in_fri: latest.strk_l1_data_gas_price, - }, - l2_gas_price: GasPrices { - price_in_wei: latest.eth_l2_gas_price, - price_in_fri: latest.strk_l2_gas_price, - }, - timestamp: latest.timestamp, - parent_hash: latest.hash, - starknet_version: latest.starknet_version, - l1_da_mode: latest.l1_da_mode.into(), - status: Status::Pending, - sequencer_address: latest.sequencer_address, - transaction_receipts: vec![], - transactions: vec![], - }; - let state_update = - StateUpdate::default().with_parent_state_commitment(latest.state_commitment); - Self::from_pending_block(block, state_update, latest.number + 1) - } - - fn empty_pre_confirmed(latest: &BlockHeader) -> Self { + fn empty(latest: &BlockHeader) -> Self { let block = PreConfirmedBlock { number: latest.number + 1, l1_gas_price: GasPrices { @@ -387,10 +321,10 @@ impl PendingData { let state_update = Arc::new(StateUpdate::default().with_parent_state_commitment(latest.state_commitment)); Self { - block: Arc::new(PendingBlockVariant::PreConfirmed { - block: block.into(), + blocks: Arc::new(PendingBlocks { + pre_confirmed: block, candidate_transactions: vec![], - pre_latest_data: None, + pre_latest: None, }), state_update: Arc::clone(&state_update), aggregated_state_update: state_update, @@ -398,94 +332,56 @@ impl PendingData { } } - pub fn pending_block_number(&self) -> BlockNumber { + pub fn pre_confirmed_block_number(&self) -> BlockNumber { self.number } pub fn pre_latest_block_number(&self) -> Option { - let PendingBlockVariant::PreConfirmed { - pre_latest_data, .. - } = self.block.as_ref() - else { - return None; - }; - pre_latest_data.as_ref().map(|data| data.block.number) + self.blocks + .pre_latest + .as_ref() + .map(|data| data.block.number) } /// Returns a mutable reference to the block number. #[cfg(test)] - pub fn pending_block_number_mut(&mut self) -> &mut BlockNumber { + pub fn pre_confirmed_block_number_mut(&mut self) -> &mut BlockNumber { &mut self.number } - /// Get the header of the pending/pre-confirmed block. - pub fn pending_header(&self) -> BlockHeader { - match self.block.as_ref() { - PendingBlockVariant::Pending(block) => { - BlockHeader { - parent_hash: block.parent_hash, - number: self.number, - timestamp: block.timestamp, - eth_l1_gas_price: block.l1_gas_price.price_in_wei, - strk_l1_gas_price: block.l1_gas_price.price_in_fri, - eth_l1_data_gas_price: block.l1_data_gas_price.price_in_wei, - strk_l1_data_gas_price: block.l1_data_gas_price.price_in_fri, - eth_l2_gas_price: block.l2_gas_price.price_in_wei, - strk_l2_gas_price: block.l2_gas_price.price_in_fri, - sequencer_address: block.sequencer_address, - starknet_version: block.starknet_version, - // Pending block does not know what these are yet. - hash: Default::default(), - event_commitment: Default::default(), - state_commitment: Default::default(), - transaction_commitment: Default::default(), - transaction_count: Default::default(), - event_count: Default::default(), - l1_da_mode: block.l1_da_mode.into(), - receipt_commitment: Default::default(), - state_diff_commitment: Default::default(), - state_diff_length: Default::default(), - } - } - PendingBlockVariant::PreConfirmed { block, .. } => { - BlockHeader { - // Pre-confirmed blocks do not have a parent hash. - parent_hash: pathfinder_common::BlockHash::ZERO, - number: self.number, - timestamp: block.timestamp, - eth_l1_gas_price: block.l1_gas_price.price_in_wei, - strk_l1_gas_price: block.l1_gas_price.price_in_fri, - eth_l1_data_gas_price: block.l1_data_gas_price.price_in_wei, - strk_l1_data_gas_price: block.l1_data_gas_price.price_in_fri, - eth_l2_gas_price: block.l2_gas_price.price_in_wei, - strk_l2_gas_price: block.l2_gas_price.price_in_fri, - sequencer_address: block.sequencer_address, - starknet_version: block.starknet_version, - // Pending block does not know what these are yet. - hash: Default::default(), - event_commitment: Default::default(), - state_commitment: Default::default(), - transaction_commitment: Default::default(), - transaction_count: Default::default(), - event_count: Default::default(), - l1_da_mode: block.l1_da_mode, - receipt_commitment: Default::default(), - state_diff_commitment: Default::default(), - state_diff_length: Default::default(), - } - } + /// Get the header of the pre-confirmed block. + pub fn pre_confirmed_header(&self) -> BlockHeader { + let block = &self.blocks.pre_confirmed; + BlockHeader { + // Pre-confirmed blocks do not have a parent hash. + parent_hash: pathfinder_common::BlockHash::ZERO, + number: self.number, + timestamp: block.timestamp, + eth_l1_gas_price: block.l1_gas_price.price_in_wei, + strk_l1_gas_price: block.l1_gas_price.price_in_fri, + eth_l1_data_gas_price: block.l1_data_gas_price.price_in_wei, + strk_l1_data_gas_price: block.l1_data_gas_price.price_in_fri, + eth_l2_gas_price: block.l2_gas_price.price_in_wei, + strk_l2_gas_price: block.l2_gas_price.price_in_fri, + sequencer_address: block.sequencer_address, + starknet_version: block.starknet_version, + // Pre-confirmed block does not know what these are yet. + hash: Default::default(), + event_commitment: Default::default(), + state_commitment: Default::default(), + transaction_commitment: Default::default(), + transaction_count: Default::default(), + event_count: Default::default(), + l1_da_mode: block.l1_da_mode, + receipt_commitment: Default::default(), + state_diff_commitment: Default::default(), + state_diff_length: Default::default(), } } /// Get the header of the pre-latest block, if it exists. pub fn pre_latest_header(&self) -> Option { - let PendingBlockVariant::PreConfirmed { - pre_latest_data, .. - } = self.block.as_ref() - else { - return None; - }; - pre_latest_data.as_ref().map(|data| { + self.blocks.pre_latest.as_ref().map(|data| { let pre_latest_block = &data.block; BlockHeader { parent_hash: pre_latest_block.parent_hash, @@ -499,7 +395,7 @@ impl PendingData { strk_l2_gas_price: pre_latest_block.l2_gas_price.price_in_fri, sequencer_address: pre_latest_block.sequencer_address, starknet_version: pre_latest_block.starknet_version, - // Pending block does not know what these are yet. + // Pre-latest block does not know what these are yet. hash: Default::default(), event_commitment: Default::default(), state_commitment: Default::default(), @@ -514,84 +410,64 @@ impl PendingData { }) } - /// Get the pending/pre-confirmed block. - pub fn pending_block(&self) -> Arc { - Arc::clone(&self.block) + /// Get the pending blocks container. + pub fn pending_block(&self) -> Arc { + Arc::clone(&self.blocks) } /// Get the pre-latest block, if it exists. pub fn pre_latest_block(&self) -> Option> { - let PendingBlockVariant::PreConfirmed { - pre_latest_data, .. - } = self.block.as_ref() - else { - return None; - }; - pre_latest_data + self.blocks + .pre_latest .as_ref() .map(|data| Arc::new(data.block.clone())) } - /// Get the state update in the pending/pre-confirmed block. - pub fn pending_state_update(&self) -> Arc { + /// Get the state update of the pre-confirmed block. + pub fn pre_confirmed_state_update(&self) -> Arc { Arc::clone(&self.state_update) } /// Get the aggregated state update from the pre-latest (if exists) and the - /// pending/pre-confirmed block. + /// pre-confirmed block. pub fn aggregated_state_update(&self) -> Arc { Arc::clone(&self.aggregated_state_update) } - /// Get the transactions in the pending/pre-confirmed block. - pub fn pending_transactions(&self) -> &[pathfinder_common::transaction::Transaction] { - self.block.transactions() + /// Get the transactions in the pre-confirmed block. + pub fn pre_confirmed_transactions(&self) -> &[pathfinder_common::transaction::Transaction] { + self.blocks.transactions() } /// Get the transactions in the pre-latest block, if it exists. pub fn pre_latest_transactions( &self, ) -> Option<&[pathfinder_common::transaction::Transaction]> { - self.block.pre_latest_transactions() + self.blocks.pre_latest_transactions() } - /// Get the transaction receipts and events in the pending/pre-confirmed - /// block. - pub fn pending_tx_receipts_and_events(&self) -> &[TxnReceiptAndEvents] { - self.block.tx_receipts_and_events() + /// Get the transaction receipts and events in the pre-confirmed block. + pub fn pre_confirmed_tx_receipts_and_events(&self) -> &[TxnReceiptAndEvents] { + self.blocks.tx_receipts_and_events() } /// Get the transaction receipts and events in the pre-latest block, if it /// exists. pub fn pre_latest_tx_receipts_and_events(&self) -> Option<&[TxnReceiptAndEvents]> { - self.block.pre_latest_tx_receipts_and_events() - } - - /// Get the candidate transactions in the pending block, if it is - /// pre-confirmed. - pub fn candidate_transactions(&self) -> Option<&[pathfinder_common::transaction::Transaction]> { - match self.block.as_ref() { - PendingBlockVariant::Pending(_) => None, - PendingBlockVariant::PreConfirmed { - candidate_transactions, - .. - } => Some(candidate_transactions), - } + self.blocks.pre_latest_tx_receipts_and_events() } - pub fn is_pre_confirmed(&self) -> bool { - matches!( - self.block.as_ref(), - PendingBlockVariant::PreConfirmed { .. } - ) + /// Get the candidate transactions in the pre-confirmed block. + pub fn candidate_transactions(&self) -> &[pathfinder_common::transaction::Transaction] { + &self.blocks.candidate_transactions } pub fn finality_status(&self) -> crate::dto::TxnFinalityStatus { - self.block.finality_status() + self.blocks.finality_status() } /// Find a contract nonce by its contract address in the - /// pending/pre-confirmed or pre-latest block (in that order). + /// pre-confirmed or pre-latest block (in that order). pub fn find_nonce( &self, contract_address: pathfinder_common::ContractAddress, @@ -600,30 +476,32 @@ impl PendingData { .contract_nonce(contract_address) } - /// Find a storage value by its contract and storage address in the - /// pending/pre-confirmed or pre-latest block (in that order). + /// Find a storage value by its contract and storage address in + /// the pre-confirmed or pre-latest block (in that order). pub fn find_storage_value( &self, contract_address: pathfinder_common::ContractAddress, storage_address: pathfinder_common::StorageAddress, - ) -> Option { + ) -> Option { self.aggregated_state_update() - .storage_value(contract_address, storage_address) + .storage_value_with_provenance(contract_address, storage_address) } - /// Find a transaction by its hash in the pending/pre-confirmed block, + /// Find a transaction by its hash in the pre-confirmed block, /// candidate transactions, or pre-latest block (in that order). pub fn find_transaction( &self, tx_hash: pathfinder_common::TransactionHash, ) -> Option { - self.pending_transactions() + self.pre_confirmed_transactions() .iter() .find(|tx| tx.hash == tx_hash) .cloned() .or_else(|| { self.candidate_transactions() - .and_then(|candidate| candidate.iter().find(|tx| tx.hash == tx_hash).cloned()) + .iter() + .find(|tx| tx.hash == tx_hash) + .cloned() }) .or_else(|| { self.pre_latest_transactions() @@ -632,7 +510,7 @@ impl PendingData { } /// Find a [FinalizedTxData] by the transaction hash in the - /// pending/pre-confirmed or pre-latest block (in that order). + /// pre-confirmed or pre-latest block (in that order). /// /// This function does not check candidate transactions, as they are not /// finalized. @@ -641,19 +519,19 @@ impl PendingData { tx_hash: pathfinder_common::TransactionHash, ) -> Option { let pending_tx = self - .pending_transactions() + .pre_confirmed_transactions() .iter() .find(|tx| tx.hash == tx_hash); if let Some(pending_tx) = pending_tx { let (receipt, events) = self - .pending_tx_receipts_and_events() + .pre_confirmed_tx_receipts_and_events() .iter() .find(|(receipt, _)| receipt.transaction_hash == tx_hash) .cloned() .expect("Should exist if transaction exists"); return Some(FinalizedTxData { - block_number: self.pending_block_number(), + block_number: self.pre_confirmed_block_number(), transaction: pending_tx.clone(), receipt, events, @@ -682,7 +560,7 @@ impl PendingData { transaction: pre_latest_tx.clone(), receipt, events, - finality_status: crate::dto::TxnFinalityStatus::AcceptedOnL2, + finality_status: crate::dto::TxnFinalityStatus::PreConfirmed, }); } } @@ -691,7 +569,7 @@ impl PendingData { } /// Find a contract class hash by its contract address in the - /// pending/pre-confirmed or pre-latest block (in that order). + /// pre-confirmed or pre-latest block (in that order). pub fn find_contract_class( &self, contract_address: pathfinder_common::ContractAddress, @@ -700,16 +578,16 @@ impl PendingData { .contract_class(contract_address) } - /// Check if a class hash has been declared in the pending/pre-confirmed + /// Check if a class hash has been declared in the pre-confirmed /// or pre-latest block. pub fn class_is_declared(&self, class_hash: pathfinder_common::ClassHash) -> bool { self.aggregated_state_update().class_is_declared(class_hash) } - pub fn is_pre_latest_or_pending(&self, block: BlockNumber) -> bool { + pub fn is_pre_latest_or_pre_confirmed(&self, block: BlockNumber) -> bool { self.pre_latest_block_number() .is_some_and(|pre_latest| pre_latest == block) - || self.pending_block_number() == block + || self.pre_confirmed_block_number() == block } } @@ -735,111 +613,105 @@ impl PendingWatcher { .unwrap_or_default(); let watched_pending_data = self.0.borrow(); - let pending_data = match watched_pending_data.pending_block().as_ref() { - PendingBlockVariant::Pending(block) => { - if block.parent_hash == latest.hash { - watched_pending_data.clone() - } else { - PendingData::empty_pending(&latest) - } - } - // The pre-confirmed block is to be only ever used on JSON-RPC 0.9 and up. - // Older versions did have the semantics that expected that pending block - // contents are L2_ACCEPTED, which is not the case for the pre-confirmed - // block. - PendingBlockVariant::PreConfirmed { - block, - candidate_transactions, - pre_latest_data, - } if rpc_version >= RpcVersion::V09 => { - // The parent state commitment is only available here. The task polling the - // pre-confirmed block has no access to the parent block header, thus it - // cannot properly set the parent state commitment. - - // We can consider the pre-confirmed block valid if: - // - the pre-latest block exists and is the child our latest stored block, - // - the pre-latest block exists and is the same block as our latest block, - // i.e. we received that block as a finalized L2 block but it still lingers - // in pending data. - // - the pre-latest block does not exist and the pre-confirmed block is the - // child of our latest stored block. - match pre_latest_data { - // Is pre-latest the next block? - Some(pre_latest) if pre_latest.block.number == latest.number + 1 => { - assert_eq!( - pre_latest.block.number + 1, - block.number, - "Pre-confirmed block should be child of pre-latest" - ); - // Set pre-latest block parent state commitment, clone rest of the data. - let pre_latest = pre_latest.clone(); - let pre_latest_state_update = pre_latest - .state_update - .with_parent_state_commitment(latest.state_commitment); - let pre_latest_data = PreLatestData { - block: pre_latest.block, - state_update: pre_latest_state_update, - }; - PendingData { - block: PendingBlockVariant::PreConfirmed { - block: block.clone(), - candidate_transactions: candidate_transactions.clone(), - pre_latest_data: Some(Box::new(pre_latest_data)), - } - .into(), - state_update: Arc::clone(&watched_pending_data.state_update), - aggregated_state_update: Arc::clone( - &watched_pending_data.aggregated_state_update, - ), - number: block.number, - } - } - // Is pre-latest already in the database? - Some(pre_latest) if pre_latest.block.number == latest.number => { - // We'll ignore pre-latest data here but let's make sure everything is - // still as expected. - assert_eq!( - pre_latest.block.number + 1, - block.number, - "Pre-confirmed block should be child of pre-latest" - ); - // Set pre-latest data to `None`, pre-confirmed block parent state - // commitment and clone rest of the data. - let pre_confirmed_block = PendingBlockVariant::PreConfirmed { - block: block.clone(), + let watched_pending_blocks = watched_pending_data.pending_block(); + let PendingBlocks { + pre_confirmed, + pre_latest, + candidate_transactions, + } = watched_pending_blocks.as_ref(); + // The pre-confirmed block is to be only ever used on JSON-RPC 0.9 and up. + // Older versions did have the semantics that expected that pending block + // contents are L2_ACCEPTED, which is not the case for the pre-confirmed + // block. + let pending_data = if rpc_version >= RpcVersion::V09 { + // The parent state commitment is only available here. The task polling the + // pre-confirmed block has no access to the parent block header, thus it + // cannot properly set the parent state commitment. + + // We can consider the pre-confirmed block valid if: + // - the pre-latest block exists and is the child our latest stored block, + // - the pre-latest block exists and is the same block as our latest block, + // i.e. we received that block as a finalized L2 block but it still lingers + // in pending data. + // - the pre-latest block does not exist and the pre-confirmed block is the + // child of our latest stored block. + match pre_latest { + // Is pre-latest the next block? + Some(pre_latest) if pre_latest.block.number == latest.number + 1 => { + assert_eq!( + pre_latest.block.number + 1, + pre_confirmed.number, + "Pre-confirmed block should be child of pre-latest" + ); + // Set pre-latest block parent state commitment, clone rest of the data. + let pre_latest = pre_latest.clone(); + let pre_latest_state_update = pre_latest + .state_update + .with_parent_state_commitment(latest.state_commitment); + let pre_latest = PreLatestData { + block: pre_latest.block, + state_update: pre_latest_state_update, + }; + PendingData { + blocks: PendingBlocks { + pre_confirmed: pre_confirmed.clone(), candidate_transactions: candidate_transactions.clone(), - pre_latest_data: None, - }; - let pre_confirmed_state_update = Arc::new( - StateUpdate::clone(&watched_pending_data.state_update) - .with_parent_state_commitment(latest.state_commitment), - ); - - PendingData { - block: Arc::new(pre_confirmed_block), - state_update: Arc::clone(&pre_confirmed_state_update), - aggregated_state_update: pre_confirmed_state_update, - number: block.number, + pre_latest: Some(pre_latest), } + .into(), + state_update: Arc::clone(&watched_pending_data.state_update), + aggregated_state_update: Arc::clone( + &watched_pending_data.aggregated_state_update, + ), + number: pre_confirmed.number, } - // Is pre-confirmed the next block? - None if block.number == latest.number + 1 => { - // Set pre-confirmed block parent state commitment, clone rest of the data. - let pre_confirmed_state_update = - StateUpdate::clone(&watched_pending_data.state_update) - .with_parent_state_commitment(latest.state_commitment); - let state_update = Arc::new(pre_confirmed_state_update); - PendingData { - block: Arc::clone(&watched_pending_data.block), - state_update: Arc::clone(&state_update), - aggregated_state_update: state_update, - number: block.number, - } + } + // Is pre-latest already in the database? + Some(pre_latest) if pre_latest.block.number == latest.number => { + // We'll ignore pre-latest data here but let's make sure everything is + // still as expected. + assert_eq!( + pre_latest.block.number + 1, + pre_confirmed.number, + "Pre-confirmed block should be child of pre-latest" + ); + // Set pre-latest data to `None`, pre-confirmed block parent state + // commitment and clone rest of the data. + let pre_confirmed_block = PendingBlocks { + pre_confirmed: pre_confirmed.clone(), + candidate_transactions: candidate_transactions.clone(), + pre_latest: None, + }; + let pre_confirmed_state_update = Arc::new( + StateUpdate::clone(&watched_pending_data.state_update) + .with_parent_state_commitment(latest.state_commitment), + ); + + PendingData { + blocks: Arc::new(pre_confirmed_block), + state_update: Arc::clone(&pre_confirmed_state_update), + aggregated_state_update: pre_confirmed_state_update, + number: pre_confirmed.number, + } + } + // Is pre-confirmed the next block? + None if pre_confirmed.number == latest.number + 1 => { + // Set pre-confirmed block parent state commitment, clone rest of the data. + let pre_confirmed_state_update = + StateUpdate::clone(&watched_pending_data.state_update) + .with_parent_state_commitment(latest.state_commitment); + let state_update = Arc::new(pre_confirmed_state_update); + PendingData { + blocks: Arc::clone(&watched_pending_data.blocks), + state_update: Arc::clone(&state_update), + aggregated_state_update: state_update, + number: pre_confirmed.number, } - _ => PendingData::empty_pre_confirmed(&latest), } + _ => PendingData::empty(&latest), } - PendingBlockVariant::PreConfirmed { .. } => PendingData::empty_pending(&latest), + } else { + PendingData::empty(&latest) }; Ok(pending_data) @@ -867,53 +739,14 @@ mod tests { .finalize_with_hash(block_hash_bytes!(b"latest hash")) } - fn valid_pending_block(latest: &BlockHeader) -> PendingData { - let block = PendingBlock { - parent_hash: latest.hash, - timestamp: BlockTimestamp::new_or_panic(112233), - l1_gas_price: GasPrices { - price_in_wei: GasPrice(51123), - price_in_fri: GasPrice(44411), - }, - ..Default::default() - }; - let state_update = StateUpdate::default().with_contract_nonce( - contract_address_bytes!(b"contract address"), - contract_nonce_bytes!(b"nonce"), - ); - PendingData::from_pending_block(block, state_update, BlockNumber::GENESIS + 10) - } - - #[test] - fn valid_pending() { - let (sender, receiver) = tokio::sync::watch::channel(Default::default()); - let uut = PendingWatcher::new(receiver); - - let mut storage = pathfinder_storage::StorageBuilder::in_memory() - .unwrap() - .connection() - .unwrap(); - - let latest = latest_block(); - - let tx = storage.transaction().unwrap(); - tx.insert_block_header(&latest).unwrap(); - - let pending = valid_pending_block(&latest); - sender.send(pending.clone()).unwrap(); - - let result = uut.get(&tx, RpcVersion::V09).unwrap(); - pretty_assertions_sorted::assert_eq_sorted!(result, pending); - } - fn valid_pre_confirmed_block(latest: &BlockHeader) -> PendingData { let state_update = Arc::new(StateUpdate::default().with_contract_nonce( contract_address_bytes!(b"contract address"), contract_nonce_bytes!(b"nonce"), )); PendingData { - block: PendingBlockVariant::PreConfirmed { - block: PreConfirmedBlock { + blocks: PendingBlocks { + pre_confirmed: PreConfirmedBlock { number: latest.number + 1, l1_gas_price: Default::default(), l1_data_gas_price: Default::default(), @@ -925,10 +758,9 @@ mod tests { l1_da_mode: L1DataAvailabilityMode::Blob, transactions: vec![], transaction_receipts: vec![], - } - .into(), + }, candidate_transactions: vec![], - pre_latest_data: None, + pre_latest: None, } .into(), state_update: Arc::clone(&state_update), @@ -966,14 +798,9 @@ mod tests { .clone() .apply(&pre_confirmed_state_update); - let pre_latest_data = Box::new(PreLatestData { - block: pre_latest_block, - state_update: pre_latest_state_update, - }); - PendingData { - block: PendingBlockVariant::PreConfirmed { - block: PreConfirmedBlock { + blocks: PendingBlocks { + pre_confirmed: PreConfirmedBlock { number: latest.number + 2, l1_gas_price: Default::default(), l1_data_gas_price: Default::default(), @@ -988,10 +815,12 @@ mod tests { pathfinder_common::receipt::Receipt::default(), vec![], )], - } - .into(), + }, candidate_transactions: vec![], - pre_latest_data: Some(pre_latest_data), + pre_latest: Some(PreLatestData { + block: pre_latest_block, + state_update: pre_latest_state_update, + }), } .into(), state_update: pre_confirmed_state_update.into(), @@ -1007,21 +836,20 @@ mod tests { parent_hash: latest.hash, ..Default::default() }; - let pre_latest_data = Box::new(PreLatestData { + let pre_latest_data = PreLatestData { block: pre_latest_block, ..Default::default() - }); + }; PendingData { - block: PendingBlockVariant::PreConfirmed { - block: PreConfirmedBlock { + blocks: PendingBlocks { + pre_confirmed: PreConfirmedBlock { // This is not okay. Should be latest.number + 2 to be valid. number: latest.number + 3, ..Default::default() - } - .into(), + }, candidate_transactions: vec![], - pre_latest_data: Some(pre_latest_data), + pre_latest: Some(pre_latest_data), } .into(), state_update: StateUpdate::default().into(), @@ -1102,7 +930,7 @@ mod tests { let result = uut.get(&tx, RpcVersion::V09).unwrap(); // We got a non-empty pre-confirmed block.. - assert!(!result.pending_transactions().is_empty()); + assert!(!result.pre_confirmed_transactions().is_empty()); // ..and we did not receive a pre-latest block. assert!(result.pre_latest_block().is_none()); } @@ -1125,7 +953,7 @@ mod tests { let pending = valid_pre_confirmed_block(&latest); sender.send(pending.clone()).unwrap(); - let expected_empty_pending_data = empty_pending_block(&latest); + let expected_empty_pending_data = PendingData::empty(&latest); let result = uut.get(&tx, RpcVersion::V06).unwrap(); pretty_assertions_sorted::assert_eq_sorted!(result, expected_empty_pending_data); @@ -1153,7 +981,7 @@ mod tests { let pending = valid_pre_confirmed_block_with_pre_latest(&latest); sender.send(pending.clone()).unwrap(); - let expected_empty_pending_data = empty_pending_block(&latest); + let expected_empty_pending_data = PendingData::empty(&latest); let result = uut.get(&tx, RpcVersion::V06).unwrap(); pretty_assertions_sorted::assert_eq_sorted!(result, expected_empty_pending_data); @@ -1199,32 +1027,11 @@ mod tests { let result = uut.get(&tx, RpcVersion::V09).unwrap(); - let expected = empty_pending_block(&latest); + let expected = PendingData::empty(&latest); pretty_assertions_sorted::assert_eq_sorted!(result, expected); } - fn empty_pending_block(latest: &BlockHeader) -> PendingData { - let block = PendingBlock { - l1_gas_price: GasPrices { - price_in_wei: latest.eth_l1_gas_price, - price_in_fri: latest.strk_l1_gas_price, - }, - l1_data_gas_price: GasPrices { - price_in_wei: latest.eth_l1_data_gas_price, - price_in_fri: latest.strk_l1_data_gas_price, - }, - l1_da_mode: latest.l1_da_mode.into(), - timestamp: latest.timestamp, - sequencer_address: latest.sequencer_address, - parent_hash: latest.hash, - starknet_version: latest.starknet_version, - status: Status::Pending, - ..Default::default() - }; - PendingData::from_pending_block(block, StateUpdate::default(), latest.number + 1) - } - #[test] fn invalid_pre_confirmed_defaults_to_latest_in_storage() { // If the pending data isn't consistent with the latest data in storage, @@ -1363,7 +1170,7 @@ mod tests { } fn empty_pre_confirmed_block(latest: &BlockHeader) -> PendingData { - let block = PreConfirmedBlock { + let pre_confirmed = PreConfirmedBlock { number: latest.number + 1, l1_gas_price: GasPrices { price_in_wei: latest.eth_l1_gas_price, @@ -1386,10 +1193,10 @@ mod tests { transaction_receipts: vec![], }; PendingData { - block: Arc::new(PendingBlockVariant::PreConfirmed { - block: block.into(), + blocks: Arc::new(PendingBlocks { + pre_confirmed, + pre_latest: None, candidate_transactions: vec![], - pre_latest_data: None, }), state_update: StateUpdate::default().into(), aggregated_state_update: StateUpdate::default().into(), @@ -1429,7 +1236,7 @@ mod tests { PendingData::try_from_pre_confirmed_block(pre_confirmed_block.into(), block_number) .unwrap(); - assert_eq!(pending_data.pending_block_number(), block_number); + assert_eq!(pending_data.pre_confirmed_block_number(), block_number); let expected_state_update = StateUpdate::default() .with_contract_nonce( @@ -1479,19 +1286,19 @@ mod tests { ); pretty_assertions_sorted::assert_eq_sorted!( &expected_state_update, - pending_data.pending_state_update().as_ref() + pending_data.pre_confirmed_state_update().as_ref() ); // We expect the transaction list to contain pre-confirmed transactions only. assert_eq!( number_of_pre_confirmed_transactions, - pending_data.pending_transactions().len() + pending_data.pre_confirmed_transactions().len() ); // And the single candidate transaction we've added. assert_eq!( &vec![candidate_transaction], - pending_data.candidate_transactions().unwrap() + pending_data.candidate_transactions() ); } } diff --git a/crates/rpc/src/test_setup.rs b/crates/rpc/src/test_setup.rs index 644922c031..f91d19046c 100644 --- a/crates/rpc/src/test_setup.rs +++ b/crates/rpc/src/test_setup.rs @@ -1,3 +1,8 @@ +use pathfinder_common::class_definition::{ + SerializedCairoDefinition, + SerializedCasmDefinition, + SerializedSierraDefinition, +}; use pathfinder_common::macro_prelude::*; use pathfinder_common::prelude::*; use pathfinder_storage::Storage; @@ -42,8 +47,8 @@ pub async fn test_storage StateUpdate>( casm_hash!("0x0224b815fab6827eb21993e02e45e532e5476af6536dcf1f7085989ba9dc5bf0"); tx.insert_sierra_class_definition( &openzeppelin_account_sierra_hash, - openzeppelin_account_class_definition, - openzeppelin_account_casm_definition, + &SerializedSierraDefinition::from_slice(openzeppelin_account_class_definition), + &SerializedCasmDefinition::from_slice(openzeppelin_account_casm_definition), &casm_hash_bytes!(b"casm hash blake"), ) .unwrap(); @@ -53,16 +58,22 @@ pub async fn test_storage StateUpdate>( include_bytes!("../fixtures/contracts/universal_deployer.json"); let universal_deployer_class_hash = class_hash!("0x06f38fb91ddbf325a0625533576bb6f6eafd9341868a9ec3faa4b01ce6c4f4dc"); - tx.insert_cairo_class_definition(universal_deployer_class_hash, universal_deployer_definition) - .unwrap(); + tx.insert_cairo_class_definition( + universal_deployer_class_hash, + &SerializedCairoDefinition::from_slice(universal_deployer_definition), + ) + .unwrap(); // Declare ERC20 fee token contract class let erc20_class_hash = starknet_gateway_test_fixtures::class_definitions::ERC20_CONTRACT_DEFINITION_CLASS_HASH; let erc20_class_definition = starknet_gateway_test_fixtures::class_definitions::ERC20_CONTRACT_DEFINITION; - tx.insert_cairo_class_definition(erc20_class_hash, erc20_class_definition) - .unwrap(); + tx.insert_cairo_class_definition( + erc20_class_hash, + &SerializedCairoDefinition::from_slice(erc20_class_definition), + ) + .unwrap(); let header = BlockHeader::child_builder(&genesis) .timestamp(BlockTimestamp::new_or_panic(1)) diff --git a/crates/rpc/src/types.rs b/crates/rpc/src/types.rs index f9b77bc0ed..b544dd05f5 100644 --- a/crates/rpc/src/types.rs +++ b/crates/rpc/src/types.rs @@ -1,7 +1,6 @@ //! Common data structures used by the JSON-RPC API methods. pub(crate) mod class; -pub(crate) mod receipt; pub mod syncing; pub(crate) use class::ContractClass; @@ -12,12 +11,13 @@ pub mod request { use anyhow::Context; use pathfinder_common::prelude::*; use pathfinder_common::transaction::{DataAvailabilityMode, ResourceBounds}; - use pathfinder_common::TipHex; + use pathfinder_common::{Proof, ProofFactElem, TipHex}; use serde::de::Error; use serde::Deserialize; use serde_with::serde_as; use crate::dto::U64Hex; + use crate::RpcVersion; /// A way of identifying a block in a JSON-RPC request. #[derive(Debug, Copy, Clone, PartialEq, Eq)] @@ -26,7 +26,7 @@ pub mod request { Hash(BlockHash), L1Accepted, Latest, - Pending, + PreConfirmed, } impl From for BlockId { @@ -43,7 +43,7 @@ pub mod request { impl BlockId { pub fn is_pending(&self) -> bool { - matches!(self, BlockId::Pending) + matches!(self, BlockId::PreConfirmed) } /// Converts this [BlockId] to a [pathfinder_common::BlockId]. @@ -54,7 +54,7 @@ pub mod request { /// /// # Panics /// - /// If this [BlockId] is [`BlockId::Pending`]. + /// If this [BlockId] is [`BlockId::PreConfirmed`]. pub fn to_common_or_panic( self, tx: &pathfinder_storage::Transaction<'_>, @@ -69,7 +69,9 @@ pub mod request { Ok(pathfinder_common::BlockId::Number(block_number)) } BlockId::Latest => Ok(pathfinder_common::BlockId::Latest), - BlockId::Pending => panic!("Cannot convert BlockId::Pending to FinalizedBlockId"), + BlockId::PreConfirmed => { + panic!("Cannot convert BlockId::PreConfirmed to FinalizedBlockId") + } } } @@ -79,7 +81,7 @@ pub mod request { /// number. Returns an error if there is no L1 accepted block number /// or the database lookup fails. /// - /// Coerces [`BlockId::Pending`] to + /// Coerces [`BlockId::PreConfirmed`] to /// [`pathfinder_common::BlockId::Latest`]. pub fn to_common_coerced( self, @@ -94,7 +96,7 @@ pub mod request { .context("L1 accepted block number not found")?; Ok(pathfinder_common::BlockId::Number(block_number)) } - BlockId::Latest | BlockId::Pending => Ok(pathfinder_common::BlockId::Latest), + BlockId::Latest | BlockId::PreConfirmed => Ok(pathfinder_common::BlockId::Latest), } } } @@ -1032,6 +1034,14 @@ pub mod request { fee_data_availability_mode: value.deserialize("fee_data_availability_mode")?, sender_address: value.deserialize("sender_address").map(ContractAddress)?, calldata, + proof_facts: value + .deserialize_optional_array("proof_facts", |value| { + value.deserialize().map(ProofFactElem) + })? + .unwrap_or_default(), + proof: value + .deserialize_optional_serde::("proof")? + .unwrap_or_default(), })), _ => Err(serde_json::Error::custom("unknown transaction version")), } @@ -1168,6 +1178,9 @@ pub mod request { pub sender_address: ContractAddress, pub calldata: Vec, + + pub proof_facts: Vec, + pub proof: Proof, } impl crate::dto::SerializeForVersion for BroadcastedInvokeTransactionV3 { @@ -1193,6 +1206,16 @@ pub mod request { )?; serializer.serialize_field("sender_address", &self.sender_address)?; serializer.serialize_field("calldata", &self.calldata)?; + + if serializer.version >= RpcVersion::V10 { + if !self.proof_facts.is_empty() { + serializer.serialize_field("proof_facts", &self.proof_facts)?; + } + if !self.proof.is_empty() { + serializer.serialize_field("proof", &self.proof)?; + } + } + serializer.end() } } @@ -1222,6 +1245,14 @@ pub mod request { calldata: value.deserialize_array("calldata", |value| { value.deserialize().map(CallParam) })?, + proof_facts: value + .deserialize_optional_array("proof_facts", |value| { + value.deserialize().map(ProofFactElem) + })? + .unwrap_or_default(), + proof: value + .deserialize_optional_serde::("proof")? + .unwrap_or_default(), }) }) } @@ -1341,6 +1372,7 @@ pub mod request { paymaster_data: invoke.paymaster_data, calldata: invoke.calldata, account_deployment_data: invoke.account_deployment_data, + proof_facts: invoke.proof_facts, }) } }; @@ -1481,7 +1513,10 @@ pub mod request { max_amount: ResourceAmount(0), max_price_per_unit: ResourcePricePerUnit(0), }, - l1_data_gas: None, + l1_data_gas: Some(ResourceBound { + max_amount: ResourceAmount(0), + max_price_per_unit: ResourcePricePerUnit(0), + }), }, tip: Tip(0x1234), paymaster_data: vec![ @@ -1551,7 +1586,10 @@ pub mod request { max_amount: ResourceAmount(0), max_price_per_unit: ResourcePricePerUnit(0), }, - l1_data_gas: None, + l1_data_gas: Some(ResourceBound { + max_amount: ResourceAmount(0), + max_price_per_unit: ResourcePricePerUnit(0), + }), }, tip: Tip(0x1234), paymaster_data: vec![ @@ -1566,6 +1604,8 @@ pub mod request { fee_data_availability_mode: DataAvailabilityMode::L2, sender_address: contract_address!("0xaaa"), calldata: vec![call_param!("0xff")], + proof_facts: vec![proof_fact_elem!("0xabc"), proof_fact_elem!("0xdef")], + proof: Proof(vec![11, 22]), }, )), BroadcastedTransaction::DeployAccount(BroadcastedDeployAccountTransaction::V3( @@ -1582,7 +1622,10 @@ pub mod request { max_amount: ResourceAmount(0), max_price_per_unit: ResourcePricePerUnit(0), }, - l1_data_gas: None, + l1_data_gas: Some(ResourceBound { + max_amount: ResourceAmount(0), + max_price_per_unit: ResourcePricePerUnit(0), + }), }, tip: Tip(0x1234), paymaster_data: vec![ @@ -1599,17 +1642,17 @@ pub mod request { ]; let json_fixture_str = - include_str!(concat!("../fixtures/0.6.0/broadcasted_transactions.json")); + include_str!(concat!("../fixtures/0.10.0/broadcasted_transactions.json")); let json_fixture: serde_json::Value = serde_json::from_str(json_fixture_str).unwrap(); - let serializer = crate::dto::Serializer::new(crate::RpcVersion::V07); + let serializer = crate::dto::Serializer::new(crate::RpcVersion::V10); let serialized = serializer .serialize_iter(txs.len(), &mut txs.clone().into_iter()) .unwrap(); assert_eq!(serialized, json_fixture); assert_eq!( - crate::dto::Value::new(json_fixture, crate::RpcVersion::V07) + crate::dto::Value::new(json_fixture, crate::RpcVersion::V10) .deserialize_array( ::deserialize ) @@ -1621,73 +1664,6 @@ pub mod request { } } -/// Groups all strictly output types of the RPC API. -pub mod reply { - use serde::de::Error; - - /// L2 Block status as returned by the RPC API. - #[derive(Copy, Clone, Debug, PartialEq, Eq)] - pub enum BlockStatus { - Pending, - AcceptedOnL2, - AcceptedOnL1, - Rejected, - } - - impl BlockStatus { - pub fn is_pending(&self) -> bool { - self == &Self::Pending - } - } - - impl crate::dto::SerializeForVersion for BlockStatus { - fn serialize( - &self, - serializer: crate::dto::Serializer, - ) -> Result { - serializer.serialize_str(match self { - Self::Pending => "PENDING", - Self::AcceptedOnL2 => "ACCEPTED_ON_L2", - Self::AcceptedOnL1 => "ACCEPTED_ON_L1", - Self::Rejected => "REJECTED", - }) - } - } - - impl crate::dto::DeserializeForVersion for BlockStatus { - fn deserialize(value: crate::dto::Value) -> Result { - let status: String = value.deserialize()?; - match status.as_str() { - "PENDING" => Ok(Self::Pending), - "ACCEPTED_ON_L2" => Ok(Self::AcceptedOnL2), - "ACCEPTED_ON_L1" => Ok(Self::AcceptedOnL1), - "REJECTED" => Ok(Self::Rejected), - _ => Err(serde_json::Error::custom("Invalid block status")), - } - } - } - - impl From for BlockStatus { - fn from(status: starknet_gateway_types::reply::Status) -> Self { - use starknet_gateway_types::reply::Status::*; - - match status { - // TODO verify this mapping with Starkware - AcceptedOnL1 => BlockStatus::AcceptedOnL1, - AcceptedOnL2 => BlockStatus::AcceptedOnL2, - NotReceived => BlockStatus::Rejected, - Pending => BlockStatus::Pending, - Received => BlockStatus::Pending, - Rejected => BlockStatus::Rejected, - Reverted => BlockStatus::Rejected, - Aborted => BlockStatus::Rejected, - Candidate => BlockStatus::Rejected, - PreConfirmed => BlockStatus::Rejected, - } - } - } -} - #[cfg(test)] mod tests { use pathfinder_common::transaction::{ResourceBound, ResourceBounds}; diff --git a/crates/rpc/src/types/class.rs b/crates/rpc/src/types/class.rs index f1ce8ea435..03aeaeb079 100644 --- a/crates/rpc/src/types/class.rs +++ b/crates/rpc/src/types/class.rs @@ -1,5 +1,6 @@ use anyhow::Context; use base64::prelude::*; +use pathfinder_common::class_definition::SerializedOpaqueClassDefinition; #[derive(Clone, Debug, PartialEq, Eq)] pub enum ContractClass { @@ -19,8 +20,12 @@ impl ContractClass { /// /// Note that this function does not validate the class definition in any /// way, so this is only ever to be called for trusted data from storage. - pub fn from_definition_bytes(data: &[u8]) -> anyhow::Result { - let mut json = serde_json::from_slice::(data).context("Parsing json")?; + pub fn from_serialized_def( + serialized_definition: &SerializedOpaqueClassDefinition, + ) -> anyhow::Result { + let mut json = + serde_json::from_slice::(serialized_definition.as_bytes()) + .context("Parsing json")?; let json_obj = json .as_object_mut() .context("Class definition is not a json object")?; @@ -205,6 +210,7 @@ pub mod cairo { use anyhow::Context; use base64::prelude::*; use pathfinder_class_hash::{compute_class_hash, ComputedClassHash}; + use pathfinder_common::class_definition::SerializedOpaqueClassDefinition; use serde::{Deserialize, Serialize}; /// A Cairo 0.x class. @@ -228,8 +234,11 @@ pub mod cairo { impl CairoContractClass { pub fn class_hash(&self) -> anyhow::Result { let serialized = self.serialize_to_json()?; + let definition = SerializedOpaqueClassDefinition::from_bytes(serialized); - compute_class_hash(&serialized).context("Compute class hash") + compute_class_hash(definition) + .map(|(hash, _)| hash) + .context("Compute class hash") } pub fn serialize_to_json(&self) -> anyhow::Result> { @@ -647,6 +656,7 @@ pub mod cairo { pub mod sierra { use pathfinder_class_hash::{compute_class_hash, ComputedClassHash}; + use pathfinder_common::class_definition::SerializedOpaqueClassDefinition; use pathfinder_crypto::Felt; use serde::{Deserialize, Serialize}; @@ -673,16 +683,22 @@ pub mod sierra { } } - impl SierraContractClass { - pub fn serialize_to_json(&self) -> anyhow::Result> { - let json = serde_json::to_vec(self)?; - - Ok(json) + impl<'a> From for pathfinder_common::class_definition::Sierra<'a> { + fn from(value: SierraContractClass) -> Self { + Self { + abi: value.abi.into(), + sierra_program: value.sierra_program, + contract_class_version: value.contract_class_version.into(), + entry_points_by_type: value.entry_points_by_type.into(), + } } + } + impl SierraContractClass { pub fn class_hash(&self) -> anyhow::Result { - let definition = self.serialize_to_json()?; - compute_class_hash(&definition) + let definition = serde_json::to_vec(self)?; + let definition = SerializedOpaqueClassDefinition::from_bytes(definition); + compute_class_hash(definition).map(|(hash, _)| hash) } } @@ -695,6 +711,21 @@ pub mod sierra { pub l1_handler: Vec, } + impl From for pathfinder_common::class_definition::SierraEntryPoints { + fn from(value: SierraEntryPoints) -> Self { + let SierraEntryPoints { + external, + l1_handler, + constructor, + } = value; + Self { + external: external.into_iter().map(Into::into).collect(), + l1_handler: l1_handler.into_iter().map(Into::into).collect(), + constructor: constructor.into_iter().map(Into::into).collect(), + } + } + } + #[serde_with::serde_as] #[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] #[serde(deny_unknown_fields)] @@ -759,6 +790,7 @@ mod tests { mod declare_class_hash { use pathfinder_class_hash::compute_class_hash; + use pathfinder_common::class_definition::SerializedOpaqueClassDefinition; use starknet_gateway_test_fixtures::class_definitions::{ CAIRO_0_11_SIERRA, CONTRACT_DEFINITION, @@ -768,22 +800,35 @@ mod tests { #[test] fn compute_sierra_class_hash() { - let class_hash = compute_class_hash(CAIRO_0_11_SIERRA).unwrap(); + let (class_hash, _) = compute_class_hash(SerializedOpaqueClassDefinition::from_slice( + CAIRO_0_11_SIERRA, + )) + .unwrap(); - let class = ContractClass::from_definition_bytes(CAIRO_0_11_SIERRA).unwrap(); + let class = ContractClass::from_serialized_def( + &SerializedOpaqueClassDefinition::from_slice(CAIRO_0_11_SIERRA), + ) + .unwrap(); assert_eq!(class.class_hash().unwrap(), class_hash); } #[test] fn compute_cairo_class_hash() { - let class_hash = compute_class_hash(CONTRACT_DEFINITION).unwrap(); + let (class_hash, _) = compute_class_hash(SerializedOpaqueClassDefinition::from_slice( + CONTRACT_DEFINITION, + )) + .unwrap(); - let class = ContractClass::from_definition_bytes(CONTRACT_DEFINITION).unwrap(); + let class = ContractClass::from_serialized_def( + &SerializedOpaqueClassDefinition::from_slice(CONTRACT_DEFINITION), + ) + .unwrap(); assert_eq!(class.class_hash().unwrap(), class_hash); } } mod contract_class_serialization { + use pathfinder_common::class_definition::SerializedOpaqueClassDefinition; use pathfinder_executor::parse_deprecated_class_definition; use super::super::cairo::CairoContractClass; @@ -810,14 +855,20 @@ mod tests { let serialized_definition = contract_class.serialize_to_json().unwrap(); - parse_deprecated_class_definition(serialized_definition).unwrap(); + parse_deprecated_class_definition(SerializedOpaqueClassDefinition::from_bytes( + serialized_definition, + )) + .unwrap(); } #[test] fn parse_deprecated_class_definition_with_debug_info() { let definition = include_bytes!("../../fixtures/contracts/cairo0_open_zeppelin_class.json"); - let class = ContractClass::from_definition_bytes(definition).unwrap(); + let class = ContractClass::from_serialized_def( + &SerializedOpaqueClassDefinition::from_slice(definition), + ) + .unwrap(); // this step involves parsing the full program including debug info class.as_cairo().unwrap().serialize_to_json().unwrap(); diff --git a/crates/rpc/src/types/receipt.rs b/crates/rpc/src/types/receipt.rs deleted file mode 100644 index 828d0eff24..0000000000 --- a/crates/rpc/src/types/receipt.rs +++ /dev/null @@ -1,266 +0,0 @@ -use pathfinder_common::{ContractAddress, EventData, EventKey, L2ToL1MessagePayloadElem}; - -use crate::felt::{RpcFelt, RpcFelt251}; -use crate::types::reply::BlockStatus; - -#[derive(Clone, Debug, Default, PartialEq, Eq)] -#[cfg_attr(test, derive(serde::Deserialize))] -pub struct ExecutionResourcesProperties { - pub steps: u64, - #[cfg_attr(test, serde(skip_serializing_if = "is_zero"))] - pub memory_holes: u64, - #[cfg_attr(test, serde(skip_serializing_if = "is_zero"))] - pub range_check_builtin_applications: u64, - #[cfg_attr(test, serde(skip_serializing_if = "is_zero"))] - pub pedersen_builtin_applications: u64, - #[cfg_attr(test, serde(skip_serializing_if = "is_zero"))] - pub poseidon_builtin_applications: u64, - #[cfg_attr(test, serde(skip_serializing_if = "is_zero"))] - pub ec_op_builtin_applications: u64, - #[cfg_attr(test, serde(skip_serializing_if = "is_zero"))] - pub ecdsa_builtin_applications: u64, - #[cfg_attr(test, serde(skip_serializing_if = "is_zero"))] - pub bitwise_builtin_applications: u64, - #[cfg_attr(test, serde(skip_serializing_if = "is_zero"))] - pub keccak_builtin_applications: u64, - #[cfg_attr(test, serde(skip_serializing_if = "is_zero"))] - pub segment_arena_builtin: u64, -} - -impl crate::dto::SerializeForVersion for ExecutionResourcesProperties { - fn serialize( - &self, - serializer: crate::dto::Serializer, - ) -> Result { - let mut serializer = serializer.serialize_struct()?; - serializer.serialize_field("steps", &self.steps)?; - if !is_zero(&self.memory_holes) { - serializer.serialize_field("memory_holes", &self.memory_holes)?; - } - if !is_zero(&self.range_check_builtin_applications) { - serializer.serialize_field( - "range_check_builtin_applications", - &self.range_check_builtin_applications, - )?; - } - if !is_zero(&self.pedersen_builtin_applications) { - serializer.serialize_field( - "pedersen_builtin_applications", - &self.pedersen_builtin_applications, - )?; - } - if !is_zero(&self.poseidon_builtin_applications) { - serializer.serialize_field( - "poseidon_builtin_applications", - &self.poseidon_builtin_applications, - )?; - } - if !is_zero(&self.ec_op_builtin_applications) { - serializer.serialize_field( - "ec_op_builtin_applications", - &self.ec_op_builtin_applications, - )?; - } - if !is_zero(&self.ecdsa_builtin_applications) { - serializer.serialize_field( - "ecdsa_builtin_applications", - &self.ecdsa_builtin_applications, - )?; - } - if !is_zero(&self.bitwise_builtin_applications) { - serializer.serialize_field( - "bitwise_builtin_applications", - &self.bitwise_builtin_applications, - )?; - } - if !is_zero(&self.keccak_builtin_applications) { - serializer.serialize_field( - "keccak_builtin_applications", - &self.keccak_builtin_applications, - )?; - } - if !is_zero(&self.segment_arena_builtin) { - serializer.serialize_field("segment_arena_builtin", &self.segment_arena_builtin)?; - } - serializer.end() - } -} - -fn is_zero(value: &u64) -> bool { - *value == 0 -} - -impl From for ExecutionResourcesProperties { - fn from(value: pathfinder_common::receipt::ExecutionResources) -> Self { - let pathfinder_common::receipt::ExecutionResources { - builtins: - pathfinder_common::receipt::BuiltinCounters { - // Absent from the OpenRPC spec - output: _, - pedersen: pedersen_builtin, - range_check: range_check_builtin, - ecdsa: ecdsa_builtin, - bitwise: bitwise_builtin, - ec_op: ec_op_builtin, - keccak: keccak_builtin, - poseidon: poseidon_builtin, - segment_arena: segment_arena_builtin, - .. - }, - n_steps, - n_memory_holes, - .. - } = value; - - Self { - steps: n_steps, - memory_holes: n_memory_holes, - range_check_builtin_applications: range_check_builtin, - pedersen_builtin_applications: pedersen_builtin, - poseidon_builtin_applications: poseidon_builtin, - ec_op_builtin_applications: ec_op_builtin, - ecdsa_builtin_applications: ecdsa_builtin, - bitwise_builtin_applications: bitwise_builtin, - keccak_builtin_applications: keccak_builtin, - segment_arena_builtin, - } - } -} - -#[derive(Clone, Debug, PartialEq, Eq)] -#[cfg_attr(test, derive(serde::Deserialize))] -#[cfg_attr(test, serde(rename_all = "SCREAMING_SNAKE_CASE"))] -pub enum ExecutionStatus { - Succeeded, - Reverted, -} - -impl From for ExecutionStatus { - fn from(value: pathfinder_common::receipt::ExecutionStatus) -> Self { - match value { - pathfinder_common::receipt::ExecutionStatus::Succeeded => Self::Succeeded, - pathfinder_common::receipt::ExecutionStatus::Reverted { .. } => Self::Reverted, - } - } -} - -impl crate::dto::SerializeForVersion for ExecutionStatus { - fn serialize( - &self, - serializer: crate::dto::Serializer, - ) -> Result { - match self { - Self::Succeeded => serializer.serialize_str("SUCCEEDED"), - Self::Reverted => serializer.serialize_str("REVERTED"), - } - } -} - -/// Message sent from L2 to L1. -#[derive(Clone, Debug, PartialEq, Eq)] -#[cfg_attr(test, derive(serde::Deserialize))] -pub struct MessageToL1 { - pub from_address: ContractAddress, - pub to_address: ContractAddress, - pub payload: Vec, -} - -impl From for MessageToL1 { - fn from(value: pathfinder_common::receipt::L2ToL1Message) -> Self { - Self { - from_address: value.from_address, - to_address: value.to_address, - payload: value.payload, - } - } -} - -impl crate::dto::SerializeForVersion for MessageToL1 { - fn serialize( - &self, - serializer: crate::dto::Serializer, - ) -> Result { - let mut serializer = serializer.serialize_struct()?; - serializer.serialize_field("from_address", &self.from_address)?; - serializer.serialize_field("to_address", &self.to_address)?; - serializer.serialize_iter( - "payload", - self.payload.len(), - &mut self.payload.iter().map(|p| RpcFelt(p.0)), - )?; - serializer.end() - } -} - -/// Event emitted as a part of a transaction. -#[derive(Clone, Debug, PartialEq, Eq)] -#[cfg_attr(test, derive(serde::Deserialize))] -pub struct Event { - pub from_address: ContractAddress, - pub keys: Vec, - pub data: Vec, -} - -impl From for Event { - fn from(e: pathfinder_common::event::Event) -> Self { - Self { - from_address: e.from_address, - keys: e.keys, - data: e.data, - } - } -} - -impl crate::dto::SerializeForVersion for Event { - fn serialize( - &self, - serializer: crate::dto::Serializer, - ) -> Result { - let mut serializer = serializer.serialize_struct()?; - serializer.serialize_field("from_address", &RpcFelt251(RpcFelt(self.from_address.0)))?; - serializer.serialize_iter( - "keys", - self.keys.len(), - &mut self.keys.iter().map(|k| RpcFelt(k.0)), - )?; - serializer.serialize_iter( - "data", - self.data.len(), - &mut self.data.iter().map(|d| RpcFelt(d.0)), - )?; - serializer.end() - } -} - -/// Represents transaction status. -#[derive(Copy, Clone, Debug, PartialEq, Eq)] -#[cfg_attr(test, derive(serde::Deserialize))] -pub enum TransactionStatus { - AcceptedOnL2, - AcceptedOnL1, - Rejected, -} - -impl From for TransactionStatus { - fn from(status: BlockStatus) -> Self { - match status { - BlockStatus::Pending => TransactionStatus::AcceptedOnL2, - BlockStatus::AcceptedOnL2 => TransactionStatus::AcceptedOnL2, - BlockStatus::AcceptedOnL1 => TransactionStatus::AcceptedOnL1, - BlockStatus::Rejected => TransactionStatus::Rejected, - } - } -} - -impl crate::dto::SerializeForVersion for TransactionStatus { - fn serialize( - &self, - serializer: crate::dto::Serializer, - ) -> Result { - serializer.serialize_str(match self { - Self::AcceptedOnL2 => "ACCEPTED_ON_L2", - Self::AcceptedOnL1 => "ACCEPTED_ON_L1", - Self::Rejected => "REJECTED", - }) - } -} diff --git a/crates/rpc/src/v10.rs b/crates/rpc/src/v10.rs index 704f687917..863c6b347d 100644 --- a/crates/rpc/src/v10.rs +++ b/crates/rpc/src/v10.rs @@ -43,7 +43,7 @@ pub fn register_routes() -> RpcRouterBuilder { .register("starknet_subscribeNewTransactions", SubscribeNewTransactions) .register("starknet_subscribeEvents", SubscribeEvents) .register("starknet_subscribeTransactionStatus", SubscribeTransactionStatus) - .register("starknet_specVersion", || "0.10.0") + .register("starknet_specVersion", || "0.10.2") .register("starknet_syncing", crate::method::syncing) .register("starknet_traceBlockTransactions", crate::method::trace_block_transactions) .register("starknet_traceTransaction", crate::method::trace_transaction) diff --git a/crates/serde/Cargo.toml b/crates/serde/Cargo.toml index c431b78a35..6597f0dbe4 100644 --- a/crates/serde/Cargo.toml +++ b/crates/serde/Cargo.toml @@ -6,7 +6,7 @@ edition = { workspace = true } license = { workspace = true } rust-version = { workspace = true } description = "Starknet-specific serialization utilities for Pathfinder" -repository = "https://github.com/eqlabs/pathfinder" +repository = "https://github.com/equilibriumco/pathfinder" keywords = ["starknet", "ethereum", "serde", "serialization", "web3"] categories = [ "encoding", @@ -18,8 +18,8 @@ categories = [ [dependencies] anyhow = { workspace = true } num-bigint = { workspace = true } -pathfinder-common = { version = "0.21.0", path = "../common" } -pathfinder-crypto = { version = "0.21.0", path = "../crypto" } +pathfinder-common = { version = "0.22.3", path = "../common" } +pathfinder-crypto = { version = "0.22.3", path = "../crypto" } primitive-types = { workspace = true, features = ["serde"] } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } diff --git a/crates/serde/src/lib.rs b/crates/serde/src/lib.rs index fd063d98a3..8b72054558 100644 --- a/crates/serde/src/lib.rs +++ b/crates/serde/src/lib.rs @@ -5,7 +5,7 @@ use std::borrow::Cow; use std::str::FromStr; use num_bigint::BigUint; -use pathfinder_common::prelude::*; +use pathfinder_common::{SettlementLayerAddress, prelude::*}; use pathfinder_crypto::{Felt, HexParseError, OverflowError}; use primitive_types::{H160, H256, U256}; use serde::de::Visitor; @@ -88,6 +88,77 @@ impl<'de> DeserializeAs<'de, EthereumAddress> for EthereumAddressAsHexStr { } } +pub struct SettlementLayerAddressAsHexStr; + +impl SerializeAs for SettlementLayerAddressAsHexStr { + fn serialize_as(source: &SettlementLayerAddress, serializer: S) -> Result + where + S: serde::Serializer { + match source { + SettlementLayerAddress::Ethereum(address) => { + EthereumAddressAsHexStr::serialize_as(address, serializer) + }, + SettlementLayerAddress::Starknet(address) => { + // ContractAddress is a Felt, serialize as 64-char hex string + let bytes = address.0.to_be_bytes(); + // ContractAddress is "0x" + 64 digits + let mut buf = [0u8; 2 + 64]; + let s = bytes_as_hex_str(&bytes, &mut buf); + serializer.serialize_str(s) + } + } + } +} + +impl<'de> DeserializeAs<'de, SettlementLayerAddress> for SettlementLayerAddressAsHexStr { + fn deserialize_as(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + struct SettlementLayerAddressVisitor; + + impl Visitor<'_> for SettlementLayerAddressVisitor { + type Value = SettlementLayerAddress; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("a hex string of 40 digits (Ethereum) or 41-64 digits (Starknet) with an optional '0x' prefix") + } + + fn visit_str(self, v: &str) -> Result + where + E: serde::de::Error, + { + + let hex_str = v.strip_prefix("0x").unwrap_or(v); + let hex_len = hex_str.len(); + + if hex_len <= 40 { + // Ethereum address: 20 bytes = 40 hex digits + let bytes = bytes_from_hex_str::<{ H160::len_bytes() }>(hex_str) + .map_err(serde::de::Error::custom)?; + Ok(SettlementLayerAddress::Ethereum(EthereumAddress(H160::from(bytes)))) + } else if hex_len <= 64 { + // Starknet ContractAddress: 32 bytes = 64 hex digits + let bytes = bytes_from_hex_str::<32>(hex_str) + .map_err(serde::de::Error::custom)?; + let felt = Felt::from_be_bytes(bytes) + .map_err(|e| serde::de::Error::custom(format!("Felt overflow: {}", e)))?; + Ok(SettlementLayerAddress::Starknet(ContractAddress(felt))) + } else { + Err(serde::de::Error::custom(format!( + "hex string too long: expected at most 64 digits (with optional '0x' prefix), got {}", + hex_len + ))) + } + } + } + + deserializer.deserialize_str(SettlementLayerAddressVisitor) + } +} + + + pub struct H256AsNoLeadingZerosHexStr; impl SerializeAs for H256AsNoLeadingZerosHexStr { diff --git a/crates/storage/Cargo.toml b/crates/storage/Cargo.toml index 1453b15e8d..5bc371031e 100644 --- a/crates/storage/Cargo.toml +++ b/crates/storage/Cargo.toml @@ -14,13 +14,10 @@ anyhow = { workspace = true } base64 = { workspace = true } bincode = { workspace = true, features = ["serde"] } bitvec = { workspace = true } -bloomfilter = { workspace = true } cached = { workspace = true } const_format = { workspace = true } fake = { workspace = true } -flume = { version = "0.11.0", default-features = false, features = [ - "eventual-fairness", -] } +flume = { version = "0.11.1", default-features = false, features = ["eventual-fairness"] } hex = { workspace = true } metrics = { workspace = true } paste = { workspace = true } @@ -36,20 +33,12 @@ r2d2 = { workspace = true } r2d2_sqlite = { workspace = true } rand = { workspace = true } rayon = { workspace = true } -rusqlite = { workspace = true, features = [ - "bundled", - "functions", - "vtab", - "array", - "hooks", -] } +rusqlite = { workspace = true, features = ["bundled", "array", "hooks"] } serde = { workspace = true, features = ["derive"] } -serde_json = { workspace = true, features = [ - "arbitrary_precision", - "raw_value", -] } +serde_json = { workspace = true, features = ["arbitrary_precision", "raw_value"] } serde_with = { workspace = true } sha3 = { workspace = true } +siphasher = { workspace = true } tempfile = { workspace = true } thiserror = { workspace = true } tokio = { workspace = true } diff --git a/crates/storage/src/bloom.rs b/crates/storage/src/bloom.rs index 48f948fd4d..90f1bd673a 100644 --- a/crates/storage/src/bloom.rs +++ b/crates/storage/src/bloom.rs @@ -60,12 +60,14 @@ //! specific set of keys without having to load and check each individual bloom //! filter. -use std::sync::{Arc, Mutex}; +use std::hash::{Hash, Hasher}; +use std::sync::{Arc, LazyLock, Mutex}; -use bloomfilter::Bloom; +use bitvec::prelude::*; use cached::{Cached, SizedCache}; use pathfinder_common::BlockNumber; use pathfinder_crypto::Felt; +use siphasher::sip::SipHasher13; /// Maximum number of blocks to aggregate in a single `AggregateBloom`. pub const AGGREGATE_BLOOM_BLOCK_RANGE_LEN: u64 = @@ -81,7 +83,7 @@ pub const AGGREGATE_BLOOM_BLOCK_RANGE_LEN: u64 = /// rotated by 90 degrees (transposed). #[derive(Clone)] pub struct AggregateBloom { - /// A [AGGREGATE_BLOOM_BLOCK_RANGE_LEN] by [BloomFilter::BITVEC_LEN] matrix + /// A [AGGREGATE_BLOOM_BLOCK_RANGE_LEN] by [BloomFilter::BITVEC_BITS] matrix /// stored in a single array. bitmap: Vec, @@ -103,7 +105,7 @@ impl AggregateBloom { /// \[`from_block`, `from_block + (AGGREGATE_BLOOM_BLOCK_RANGE_LEN) - 1`\] pub fn new(from_block: BlockNumber) -> Self { let to_block = from_block + AGGREGATE_BLOOM_BLOCK_RANGE_LEN - 1; - let bitmap = vec![0; Self::BLOCK_RANGE_BYTES * BloomFilter::BITVEC_LEN]; + let bitmap = vec![0; Self::BLOCK_RANGE_BYTES * BloomFilter::BITVEC_BITS]; Self::from_parts(from_block, to_block, bitmap) } @@ -115,7 +117,7 @@ impl AggregateBloom { ) -> Self { let bitmap = zstd::bulk::decompress( &compressed_bitmap, - Self::BLOCK_RANGE_BYTES * BloomFilter::BITVEC_LEN, + Self::BLOCK_RANGE_BYTES * BloomFilter::BITVEC_BITS, ) .expect("Decompressing aggregate Bloom filter"); @@ -126,7 +128,7 @@ impl AggregateBloom { assert_eq!(from_block + AGGREGATE_BLOOM_BLOCK_RANGE_LEN - 1, to_block); assert_eq!( bitmap.len(), - Self::BLOCK_RANGE_BYTES * BloomFilter::BITVEC_LEN + Self::BLOCK_RANGE_BYTES * BloomFilter::BITVEC_BITS ); Self { @@ -149,7 +151,7 @@ impl AggregateBloom { /// /// Panics if the block number is not in the range of blocks that this /// aggregate covers. - pub fn insert(&mut self, bloom: &BloomFilter, block_number: BlockNumber) { + pub fn insert(&mut self, bloom: BloomFilter, block_number: BlockNumber) { assert!( (self.from_block..=self.to_block).contains(&block_number), "Block number {} is not in the range {}..={}", @@ -157,10 +159,8 @@ impl AggregateBloom { self.from_block, self.to_block ); - assert_eq!(bloom.0.number_of_hash_functions(), BloomFilter::K_NUM); - let bloom_bytes = bloom.0.bit_vec().to_bytes(); - assert_eq!(bloom_bytes.len(), BloomFilter::BITVEC_BYTES); + let bloom_bytes = bloom.into_bytes(); let relative_block_number = usize::try_from(block_number.get() - self.from_block.get()) .expect("usize can fit a u64"); @@ -420,84 +420,101 @@ impl AggregateBloomCache { } } +// The seed used by the hash functions of the filter. +const SEED: [u8; 32] = [ + 0xef, 0x51, 0x88, 0x74, 0xef, 0x08, 0x3d, 0xf6, 0x7d, 0x7a, 0x93, 0xb7, 0xb3, 0x13, 0x1f, 0x87, + 0xd3, 0x26, 0xbd, 0x49, 0xc7, 0x18, 0xcc, 0xe5, 0xd7, 0xe8, 0xa0, 0xdb, 0xea, 0x80, 0x67, 0x52, +]; + +// Base hash functions used by the Bloom filter. +// +// Computed once from the seed and reused for all Bloom filters. +static SIPS: LazyLock<[siphasher::sip::SipHasher13; 2]> = LazyLock::new(|| { + let k1 = u64::from_le_bytes(SEED[0..8].try_into().unwrap()); + let k2 = u64::from_le_bytes(SEED[8..16].try_into().unwrap()); + let k3 = u64::from_le_bytes(SEED[16..24].try_into().unwrap()); + let k4 = u64::from_le_bytes(SEED[24..32].try_into().unwrap()); + [ + SipHasher13::new_with_keys(k1, k2), + SipHasher13::new_with_keys(k3, k4), + ] +}); + +/// The number of hash functions used by the Bloom filter. +const K_NUM: usize = 12; + +/// A Bloom filter implementation for StarkNet events. +/// +/// Based on the Bloom filter implementation from the [`bloomfilter`](https://crates.io/crates/bloomfilter/1.0.15) crate. #[derive(Clone)] -pub(crate) struct BloomFilter(Bloom); +pub(crate) struct BloomFilter { + bit_vec: bitvec::vec::BitVec, +} impl BloomFilter { - // The size of the bitmap used by the Bloom filter. - const BITVEC_LEN: usize = 16_384; - // The size of the bitmap used by the Bloom filter (in bytes). - const BITVEC_BYTES: usize = Self::BITVEC_LEN / 8; - // The number of hash functions used by the Bloom filter. - // We need this value to be able to re-create the filter with the deserialized - // bitmap. - const K_NUM: u32 = 12; - // The maximal number of items anticipated to be inserted into the Bloom filter. - const ITEMS_COUNT: usize = 1024; - // The seed used by the hash functions of the filter. - // This is a randomly generated vector of 32 bytes. - const SEED: [u8; 32] = [ - 0xef, 0x51, 0x88, 0x74, 0xef, 0x08, 0x3d, 0xf6, 0x7d, 0x7a, 0x93, 0xb7, 0xb3, 0x13, 0x1f, - 0x87, 0xd3, 0x26, 0xbd, 0x49, 0xc7, 0x18, 0xcc, 0xe5, 0xd7, 0xe8, 0xa0, 0xdb, 0xea, 0x80, - 0x67, 0x52, - ]; + /// The size of the bitmap used by the Bloom filter. + const BITVEC_BITS: usize = 16_384; + /// The size of the bitmap used by the Bloom filter (in bytes). + const BITVEC_BYTES: usize = Self::BITVEC_BITS / 8; + /// Crate a new empty bloom filter. pub fn new() -> Self { - let bloom = Bloom::new_with_seed(Self::BITVEC_BYTES, Self::ITEMS_COUNT, &Self::SEED); - assert_eq!(bloom.number_of_hash_functions(), Self::K_NUM); - - Self(bloom) + let bit_vec = bitvec::bitvec![u8, bitvec::order::Msb0; 0; Self::BITVEC_BITS]; + Self { bit_vec } } + /// Create a bloom filter from a compressed byte array of the bitmap. pub fn from_compressed_bytes(bytes: &[u8]) -> Self { let bytes = zstd::bulk::decompress(bytes, Self::BITVEC_BYTES * 2) .expect("Decompressing Bloom filter"); - Self::from_bytes(&bytes) - } + let bit_vec = BitVec::from_vec(bytes); - fn from_bytes(bytes: &[u8]) -> Self { - let k1 = u64::from_le_bytes(Self::SEED[0..8].try_into().unwrap()); - let k2 = u64::from_le_bytes(Self::SEED[8..16].try_into().unwrap()); - let k3 = u64::from_le_bytes(Self::SEED[16..24].try_into().unwrap()); - let k4 = u64::from_le_bytes(Self::SEED[24..32].try_into().unwrap()); - let bloom = Bloom::from_existing( - bytes, - Self::BITVEC_BYTES as u64 * 8, - Self::K_NUM, - [(k1, k2), (k3, k4)], - ); - Self(bloom) + Self { bit_vec } } - pub fn to_compressed_bytes(&self) -> Vec { - let bytes = self.to_bytes(); + /// Convert the bloom filter to a compressed byte array. + pub fn into_compressed_bytes(self) -> Vec { + let bytes = self.into_bytes(); zstd::bulk::compress(&bytes, 0).expect("Compressing Bloom filter") } - fn to_bytes(&self) -> Vec { - self.0.bitmap() + /// Convert the bloom filter to a byte array. + fn into_bytes(self) -> Vec { + self.bit_vec.into_vec() } - pub fn set(&mut self, key: &Felt) { - self.0.set(key); + /// Record the presence of an item. + pub fn set(&mut self, item: &Felt) { + let mut hashes = [0u64, 0u64]; + for k_i in 0..K_NUM { + let bit_offset = Self::bloom_hash(&mut hashes, item, k_i) as usize % Self::BITVEC_BITS; + self.bit_vec.set(bit_offset, true); + } } - // Workaround to get the indices of the keys in the filter. - // Needed because the `bloomfilter` crate doesn't provide a - // way to get this information. - fn indices_for_key(key: &Felt) -> Vec { - // Use key on an empty Bloom filter - let mut bloom = Self::new(); - bloom.set(key); - - bloom - .0 - .bit_vec() - .iter() - .enumerate() - .filter(|(_, bit)| *bit) - .map(|(i, _)| i) - .collect() + /// Compute the bit indices for the given key. + fn indices_for_key(key: &Felt) -> [usize; K_NUM] { + let mut indices = [0usize; K_NUM]; + let mut hashes = [0u64, 0u64]; + let iter = (0..K_NUM) + .map(|k_i| Self::bloom_hash(&mut hashes, key, k_i) as usize % Self::BITVEC_BITS); + for (i, idx) in iter.enumerate() { + indices[i] = idx; + } + indices + } + + fn bloom_hash(hashes: &mut [u64; 2], item: &Felt, k_i: usize) -> u64 { + if k_i < 2 { + let sip = &mut SIPS[k_i].clone(); + item.hash(sip); + let hash = sip.finish(); + hashes[k_i] = hash; + hash + } else { + (hashes[0]).wrapping_add((k_i as u64).wrapping_mul(hashes[1])) + % 0xFFFF_FFFF_FFFF_FFC5u64 //largest u64 prime + } } } @@ -535,7 +552,7 @@ mod tests { bloom.set(&KEY); bloom.set(&KEY1); - aggregate_bloom_filter.insert(&bloom, from_block); + aggregate_bloom_filter.insert(bloom, from_block); let block_matches = aggregate_bloom_filter.blocks_for_keys(&[KEY]); let expected = blockrange![from_block]; @@ -550,8 +567,8 @@ mod tests { let mut bloom = BloomFilter::new(); bloom.set(&KEY); - aggregate_bloom_filter.insert(&bloom, from_block); - aggregate_bloom_filter.insert(&bloom, from_block + 1); + aggregate_bloom_filter.insert(bloom.clone(), from_block); + aggregate_bloom_filter.insert(bloom, from_block + 1); let block_matches = aggregate_bloom_filter.blocks_for_keys(&[KEY]); let expected = blockrange![from_block, from_block + 1]; @@ -567,8 +584,8 @@ mod tests { bloom.set(&KEY); bloom.set(&KEY1); - aggregate_bloom_filter.insert(&bloom, from_block); - aggregate_bloom_filter.insert(&bloom, from_block + 1); + aggregate_bloom_filter.insert(bloom.clone(), from_block); + aggregate_bloom_filter.insert(bloom, from_block + 1); let block_matches_empty = aggregate_bloom_filter.blocks_for_keys(&[KEY_NOT_IN_FILTER]); assert_eq!(block_matches_empty, BlockRange::EMPTY); @@ -582,8 +599,8 @@ mod tests { let mut bloom = BloomFilter::new(); bloom.set(&KEY); - aggregate_bloom_filter.insert(&bloom, from_block); - aggregate_bloom_filter.insert(&bloom, from_block + 1); + aggregate_bloom_filter.insert(bloom.clone(), from_block); + aggregate_bloom_filter.insert(bloom.clone(), from_block + 1); let compressed_bitmap = aggregate_bloom_filter.compress_bitmap(); let mut decompressed = AggregateBloom::from_existing_compressed( @@ -591,7 +608,7 @@ mod tests { aggregate_bloom_filter.to_block, compressed_bitmap, ); - decompressed.insert(&bloom, from_block + 2); + decompressed.insert(bloom, from_block + 2); let block_matches = decompressed.blocks_for_keys(&[KEY]); let expected = blockrange![from_block, from_block + 1, from_block + 2]; @@ -610,10 +627,10 @@ mod tests { let mut bloom = BloomFilter::new(); bloom.set(&KEY); - aggregate_bloom_filter.insert(&bloom, from_block); + aggregate_bloom_filter.insert(bloom.clone(), from_block); let invalid_insert_pos = from_block + AGGREGATE_BLOOM_BLOCK_RANGE_LEN; - aggregate_bloom_filter.insert(&bloom, invalid_insert_pos); + aggregate_bloom_filter.insert(bloom, invalid_insert_pos); } } diff --git a/crates/storage/src/connection.rs b/crates/storage/src/connection.rs index 1361e89066..fd69d0ec75 100644 --- a/crates/storage/src/connection.rs +++ b/crates/storage/src/connection.rs @@ -2,7 +2,6 @@ use std::sync::{Arc, Mutex}; mod block; mod class; -pub mod consensus; mod ethereum; pub mod event; pub mod pruning; @@ -30,6 +29,8 @@ pub use rusqlite::TransactionBehavior; pub use trie::{Node, NodeRef, RootIndexUpdate, StoredNode, TrieStorageIndex, TrieUpdate}; use crate::bloom::AggregateBloomCache; +use crate::params::RowExt; +use crate::{StorageError, VERSION_KEY}; type PooledConnection = r2d2::PooledConnection; @@ -58,7 +59,7 @@ impl Connection { } } - pub fn transaction(&mut self) -> anyhow::Result> { + pub fn transaction(&mut self) -> Result, StorageError> { let tx = self.connection.transaction()?; Ok(Transaction { transaction: tx, @@ -72,7 +73,7 @@ impl Connection { pub fn transaction_with_behavior( &mut self, behavior: TransactionBehavior, - ) -> anyhow::Result> { + ) -> Result, StorageError> { let tx = self.connection.transaction_with_behavior(behavior)?; Ok(Transaction { transaction: tx, @@ -151,4 +152,11 @@ impl Transaction<'_> { self.event_filter_cache.reset(); self.rebuild_running_event_filter(head) } + + pub fn user_version(&self) -> anyhow::Result { + let user_version = self + .transaction + .pragma_query_value(None, VERSION_KEY, |row| row.get_i64(0))?; + Ok(user_version) + } } diff --git a/crates/storage/src/connection/block.rs b/crates/storage/src/connection/block.rs index 9106f4d4b8..c124cd8622 100644 --- a/crates/storage/src/connection/block.rs +++ b/crates/storage/src/connection/block.rs @@ -649,6 +649,7 @@ fn parse_row_as_header(row: &rusqlite::Row<'_>) -> rusqlite::Result #[cfg(test)] mod tests { + use pathfinder_common::class_definition::SerializedCairoDefinition; use pathfinder_common::macro_prelude::*; use pathfinder_common::prelude::*; use pathfinder_common::L1DataAvailabilityMode; @@ -685,7 +686,11 @@ mod tests { sequencer_address: sequencer_address_bytes!(b"sequencer address genesis"), starknet_version: StarknetVersion::default(), event_commitment: event_commitment_bytes!(b"event commitment genesis"), - state_commitment: StateCommitment::calculate(storage_commitment, class_commitment), + state_commitment: StateCommitment::calculate( + storage_commitment, + class_commitment, + StarknetVersion::default(), + ), transaction_commitment: transaction_commitment_bytes!(b"tx commitment genesis"), transaction_count: 37, event_count: 40, @@ -789,7 +794,8 @@ mod tests { // Add a class to test that purging a block unsets its block number; let cairo_hash = class_hash!("0x1234"); - tx.insert_cairo_class_definition(cairo_hash, &[]).unwrap(); + tx.insert_cairo_class_definition(cairo_hash, &SerializedCairoDefinition::from_slice(&[])) + .unwrap(); tx.insert_state_update( latest.number, &StateUpdate::default().with_declared_cairo_class(cairo_hash), diff --git a/crates/storage/src/connection/class.rs b/crates/storage/src/connection/class.rs index 3d05eb597c..9997e8f03c 100644 --- a/crates/storage/src/connection/class.rs +++ b/crates/storage/src/connection/class.rs @@ -1,4 +1,10 @@ use anyhow::Context; +use pathfinder_common::class_definition::{ + SerializedCairoDefinition, + SerializedCasmDefinition, + SerializedOpaqueClassDefinition, + SerializedSierraDefinition, +}; use pathfinder_common::{ BlockId, BlockNumber, @@ -14,23 +20,25 @@ impl Transaction<'_> { pub fn insert_sierra_class_definition( &self, sierra_hash: &SierraHash, - sierra_definition: &[u8], - casm_definition: &[u8], + sierra_definition: &SerializedSierraDefinition, + casm_definition: &SerializedCasmDefinition, // Blake2 hash of the compiled class definition casm_hash_v2: &CasmHash, ) -> anyhow::Result<()> { let mut compressor = zstd::bulk::Compressor::new(10).context("Creating zstd compressor")?; - let sierra_definition = compressor - .compress(sierra_definition) + let compressed_sierra_definition = compressor + .compress(sierra_definition.as_bytes()) .context("Compressing sierra definition")?; - let casm_definition = compressor - .compress(casm_definition) + let compressed_casm_definition = compressor + .compress(casm_definition.as_bytes()) .context("Compressing casm definition")?; self.inner() .execute( - "INSERT OR IGNORE INTO class_definitions (hash, definition) VALUES (?, ?)", - params![sierra_hash, &sierra_definition], + "INSERT INTO class_definitions (hash, definition) VALUES (?, ?) + ON CONFLICT(hash) DO UPDATE SET definition = excluded.definition + WHERE class_definitions.definition IS NULL", + params![sierra_hash, &compressed_sierra_definition], ) .context("Inserting sierra definition")?; @@ -43,7 +51,7 @@ impl Transaction<'_> { ", named_params! { ":hash": sierra_hash, - ":definition": &casm_definition, + ":definition": &compressed_casm_definition, }, ) .context("Inserting CASM definition")?; @@ -68,23 +76,23 @@ impl Transaction<'_> { pub fn update_sierra_class_definition( &self, sierra_hash: &SierraHash, - sierra_definition: &[u8], - casm_definition: &[u8], + sierra_definition: &SerializedSierraDefinition, + casm_definition: &SerializedCasmDefinition, casm_hash_v2: &CasmHash, ) -> anyhow::Result<()> { let mut compressor = zstd::bulk::Compressor::new(10).context("Creating zstd compressor")?; - let sierra_definition = compressor - .compress(sierra_definition) + let compressed_sierra_definition = compressor + .compress(sierra_definition.as_bytes()) .context("Compressing sierra definition")?; - let casm_definition = compressor - .compress(casm_definition) + let compressed_casm_definition = compressor + .compress(casm_definition.as_bytes()) .context("Compressing casm definition")?; self.inner() .execute( r"UPDATE class_definitions SET definition=:definition WHERE hash=:hash", named_params! { - ":definition": &sierra_definition, + ":definition": &compressed_sierra_definition, ":hash": sierra_hash }, ) @@ -94,7 +102,7 @@ impl Transaction<'_> { .execute( r"INSERT OR REPLACE INTO casm_definitions(hash, definition) VALUES(:hash, :definition)", named_params! { - ":definition": &casm_definition, + ":definition": &compressed_casm_definition, ":hash": sierra_hash, }, ) @@ -116,17 +124,19 @@ impl Transaction<'_> { pub fn insert_cairo_class_definition( &self, cairo_hash: ClassHash, - definition: &[u8], + definition: &SerializedCairoDefinition, ) -> anyhow::Result<()> { let mut compressor = zstd::bulk::Compressor::new(10).context("Creating zstd compressor")?; - let definition = compressor - .compress(definition) + let compressed_definition = compressor + .compress(definition.as_bytes()) .context("Compressing cairo definition")?; self.inner() .execute( - r"INSERT OR IGNORE INTO class_definitions (hash, definition) VALUES (?, ?)", - params![&cairo_hash, &definition], + r"INSERT INTO class_definitions (hash, definition) VALUES (?, ?) + ON CONFLICT(hash) DO UPDATE SET definition = excluded.definition + WHERE class_definitions.definition IS NULL", + params![&cairo_hash, &compressed_definition], ) .context("Inserting cairo definition")?; @@ -136,17 +146,17 @@ impl Transaction<'_> { pub fn update_cairo_class_definition( &self, cairo_hash: ClassHash, - definition: &[u8], + definition: &SerializedCairoDefinition, ) -> anyhow::Result<()> { let mut compressor = zstd::bulk::Compressor::new(10).context("Creating zstd compressor")?; - let definition = compressor - .compress(definition) + let compressed_definition = compressor + .compress(definition.as_bytes()) .context("Compressing cairo definition")?; self.inner() .execute( r"UPDATE class_definitions SET definition=? WHERE hash=?", - params![&definition, &cairo_hash], + params![&compressed_definition, &cairo_hash], ) .context("Updating cairo definition")?; @@ -159,9 +169,9 @@ impl Transaction<'_> { /// Note that this does not indicate that the class is actually declared -- /// only that we stored it. pub fn class_definitions_exist(&self, classes: &[ClassHash]) -> anyhow::Result> { - let mut stmt = self - .inner() - .prepare_cached("SELECT 1 FROM class_definitions WHERE hash = ?")?; + let mut stmt = self.inner().prepare_cached( + "SELECT 1 FROM class_definitions WHERE hash = ? AND definition IS NOT NULL", + )?; Ok(classes .iter() @@ -170,7 +180,10 @@ impl Transaction<'_> { } /// Returns the uncompressed class definition. - pub fn class_definition(&self, class_hash: ClassHash) -> anyhow::Result>> { + pub fn class_definition( + &self, + class_hash: ClassHash, + ) -> anyhow::Result> { self.class_definition_with_block_number(class_hash) .map(|option| option.map(|(_block_number, definition)| definition)) } @@ -180,7 +193,7 @@ impl Transaction<'_> { pub fn class_definition_with_block_number( &self, class_hash: ClassHash, - ) -> anyhow::Result, Vec)>> { + ) -> anyhow::Result, SerializedOpaqueClassDefinition)>> { let from_row = |row: &rusqlite::Row<'_>| { let definition = row.get_blob(0).map(|x| x.to_vec())?; let block_number = row.get_optional_block_number(1)?; @@ -202,21 +215,13 @@ impl Transaction<'_> { let definition = zstd::decode_all(definition.as_slice()).context("Decompressing class definition")?; - Ok(Some((block_number, definition))) + Ok(Some(( + block_number, + SerializedOpaqueClassDefinition::from_bytes(definition), + ))) } - /// Returns the compressed class definition if it has been declared at - /// `block_id`. - pub fn compressed_class_definition_at( - &self, - block_id: BlockId, - class_hash: ClassHash, - ) -> anyhow::Result>> { - self.compressed_class_definition_at_with_block_number(block_id, class_hash) - .map(|option| option.map(|(_block_number, definition)| definition)) - } - - pub fn compressed_class_definition_at_with_block_number( + fn compressed_class_definition_at_with_block_number( &self, block_id: BlockId, class_hash: ClassHash, @@ -267,9 +272,9 @@ impl Transaction<'_> { &self, block_id: BlockId, class_hash: ClassHash, - ) -> anyhow::Result>> { + ) -> anyhow::Result> { self.class_definition_at_with_block_number(block_id, class_hash) - .map(|option| option.map(|(_block_number, definition)| definition)) + .map(|option| option.map(|(_, definition)| definition)) } /// Returns the uncompressed class definition if it has been declared at @@ -278,7 +283,7 @@ impl Transaction<'_> { &self, block_id: BlockId, class_hash: ClassHash, - ) -> anyhow::Result)>> { + ) -> anyhow::Result> { let definition = self.compressed_class_definition_at_with_block_number(block_id, class_hash)?; let Some((block_number, definition)) = definition else { @@ -286,12 +291,16 @@ impl Transaction<'_> { }; let definition = zstd::decode_all(definition.as_slice()).context("Decompressing class definition")?; + let definition = SerializedOpaqueClassDefinition::from_bytes(definition); Ok(Some((block_number, definition))) } /// Returns the uncompressed compiled class definition. - pub fn casm_definition(&self, class_hash: ClassHash) -> anyhow::Result>> { + pub fn casm_definition( + &self, + class_hash: ClassHash, + ) -> anyhow::Result> { // Don't reuse the "_with_block_number" impl here since the suffixed one // requires a join that this one doesn't. let mut stmt = self @@ -310,7 +319,7 @@ impl Transaction<'_> { let definition = zstd::decode_all(definition.as_slice()) .context("Decompressing compiled class definition")?; - Ok(Some(definition)) + Ok(Some(SerializedCasmDefinition::from_bytes(definition))) } /// Returns the uncompressed compiled class definition, as well as the block @@ -318,7 +327,7 @@ impl Transaction<'_> { pub fn casm_definition_with_block_number( &self, class_hash: ClassHash, - ) -> anyhow::Result, Vec)>> { + ) -> anyhow::Result, SerializedCasmDefinition)>> { let from_row = |row: &rusqlite::Row<'_>| { let definition = row.get_blob(0).map(|x| x.to_vec())?; let block_number = row.get_optional_block_number(1)?; @@ -349,7 +358,10 @@ impl Transaction<'_> { let definition = zstd::decode_all(definition.as_slice()) .context("Decompressing compiled class definition")?; - Ok(Some((block_number, definition))) + Ok(Some(( + block_number, + SerializedCasmDefinition::from_bytes(definition), + ))) } /// Returns the uncompressed compiled class definition if it has been @@ -358,9 +370,9 @@ impl Transaction<'_> { &self, block_id: BlockId, class_hash: ClassHash, - ) -> anyhow::Result>> { + ) -> anyhow::Result> { self.casm_definition_at_with_block_number(block_id, class_hash) - .map(|option| option.map(|(_block_number, definition)| definition)) + .map(|option| option.map(|(_, definition)| definition)) } /// Returns the uncompressed compiled class definition if it has been @@ -370,14 +382,14 @@ impl Transaction<'_> { &self, block_id: BlockId, class_hash: ClassHash, - ) -> anyhow::Result, Vec)>> { + ) -> anyhow::Result, SerializedCasmDefinition)>> { let from_row = |row: &rusqlite::Row<'_>| { - let definition = row.get_blob(0).map(|x| x.to_vec())?; + let compressed_definition = row.get_blob(0).map(|x| x.to_vec())?; let block_number = row.get_optional_block_number(1)?; - Ok((block_number, definition)) + Ok((block_number, compressed_definition)) }; - let definition = match block_id { + let compressed_definition = match block_id { BlockId::Latest => { let mut stmt = self.inner().prepare_cached( r"SELECT @@ -428,13 +440,16 @@ impl Transaction<'_> { .optional() .context("Querying for compiled class definition")?; - let Some((block_number, definition)) = definition else { + let Some((block_number, compressed_definition)) = compressed_definition else { return Ok(None); }; - let definition = zstd::decode_all(definition.as_slice()) + let definition = zstd::decode_all(compressed_definition.as_slice()) .context("Decompressing compiled class definition")?; - Ok(Some((block_number, definition))) + Ok(Some(( + block_number, + SerializedCasmDefinition::from_bytes(definition), + ))) } /// Returns the compiled class hash for a class. @@ -462,7 +477,7 @@ impl Transaction<'_> { BlockId::Latest => { let mut stmt = self.inner().prepare_cached( r"SELECT - compiled_class_hash + compiled_class_hash FROM casm_class_hashes WHERE @@ -478,7 +493,7 @@ impl Transaction<'_> { BlockId::Number(number) => { let mut stmt = self.inner().prepare_cached( r"SELECT - compiled_class_hash + compiled_class_hash FROM casm_class_hashes WHERE @@ -493,7 +508,7 @@ impl Transaction<'_> { BlockId::Hash(hash) => { let mut stmt = self.inner().prepare_cached( r"SELECT - compiled_class_hash + compiled_class_hash FROM casm_class_hashes WHERE @@ -525,6 +540,19 @@ impl Transaction<'_> { Ok(compiled_class_hash) } + pub fn class_hashes_with_missing_definitions(&self) -> anyhow::Result> { + let mut stmt = self + .inner() + .prepare_cached("SELECT hash FROM class_definitions WHERE definition IS NULL")?; + + let hashes = stmt + .query_map([], |row| row.get_class_hash(0)) + .context("Querying class hashes with missing definitions")? + .collect::, _>>()?; + + Ok(hashes) + } + pub fn is_sierra(&self, class_hash: ClassHash) -> anyhow::Result> { let mut stmt = self.inner().prepare_cached( "SELECT EXISTS(SELECT 1 FROM casm_definitions WHERE casm_definitions.hash = ?)", @@ -574,13 +602,129 @@ mod tests { use super::*; + fn insert_placeholder(transaction: &Transaction<'_>, hash: ClassHash) { + transaction + .inner() + .execute( + "INSERT INTO class_definitions (hash, block_number) VALUES (?, 0)", + rusqlite::params![&hash.0.to_be_bytes()[..]], + ) + .unwrap(); + } + + #[test] + fn class_definitions_exist_ignores_placeholder() { + let mut connection = crate::StorageBuilder::in_memory() + .unwrap() + .connection() + .unwrap(); + let tx = connection.transaction().unwrap(); + + let hash = class_hash!("0xabc"); + insert_placeholder(&tx, hash); + + let result = tx.class_definitions_exist(&[hash]).unwrap(); + assert_eq!(result, vec![false]); + } + + #[test] + fn insert_cairo_fills_placeholder() { + let mut connection = crate::StorageBuilder::in_memory() + .unwrap() + .connection() + .unwrap(); + let tx = connection.transaction().unwrap(); + + let hash = class_hash!("0xabc"); + insert_placeholder(&tx, hash); + + let definition = b"example cairo program"; + tx.insert_cairo_class_definition(hash, &SerializedCairoDefinition::from_slice(definition)) + .unwrap(); + + let result = tx.class_definition(hash).unwrap(); + assert_eq!( + result, + Some(SerializedOpaqueClassDefinition::from_slice(definition)) + ); + } + + #[test] + fn insert_sierra_fills_placeholder() { + let mut connection = crate::StorageBuilder::in_memory() + .unwrap() + .connection() + .unwrap(); + let tx = connection.transaction().unwrap(); + + let sierra_hash = sierra_hash_bytes!(b"sierra hash abc"); + let class_hash = ClassHash(sierra_hash.0); + insert_placeholder(&tx, class_hash); + + let sierra_definition = b"example sierra program"; + let casm_definition = b"compiled sierra program"; + let casm_hash_v2 = casm_hash_bytes!(b"casm hash blake abc"); + + tx.insert_sierra_class_definition( + &sierra_hash, + &SerializedSierraDefinition::from_slice(sierra_definition), + &SerializedCasmDefinition::from_slice(casm_definition), + &casm_hash_v2, + ) + .unwrap(); + + let result = tx.class_definition(class_hash).unwrap(); + assert_eq!( + result, + Some(SerializedOpaqueClassDefinition::from_slice( + sierra_definition + )) + ); + + let result = tx.casm_definition(class_hash).unwrap(); + assert_eq!( + result, + Some(SerializedCasmDefinition::from_slice(casm_definition)) + ); + } + + #[test] + fn insert_cairo_does_not_overwrite_existing() { + let mut connection = crate::StorageBuilder::in_memory() + .unwrap() + .connection() + .unwrap(); + let tx = connection.transaction().unwrap(); + + let hash = class_hash!("0xabc"); + let definition_a = b"definition A"; + let definition_b = b"definition B"; + + tx.insert_cairo_class_definition( + hash, + &SerializedCairoDefinition::from_slice(definition_a), + ) + .unwrap(); + tx.insert_cairo_class_definition( + hash, + &SerializedCairoDefinition::from_slice(definition_b), + ) + .unwrap(); + + let result = tx.class_definition(hash).unwrap(); + assert_eq!( + result, + Some(SerializedOpaqueClassDefinition::from_slice(definition_a)) + ); + } + fn setup_class(transaction: &Transaction<'_>) -> (ClassHash, &'static [u8], serde_json::Value) { let hash = class_hash!("0x123"); let definition = br#"{"abi":{"see":"above"},"program":{"huge":"hash"},"entry_points_by_type":{"this might be a":"hash"}}"#; transaction - .insert_cairo_class_definition(hash, definition) + .insert_cairo_class_definition(hash, &SerializedCairoDefinition::from_slice(definition)) .unwrap(); ( @@ -619,12 +763,18 @@ mod tests { let cairo_hash = class_hash_bytes!(b"cairo hash"); let cairo_definition = b"example cairo program"; - tx.insert_cairo_class_definition(cairo_hash, cairo_definition) - .unwrap(); + tx.insert_cairo_class_definition( + cairo_hash, + &SerializedCairoDefinition::from_slice(cairo_definition), + ) + .unwrap(); let definition = tx.class_definition(cairo_hash).unwrap().unwrap(); - assert_eq!(definition, cairo_definition); + assert_eq!( + definition, + SerializedOpaqueClassDefinition::from_slice(cairo_definition) + ); } #[test] @@ -642,8 +792,8 @@ mod tests { tx.insert_sierra_class_definition( &sierra_hash, - sierra_definition, - casm_definition, + &SerializedSierraDefinition::from_slice(sierra_definition), + &SerializedCasmDefinition::from_slice(casm_definition), &casm_hash_v2, ) .unwrap(); @@ -652,13 +802,19 @@ mod tests { .casm_definition(ClassHash(sierra_hash.0)) .unwrap() .unwrap(); - assert_eq!(definition, casm_definition); + assert_eq!( + definition, + SerializedCasmDefinition::from_slice(casm_definition) + ); let definition = tx .class_definition(ClassHash(sierra_hash.0)) .unwrap() .unwrap(); - assert_eq!(definition, sierra_definition); + assert_eq!( + definition, + SerializedOpaqueClassDefinition::from_slice(sierra_definition) + ); let retrieved_casm_hash_v2 = tx.casm_hash_v2(ClassHash(sierra_hash.0)).unwrap().unwrap(); assert_eq!(retrieved_casm_hash_v2, casm_hash_v2); diff --git a/crates/storage/src/connection/consensus.rs b/crates/storage/src/connection/consensus.rs deleted file mode 100644 index b3c3fc3f7a..0000000000 --- a/crates/storage/src/connection/consensus.rs +++ /dev/null @@ -1,282 +0,0 @@ -//! Note that functions in this module fail on normal pathfinder -//! storage (because they use a consensus-specific table). - -use anyhow::Context; -use pathfinder_common::ContractAddress; - -use crate::prelude::*; - -impl Transaction<'_> { - pub fn ensure_consensus_proposals_table_exists(&self) -> anyhow::Result<()> { - self.inner().execute( - r"CREATE TABLE IF NOT EXISTS consensus_proposals ( - height INTEGER NOT NULL, - round INTEGER NOT NULL, - proposer BLOB NOT NULL, - parts BLOB NOT NULL, - UNIQUE(height, round, proposer) - )", - [], - )?; - Ok(()) - } - - pub fn persist_consensus_proposal_parts( - &self, - height: u64, - round: u32, - proposer: &ContractAddress, - parts: &[u8], // repeated ProposalPart - ) -> anyhow::Result { - let count = self.inner().query_row( - r"SELECT count(*) - FROM consensus_proposals - WHERE height = :height AND round = :round AND proposer = :proposer", - named_params! { - ":height": &height, - ":round": &round, - ":proposer": proposer, - }, - |row| row.get_i64(0), - )?; - - if count == 0 { - self.inner() - .execute( - r" - INSERT INTO consensus_proposals - (height, round, proposer, parts) - VALUES (:height, :round, :proposer, :parts) - ", - named_params! { - ":height": &height, - ":round": &round, - ":proposer": proposer, - ":parts": &parts, - }, - ) - .context("Inserting consensus proposal parts")?; - } else { - self.inner() - .execute( - r" - UPDATE consensus_proposals - SET parts = :parts - WHERE height = :height AND round = :round AND proposer = :proposer", - named_params! { - ":height": &height, - ":round": &round, - ":proposer": proposer, - ":parts": &parts, - }, - ) - .context("Updating consensus proposal parts")?; - } - - Ok(count > 0) - } - - pub fn own_consensus_proposal_parts( - &self, - height: u64, - round: u32, - validator: &ContractAddress, - ) -> anyhow::Result>> { - self.inner() - .query_row( - r"SELECT parts - FROM consensus_proposals - WHERE height = :height AND round = :round AND proposer = :proposer", - named_params! { - ":height": &height, - ":round": &round, - ":proposer": validator, - }, - |row| row.get_blob(0).map(|x| x.to_vec()), - ) - .optional() - .map_err(|e| e.into()) - } - - pub fn foreign_consensus_proposal_parts( - &self, - height: u64, - round: u32, - validator: &ContractAddress, - ) -> anyhow::Result>> { - self.inner() - .query_row( - r"SELECT parts - FROM consensus_proposals - WHERE height = :height AND round = :round AND proposer <> :proposer", - named_params! { - ":height": &height, - ":round": &round, - ":proposer": validator, - }, - |row| row.get_blob(0).map(|x| x.to_vec()), - ) - .optional() - .map_err(|e| e.into()) - } - - pub fn last_consensus_proposal_parts( - &self, - height: u64, - validator: &ContractAddress, - ) -> anyhow::Result)>> { - self.inner() - .query_row( - r" - SELECT parts, round - FROM consensus_proposals - WHERE height = :height AND proposer <> :proposer - ORDER BY round DESC - LIMIT 1", - named_params! { - ":height": &height, - ":proposer": validator, - }, - |row| { - let buf = row.get_blob(0).map(|x| x.to_vec())?; - let round = row.get_i64(1)?; - Ok((round, buf)) - }, - ) - .optional() - .map_err(|e| e.into()) - } - - /// Always all proposers - pub fn remove_consensus_proposal_parts( - &self, - height: u64, - round: Option, - ) -> anyhow::Result<()> { - if let Some(r) = round { - self.inner() - .execute( - r" - DELETE FROM consensus_proposals - WHERE height = :height AND round = :round", - named_params! { - ":height": &height, - ":round": &r, - }, - ) - .context("Deleting consensus proposal parts")?; - } else { - self.inner() - .execute( - r" - DELETE FROM consensus_proposals - WHERE height = :height", - named_params! { - ":height": &height, - }, - ) - .context("Deleting consensus proposal parts")?; - } - - Ok(()) - } - - pub fn ensure_consensus_finalized_blocks_table_exists(&self) -> anyhow::Result<()> { - self.inner().execute( - r"CREATE TABLE IF NOT EXISTS consensus_finalized_blocks ( - height INTEGER NOT NULL, - round INTEGER NOT NULL, - block BLOB NOT NULL, - UNIQUE(height, round) - )", - [], - )?; - Ok(()) - } - - pub fn persist_consensus_finalized_block( - &self, - height: u64, - round: u32, - block: &[u8], // FinalizedBlock - ) -> anyhow::Result { - let count = self.inner().query_row( - r"SELECT count(*) - FROM consensus_finalized_blocks - WHERE height = :height AND round = :round", - named_params! { - ":height": &height, - ":round": &round, - }, - |row| row.get_i64(0), - )?; - - if count == 0 { - self.inner() - .execute( - r" - INSERT INTO consensus_finalized_blocks - (height, round, block) - VALUES (:height, :round, :block) - ", - named_params! { - ":height": &height, - ":round": &round, - ":block": &block, - }, - ) - .context("Inserting consensus finalized block")?; - } else { - self.inner() - .execute( - r" - UPDATE consensus_finalized_blocks - SET block = :block - WHERE height = :height AND round = :round", - named_params! { - ":height": &height, - ":round": &round, - ":block": &block, - }, - ) - .context("Updating consensus finalized blocks")?; - } - - Ok(count > 0) - } - - pub fn read_consensus_finalized_block( - &self, - height: u64, - round: u32, - ) -> anyhow::Result>> { - self.inner() - .query_row( - r"SELECT block - FROM consensus_finalized_blocks - WHERE height = :height AND round = :round", - named_params! { - ":height": &height, - ":round": &round, - }, - |row| row.get_blob(0).map(|x| x.to_vec()), - ) - .optional() - .map_err(|e| e.into()) - } - - /// Always all rounds - pub fn remove_consensus_finalized_blocks(&self, height: u64) -> anyhow::Result<()> { - self.inner() - .execute( - r" - DELETE FROM consensus_finalized_blocks - WHERE height = :height", - named_params! { - ":height": &height, - }, - ) - .context("Deleting consensus finalized blocks")?; - Ok(()) - } -} diff --git a/crates/storage/src/connection/event.rs b/crates/storage/src/connection/event.rs index 533aee0c81..abfd79a581 100644 --- a/crates/storage/src/connection/event.rs +++ b/crates/storage/src/connection/event.rs @@ -11,6 +11,7 @@ use rusqlite::types::Value; use crate::bloom::{AggregateBloom, BlockRange, BloomFilter}; use crate::prelude::*; +use crate::AGGREGATE_BLOOM_BLOCK_RANGE_LEN; // We're using the upper 4 bits of the 32 byte representation of a felt // to store the index of the key in the values set in the Bloom filter. @@ -23,7 +24,7 @@ pub const PAGE_SIZE_LIMIT: usize = 1_024; pub struct EventConstraints { pub from_block: Option, pub to_block: Option, - pub contract_address: Option, + pub contract_addresses: Vec, pub keys: Vec>, pub page_size: usize, pub offset: usize, @@ -127,7 +128,7 @@ impl Transaction<'_> { bloom.set_address(&event.from_address); } - running_event_filter.filter.insert(&bloom, block_number); + running_event_filter.filter.insert(bloom, block_number); running_event_filter.next_block = block_number + 1; // This check is the reason that blocks cannot be skipped, if they were we would @@ -156,7 +157,7 @@ impl Transaction<'_> { &self, from_block: BlockNumber, to_block: BlockNumber, - contract_address: Option, + contract_addresses: Vec, mut keys: Vec>, ) -> anyhow::Result<(Vec, Option)> { let Some(latest_block) = self.block_number(BlockId::Latest)? else { @@ -174,7 +175,7 @@ impl Transaction<'_> { } let constraints = EventConstraints { - contract_address, + contract_addresses, keys, page_size: usize::MAX - 1, ..Default::default() @@ -214,9 +215,12 @@ impl Transaction<'_> { .into_iter() .zip(std::iter::repeat(tx_info).enumerate()) }) - .filter(|(event, _)| match constraints.contract_address { - Some(address) => event.from_address == address, - None => true, + .filter(|(event, _)| { + if constraints.contract_addresses.is_empty() { + true + } else { + constraints.contract_addresses.contains(&event.from_address) + } }) .filter(|(event, _)| { if no_key_constraints { @@ -348,9 +352,12 @@ impl Transaction<'_> { .into_iter() .zip(std::iter::repeat(tx_info).enumerate()) }) - .filter(|(event, _)| match constraints.contract_address { - Some(address) => event.from_address == address, - None => true, + .filter(|(event, _)| { + if constraints.contract_addresses.is_empty() { + true + } else { + constraints.contract_addresses.contains(&event.from_address) + } }) .filter(|(event, _)| { if no_key_constraints { @@ -499,6 +506,7 @@ impl Transaction<'_> { Ok(event_filters) } + /// Returns the next block number whose events are missing from storage. pub fn next_block_without_events(&self) -> BlockNumber { self.running_event_filter.lock().unwrap().next_block } @@ -528,7 +536,7 @@ impl Transaction<'_> { impl AggregateBloom { /// Returns the block numbers that match the given constraints. pub fn check(&self, constraints: &EventConstraints) -> Vec { - let addr_blocks = self.check_address(constraints.contract_address); + let addr_blocks = self.check_addresses(&constraints.contract_addresses); let keys_blocks = self.check_keys(&constraints.keys); let block_matches = addr_blocks & keys_blocks; @@ -539,10 +547,13 @@ impl AggregateBloom { .collect() } - fn check_address(&self, address: Option) -> BlockRange { - match address { - Some(addr) => self.blocks_for_keys(&[addr.0]), - None => BlockRange::FULL, + fn check_addresses(&self, addresses: &[ContractAddress]) -> BlockRange { + if addresses.is_empty() { + BlockRange::FULL + } else { + let contracts: Vec = + addresses.iter().map(|addr| addr.0).collect(); + self.blocks_for_keys(&contracts) } } @@ -699,8 +710,14 @@ impl RunningEventFilter { }); } Some(last_to_block) => BlockNumber::new_or_panic(last_to_block + 1), - // Event filter table is empty, rebuild running filter from the genesis block. - None => BlockNumber::GENESIS, + // Event filter table is empty, either because we haven't covered an entire range + // yet or the old filters have been pruned. Either way, rebuild the running event + // filter in the range that includes the latest block. + None => latest + .get() + .checked_sub(latest.get() % AGGREGATE_BLOOM_BLOCK_RANGE_LEN) + .map(BlockNumber::new_or_panic) + .unwrap_or(BlockNumber::GENESIS), }; let total_blocks_to_cover = latest.get() - first_running_event_filter_block.get(); @@ -776,7 +793,7 @@ impl RunningEventFilter { break; }; - filter.insert(&bloom, block_number); + filter.insert(bloom, block_number); } Ok(Self { @@ -851,12 +868,39 @@ mod tests { filter.set_keys(&[event_key!("0xdeadbeef")]); filter.set_address(&contract_address!("0x1234")); - aggregate.insert(&filter, BlockNumber::GENESIS); - aggregate.insert(&filter, BlockNumber::GENESIS + 1); + aggregate.insert(filter.clone(), BlockNumber::GENESIS); + aggregate.insert(filter, BlockNumber::GENESIS + 1); + let constraints = EventConstraints { + from_block: None, + to_block: None, + contract_addresses: vec![contract_address!("0x1234")], + keys: vec![vec![event_key!("0xdeadbeef")]], + page_size: 1024, + offset: 0, + }; + + assert_eq!( + aggregate.check(&constraints), + vec![BlockNumber::GENESIS, BlockNumber::GENESIS + 1] + ); + } + + #[test] + fn extra_address() { + let mut aggregate = AggregateBloom::new(BlockNumber::GENESIS); + + let mut filter = BloomFilter::new(); + filter.set_keys(&[event_key!("0xdeadbeef")]); + filter.set_address(&contract_address!("0x1234")); + + aggregate.insert(filter.clone(), BlockNumber::GENESIS); + aggregate.insert(filter, BlockNumber::GENESIS + 1); + let contract_addresses = + vec![contract_address!("0x123456"), contract_address!("0x1234")]; let constraints = EventConstraints { from_block: None, to_block: None, - contract_address: Some(contract_address!("0x1234")), + contract_addresses, keys: vec![vec![event_key!("0xdeadbeef")]], page_size: 1024, offset: 0, @@ -876,12 +920,12 @@ mod tests { filter.set_keys(&[event_key!("0xdeadbeef")]); filter.set_address(&contract_address!("0x1234")); - aggregate.insert(&filter, BlockNumber::GENESIS); - aggregate.insert(&filter, BlockNumber::GENESIS + 1); + aggregate.insert(filter.clone(), BlockNumber::GENESIS); + aggregate.insert(filter, BlockNumber::GENESIS + 1); let constraints = EventConstraints { from_block: None, to_block: None, - contract_address: Some(contract_address!("0x4321")), + contract_addresses: vec![contract_address!("0x4321")], keys: vec![vec![event_key!("0xdeadbeef")]], page_size: 1024, offset: 0, @@ -898,12 +942,12 @@ mod tests { filter.set_keys(&[event_key!("0xdeadbeef")]); filter.set_address(&contract_address!("0x1234")); - aggregate.insert(&filter, BlockNumber::GENESIS); - aggregate.insert(&filter, BlockNumber::GENESIS + 1); + aggregate.insert(filter.clone(), BlockNumber::GENESIS); + aggregate.insert(filter, BlockNumber::GENESIS + 1); let constraints = EventConstraints { from_block: None, to_block: None, - contract_address: Some(contract_address!("0x1234")), + contract_addresses: vec![contract_address!("0x1234")], keys: vec![vec![event_key!("0xfeebdaed"), event_key!("0x4321")]], page_size: 1024, offset: 0, @@ -920,12 +964,12 @@ mod tests { filter.set_address(&contract_address!("0x1234")); filter.set_keys(&[event_key!("0xdeadbeef")]); - aggregate.insert(&filter, BlockNumber::GENESIS); - aggregate.insert(&filter, BlockNumber::GENESIS + 1); + aggregate.insert(filter.clone(), BlockNumber::GENESIS); + aggregate.insert(filter, BlockNumber::GENESIS + 1); let constraints = EventConstraints { from_block: None, to_block: None, - contract_address: None, + contract_addresses: vec![], keys: vec![ // Key present in both blocks as the first key. vec![event_key!("0xdeadbeef")], @@ -953,12 +997,12 @@ mod tests { filter.set_keys(&[event_key!("0xdeadbeef")]); filter.set_address(&contract_address!("0x1234")); - aggregate.insert(&filter, BlockNumber::GENESIS); - aggregate.insert(&filter, BlockNumber::GENESIS + 1); + aggregate.insert(filter.clone(), BlockNumber::GENESIS); + aggregate.insert(filter, BlockNumber::GENESIS + 1); let constraints = EventConstraints { from_block: None, to_block: None, - contract_address: None, + contract_addresses: vec![], keys: vec![], page_size: 1024, offset: 0, @@ -979,7 +1023,7 @@ mod tests { let constraints = EventConstraints { from_block: Some(expected_event.block_number), to_block: Some(expected_event.block_number), - contract_address: Some(expected_event.from_address), + contract_addresses: vec![expected_event.from_address], // We're using a key which is present in _all_ events as the 2nd key. keys: vec![vec![], vec![event_key!("0xdeadbeef")]], page_size: test_utils::NUM_EVENTS, @@ -1023,7 +1067,7 @@ mod tests { .finalize_with_hash(block_hash!("0x1234")); // Note: hashes are reverse ordered to trigger the sorting bug. - let transactions = vec![ + let transactions = &[ common::Transaction { hash: transaction_hash!("0xF"), variant: common::TransactionVariant::InvokeV0(common::InvokeTransactionV0 { @@ -1050,7 +1094,7 @@ mod tests { }, ]; - let receipts = vec![ + let receipts = &[ Receipt { transaction_hash: transactions[0].hash, transaction_index: pathfinder_common::TransactionIndex::new_or_panic(0), @@ -1072,7 +1116,7 @@ mod tests { tx.insert_block_header(&header).unwrap(); tx.insert_transaction_data( header.number, - &vec![ + &[ (transactions[0].clone(), receipts[0].clone()), (transactions[1].clone(), receipts[1].clone()), ], @@ -1085,7 +1129,7 @@ mod tests { &EventConstraints { from_block: None, to_block: None, - contract_address: None, + contract_addresses: vec![], keys: vec![], page_size: 1024, offset: 0, @@ -1117,7 +1161,7 @@ mod tests { let constraints = EventConstraints { from_block: Some(BlockNumber::new_or_panic(BLOCK_NUMBER as u64)), to_block: Some(BlockNumber::new_or_panic(BLOCK_NUMBER as u64)), - contract_address: None, + contract_addresses: vec![], keys: vec![], page_size: test_utils::NUM_EVENTS, offset: 0, @@ -1148,7 +1192,7 @@ mod tests { let constraints = EventConstraints { from_block: None, to_block: Some(BlockNumber::new_or_panic(UNTIL_BLOCK_NUMBER as u64)), - contract_address: None, + contract_addresses: vec![], keys: vec![], page_size: test_utils::NUM_EVENTS, offset: 0, @@ -1178,7 +1222,7 @@ mod tests { let constraints = EventConstraints { from_block: None, to_block: Some(BlockNumber::new_or_panic(1)), - contract_address: None, + contract_addresses: vec![], keys: vec![], page_size: test_utils::EVENTS_PER_BLOCK + 1, offset: 0, @@ -1203,7 +1247,7 @@ mod tests { let constraints = EventConstraints { from_block: Some(events.continuation_token.unwrap().block_number), to_block: Some(BlockNumber::new_or_panic(1)), - contract_address: None, + contract_addresses: vec![], keys: vec![], page_size: test_utils::EVENTS_PER_BLOCK + 1, offset: events.continuation_token.unwrap().offset, @@ -1234,7 +1278,7 @@ mod tests { let constraints = EventConstraints { from_block: Some(BlockNumber::new_or_panic(FROM_BLOCK_NUMBER as u64)), to_block: None, - contract_address: None, + contract_addresses: vec![], keys: vec![], page_size: test_utils::NUM_EVENTS, offset: 0, @@ -1265,7 +1309,7 @@ mod tests { let constraints = EventConstraints { from_block: None, to_block: None, - contract_address: Some(expected_event.from_address), + contract_addresses: vec![expected_event.from_address], keys: vec![], page_size: test_utils::NUM_EVENTS, offset: 0, @@ -1294,7 +1338,7 @@ mod tests { let constraints = EventConstraints { from_block: None, to_block: None, - contract_address: None, + contract_addresses: vec![], keys: vec![vec![expected_event.keys[0]], vec![expected_event.keys[1]]], page_size: test_utils::NUM_EVENTS, offset: 0, @@ -1339,7 +1383,7 @@ mod tests { let constraints = EventConstraints { from_block: None, to_block: None, - contract_address: None, + contract_addresses: vec![], keys: vec![], page_size: test_utils::NUM_EVENTS, offset: 0, @@ -1367,7 +1411,7 @@ mod tests { let constraints = EventConstraints { from_block: None, to_block: None, - contract_address: None, + contract_addresses: vec![], keys: vec![], page_size: 10, offset: 0, @@ -1390,7 +1434,7 @@ mod tests { let constraints = EventConstraints { from_block: None, to_block: None, - contract_address: None, + contract_addresses: vec![], keys: vec![], page_size: 10, offset: 10, @@ -1413,7 +1457,7 @@ mod tests { let constraints = EventConstraints { from_block: None, to_block: None, - contract_address: None, + contract_addresses: vec![], keys: vec![], page_size: 10, offset: 30, @@ -1441,7 +1485,7 @@ mod tests { let constraints = EventConstraints { from_block: None, to_block: None, - contract_address: None, + contract_addresses: vec![], keys: vec![], page_size: PAGE_SIZE, // _after_ the last one @@ -1476,7 +1520,7 @@ mod tests { let constraints = EventConstraints { from_block: None, to_block: None, - contract_address: None, + contract_addresses: vec![], keys: keys_for_expected_events.clone(), page_size: 2, offset: 0, @@ -1500,7 +1544,7 @@ mod tests { let constraints: EventConstraints = EventConstraints { from_block: None, to_block: None, - contract_address: None, + contract_addresses: vec![], keys: keys_for_expected_events.clone(), page_size: 2, offset: 2, @@ -1524,7 +1568,7 @@ mod tests { let constraints: EventConstraints = EventConstraints { from_block: Some(BlockNumber::new_or_panic(0)), to_block: None, - contract_address: None, + contract_addresses: vec![], keys: keys_for_expected_events.clone(), page_size: 2, offset: 2, @@ -1548,7 +1592,7 @@ mod tests { let constraints = EventConstraints { from_block: None, to_block: None, - contract_address: None, + contract_addresses: vec![], keys: keys_for_expected_events.clone(), page_size: 2, offset: 4, @@ -1569,7 +1613,7 @@ mod tests { let constraints = EventConstraints { from_block: Some(BlockNumber::new_or_panic(3)), to_block: None, - contract_address: None, + contract_addresses: vec![], keys: keys_for_expected_events, page_size: 2, offset: 1, @@ -1618,7 +1662,7 @@ mod tests { let constraints = EventConstraints { from_block: None, to_block: None, - contract_address: None, + contract_addresses: vec![], // We're using a key which is present in _all_ events as the 2nd key. keys: vec![vec![], vec![event_key!("0xdeadbeef")]], page_size: emitted_events.len(), @@ -1652,7 +1696,7 @@ mod tests { let constraints = EventConstraints { from_block: None, to_block: None, - contract_address: None, + contract_addresses: vec![], // We're using a key which is present in _all_ events as the 2nd key... keys: vec![vec![], vec![event_key!("0xdeadbeef")]], page_size: emitted_events.len(), @@ -1678,7 +1722,7 @@ mod tests { // Use the provided continuation token. from_block: Some(events.continuation_token.unwrap().block_number), to_block: None, - contract_address: None, + contract_addresses: vec![], // We're using a key which is present in _all_ events as the 2nd key... keys: vec![vec![], vec![event_key!("0xdeadbeef")]], page_size: emitted_events.len(), @@ -1754,7 +1798,7 @@ mod tests { let constraints = EventConstraints { from_block: Some(BlockNumber::new_or_panic(u64::try_from(from_block).unwrap())), to_block: Some(BlockNumber::new_or_panic(u64::try_from(to_block).unwrap())), - contract_address: None, + contract_addresses: vec![], keys: vec![], page_size: emitted_events.len(), offset: 0, diff --git a/crates/storage/src/connection/pruning.rs b/crates/storage/src/connection/pruning.rs index 5a441eba91..bb575c9e81 100644 --- a/crates/storage/src/connection/pruning.rs +++ b/crates/storage/src/connection/pruning.rs @@ -69,7 +69,7 @@ pub(crate) fn prune_block( // Only run event filter pruning if the block to prune is the last block in an // event filter range, because now we know that all blocks covered by this // filter will be gone. - let is_to_block = (block.get() + 1) % AGGREGATE_BLOOM_BLOCK_RANGE_LEN == 0; + let is_to_block = (block.get() + 1).is_multiple_of(AGGREGATE_BLOOM_BLOCK_RANGE_LEN); if is_to_block { event_filters_delete_stmt .execute(named_params!( diff --git a/crates/storage/src/connection/state_update.rs b/crates/storage/src/connection/state_update.rs index 8afaca0452..8389fcaf72 100644 --- a/crates/storage/src/connection/state_update.rs +++ b/crates/storage/src/connection/state_update.rs @@ -626,11 +626,23 @@ impl Transaction<'_> { contract_address: ContractAddress, key: StorageAddress, ) -> anyhow::Result> { + self.storage_value_with_block(block, contract_address, key) + .map(|opt_pair| opt_pair.map(|pair| pair.0)) + } + + pub fn storage_value_with_block( + &self, + block: BlockId, + contract_address: ContractAddress, + key: StorageAddress, + ) -> anyhow::Result> { + let handle_row = + |row: &rusqlite::Row<'_>| Ok((row.get_storage_value(0)?, row.get_block_number(1)?)); match block { BlockId::Latest => { let mut stmt = self.inner().prepare_cached( r" - SELECT storage_value + SELECT storage_value, block_number FROM storage_updates JOIN contract_addresses ON contract_addresses.id = storage_updates.contract_address_id JOIN storage_addresses ON storage_addresses.id = storage_updates.storage_address_id @@ -638,14 +650,12 @@ impl Transaction<'_> { ORDER BY block_number DESC LIMIT 1 ", )?; - stmt.query_row(params![&contract_address, &key], |row| { - row.get_storage_value(0) - }) + stmt.query_row(params![&contract_address, &key], handle_row) } BlockId::Number(number) => { let mut stmt = self.inner().prepare_cached( r" - SELECT storage_value + SELECT storage_value, block_number FROM storage_updates JOIN contract_addresses ON contract_addresses.id = storage_updates.contract_address_id JOIN storage_addresses ON storage_addresses.id = storage_updates.storage_address_id @@ -653,14 +663,12 @@ impl Transaction<'_> { ORDER BY block_number DESC LIMIT 1 ", )?; - stmt.query_row(params![&contract_address, &key, &number], |row| { - row.get_storage_value(0) - }) + stmt.query_row(params![&contract_address, &key, &number], handle_row) } BlockId::Hash(hash) => { let mut stmt = self.inner().prepare_cached( r" - SELECT storage_value + SELECT storage_value, block_number FROM storage_updates JOIN contract_addresses ON contract_addresses.id = storage_updates.contract_address_id JOIN storage_addresses ON storage_addresses.id = storage_updates.storage_address_id @@ -670,9 +678,7 @@ impl Transaction<'_> { ORDER BY block_number DESC LIMIT 1 ", )?; - stmt.query_row(params![&contract_address, &key, &hash], |row| { - row.get_storage_value(0) - }) + stmt.query_row(params![&contract_address, &key, &hash], handle_row) } } .optional() @@ -1045,10 +1051,35 @@ impl Transaction<'_> { rows.collect::, _>>() .context("Iterating over reverse Sierra declarations") } + + pub fn deployed_contracts( + &self, + sierra_hash: SierraHash, + block_number: BlockNumber, + ) -> anyhow::Result> { + let mut stmt = self + .inner() + .prepare_cached(r"SELECT contract_address FROM contract_updates WHERE class_hash = ? AND block_number = ?") + .context("Preparing deployed contracts query statement")?; + + let rows = stmt + .query_map(params![&sierra_hash, &block_number], |row| { + row.get_contract_address(0) + }) + .context("Querying deployed contracts")?; + + rows.collect::, _>>() + .context("Iterating over deployed contracts") + } } #[cfg(test)] mod tests { + use pathfinder_common::class_definition::{ + SerializedCairoDefinition, + SerializedCasmDefinition, + SerializedSierraDefinition, + }; use pathfinder_common::macro_prelude::*; use pathfinder_common::BlockHeader; @@ -1077,7 +1108,8 @@ mod tests { let state_update = StateUpdate::default().with_declared_cairo_class(target_class); - tx.insert_cairo_class_definition(target_class, &[]).unwrap(); + tx.insert_cairo_class_definition(target_class, &SerializedCairoDefinition::from_slice(&[])) + .unwrap(); tx.insert_block_header(&header_0).unwrap(); tx.insert_block_header(&header_1).unwrap(); tx.insert_state_update(header_0.number, &state_update) @@ -1131,10 +1163,16 @@ mod tests { let diff_3 = StateUpdate::default(); let diff_4 = StateUpdate::default(); - tx.insert_cairo_class_definition(original_class, definition) - .unwrap(); - tx.insert_cairo_class_definition(replaced_class, definition) - .unwrap(); + tx.insert_cairo_class_definition( + original_class, + &SerializedCairoDefinition::from_slice(definition), + ) + .unwrap(); + tx.insert_cairo_class_definition( + replaced_class, + &SerializedCairoDefinition::from_slice(definition), + ) + .unwrap(); tx.insert_block_header(&header_0).unwrap(); tx.insert_block_header(&header_1).unwrap(); @@ -1216,15 +1254,21 @@ mod tests { // Submit the class definitions since this occurs out of band of the header and // state diff. - tx.insert_cairo_class_definition(CAIRO_HASH, b"cairo definition") - .unwrap(); - tx.insert_cairo_class_definition(CAIRO_HASH2, b"cairo definition 2") - .unwrap(); + tx.insert_cairo_class_definition( + CAIRO_HASH, + &SerializedCairoDefinition::from_slice(b"cairo definition"), + ) + .unwrap(); + tx.insert_cairo_class_definition( + CAIRO_HASH2, + &SerializedCairoDefinition::from_slice(b"cairo definition 2"), + ) + .unwrap(); tx.insert_sierra_class_definition( &SIERRA_HASH, - b"sierra definition", - b"casm definition", + &SerializedSierraDefinition::from_slice(b"sierra definition"), + &SerializedCasmDefinition::from_slice(b"casm definition"), &CASM_HASH_V2, ) .unwrap(); @@ -1297,7 +1341,10 @@ mod tests { .casm_definition_at(BlockId::Latest, ClassHash(SIERRA_HASH.0)) .unwrap() .unwrap(); - assert_eq!(definition, b"casm definition"); + assert_eq!( + definition, + SerializedCasmDefinition::from_slice(b"casm definition") + ); // non-existent state update let non_existent = tx.state_update((header.number + 1).into()).unwrap(); diff --git a/crates/storage/src/connection/transaction.rs b/crates/storage/src/connection/transaction.rs index 1ac65e3a80..df35807c9d 100644 --- a/crates/storage/src/connection/transaction.rs +++ b/crates/storage/src/connection/transaction.rs @@ -131,12 +131,12 @@ impl Transaction<'_> { } let transactions_with_receipts: Vec<_> = transactions .iter() - .map(|(transaction, receipt)| dto::TransactionWithReceiptV3 { - transaction: dto::TransactionV2::from(transaction), + .map(|(transaction, receipt)| dto::TransactionWithReceiptV4 { + transaction: dto::TransactionV3::from(transaction), receipt: receipt.into(), }) .collect(); - let transactions_with_receipts = dto::TransactionsWithReceiptsForBlock::V3 { + let transactions_with_receipts = dto::TransactionsWithReceiptsForBlock::V4 { transactions_with_receipts, }; let transactions_with_receipts = @@ -423,7 +423,7 @@ impl Transaction<'_> { Ok(transactions .into_iter() .map( - |dto::TransactionWithReceiptV3 { + |dto::TransactionWithReceiptV4 { transaction, receipt, }| { (transaction.into(), receipt.into()) }, @@ -497,7 +497,7 @@ impl Transaction<'_> { transactions .into_iter() .map( - |dto::TransactionWithReceiptV3 { + |dto::TransactionWithReceiptV4 { transaction, receipt, }| { (transaction.into(), receipt.into()) }, @@ -579,7 +579,7 @@ impl Transaction<'_> { .context("Deserializing transactions")? .0; let transactions = transactions.transactions_with_receipts(); - let dto::TransactionWithReceiptV3 { + let dto::TransactionWithReceiptV4 { transaction, receipt, } = transactions.get(idx).context("Transaction not found")?; @@ -631,7 +631,7 @@ impl Transaction<'_> { } None => None, }; - let dto::TransactionWithReceiptV3 { + let dto::TransactionWithReceiptV4 { transaction, receipt, } = transactions.get(idx).context("Transaction not found")?; @@ -1497,10 +1497,13 @@ pub(crate) mod dto { V3 { transactions_with_receipts: Vec, }, + V4 { + transactions_with_receipts: Vec, + }, } impl TransactionsWithReceiptsForBlock { - pub fn transactions_with_receipts(self) -> Vec { + pub fn transactions_with_receipts(self) -> Vec { match self { TransactionsWithReceiptsForBlock::V0 { transactions_with_receipts: v0, @@ -1512,8 +1515,11 @@ pub(crate) mod dto { transactions_with_receipts: v2, } => v2.into_iter().map(Into::into).collect(), TransactionsWithReceiptsForBlock::V3 { - transactions_with_receipts, - } => transactions_with_receipts, + transactions_with_receipts: v3, + } => v3.into_iter().map(Into::into).collect(), + TransactionsWithReceiptsForBlock::V4 { + transactions_with_receipts: v4, + } => v4, } } } @@ -1542,7 +1548,13 @@ pub(crate) mod dto { pub receipt: ReceiptV3, } - impl From for TransactionWithReceiptV3 { + #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] + pub struct TransactionWithReceiptV4 { + pub transaction: TransactionV3, + pub receipt: ReceiptV3, + } + + impl From for TransactionWithReceiptV4 { fn from(v0: TransactionWithReceiptV0) -> Self { Self { transaction: v0.transaction.into(), @@ -1551,7 +1563,7 @@ pub(crate) mod dto { } } - impl From for TransactionWithReceiptV3 { + impl From for TransactionWithReceiptV4 { fn from(v1: TransactionWithReceiptV1) -> Self { Self { transaction: v1.transaction.into(), @@ -1560,7 +1572,7 @@ pub(crate) mod dto { } } - impl From for TransactionWithReceiptV3 { + impl From for TransactionWithReceiptV4 { fn from(v2: TransactionWithReceiptV2) -> Self { Self { transaction: v2.transaction.into(), @@ -1569,6 +1581,15 @@ pub(crate) mod dto { } } + impl From for TransactionWithReceiptV4 { + fn from(v3: TransactionWithReceiptV3) -> Self { + Self { + transaction: v3.transaction.into(), + receipt: v3.receipt, + } + } + } + #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Dummy)] #[serde(deny_unknown_fields)] pub struct TransactionV0 { @@ -1675,7 +1696,46 @@ pub(crate) mod dto { L1HandlerV0(L1HandlerTransactionV0), } - impl From for TransactionVariantV2 { + #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Dummy)] + #[serde(deny_unknown_fields)] + pub struct TransactionV3 { + hash: MinimalFelt, + variant: TransactionVariantV3, + } + + impl TransactionV3 { + /// Returns hash of the transaction + pub fn hash(&self) -> TransactionHash { + TransactionHash(self.hash.to_owned().into()) + } + } + + /// Represents deserialized L2 transaction data. + #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Dummy)] + #[serde(deny_unknown_fields)] + pub enum TransactionVariantV3 { + DeclareV0(DeclareTransactionV0V1), + DeclareV1(DeclareTransactionV0V1), + DeclareV2(DeclareTransactionV2), + DeclareV3(DeclareTransactionV3), + DeclareV4(DeclareTransactionV4), + // FIXME regenesis: remove Deploy txn type after regenesis + // We are keeping this type of transaction until regenesis + // only to support older pre-0.11.0 blocks + DeployV0(DeployTransactionV0), + DeployV1(DeployTransactionV1), + DeployAccountV1(DeployAccountTransactionV1), + DeployAccountV3(DeployAccountTransactionV3), + DeployAccountV4(DeployAccountTransactionV4), + InvokeV0(InvokeTransactionV0), + InvokeV1(InvokeTransactionV1), + InvokeV3(InvokeTransactionV3), + InvokeV4(InvokeTransactionV4), + InvokeV5(InvokeTransactionV5), + L1HandlerV0(L1HandlerTransactionV0), + } + + impl From for TransactionVariantV3 { fn from(value: TransactionVariantV0) -> Self { match value { TransactionVariantV0::DeclareV0(tx) => Self::DeclareV0(tx), @@ -1711,7 +1771,7 @@ pub(crate) mod dto { } } - impl From for TransactionVariantV2 { + impl From for TransactionVariantV3 { fn from(value: TransactionVariantV1) -> Self { match value { TransactionVariantV1::DeclareV0(tx) => Self::DeclareV0(tx), @@ -1730,7 +1790,29 @@ pub(crate) mod dto { } } - impl From for TransactionV2 { + impl From for TransactionVariantV3 { + fn from(value: TransactionVariantV2) -> Self { + match value { + TransactionVariantV2::DeclareV0(tx) => Self::DeclareV0(tx), + TransactionVariantV2::DeclareV1(tx) => Self::DeclareV1(tx), + TransactionVariantV2::DeclareV2(tx) => Self::DeclareV2(tx), + TransactionVariantV2::DeclareV3(tx) => Self::DeclareV3(tx), + TransactionVariantV2::DeclareV4(tx) => Self::DeclareV4(tx), + TransactionVariantV2::DeployV0(tx) => Self::DeployV0(tx), + TransactionVariantV2::DeployV1(tx) => Self::DeployV1(tx), + TransactionVariantV2::DeployAccountV1(tx) => Self::DeployAccountV1(tx), + TransactionVariantV2::DeployAccountV3(tx) => Self::DeployAccountV3(tx), + TransactionVariantV2::DeployAccountV4(tx) => Self::DeployAccountV4(tx), + TransactionVariantV2::InvokeV0(tx) => Self::InvokeV0(tx), + TransactionVariantV2::InvokeV1(tx) => Self::InvokeV1(tx), + TransactionVariantV2::InvokeV3(tx) => Self::InvokeV3(tx), + TransactionVariantV2::InvokeV4(tx) => Self::InvokeV4(tx), + TransactionVariantV2::L1HandlerV0(tx) => Self::L1HandlerV0(tx), + } + } + } + + impl From for TransactionV3 { fn from(value: TransactionV0) -> Self { Self { hash: value.hash, @@ -1739,7 +1821,7 @@ pub(crate) mod dto { } } - impl From for TransactionV2 { + impl From for TransactionV3 { fn from(value: TransactionV1) -> Self { Self { hash: value.hash, @@ -1748,7 +1830,16 @@ pub(crate) mod dto { } } - impl From<&pathfinder_common::transaction::Transaction> for TransactionV2 { + impl From for TransactionV3 { + fn from(value: TransactionV2) -> Self { + Self { + hash: value.hash, + variant: value.variant.into(), + } + } + } + + impl From<&pathfinder_common::transaction::Transaction> for TransactionV3 { fn from(value: &pathfinder_common::transaction::Transaction) -> Self { use pathfinder_common::transaction::TransactionVariant::*; use pathfinder_common::transaction::*; @@ -1763,7 +1854,7 @@ pub(crate) mod dto { signature, }) => Self { hash: transaction_hash.as_inner().to_owned().into(), - variant: TransactionVariantV2::DeclareV0(self::DeclareTransactionV0V1 { + variant: TransactionVariantV3::DeclareV0(self::DeclareTransactionV0V1 { class_hash: class_hash.as_inner().to_owned().into(), max_fee: max_fee.as_inner().to_owned().into(), nonce: nonce.as_inner().to_owned().into(), @@ -1782,7 +1873,7 @@ pub(crate) mod dto { signature, }) => Self { hash: transaction_hash.as_inner().to_owned().into(), - variant: TransactionVariantV2::DeclareV1(self::DeclareTransactionV0V1 { + variant: TransactionVariantV3::DeclareV1(self::DeclareTransactionV0V1 { class_hash: class_hash.as_inner().to_owned().into(), max_fee: max_fee.as_inner().to_owned().into(), nonce: nonce.as_inner().to_owned().into(), @@ -1802,7 +1893,7 @@ pub(crate) mod dto { compiled_class_hash, }) => Self { hash: transaction_hash.as_inner().to_owned().into(), - variant: TransactionVariantV2::DeclareV2(self::DeclareTransactionV2 { + variant: TransactionVariantV3::DeclareV2(self::DeclareTransactionV2 { class_hash: class_hash.as_inner().to_owned().into(), max_fee: max_fee.as_inner().to_owned().into(), nonce: nonce.as_inner().to_owned().into(), @@ -1828,7 +1919,7 @@ pub(crate) mod dto { compiled_class_hash, }) => Self { hash: transaction_hash.as_inner().to_owned().into(), - variant: TransactionVariantV2::DeclareV4(self::DeclareTransactionV4 { + variant: TransactionVariantV3::DeclareV4(self::DeclareTransactionV4 { class_hash: class_hash.as_inner().to_owned().into(), nonce: nonce.as_inner().to_owned().into(), nonce_data_availability_mode: nonce_data_availability_mode.into(), @@ -1858,7 +1949,7 @@ pub(crate) mod dto { constructor_calldata, }) => Self { hash: transaction_hash.as_inner().to_owned().into(), - variant: TransactionVariantV2::DeployV0(self::DeployTransactionV0 { + variant: TransactionVariantV3::DeployV0(self::DeployTransactionV0 { contract_address: contract_address.as_inner().to_owned().into(), contract_address_salt: contract_address_salt.as_inner().to_owned().into(), class_hash: class_hash.as_inner().to_owned().into(), @@ -1875,7 +1966,7 @@ pub(crate) mod dto { constructor_calldata, }) => Self { hash: transaction_hash.as_inner().to_owned().into(), - variant: TransactionVariantV2::DeployV1(self::DeployTransactionV1 { + variant: TransactionVariantV3::DeployV1(self::DeployTransactionV1 { contract_address: contract_address.as_inner().to_owned().into(), contract_address_salt: contract_address_salt.as_inner().to_owned().into(), class_hash: class_hash.as_inner().to_owned().into(), @@ -1895,7 +1986,7 @@ pub(crate) mod dto { class_hash, }) => Self { hash: transaction_hash.as_inner().to_owned().into(), - variant: TransactionVariantV2::DeployAccountV1( + variant: TransactionVariantV3::DeployAccountV1( self::DeployAccountTransactionV1 { contract_address: contract_address.as_inner().to_owned().into(), max_fee: max_fee.as_inner().to_owned().into(), @@ -1930,7 +2021,7 @@ pub(crate) mod dto { class_hash, }) => Self { hash: transaction_hash.as_inner().to_owned().into(), - variant: TransactionVariantV2::DeployAccountV4( + variant: TransactionVariantV3::DeployAccountV4( self::DeployAccountTransactionV4 { nonce: nonce.as_inner().to_owned().into(), nonce_data_availability_mode: nonce_data_availability_mode.into(), @@ -1967,7 +2058,7 @@ pub(crate) mod dto { signature, }) => Self { hash: transaction_hash.as_inner().to_owned().into(), - variant: TransactionVariantV2::InvokeV0(self::InvokeTransactionV0 { + variant: TransactionVariantV3::InvokeV0(self::InvokeTransactionV0 { calldata: calldata .into_iter() .map(|x| x.as_inner().to_owned().into()) @@ -1990,7 +2081,7 @@ pub(crate) mod dto { nonce, }) => Self { hash: transaction_hash.as_inner().to_owned().into(), - variant: TransactionVariantV2::InvokeV1(self::InvokeTransactionV1 { + variant: TransactionVariantV3::InvokeV1(self::InvokeTransactionV1 { calldata: calldata .into_iter() .map(|x| x.as_inner().to_owned().into()) @@ -2015,9 +2106,10 @@ pub(crate) mod dto { account_deployment_data, calldata, sender_address, + proof_facts, }) => Self { hash: transaction_hash.as_inner().to_owned().into(), - variant: TransactionVariantV2::InvokeV4(self::InvokeTransactionV4 { + variant: TransactionVariantV3::InvokeV5(self::InvokeTransactionV5 { nonce: nonce.as_inner().to_owned().into(), nonce_data_availability_mode: nonce_data_availability_mode.into(), fee_data_availability_mode: fee_data_availability_mode.into(), @@ -2040,6 +2132,10 @@ pub(crate) mod dto { .into_iter() .map(|x| x.as_inner().to_owned().into()) .collect(), + proof_facts: proof_facts + .into_iter() + .map(|x| x.as_inner().to_owned().into()) + .collect(), }), }, L1Handler(L1HandlerTransaction { @@ -2049,7 +2145,7 @@ pub(crate) mod dto { calldata, }) => Self { hash: transaction_hash.as_inner().to_owned().into(), - variant: TransactionVariantV2::L1HandlerV0(self::L1HandlerTransactionV0 { + variant: TransactionVariantV3::L1HandlerV0(self::L1HandlerTransactionV0 { contract_address: contract_address.as_inner().to_owned().into(), entry_point_selector: entry_point_selector.as_inner().to_owned().into(), nonce: nonce.as_inner().to_owned().into(), @@ -2063,16 +2159,16 @@ pub(crate) mod dto { } } - impl From for pathfinder_common::transaction::Transaction { - fn from(value: TransactionV2) -> Self { + impl From for pathfinder_common::transaction::Transaction { + fn from(value: TransactionV3) -> Self { use pathfinder_common::transaction::TransactionVariant; let hash = value.hash(); let variant = match value { - TransactionV2 { + TransactionV3 { hash: _, variant: - TransactionVariantV2::DeclareV0(DeclareTransactionV0V1 { + TransactionVariantV3::DeclareV0(DeclareTransactionV0V1 { class_hash, max_fee, nonce, @@ -2091,10 +2187,10 @@ pub(crate) mod dto { .collect(), }, ), - TransactionV2 { + TransactionV3 { hash: _, variant: - TransactionVariantV2::DeclareV1(DeclareTransactionV0V1 { + TransactionVariantV3::DeclareV1(DeclareTransactionV0V1 { class_hash, max_fee, nonce, @@ -2113,10 +2209,10 @@ pub(crate) mod dto { .collect(), }, ), - TransactionV2 { + TransactionV3 { hash: _, variant: - TransactionVariantV2::DeclareV2(DeclareTransactionV2 { + TransactionVariantV3::DeclareV2(DeclareTransactionV2 { class_hash, max_fee, nonce, @@ -2137,10 +2233,10 @@ pub(crate) mod dto { compiled_class_hash: CasmHash::new_or_panic(compiled_class_hash.into()), }, ), - TransactionV2 { + TransactionV3 { hash: _, variant: - TransactionVariantV2::DeclareV3(DeclareTransactionV3 { + TransactionVariantV3::DeclareV3(DeclareTransactionV3 { class_hash, nonce, nonce_data_availability_mode, @@ -2177,10 +2273,10 @@ pub(crate) mod dto { .collect(), }, ), - TransactionV2 { + TransactionV3 { hash: _, variant: - TransactionVariantV2::DeclareV4(DeclareTransactionV4 { + TransactionVariantV3::DeclareV4(DeclareTransactionV4 { class_hash, nonce, nonce_data_availability_mode, @@ -2217,10 +2313,10 @@ pub(crate) mod dto { .collect(), }, ), - TransactionV2 { + TransactionV3 { hash: _, variant: - TransactionVariantV2::DeployV0(DeployTransactionV0 { + TransactionVariantV3::DeployV0(DeployTransactionV0 { contract_address, contract_address_salt, class_hash, @@ -2237,10 +2333,10 @@ pub(crate) mod dto { .collect(), }, ), - TransactionV2 { + TransactionV3 { hash: _, variant: - TransactionVariantV2::DeployV1(DeployTransactionV1 { + TransactionVariantV3::DeployV1(DeployTransactionV1 { contract_address, contract_address_salt, class_hash, @@ -2257,10 +2353,10 @@ pub(crate) mod dto { .collect(), }, ), - TransactionV2 { + TransactionV3 { hash: _, variant: - TransactionVariantV2::DeployAccountV1(DeployAccountTransactionV1 { + TransactionVariantV3::DeployAccountV1(DeployAccountTransactionV1 { contract_address, max_fee, signature, @@ -2286,10 +2382,10 @@ pub(crate) mod dto { class_hash: ClassHash(class_hash.into()), }, ), - TransactionV2 { + TransactionV3 { hash: _, variant: - TransactionVariantV2::DeployAccountV3(DeployAccountTransactionV3 { + TransactionVariantV3::DeployAccountV3(DeployAccountTransactionV3 { nonce, nonce_data_availability_mode, fee_data_availability_mode, @@ -2326,10 +2422,10 @@ pub(crate) mod dto { class_hash: ClassHash(class_hash.into()), }, ), - TransactionV2 { + TransactionV3 { hash: _, variant: - TransactionVariantV2::DeployAccountV4(DeployAccountTransactionV4 { + TransactionVariantV3::DeployAccountV4(DeployAccountTransactionV4 { nonce, nonce_data_availability_mode, fee_data_availability_mode, @@ -2366,10 +2462,10 @@ pub(crate) mod dto { class_hash: ClassHash(class_hash.into()), }, ), - TransactionV2 { + TransactionV3 { hash: _, variant: - TransactionVariantV2::InvokeV0(InvokeTransactionV0 { + TransactionVariantV3::InvokeV0(InvokeTransactionV0 { calldata, sender_address, entry_point_selector, @@ -2390,10 +2486,10 @@ pub(crate) mod dto { .collect(), }, ), - TransactionV2 { + TransactionV3 { hash: _, variant: - TransactionVariantV2::InvokeV1(InvokeTransactionV1 { + TransactionVariantV3::InvokeV1(InvokeTransactionV1 { calldata, sender_address, max_fee, @@ -2412,10 +2508,10 @@ pub(crate) mod dto { nonce: TransactionNonce(nonce.into()), }, ), - TransactionV2 { + TransactionV3 { hash: _, variant: - TransactionVariantV2::InvokeV3(InvokeTransactionV3 { + TransactionVariantV3::InvokeV3(InvokeTransactionV3 { nonce, nonce_data_availability_mode, fee_data_availability_mode, @@ -2448,12 +2544,13 @@ pub(crate) mod dto { .collect(), calldata: calldata.into_iter().map(|x| CallParam(x.into())).collect(), sender_address: ContractAddress::new_or_panic(sender_address.into()), + proof_facts: vec![], }, ), - TransactionV2 { + TransactionV3 { hash: _, variant: - TransactionVariantV2::InvokeV4(InvokeTransactionV4 { + TransactionVariantV3::InvokeV4(InvokeTransactionV4 { nonce, nonce_data_availability_mode, fee_data_availability_mode, @@ -2486,12 +2583,56 @@ pub(crate) mod dto { .collect(), calldata: calldata.into_iter().map(|x| CallParam(x.into())).collect(), sender_address: ContractAddress::new_or_panic(sender_address.into()), + proof_facts: vec![], }, ), - TransactionV2 { + TransactionV3 { hash: _, variant: - TransactionVariantV2::L1HandlerV0(L1HandlerTransactionV0 { + TransactionVariantV3::InvokeV5(InvokeTransactionV5 { + nonce, + nonce_data_availability_mode, + fee_data_availability_mode, + resource_bounds, + tip, + paymaster_data, + sender_address, + signature, + calldata, + account_deployment_data, + proof_facts, + }), + } => TransactionVariant::InvokeV3( + pathfinder_common::transaction::InvokeTransactionV3 { + signature: signature + .into_iter() + .map(|x| TransactionSignatureElem(x.into())) + .collect(), + nonce: TransactionNonce(nonce.into()), + nonce_data_availability_mode: nonce_data_availability_mode.into(), + fee_data_availability_mode: fee_data_availability_mode.into(), + resource_bounds: resource_bounds.into(), + tip, + paymaster_data: paymaster_data + .into_iter() + .map(|x| PaymasterDataElem(x.into())) + .collect(), + account_deployment_data: account_deployment_data + .into_iter() + .map(|x| AccountDeploymentDataElem(x.into())) + .collect(), + calldata: calldata.into_iter().map(|x| CallParam(x.into())).collect(), + sender_address: ContractAddress::new_or_panic(sender_address.into()), + proof_facts: proof_facts + .into_iter() + .map(|x| ProofFactElem(x.into())) + .collect(), + }, + ), + TransactionV3 { + hash: _, + variant: + TransactionVariantV3::L1HandlerV0(L1HandlerTransactionV0 { contract_address, entry_point_selector, nonce, @@ -2962,6 +3103,42 @@ pub(crate) mod dto { } } + #[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] + #[serde(deny_unknown_fields)] + pub struct InvokeTransactionV5 { + pub signature: Vec, + pub nonce: MinimalFelt, + pub nonce_data_availability_mode: DataAvailabilityMode, + pub fee_data_availability_mode: DataAvailabilityMode, + pub resource_bounds: ResourceBoundsV1, + pub tip: Tip, + pub paymaster_data: Vec, + pub account_deployment_data: Vec, + pub calldata: Vec, + pub sender_address: MinimalFelt, + pub proof_facts: Vec, + } + + impl Dummy for InvokeTransactionV5 { + fn dummy_with_rng(_: &T, rng: &mut R) -> Self { + Self { + nonce: Faker.fake_with_rng(rng), + nonce_data_availability_mode: Faker.fake_with_rng(rng), + fee_data_availability_mode: Faker.fake_with_rng(rng), + resource_bounds: Faker.fake_with_rng(rng), + tip: Faker.fake_with_rng(rng), + paymaster_data: vec![Faker.fake_with_rng(rng)], // TODO p2p allows 1 elem only + + sender_address: Faker.fake_with_rng(rng), + signature: Faker.fake_with_rng(rng), + calldata: Faker.fake_with_rng(rng), + account_deployment_data: vec![Faker.fake_with_rng(rng)], /* TODO p2p allows 1 + * elem only */ + proof_facts: vec![Faker.fake_with_rng(rng)], + } + } + } + /// Represents deserialized L2 "L1 handler" transaction data. #[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] #[serde(deny_unknown_fields)] @@ -2988,7 +3165,7 @@ pub(crate) mod dto { mod tests { use pathfinder_common::macro_prelude::*; use pathfinder_common::transaction::*; - use pathfinder_common::{BlockHeader, TransactionIndex}; + use pathfinder_common::{BlockHeader, ResourceAmount, ResourcePricePerUnit, TransactionIndex}; use super::*; @@ -3003,9 +3180,9 @@ mod tests { ..Default::default() }), }; - let dto = dto::TransactionV2::from(&transaction); + let dto = dto::TransactionV3::from(&transaction); let serialized = bincode::serde::encode_to_vec(&dto, bincode::config::standard()).unwrap(); - let deserialized: (dto::TransactionV2, _) = + let deserialized: (dto::TransactionV3, _) = bincode::serde::decode_from_slice(&serialized, bincode::config::standard()).unwrap(); assert_eq!(deserialized.0, dto); } @@ -3126,6 +3303,46 @@ mod tests { nonce: transaction_nonce_bytes!(b"invoke v1 tx nonce"), }), }, + StarknetTransaction { + hash: transaction_hash_bytes!(b"invoke v3 tx hash"), + variant: TransactionVariant::InvokeV3(InvokeTransactionV3 { + calldata: vec![ + call_param_bytes!(b"invoke v3 call data 0"), + call_param_bytes!(b"invoke v3 call data 1"), + ], + sender_address: contract_address_bytes!(b"invoke v3 contract address"), + signature: vec![ + transaction_signature_elem_bytes!(b"invoke v3 tx sig 0"), + transaction_signature_elem_bytes!(b"invoke v3 tx sig 1"), + ], + nonce: transaction_nonce_bytes!(b"invoke v3 tx nonce"), + nonce_data_availability_mode: DataAvailabilityMode::L1, + fee_data_availability_mode: DataAvailabilityMode::L1, + resource_bounds: ResourceBounds { + l1_gas: ResourceBound { + max_amount: ResourceAmount(1), + max_price_per_unit: ResourcePricePerUnit(2), + }, + l2_gas: ResourceBound { + max_amount: ResourceAmount(0xff), + max_price_per_unit: ResourcePricePerUnit(0xeeeee), + }, + l1_data_gas: Some(ResourceBound { + max_amount: ResourceAmount(0xee), + max_price_per_unit: ResourcePricePerUnit(0xfffff), + }), + }, + tip: pathfinder_common::Tip(0xdeadbeefu64), + paymaster_data: vec![paymaster_data_elem_bytes!(b"invoke v3 paymaster data 0")], + account_deployment_data: vec![account_deployment_data_elem_bytes!( + b"invoke v3 account deployment 0" + )], + proof_facts: vec![ + proof_fact_elem_bytes!(b"invoke v3 proof fact 0"), + proof_fact_elem_bytes!(b"invoke v3 proof fact 1"), + ], + }), + }, StarknetTransaction { hash: transaction_hash_bytes!(b"L1 handler tx hash"), variant: TransactionVariant::L1Handler(L1HandlerTransaction { diff --git a/crates/storage/src/connection/trie.rs b/crates/storage/src/connection/trie.rs index 826bce90c7..141b7cb4e6 100644 --- a/crates/storage/src/connection/trie.rs +++ b/crates/storage/src/connection/trie.rs @@ -477,7 +477,8 @@ impl Transaction<'_> { for idx in indices.iter() { delete_stmt.execute(params![idx]).context("Deleting node")?; } - metrics::counter!(METRIC_TRIE_NODES_REMOVED, indices.len() as u64, "table" => table); + metrics::counter!(METRIC_TRIE_NODES_REMOVED, "table" => table) + .increment(indices.len() as u64); } // Delete the removal markers. @@ -575,7 +576,7 @@ impl Transaction<'_> { indices.insert(idx, storage_idx.into()); - metrics::increment_counter!(METRIC_TRIE_NODES_ADDED, "table" => table); + metrics::counter!(METRIC_TRIE_NODES_ADDED, "table" => table).increment(1); } Ok(RootIndexUpdate::Updated( diff --git a/crates/storage/src/error.rs b/crates/storage/src/error.rs new file mode 100644 index 0000000000..48d40dd1b5 --- /dev/null +++ b/crates/storage/src/error.rs @@ -0,0 +1,41 @@ +//! Error types for storage operations. + +use thiserror::Error; + +/// Storage/database errors that occur during storage operations. +/// +/// This error type represents all storage-related failures (connection errors, +/// query failures, transaction errors, etc.). All storage errors are considered +/// fatal as they likely indicate problems with our infra. +/// +/// This is a simple wrapper around `anyhow::Error` that serves as a boundary +/// marker, indicating that the error originated from storage operations. The +/// underlying error chain is preserved for debugging. +/// +/// Note: Because all storage errors are considered fatal, exposing different +/// variants (e.g. `SqliteError`, `PoolError`, etc.) didn't seem relevant. +#[derive(Debug, Error)] +#[error(transparent)] +pub struct StorageError(#[from] anyhow::Error); + +impl From for StorageError { + fn from(error: rusqlite::Error) -> Self { + Self(anyhow::Error::from(error)) + } +} + +impl From for StorageError { + fn from(error: r2d2::Error) -> Self { + Self(anyhow::Error::from(error)) + } +} + +impl StorageError { + /// Adds context to the error and returns a new `StorageError`. + pub fn with_context(self, context: C) -> Self + where + C: std::fmt::Display + Send + Sync + 'static, + { + Self(self.0.context(context)) + } +} diff --git a/crates/storage/src/fake.rs b/crates/storage/src/fake.rs index 83b144ca69..83e5eb10b4 100644 --- a/crates/storage/src/fake.rs +++ b/crates/storage/src/fake.rs @@ -4,6 +4,12 @@ use std::ops::RangeInclusive; use fake::{Fake, Faker}; use pathfinder_class_hash::compute_class_hash; +use pathfinder_common::class_definition::{ + SerializedCairoDefinition, + SerializedCasmDefinition, + SerializedOpaqueClassDefinition, + SerializedSierraDefinition, +}; use pathfinder_common::event::Event; use pathfinder_common::prelude::*; use pathfinder_common::receipt::Receipt; @@ -35,9 +41,14 @@ pub struct Block { /// [`fill`] by setting it to `None`. pub state_update: Option, // Cairo 0 definitions - pub cairo_defs: Vec<(ClassHash, Vec)>, + pub cairo_defs: Vec<(ClassHash, SerializedCairoDefinition)>, // Sierra + Casm definitions + Casm Blake2 hash - pub sierra_defs: Vec<(SierraHash, Vec, Vec, CasmHash)>, + pub sierra_defs: Vec<( + SierraHash, + SerializedSierraDefinition, + SerializedCasmDefinition, + CasmHash, + )>, } pub type BlockHashFn = Box BlockHash>; @@ -209,11 +220,8 @@ pub fn fill(storage: &Storage, blocks: &[Block], update_tries: Option, - crate::connection::transaction::dto::TransactionV2, + crate::connection::transaction::dto::TransactionV3, >(rng) .into_iter() .enumerate() @@ -335,7 +343,12 @@ pub mod generate { &Faker.fake_with_rng::, _>(rng), ) .unwrap(); - (compute_class_hash(&def).unwrap().hash(), def) + let def = SerializedOpaqueClassDefinition::from_bytes(def); + let (hash, def) = compute_class_hash(def).unwrap(); + let SerializedClassDefinition::Cairo(def) = def else { + panic!("Expected a Cairo class definition"); + }; + (hash.hash(), def) }) .collect::>(); let sierra_defs = (0..num_sierra_classes) @@ -344,11 +357,20 @@ pub mod generate { &Faker.fake_with_rng::, _>(rng), ) .unwrap(); + let def = SerializedOpaqueClassDefinition::from_bytes(def); + let (hash, sierra_def) = compute_class_hash(def).unwrap(); + let SerializedClassDefinition::Sierra(sierra_def) = sierra_def else { + panic!("Expected a Sierra class definition"); + }; + let hash = SierraHash(hash.hash().0); + let casm_def = SerializedCasmDefinition::from_bytes( + Faker.fake_with_rng::(rng).into_bytes(), + ); ( - SierraHash(compute_class_hash(&def).unwrap().hash().0), + hash, ( - def, - Faker.fake_with_rng::(rng).into_bytes(), + sierra_def, + casm_def, Faker.fake_with_rng::(rng), ), ) @@ -520,7 +542,11 @@ pub mod generate { dummy_storage.clone(), ) .unwrap(); - let state_commitment = StateCommitment::calculate(storage_commitment, class_commitment); + let state_commitment = StateCommitment::calculate( + storage_commitment, + class_commitment, + header.header.starknet_version, + ); header.header.state_commitment = state_commitment; state_update.state_commitment = state_commitment; } diff --git a/crates/storage/src/lib.rs b/crates/storage/src/lib.rs index 687b297afa..aa799473a4 100644 --- a/crates/storage/src/lib.rs +++ b/crates/storage/src/lib.rs @@ -10,6 +10,7 @@ use bloom::AggregateBloomCache; pub use bloom::AGGREGATE_BLOOM_BLOCK_RANGE_LEN; use connection::pruning::BlockchainHistoryMode; mod connection; +mod error; pub mod fake; mod params; mod schema; @@ -22,6 +23,7 @@ use std::sync::{Arc, Mutex}; use anyhow::Context; pub use connection::*; +pub use error::StorageError; use event::RunningEventFilter; pub use event::EVENT_KEY_FILTER_LIMIT; use pathfinder_common::BlockNumber; @@ -32,12 +34,12 @@ pub use transaction::dto::{ DataAvailabilityMode, DeclareTransactionV4, DeployAccountTransactionV4, - InvokeTransactionV4, + InvokeTransactionV5, L1HandlerTransactionV0, MinimalFelt, ResourceBound, ResourceBoundsV1, - TransactionV2, + TransactionV3, }; /// Sqlite key used for the PRAGMA user version. @@ -82,6 +84,8 @@ pub struct StorageManager { blockchain_history_mode: BlockchainHistoryMode, } +pub struct ReadOnlyStorageManager(StorageManager); + impl std::fmt::Debug for StorageManager { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_struct("StorageManager") @@ -128,6 +132,12 @@ impl StorageManager { } } +impl ReadOnlyStorageManager { + pub fn create_read_only_pool(&self, capacity: NonZeroU32) -> anyhow::Result { + self.0.create_read_only_pool(capacity) + } +} + pub struct StorageBuilder { database_path: PathBuf, journal_mode: JournalMode, @@ -268,10 +278,12 @@ impl StorageBuilder { /// connections and shared cache causes locking errors if the connection /// pool is larger than 1 and timeouts otherwise. pub fn in_tempdir() -> anyhow::Result { - let db_dir = tempfile::TempDir::new()?; - let mut db_path = PathBuf::from(db_dir.path()); - db_path.push("db.sqlite"); - crate::StorageBuilder::file(db_path) + // Note: it is ok to drop the tempdir object and hence delete the tempdir right + // after opening the storage, because the connection pool keeps the inode alive + // for the lifetime of the storage anyway. + let tempdir = tempfile::tempdir()?; + tracing::trace!("Creating storage in: {}", tempdir.path().display()); + crate::StorageBuilder::file(tempdir.path().join("db.sqlite")) .migrate() .unwrap() .create_pool(NonZeroU32::new(32).unwrap()) @@ -283,16 +295,32 @@ impl StorageBuilder { trie_prune_mode: TriePruneMode, pool_size: NonZeroU32, ) -> anyhow::Result { - let db_dir = tempfile::TempDir::new()?; - let mut db_path = PathBuf::from(db_dir.path()); - db_path.push("db.sqlite"); - crate::StorageBuilder::file(db_path) + // Note: it is ok to drop the tempdir object and hence delete the tempdir right + // after opening the storage, because the connection pool keeps the inode alive + // for the lifetime of the storage anyway. + let tempdir = tempfile::tempdir()?; + tracing::trace!("Creating storage in: {}", tempdir.path().display()); + crate::StorageBuilder::file(tempdir.path().join("db.sqlite")) .trie_prune_mode(Some(trie_prune_mode)) .migrate() .unwrap() .create_pool(pool_size) } + /// Convenience function for tests to create a persisted in-tempdir database + /// with a specific blockchain pruning mode. + pub fn in_persisted_tempdir_with_blockchain_pruning_and_pool_size( + tempdir: &tempfile::TempDir, + blockchain_history_mode: BlockchainHistoryMode, + pool_size: NonZeroU32, + ) -> anyhow::Result { + tracing::trace!("Creating storage in: {}", tempdir.path().display()); + crate::StorageBuilder::file(tempdir.path().join("db.sqlite")) + .blockchain_history_mode(Some(blockchain_history_mode)) + .migrate()? + .create_pool(pool_size) + } + /// Performs the database schema migration and returns a [storage /// manager](StorageManager). /// @@ -365,6 +393,73 @@ impl StorageBuilder { }) } + /// Does not perform any migrations, just loads the database in read-only + /// mode. This is useful for tools which only need to read from the + /// database, especially when a Pathfinder instance is writing to the + /// database at the same time. + pub fn readonly(self) -> anyhow::Result { + let Self { + database_path, + journal_mode, + event_filter_cache_size, + .. + } = self; + + let mut open_flags = OpenFlags::default(); + open_flags.remove(OpenFlags::SQLITE_OPEN_CREATE); + let mut connection = rusqlite::Connection::open_with_flags(&database_path, open_flags) + .context("Opening DB to load running event filter")?; + let init_num_blocks_kept = connection + .query_row( + "SELECT value FROM storage_options WHERE option = 'prune_blockchain'", + [], + |row| row.get(0), + ) + .optional()?; + + let blockchain_history_mode = { + if let Some(num_blocks_kept) = init_num_blocks_kept { + BlockchainHistoryMode::Prune { num_blocks_kept } + } else { + BlockchainHistoryMode::Archive + } + }; + + let prune_flag_is_set = connection + .query_row( + "SELECT 1 FROM storage_options WHERE option = 'prune_tries'", + [], + |_| Ok(()), + ) + .optional() + .map(|x| x.is_some())?; + + let trie_prune_mode = if prune_flag_is_set { + TriePruneMode::Prune { + num_blocks_kept: 20, + } + } else { + TriePruneMode::Archive + }; + + let running_event_filter = event::RunningEventFilter::load(&connection.transaction()?) + .context("Loading running event filter")?; + + connection + .close() + .map_err(|(_connection, error)| error) + .context("Closing DB after loading running event filter")?; + + Ok(ReadOnlyStorageManager(StorageManager { + database_path, + journal_mode, + event_filter_cache: Arc::new(AggregateBloomCache::with_size(event_filter_cache_size)), + running_event_filter: Arc::new(Mutex::new(running_event_filter)), + trie_prune_mode, + blockchain_history_mode, + })) + } + /// - If there is no explicitly requested configuration, assumes the user /// wants to archive. If this doesn't match the database setting, errors. /// - If there's an explicitly requested setting: uses it if matches DB @@ -549,8 +644,8 @@ fn validate_mode_and_update_db( impl Storage { /// Returns a new Sqlite [Connection] to the database. - pub fn connection(&self) -> anyhow::Result { - let conn = self.0.pool.get()?; + pub fn connection(&self) -> Result { + let conn = self.0.pool.get().map_err(StorageError::from)?; Ok(Connection::new( conn, self.0.event_filter_cache.clone(), @@ -563,6 +658,15 @@ impl Storage { pub fn path(&self) -> &Path { &self.0.database_path } + + pub fn is_migrated(&self) -> Result { + let mut connection = self.connection()?; + let tx = connection.transaction()?; + + let user_version = tx.user_version()?; + + Ok(user_version == schema::LATEST_SCHEMA_REVISION as i64) + } } fn setup_journal_mode( @@ -622,10 +726,6 @@ fn migrate_database(connection: &mut rusqlite::Connection) -> anyhow::Result<()> let mut current_revision = schema_version(connection)?; let migrations = schema::migrations(); - // The target version is the number of null migrations which have been replaced - // by the base schema + the new migrations built on top of that. - let latest_revision = schema::BASE_SCHEMA_REVISION + migrations.len(); - // Apply the base schema if the database is new. if current_revision == 0 { let tx = connection @@ -640,7 +740,7 @@ fn migrate_database(connection: &mut rusqlite::Connection) -> anyhow::Result<()> } // Skip migration if we already at latest. - if current_revision == latest_revision { + if current_revision == schema::LATEST_SCHEMA_REVISION { tracing::info!(%current_revision, "No database migrations required"); return Ok(()); } @@ -655,20 +755,20 @@ fn migrate_database(connection: &mut rusqlite::Connection) -> anyhow::Result<()> anyhow::bail!("Database version {current_revision} too old to migrate"); } - if current_revision > latest_revision { + if current_revision > schema::LATEST_SCHEMA_REVISION { tracing::error!( version=%current_revision, - limit=%latest_revision, + limit=%schema::LATEST_SCHEMA_REVISION, "Database version is from a newer than this application expected" ); anyhow::bail!( - "Database version {current_revision} is newer than this application expected \ - {latest_revision}", + "Database version {current_revision} is newer than this application expected {}", + schema::LATEST_SCHEMA_REVISION ); } - let amount = latest_revision - current_revision; - tracing::info!(%current_revision, %latest_revision, migrations=%amount, "Performing database migrations"); + let amount = schema::LATEST_SCHEMA_REVISION - current_revision; + tracing::info!(%current_revision, latest_revision=%schema::LATEST_SCHEMA_REVISION, migrations=%amount, "Performing database migrations"); // Sequentially apply each missing migration. migrations @@ -1020,7 +1120,7 @@ mod tests { let constraints = EventConstraints { from_block: None, to_block: Some(to_block), - contract_address: None, + contract_addresses: vec![], keys: vec![], page_size: 1024, offset: 0, diff --git a/crates/storage/src/params.rs b/crates/storage/src/params.rs index 6512906cea..7246f60141 100644 --- a/crates/storage/src/params.rs +++ b/crates/storage/src/params.rs @@ -452,15 +452,13 @@ macro_rules! row_felt_wrapper { }; } -use { - row_felt_wrapper, - to_sql_builtin, - to_sql_compressed_felt, - to_sql_felt, - to_sql_int, - try_into_sql, - try_into_sql_int, -}; +use row_felt_wrapper; +use to_sql_builtin; +use to_sql_compressed_felt; +use to_sql_felt; +use to_sql_int; +use try_into_sql; +use try_into_sql_int; /// Used in combination with our own [ToSql] trait to provide functionality /// equivalent to [rusqlite::params!] for our own foreign types. @@ -484,7 +482,8 @@ macro_rules! named_params { }; } -pub(crate) use {named_params, params}; +pub(crate) use named_params; +pub(crate) use params; #[cfg(test)] mod tests { diff --git a/crates/storage/src/schema.rs b/crates/storage/src/schema.rs index 870651b211..a32c72afd4 100644 --- a/crates/storage/src/schema.rs +++ b/crates/storage/src/schema.rs @@ -36,6 +36,7 @@ pub(crate) mod revision_0073; mod revision_0074; mod revision_0075; mod revision_0076; +mod revision_0077; pub(crate) use base::base_schema; @@ -43,44 +44,7 @@ type MigrationFn = fn(&rusqlite::Transaction<'_>) -> anyhow::Result<()>; /// The full list of pathfinder migrations. pub fn migrations() -> &'static [MigrationFn] { - &[ - revision_0041::migrate, - revision_0042::migrate, - revision_0043::migrate, - revision_0044::migrate, - revision_0045::migrate, - revision_0046::migrate, - revision_0047::migrate, - revision_0048::migrate, - revision_0049::migrate, - revision_0050::migrate, - revision_0051::migrate, - revision_0052::migrate, - revision_0053::migrate, - revision_0054::migrate, - revision_0055::migrate, - revision_0056::migrate, - revision_0057::migrate, - revision_0058::migrate, - revision_0059::migrate, - revision_0060::migrate, - revision_0061::migrate, - revision_0062::migrate, - revision_0063::migrate, - revision_0064::migrate, - revision_0065::migrate, - revision_0066::migrate, - revision_0067::migrate, - revision_0068::migrate, - revision_0069::migrate, - revision_0070::migrate, - revision_0071::migrate, - revision_0072::migrate, - revision_0073::migrate, - revision_0074::migrate, - revision_0075::migrate, - revision_0076::migrate, - ] + MIGRATIONS } /// The number of schema revisions replaced by the [base @@ -88,3 +52,47 @@ pub fn migrations() -> &'static [MigrationFn] { /// /// Note that 40 was a no-op as we wanted to disallow versions <= 39. pub(crate) const BASE_SCHEMA_REVISION: usize = 40; + +const MIGRATIONS: &[MigrationFn] = &[ + revision_0041::migrate, + revision_0042::migrate, + revision_0043::migrate, + revision_0044::migrate, + revision_0045::migrate, + revision_0046::migrate, + revision_0047::migrate, + revision_0048::migrate, + revision_0049::migrate, + revision_0050::migrate, + revision_0051::migrate, + revision_0052::migrate, + revision_0053::migrate, + revision_0054::migrate, + revision_0055::migrate, + revision_0056::migrate, + revision_0057::migrate, + revision_0058::migrate, + revision_0059::migrate, + revision_0060::migrate, + revision_0061::migrate, + revision_0062::migrate, + revision_0063::migrate, + revision_0064::migrate, + revision_0065::migrate, + revision_0066::migrate, + revision_0067::migrate, + revision_0068::migrate, + revision_0069::migrate, + revision_0070::migrate, + revision_0071::migrate, + revision_0072::migrate, + revision_0073::migrate, + revision_0074::migrate, + revision_0075::migrate, + revision_0076::migrate, + revision_0077::migrate, +]; + +// The target version is the number of null migrations which have been replaced +// by the base schema + the new migrations built on top of that. +pub(crate) const LATEST_SCHEMA_REVISION: usize = BASE_SCHEMA_REVISION + MIGRATIONS.len(); diff --git a/crates/storage/src/schema/revision_0046.rs b/crates/storage/src/schema/revision_0046.rs index e3592c8d1f..a8d2f32ede 100644 --- a/crates/storage/src/schema/revision_0046.rs +++ b/crates/storage/src/schema/revision_0046.rs @@ -52,7 +52,7 @@ pub(crate) fn migrate(tx: &rusqlite::Transaction<'_>) -> anyhow::Result<()> { progress_logged = Instant::now(); } - insert_statement.execute(params![prev_block_number, bloom.to_compressed_bytes()])?; + insert_statement.execute(params![prev_block_number, bloom.into_compressed_bytes()])?; bloom = BloomFilter::new(); prev_block_number = current_block_number; @@ -82,7 +82,7 @@ pub(crate) fn migrate(tx: &rusqlite::Transaction<'_>) -> anyhow::Result<()> { } if events_in_filter > 0 { - insert_statement.execute(params![prev_block_number, bloom.to_compressed_bytes()])?; + insert_statement.execute(params![prev_block_number, bloom.into_compressed_bytes()])?; } tracing::info!("Dropping starknet_events table"); diff --git a/crates/storage/src/schema/revision_0052.rs b/crates/storage/src/schema/revision_0052.rs index 3dd6723134..c6ae71d59c 100644 --- a/crates/storage/src/schema/revision_0052.rs +++ b/crates/storage/src/schema/revision_0052.rs @@ -287,12 +287,6 @@ mod dto { V0 { events: Vec }, } - #[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] - #[serde(deny_unknown_fields)] - pub enum EventsForBlock { - V0 { events: Vec> }, - } - #[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] #[serde(deny_unknown_fields)] pub struct Event { @@ -659,12 +653,6 @@ mod dto { } } - #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] - pub struct TransactionWithReceipt { - pub transaction: Transaction, - pub receipt: Receipt, - } - #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] #[serde(deny_unknown_fields)] pub enum Transaction { @@ -963,6 +951,9 @@ mod dto { account_deployment_data, calldata, sender_address, + // There can be _no_ proof_facts in storage for invoke transactions before this + // migration has been performed. + proof_facts: _, }) => Self::V0 { hash: transaction_hash.as_inner().to_owned().into(), variant: TransactionVariantV0::InvokeV3(self::InvokeTransactionV3 { @@ -1322,6 +1313,7 @@ mod dto { .collect(), calldata: calldata.into_iter().map(|x| CallParam(x.into())).collect(), sender_address: ContractAddress::new_or_panic(sender_address.into()), + proof_facts: vec![], }, ), Transaction::V0 { @@ -2166,6 +2158,9 @@ pub(crate) mod old_dto { account_deployment_data, calldata, sender_address, + // There can be _no_ proof_facts in storage for invoke transactions before this + // migration has been performed. + proof_facts: _, }) => Self::Invoke(InvokeTransaction::V3(self::InvokeTransactionV3 { nonce, nonce_data_availability_mode: nonce_data_availability_mode.into(), @@ -2432,6 +2427,7 @@ pub(crate) mod old_dto { account_deployment_data, calldata, sender_address, + proof_facts: vec![], }, ), Transaction::L1Handler(L1HandlerTransaction { @@ -2888,12 +2884,4 @@ pub(crate) mod old_dto { pub transaction_hash: TransactionHash, pub version: TransactionVersion, } - - /// Describes L2 transaction failure details. - #[derive(Clone, Debug, Deserialize, PartialEq, Eq)] - #[serde(deny_unknown_fields)] - pub struct Failure { - pub code: String, - pub error_message: String, - } } diff --git a/crates/storage/src/schema/revision_0057.rs b/crates/storage/src/schema/revision_0057.rs index 7ac2376dcb..c5c4c16f25 100644 --- a/crates/storage/src/schema/revision_0057.rs +++ b/crates/storage/src/schema/revision_0057.rs @@ -1086,6 +1086,9 @@ pub(crate) mod dto { account_deployment_data, calldata, sender_address, + // There can be _no_ proof_facts in storage for invoke transactions before this + // migration has been performed. + proof_facts: _, }) => Self { hash: transaction_hash.as_inner().to_owned().into(), variant: TransactionVariantV0::InvokeV3(self::InvokeTransactionV3 { diff --git a/crates/storage/src/schema/revision_0066.rs b/crates/storage/src/schema/revision_0066.rs index e9f8ca0390..efb7f5d629 100644 --- a/crates/storage/src/schema/revision_0066.rs +++ b/crates/storage/src/schema/revision_0066.rs @@ -82,7 +82,7 @@ fn migrate_event_filters(tx: &rusqlite::Transaction<'_>) -> anyhow::Result<()> { // `starknet_events_filters` table. .unwrap_or(BloomFilter::new()); - aggregate.insert(&bloom_filter, block_number); + aggregate.insert(bloom_filter, block_number); if block_number == aggregate.to_block { insert_aggregate_stmt diff --git a/crates/storage/src/schema/revision_0073.rs b/crates/storage/src/schema/revision_0073.rs index bfbf04bed5..ac55a46a3f 100644 --- a/crates/storage/src/schema/revision_0073.rs +++ b/crates/storage/src/schema/revision_0073.rs @@ -1,7 +1,7 @@ //! The purpose if this migration is to repair any database instances that were //! affected by a combination of a bug introduced in //! [revision 71](super::revision_0071) and a reorg described in the issue that -//! can be found [here](https://github.com/eqlabs/pathfinder/issues/2920). +//! can be found [here](https://github.com/equilibriumco/pathfinder/issues/2920). //! //! The revision also contains a suite of //! [regression checks](reorg_regression_checks) that will be used to verify diff --git a/crates/storage/src/schema/revision_0074.rs b/crates/storage/src/schema/revision_0074.rs index edfdfd1c01..c3f176ff8c 100644 --- a/crates/storage/src/schema/revision_0074.rs +++ b/crates/storage/src/schema/revision_0074.rs @@ -10,7 +10,7 @@ //! This entire migration should be applied only to Sepolia testnet, as Mainnet //! is not on v0.14.0 yet. //! -//! More info [here](https://github.com/eqlabs/pathfinder/issues/2925). +//! More info [here](https://github.com/equilibriumco/pathfinder/issues/2925). use std::time::Instant; @@ -214,7 +214,7 @@ fn rebuild_event_filter( break; }; - rebuilt_aggregate_filter.insert(&bloom, block_number); + rebuilt_aggregate_filter.insert(bloom, block_number); } Ok(rebuilt_aggregate_filter) diff --git a/crates/storage/src/schema/revision_0076.rs b/crates/storage/src/schema/revision_0076.rs index 0548c38291..2299fbd5aa 100644 --- a/crates/storage/src/schema/revision_0076.rs +++ b/crates/storage/src/schema/revision_0076.rs @@ -1,5 +1,6 @@ use anyhow::Context; use pathfinder_casm_hashes::get_precomputed_casm_v2_hash; +use pathfinder_common::class_definition::SerializedCasmDefinition; use pathfinder_common::ClassHash; use pathfinder_crypto::Felt; use rayon::prelude::*; @@ -51,8 +52,10 @@ pub(crate) fn migrate(tx: &rusqlite::Transaction<'_>) -> anyhow::Result<()> { let definition = zstd::decode_all(definition.as_slice()) .map_err(|e| rusqlite::types::FromSqlError::Other(e.into())) .unwrap(); - let computed_hash = - pathfinder_compiler::casm_class_hash_v2(&definition).unwrap(); + let computed_hash = pathfinder_compiler::casm_class_hash_v2( + &SerializedCasmDefinition::from_bytes(definition), + ) + .unwrap(); (class_hash, computed_hash) } } diff --git a/crates/storage/src/schema/revision_0077.rs b/crates/storage/src/schema/revision_0077.rs new file mode 100644 index 0000000000..7b848d3b70 --- /dev/null +++ b/crates/storage/src/schema/revision_0077.rs @@ -0,0 +1,8 @@ +/// This is a no-op migration added to bump the revision number to 77. +/// +/// No schema changes are needed in this revision, but a new serialization +/// format for transactions has been added that makes newly added transactions +/// incompatible with older versions. +pub(crate) fn migrate(_tx: &rusqlite::Transaction<'_>) -> anyhow::Result<()> { + Ok(()) +} diff --git a/crates/tagged-debug-derive/Cargo.toml b/crates/tagged-debug-derive/Cargo.toml index 2e7b31e1bd..823ee00cf1 100644 --- a/crates/tagged-debug-derive/Cargo.toml +++ b/crates/tagged-debug-derive/Cargo.toml @@ -6,7 +6,7 @@ edition = { workspace = true } license = { workspace = true } rust-version = { workspace = true } description = "Debug trait derive macro for pathfinder-tagged types" -repository = "https://github.com/eqlabs/pathfinder" +repository = "https://github.com/equilibriumco/pathfinder" keywords = ["starknet", "derive", "debug", "proc-macro"] categories = ["development-tools::procedural-macro-helpers"] diff --git a/crates/tagged/Cargo.toml b/crates/tagged/Cargo.toml index d6820c68ed..cb0176d889 100644 --- a/crates/tagged/Cargo.toml +++ b/crates/tagged/Cargo.toml @@ -6,7 +6,7 @@ edition = { workspace = true } license = { workspace = true } rust-version = { workspace = true } description = "Type tagging utilities for the Pathfinder Starknet node implementation" -repository = "https://github.com/eqlabs/pathfinder" +repository = "https://github.com/equilibriumco/pathfinder" keywords = ["starknet", "ethereum", "web3", "type-safety"] categories = ["development-tools"] diff --git a/crates/validator/Cargo.toml b/crates/validator/Cargo.toml new file mode 100644 index 0000000000..c790fbc25f --- /dev/null +++ b/crates/validator/Cargo.toml @@ -0,0 +1,37 @@ +[package] +name = "pathfinder-validator" +version = { workspace = true } +authors = { workspace = true } +edition = { workspace = true } +license = { workspace = true } +rust-version = { workspace = true } + +[features] +skip-commitment-validation = [] + +[dependencies] +anyhow = { workspace = true } +p2p = { path = "../p2p" } +p2p_proto = { path = "../p2p_proto" } +pathfinder-block-commitments = { path = "../block-commitments" } +pathfinder-class-hash = { path = "../class-hash" } +pathfinder-common = { path = "../common" } +pathfinder-compiler = { path = "../compiler" } +pathfinder-executor = { path = "../executor" } +pathfinder-gas-price = { path = "../gas-price" } +pathfinder-rpc = { path = "../rpc" } +pathfinder-storage = { path = "../storage" } +rayon = { workspace = true } +serde_json = { workspace = true } +starknet_api = { workspace = true } +thiserror = { workspace = true } +tracing = { workspace = true } + +[dev-dependencies] +assert_matches = { workspace = true } +pathfinder-common = { path = "../common", features = ["full-serde"] } +pathfinder-crypto = { path = "../crypto" } +pathfinder-executor = { path = "../executor" } +pathfinder-storage = { path = "../storage", features = ["small_aggregate_filters"] } +rstest = { workspace = true } +tokio = { workspace = true, features = ["test-util"] } diff --git a/crates/validator/src/error.rs b/crates/validator/src/error.rs new file mode 100644 index 0000000000..8258811804 --- /dev/null +++ b/crates/validator/src/error.rs @@ -0,0 +1,159 @@ +//! Error types for proposal handling. + +use pathfinder_storage::StorageError; + +use crate::WrongValidatorStageError; + +/// Errors that can occur when handling incoming proposal parts. +/// +/// This enum wraps all possible error types, with explicit classification: +/// - `ProposalError` is always recoverable (from peers) +/// - `StorageError` is always fatal (DB errors, connection failures, etc.) +/// - `TransactionExecutionError` is always recoverable (malformed/invalid +/// transactions) +/// - Other errors require explicit classification via `.fatal()` or +/// `.recoverable()` +/// +/// Note: We do NOT implement From to avoid making assumptions +/// about error classification. Use ProposalHandlingError::fatal() or +/// ProposalHandlingError::recoverable() explicitly, or use the specific From +/// implementations for known error types. +#[derive(Debug, thiserror::Error)] +pub enum ProposalHandlingError { + /// Recoverable error from peer data (malformed proposals, out-of-order + /// parts, validation failures, execution errors). + #[error(transparent)] + Recoverable(#[from] ProposalError), + + /// Fatal error (DB errors, state corruption, storage failures, logic + /// errors, etc.). + #[error(transparent)] + Fatal(#[from] anyhow::Error), +} + +impl ProposalHandlingError { + /// Check if this error is recoverable. + pub fn is_recoverable(&self) -> bool { + matches!(self, Self::Recoverable(_)) + } + + /// Check if this error is fatal. + pub fn is_fatal(&self) -> bool { + matches!(self, Self::Fatal(_)) + } + + /// Get the error message for logging. + pub fn error_message(&self) -> String { + match self { + Self::Recoverable(e) => format!("{e}"), + Self::Fatal(e) => format!("{e:#}"), + } + } + + /// Create a fatal error explicitly. + pub fn fatal(error: impl Into) -> Self { + Self::Fatal(error.into()) + } + + /// Create a recoverable error from an error. + /// + /// This checks if the error is actually a storage error (fatal) and + /// extracts the full error chain as a message otherwise. + pub fn recoverable(error: impl Into) -> Self { + let err = error.into(); + // Check if it's actually a storage error (shouldn't happen, but be safe) + if is_storage_error(&err) { + Self::Fatal(err) + } else { + // Extract the full error chain as a message + Self::Recoverable(ProposalError::ValidationFailed { + message: format!("{:#}", err), + }) + } + } + + /// Create a recoverable error from a message string. + /// + /// Use this when you have a simple message string and don't need to + /// preserve an error chain. + pub fn recoverable_msg(msg: impl Into) -> Self { + Self::Recoverable(ProposalError::ValidationFailed { + message: msg.into(), + }) + } +} + +impl From for ProposalHandlingError { + fn from(value: pathfinder_storage::StorageError) -> Self { + // StorageError is always fatal (DB errors, connection failures, etc.) + Self::Fatal(anyhow::Error::from(value)) + } +} + +impl From for ProposalHandlingError { + fn from(error: pathfinder_executor::TransactionExecutionError) -> Self { + // Execution errors are recoverable (malformed/invalid transactions) + Self::Recoverable(ProposalError::ValidationFailed { + message: format!("{}", error), + }) + } +} + +/// Check if `StorageError` appears anywhere in the error chain. +fn is_storage_error(error: &anyhow::Error) -> bool { + // Check the root error + if error.downcast_ref::().is_some() { + return true; + } + + // Walk the error chain + let mut current: Option<&dyn std::error::Error> = error.source(); + while let Some(err) = current { + if err.downcast_ref::().is_some() { + return true; + } + current = err.source(); + } + + false +} + +/// Errors that can occur when handling incoming proposal parts. +/// +/// These errors are classified as recoverable (from peers) or fatal (our +/// state). +#[derive(Debug, thiserror::Error)] +pub enum ProposalError { + /// Unexpected proposal part received (e.g., Init when expecting BlockInfo). + #[error("Unexpected proposal part: {message}")] + UnexpectedProposalPart { message: String }, + + /// Validator stage not found in cache. + #[error("No ValidatorStage for height and round {height_and_round}")] + // TODO why is height_and_round a String? + ValidatorStageNotFound { height_and_round: String }, + + /// Wrong validator stage type (e.g., expected BlockInfo but got + /// TransactionBatch). + #[error("Wrong validator stage: {message}")] + WrongValidatorStage { message: String }, + + /// Execution or validation failed due to proposal content (malformed + /// transactions, invalid commitments, hash mismatches, etc.). + #[error("Validation/execution failed: {message}")] + ValidationFailed { message: String }, +} + +impl From for ProposalError { + fn from(err: WrongValidatorStageError) -> Self { + ProposalError::WrongValidatorStage { + message: format!("{err}"), + } + } +} + +impl From for ProposalHandlingError { + fn from(err: WrongValidatorStageError) -> Self { + Self::Recoverable(err.into()) + } +} diff --git a/crates/validator/src/lib.rs b/crates/validator/src/lib.rs new file mode 100644 index 0000000000..14f8198f3e --- /dev/null +++ b/crates/validator/src/lib.rs @@ -0,0 +1,1768 @@ +use std::collections::HashMap; +use std::str::FromStr; +use std::sync::Arc; +use std::time::Instant; + +use anyhow::Context; +use p2p::sync::client::conv::TryFromDto; +use p2p_proto::class::Cairo1Class; +use p2p_proto::common::Hash; +use p2p_proto::consensus::{BlockInfo, ProposalInit, TransactionVariant as ConsensusVariant}; +use p2p_proto::sync::transaction::{DeclareV3WithoutClass, TransactionVariant as SyncVariant}; +use p2p_proto::transaction::DeclareV3WithClass; +use pathfinder_class_hash::compute_sierra_class_hash; +use pathfinder_class_hash::json::SierraContractDefinition; +use pathfinder_common::class_definition::{ + SelectorAndFunctionIndex, + SerializedSierraDefinition, + SierraEntryPoints, +}; +use pathfinder_common::event::Event; +use pathfinder_common::receipt::Receipt; +use pathfinder_common::state_update::StateUpdateData; +use pathfinder_common::transaction::{Transaction, TransactionVariant}; +use pathfinder_common::{ + class_definition, + BlockId, + BlockNumber, + ChainId, + ConsensusFinalizedBlockHeader, + ConsensusFinalizedL2Block, + DecidedBlocks, + DeclaredClass, + EntryPoint, + L1DataAvailabilityMode, + ProposalCommitment, + SequencerAddress, + SierraHash, + StarknetVersion, + TransactionHash, +}; +use pathfinder_executor::types::{to_starknet_api_transaction, BlockInfoPriceConverter}; +use pathfinder_executor::{ + ClassInfo, + ConcurrentBlockExecutor, + ConcurrentStateReader, + IntoStarkFelt, +}; +use pathfinder_rpc::context::{ETH_FEE_TOKEN_ADDRESS, STRK_FEE_TOKEN_ADDRESS}; +use pathfinder_storage::{Storage, Transaction as DbTransaction}; +use rayon::prelude::*; +use tracing::debug; + +/// Currently supported Starknet version for validation. +/// +/// TODO: This is a temporary measure until we have a better way to provide +/// validators with the Starknet version to validate against. +const SUPPORTED_STARKNET_VERSION: StarknetVersion = StarknetVersion::new(0, 14, 0, 0); + +/// Type alias for the worker pool used by the concurrent executor. +pub type ValidatorWorkerPool = Arc< + pathfinder_executor::blockifier_reexports::WorkerPool< + pathfinder_executor::blockifier_reexports::CachedState, + >, +>; + +use pathfinder_block_commitments::{ + calculate_event_commitment, + calculate_receipt_commitment, + calculate_transaction_commitment, +}; +use pathfinder_gas_price::{ + L1GasPriceProvider, + L1GasPriceValidationResult, + L1ToFriValidationResult, + L1ToFriValidator, + L2GasPriceProvider, + L2GasPriceValidationResult, +}; + +pub mod error; + +use crate::error::ProposalHandlingError; + +/// TODO: Use this type as validation result. +pub enum ValidationResult { + Valid, + Invalid, + Error(anyhow::Error), +} + +/// Determines whether validation of the proposal should be deferred based on +/// the presence of the parent block in the decided blocks or DB. +pub fn should_defer_validation( + height: u64, + decided_blocks: DecidedBlocks, + db_tx: &DbTransaction<'_>, +) -> Result { + let Some(parent_height) = height.checked_sub(1) else { + // Genesis block - no deferral needed. + return Ok(false); + }; + + let is_parent_decided = { + let decided_blocks = decided_blocks.read().unwrap(); + decided_blocks.contains_key( + &BlockNumber::new(parent_height).context("Block number exceeds i64::MAX")?, + ) + }; + + let defer = if is_parent_decided { + // The node observed parent block get decided - no deferral needed. + false + } else { + // The node did not observe parent block get decided - either it has not been + // decided on yet, or the node joined the network too late to observe it. Fall + // back to checking the committed blocks in DB. + let parent_block = BlockNumber::new(parent_height) + .context("Block number is larger than i64::MAX") + .map_err(ProposalHandlingError::Fatal)?; + let parent_block = BlockId::Number(parent_block); + let parent_committed = db_tx + .block_exists(parent_block) + .map_err(ProposalHandlingError::Fatal)?; + !parent_committed + }; + + Ok(defer) +} + +pub fn new( + chain_id: ChainId, + proposal_init: ProposalInit, +) -> Result { + ValidatorBlockInfoStage::new(chain_id, proposal_init) +} + +/// Validates the basic block metadata and proposal information before any +/// transaction processing. +#[derive(Debug)] +pub struct ValidatorBlockInfoStage { + chain_id: ChainId, + is_l3: bool, + proposal_height: BlockNumber, +} + +impl ValidatorBlockInfoStage { + pub fn new( + chain_id: ChainId, + proposal_init: ProposalInit, + ) -> Result { + Self::new_with_l3(chain_id, false, proposal_init) + } + + pub fn new_with_l3( + chain_id: ChainId, + is_l3: bool, + proposal_init: ProposalInit, + ) -> Result { + // TODO(validator) how can we validate the proposal init? + Ok(ValidatorBlockInfoStage { + chain_id, + is_l3, + proposal_height: BlockNumber::new(proposal_init.height) + .context("ProposalInit height exceeds i64::MAX") + .map_err(ProposalHandlingError::recoverable)?, + }) + } + + pub fn chain_id(&self) -> ChainId { + self.chain_id + } + + pub fn proposal_height(&self) -> u64 { + self.proposal_height.get() + } + + /// Validate the block info against the parent block and L1 gas price data, + /// then transition to the [ValidatorTransactionBatchStage]. + #[allow(clippy::too_many_arguments)] + pub fn validate_block_info( + self, + block_info: BlockInfo, + main_storage: Storage, + decided_blocks: DecidedBlocks, + gas_price_provider: Option, + l1_to_fri_validator: Option<&L1ToFriValidator>, + l2_gas_price_provider: Option<&L2GasPriceProvider>, + worker_pool: ValidatorWorkerPool, + ) -> Result { + let _span = tracing::debug_span!( + "Validator::validate_block_info", + height = %block_info.height, + timestamp = %block_info.timestamp, + builder = %block_info.builder.0, + ) + .entered(); + + let Self { + chain_id, + is_l3, + proposal_height, + } = self; + + if proposal_height != block_info.height { + return Err(ProposalHandlingError::recoverable_msg(format!( + "ProposalInit height does not match BlockInfo height: {} != {}", + proposal_height, block_info.height, + ))); + } + + validate_block_info_timestamp( + block_info.height, + block_info.timestamp, + &main_storage, + decided_blocks.clone(), + )?; + + // Validate L1 gas prices if a provider is available + if let Some(ref provider) = gas_price_provider { + validate_l1_gas_prices( + block_info.timestamp, + block_info.l1_gas_price_wei, + block_info.l1_data_gas_price_wei, + provider, + )?; + } + + // Validate L1 gas prices in FRI terms + if let Some(validator) = l1_to_fri_validator { + validate_l1_to_fri_prices( + block_info.timestamp, + block_info.l1_gas_price_fri, + block_info.l1_data_gas_price_fri, + validator, + )?; + } + + if let Some(provider) = l2_gas_price_provider { + validate_l2_gas_price(block_info.l2_gas_price_fri, provider)?; + } + + let BlockInfo { + height, + timestamp, + builder, + l1_da_mode, + l2_gas_price_fri, + l1_gas_price_fri, + l1_data_gas_price_fri, + l1_gas_price_wei, + l1_data_gas_price_wei, + } = block_info; + + let block_info = pathfinder_executor::types::BlockInfo::try_from_proposal( + height, + timestamp, + SequencerAddress(builder.0), + match l1_da_mode { + p2p_proto::common::L1DataAvailabilityMode::Blob => L1DataAvailabilityMode::Blob, + p2p_proto::common::L1DataAvailabilityMode::Calldata => { + L1DataAvailabilityMode::Calldata + } + }, + BlockInfoPriceConverter::consensus( + l2_gas_price_fri, + l1_gas_price_fri, + l1_data_gas_price_fri, + l1_gas_price_wei, + l1_data_gas_price_wei, + ), + SUPPORTED_STARKNET_VERSION, + ) + .context("Creating internal BlockInfo representation") + .map_err(ProposalHandlingError::recoverable)?; + + Ok(ValidatorTransactionBatchStage { + chain_id, + block_info, + transactions: Vec::new(), + receipts: Vec::new(), + events: Vec::new(), + executor: None, + worker_pool, + main_storage, + declared_classes: Vec::new(), + decided_blocks, + is_l3, + }) + } + + /// Skip block info validation and transition directly to the + /// [ValidatorTransactionBatchStage]. + /// + /// Used only for testing and dummy proposal creation. + pub fn skip_validation( + self, + block_info: BlockInfo, + main_storage: Storage, + worker_pool: ValidatorWorkerPool, + decided_blocks: DecidedBlocks, + ) -> Result { + let _span = tracing::debug_span!( + "Validator::skip_block_info_validation", + height = %block_info.height, + timestamp = %block_info.timestamp, + builder = %block_info.builder.0, + ) + .entered(); + + let Self { + chain_id, + is_l3, + proposal_height, + } = self; + + tracing::debug!( + "Skipping block info validation for height {}", + proposal_height + ); + + let builder = SequencerAddress(block_info.builder.0); + let l1_da_mode = match block_info.l1_da_mode { + p2p_proto::common::L1DataAvailabilityMode::Blob => L1DataAvailabilityMode::Blob, + p2p_proto::common::L1DataAvailabilityMode::Calldata => L1DataAvailabilityMode::Calldata, + }; + let price_converter = BlockInfoPriceConverter::consensus( + block_info.l2_gas_price_fri, + block_info.l1_gas_price_fri, + block_info.l1_data_gas_price_fri, + block_info.l1_gas_price_wei, + block_info.l1_data_gas_price_wei, + ); + + let block_info = pathfinder_executor::types::BlockInfo::try_from_proposal( + block_info.height, + block_info.timestamp, + builder, + l1_da_mode, + price_converter, + SUPPORTED_STARKNET_VERSION, + ) + .context("Creating internal BlockInfo representation") + .map_err(ProposalHandlingError::recoverable)?; + + Ok(ValidatorTransactionBatchStage { + chain_id, + block_info, + transactions: Vec::new(), + receipts: Vec::new(), + events: Vec::new(), + executor: None, + worker_pool, + main_storage, + declared_classes: Vec::new(), + decided_blocks, + is_l3, + }) + } +} + +fn validate_block_info_timestamp( + height: u64, + proposal_timestamp: u64, + main_storage: &Storage, + decided_blocks: DecidedBlocks, +) -> Result<(), ProposalHandlingError> { + let Some(parent_height) = height.checked_sub(1) else { + // Genesis block, no parent to validate against. + return Ok(()); + }; + + let decided_parent_timestamp = { + let decided_blocks = decided_blocks.read().unwrap(); + decided_blocks + .get(&BlockNumber::new(parent_height).context("Block number exceeds i64::MAX")?) + .map(|decided_parent| decided_parent.block.header.timestamp) + }; + + let parent_timestamp = match decided_parent_timestamp { + Some(ts) => ts, + None => { + let mut db_conn = main_storage + .connection() + .context("Creating database connection for timestamp validation") + .map_err(ProposalHandlingError::fatal)?; + let db_tx = db_conn + .transaction() + .context("Creating DB transaction for timestamp validation") + .map_err(ProposalHandlingError::fatal)?; + + let block_num = BlockNumber::new_or_panic(parent_height); + db_tx + .block_header(BlockId::Number(block_num)) + .context("Fetching block header for timestamp validation") + .map_err(ProposalHandlingError::fatal)? + .map(|parent_header| parent_header.timestamp) + .expect( + "BlockInfo validation should be deferred until parent block is decided or \ + committed", + ) + } + }; + + if proposal_timestamp <= parent_timestamp.get() { + let msg = format!( + "Proposal timestamp must be strictly greater than parent block timestamp: {} <= {}", + proposal_timestamp, parent_timestamp + ); + return Err(ProposalHandlingError::recoverable_msg(msg)); + } + + Ok(()) +} + +/// Validates L1 gas prices in the proposal. +/// +/// Note: During cold start when the provider doesn't have enough data, +/// proposals are allowed with a warning. +fn validate_l1_gas_prices( + proposal_timestamp: u64, + l1_gas_price_wei: u128, + l1_data_gas_price_wei: u128, + provider: &L1GasPriceProvider, +) -> Result<(), ProposalHandlingError> { + match provider.validate(proposal_timestamp, l1_gas_price_wei, l1_data_gas_price_wei) { + L1GasPriceValidationResult::Valid => Ok(()), + L1GasPriceValidationResult::Invalid(error) => { + tracing::warn!( + l1_gas_price_wei, + l1_data_gas_price_wei, + error = %error, + "L1 gas price validation failed" + ); + Err(ProposalHandlingError::recoverable_msg(format!( + "L1 gas price validation failed: {error}" + ))) + } + L1GasPriceValidationResult::InsufficientData => { + tracing::debug!( + l1_gas_price_wei, + l1_data_gas_price_wei, + "L1 gas price validation skipped: insufficient data" + ); + Ok(()) + } + } +} + +/// Validates L1 gas prices in FRI terms (Apollo style). +/// +/// This validation converts both proposer's and validator's L1 gas prices to +/// FRI using their respective ETH/FRI conversion rates. The final FRI prices +/// are compared with a 10% tolerance margin. +/// +/// Rate mismatches are logged as metrics but do not cause rejection, following +/// Apollo's approach that prioritizes liveness over strict determinism. +fn validate_l1_to_fri_prices( + timestamp: u64, + l1_gas_price_fri: u128, + l1_data_gas_price_fri: u128, + validator: &L1ToFriValidator, +) -> Result<(), ProposalHandlingError> { + match validator.validate(timestamp, l1_gas_price_fri, l1_data_gas_price_fri) { + L1ToFriValidationResult::Valid => Ok(()), + L1ToFriValidationResult::InvalidFriDeviation { + proposed_fri, + expected_fri, + deviation_pct, + } => { + tracing::warn!( + proposed_fri, + expected_fri, + deviation_pct, + "L1-to-FRI price validation failed: FRI price deviation too high" + ); + Err(ProposalHandlingError::recoverable_msg(format!( + "L1-to-FRI price deviation too high: {deviation_pct:.2}%" + ))) + } + L1ToFriValidationResult::InsufficientData => { + tracing::debug!("L1-to-FRI validation skipped: insufficient data (cold start)"); + Ok(()) + } + } +} + +fn validate_l2_gas_price( + proposed_l2_gas_price_fri: u128, + provider: &L2GasPriceProvider, +) -> Result<(), ProposalHandlingError> { + match provider.validate(proposed_l2_gas_price_fri) { + L2GasPriceValidationResult::Valid => Ok(()), + L2GasPriceValidationResult::Invalid { proposed, expected } => { + tracing::warn!(proposed, expected, "L2 gas price validation failed"); + Err(ProposalHandlingError::recoverable_msg(format!( + "L2 gas price mismatch: proposed {proposed}, expected {expected}" + ))) + } + L2GasPriceValidationResult::InsufficientData => { + tracing::debug!( + proposed_l2_gas_price_fri, + "L2 gas price validation skipped: insufficient data" + ); + Ok(()) + } + } +} + +/// Executes transactions and manages the block execution state. +/// +/// Uses blockifier's ConcurrentBlockExecutor which provides natural +/// rollback support through `close_block(n)`. +pub struct ValidatorTransactionBatchStage { + chain_id: ChainId, + is_l3: bool, + block_info: pathfinder_executor::types::BlockInfo, + /// Accumulated executed transactions across batches + transactions: Vec, + /// Accumulated receipts corresponding to executed transactions + receipts: Vec, + /// Accumulated events corresponding to executed transactions + events: Vec>, + executor: Option, + worker_pool: ValidatorWorkerPool, + /// Storage for creating new connections + main_storage: Storage, + /// Accumulated declared classes across batches. Only non-reverted + /// declarations are included. + declared_classes: Vec, + /// A view into the current decided blocks, used for initializing the + /// executor's state reader. + decided_blocks: DecidedBlocks, +} + +impl ValidatorTransactionBatchStage { + /// Get the current number of executed transactions. + pub fn transaction_count(&self) -> usize { + self.transactions.len() + } + + /// Execute a batch of transactions using the concurrent executor. + pub fn execute_batch( + &mut self, + transactions: Vec, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, + ) -> Result<(), ProposalHandlingError> { + if transactions.is_empty() { + return Ok(()); + } + + let batch_size = transactions.len(); + + tracing::debug!( + "Executing batch with {} transactions (total so far: {})", + batch_size, + self.transactions.len() + ); + + // Convert transactions to executor format, use `par_iter` because any declare + // transactions will require sierra compilation and casm hash computation. Both + // are blocking. + let txns = transactions + .par_iter() + .map(|t| { + T::try_map_transaction(t.clone(), compiler_resource_limits, blockifier_libfuncs) + }) + .collect::>>() + .map_err(ProposalHandlingError::recoverable)?; + let mut common_txns = Vec::with_capacity(txns.len()); + let mut executor_txns = Vec::with_capacity(txns.len()); + let mut declared_classes = Vec::with_capacity(txns.len()); + + txns.into_iter().for_each(|txn| { + common_txns.push(txn.common); + executor_txns.push(txn.executor); + declared_classes.push(txn.class_definition); + }); + + // Verify transaction hashes + let txn_hashes = common_txns + .par_iter() + .map(|t| { + if T::verify_hash(t, self.chain_id) { + Ok(t.hash) + } else { + Err(anyhow::anyhow!( + "Transaction hash mismatch, expected: {}", + t.hash + )) + } + }) + .collect::>>() + .context("Verifying transaction hashes") + .map_err(ProposalHandlingError::recoverable)?; + + // Initialize executor on first batch + if self.executor.is_none() { + self.executor = Some( + ConcurrentBlockExecutor::new_with_l3( + self.chain_id, + self.is_l3, + self.block_info, + ETH_FEE_TOKEN_ADDRESS, + STRK_FEE_TOKEN_ADDRESS, + self.main_storage.connection().map_err(|e| { + ProposalHandlingError::fatal( + anyhow::Error::from(e).context("Creating database connection"), + ) + })?, + self.decided_blocks.clone(), + self.worker_pool.clone(), + None, // No deadline + ) + .map_err(ProposalHandlingError::fatal)?, + ); + } + + // Execute the batch + let executor = self + .executor + .as_mut() + .context("Executor should be initialized") + .map_err(ProposalHandlingError::fatal)?; + + let (receipts, events): (Vec<_>, Vec<_>) = + executor.execute(executor_txns)?.into_iter().unzip(); + + // Convert receipts to common format + let base_transaction_index = self.transactions.len(); + let receipts: Vec = receipts + .into_iter() + .zip(txn_hashes) + .enumerate() + .map(|(batch_idx, (receipt, hash))| Receipt { + transaction_hash: hash, + actual_fee: receipt.actual_fee, + execution_resources: receipt.execution_resources, + l2_to_l1_messages: receipt.l2_to_l1_messages, + execution_status: receipt.execution_status, + transaction_index: pathfinder_common::TransactionIndex::new( + (base_transaction_index + batch_idx) as u64, + ) + .expect("Transaction index should be valid"), + }) + .collect(); + + // Update accumulated state + // + // IMPORTANT + // Filter out declarations which were not reverted and add only those to + // the declared_classes list, which if the block is decide, goes to storage and + // hence updates the state. + receipts + .iter() + .zip(declared_classes) + .for_each(|(receipt, class_def)| { + if let Some(class_def) = class_def { + if !receipt.is_reverted() { + self.declared_classes.push(class_def); + } + } + }); + + // Update accumulated state (continued) + self.transactions.extend(common_txns); + self.receipts.extend(receipts); + self.events.extend(events); + + tracing::debug!( + "Executed {} transactions, total: {}", + batch_size, + self.transactions.len() + ); + + Ok(()) + } + + /// Rollback to a specific transaction count. + /// + /// With the concurrent executor, actual state rollback happens at + /// `close_block(n)`. This method just truncates the output vectors + /// (transactions, receipts, events) to prepare for finalization. + pub fn rollback_to_transaction( + &mut self, + target_count: usize, + ) -> Result<(), ProposalHandlingError> { + let current_count = self.transactions.len(); + + if target_count > current_count { + return Err(ProposalHandlingError::recoverable_msg(format!( + "Target count {} exceeds executed transactions {}", + target_count, current_count + ))); + } + + if target_count == current_count { + return Ok(()); + } + + tracing::debug!( + "Rolling back from {} to {} transactions (state rollback at close_block)", + current_count, + target_count + ); + + // Truncate output vectors to match target count + self.transactions.truncate(target_count); + self.receipts.truncate(target_count); + self.events.truncate(target_count); + + Ok(()) + } + + #[cfg(test)] + /// Finalize with the current state (up to the last executed transaction) + pub fn finalize( + &mut self, + ) -> Result, ProposalHandlingError> { + if self.executor.is_none() { + return Ok(None); + } + + // Take the executor and close the block + let mut executor = self + .executor + .take() + .context("Executor should exist") + .map_err(ProposalHandlingError::fatal)?; + + // close_block(n) commits only the first n transactions' state changes + let state_diff = executor + .close_block(self.transactions.len()) + .map_err(ProposalHandlingError::Fatal)?; + + Ok(Some(state_diff)) + } + + /// Get the number of receipts + pub fn receipt_count(&self) -> usize { + self.receipts.len() + } + + /// Get the number of events + pub fn event_count(&self) -> usize { + self.events.len() + } + + /// Get a reference to the receipts (for testing) + #[cfg(test)] + pub fn receipts(&self) -> &[Receipt] { + &self.receipts + } + + /// Validate that the validator state is consistent + pub fn validate_state_consistency(&self) -> Result<(), ProposalHandlingError> { + // Validate that receipts and events match transaction count + if self.receipts.len() != self.transactions.len() { + return Err(ProposalHandlingError::recoverable_msg(format!( + "State inconsistency: {} receipts but {} transactions", + self.receipts.len(), + self.transactions.len() + ))); + } + + if self.events.len() != self.transactions.len() { + return Err(ProposalHandlingError::recoverable_msg(format!( + "State inconsistency: {} event arrays but {} transactions", + self.events.len(), + self.transactions.len() + ))); + } + Ok(()) + } + + /// Finalizes the block, producing a header with all commitments except + /// the state commitment and block hash, which are computed in the sync task + /// just before the block is committed into main storage. Also verifies that + /// the computed proposal commitment matches the expected one. + pub fn consensus_finalize( + self, + expected_proposal_commitment: ProposalCommitment, + ) -> Result { + let height = self.block_info.number; + let block = self.consensus_finalize0()?; + let actual_proposal_commitment = block.header.state_diff_commitment; + + // Skip commitment validation in tests when using dummy commitment (ZERO) + // This allows e2e tests to focus on batch execution logic without commitment + // complexity + #[cfg(any(test, feature = "skip-commitment-validation"))] + if expected_proposal_commitment.0.is_zero() { + return Ok(block); + } + + if actual_proposal_commitment.0 == expected_proposal_commitment.0 { + Ok(block) + } else { + Err(ProposalHandlingError::recoverable_msg(format!( + "proposal commitment mismatch at height {height}, expected \ + {expected_proposal_commitment}, actual {actual_proposal_commitment}" + ))) + } + } + + /// Finalizes the block, producing a header with all commitments except + /// the state commitment and block hash, which are computed in the last + /// stage. + pub fn consensus_finalize0(self) -> Result { + let Self { + block_info, + executor, + transactions, + receipts, + events, + declared_classes, + .. + } = self; + + let _span = tracing::debug_span!( + "ConcurrentValidator::consensus_finalize", + height = %block_info.number, + num_transactions = %transactions.len(), + ) + .entered(); + + let start = Instant::now(); + + // For empty proposals (no transactions), we don't need an executor. + // Use an empty state diff instead. + let state_update = if executor.is_none() && transactions.is_empty() { + StateUpdateData::default() + } else { + let mut executor = executor + .context("Executor should exist for finalization") + .map_err(ProposalHandlingError::fatal)?; + + // close_block(n) commits only the first n transactions' state changes. + let state_diff = executor + .close_block(transactions.len()) + .map_err(ProposalHandlingError::fatal)?; + + StateUpdateData::from(state_diff) + }; + + let transaction_commitment = + calculate_transaction_commitment(&transactions, block_info.starknet_version) + .map_err(ProposalHandlingError::fatal)?; + let receipt_commitment = + calculate_receipt_commitment(&receipts).map_err(ProposalHandlingError::fatal)?; + let events_ref_by_txn = events + .iter() + .zip(transactions.iter().map(|t| t.hash)) + .map(|(e, h)| (h, e.as_slice())) + .collect::>(); + let event_commitment = + calculate_event_commitment(&events_ref_by_txn, block_info.starknet_version) + .map_err(ProposalHandlingError::fatal)?; + let state_diff_commitment = state_update.compute_state_diff_commitment(); + let event_count = events.iter().map(|e| e.len()).sum(); + + let l2_gas_consumed: u128 = receipts + .iter() + .map(|r| r.execution_resources.l2_gas.0) + .sum(); + + let header = ConsensusFinalizedBlockHeader { + number: block_info.number, + timestamp: block_info.timestamp, + eth_l1_gas_price: block_info.eth_l1_gas_price, + strk_l1_gas_price: block_info.strk_l1_gas_price, + eth_l1_data_gas_price: block_info.eth_l1_data_gas_price, + strk_l1_data_gas_price: block_info.strk_l1_data_gas_price, + eth_l2_gas_price: block_info.eth_l2_gas_price, + strk_l2_gas_price: block_info.strk_l2_gas_price, + sequencer_address: block_info.sequencer_address, + starknet_version: block_info.starknet_version, + event_commitment, + transaction_commitment, + transaction_count: transactions.len(), + event_count, + l1_da_mode: self.block_info.l1_da_mode, + receipt_commitment, + state_diff_commitment, + state_diff_length: state_update.state_diff_length(), + l2_gas_consumed, + }; + + debug!( + "Block {} finalized in {} ms", + block_info.number, + start.elapsed().as_millis() + ); + + Ok(ConsensusFinalizedL2Block { + header, + state_update, + transactions_and_receipts: transactions.into_iter().zip(receipts).collect::>(), + events, + declared_classes, + }) + } +} + +impl std::fmt::Debug for ValidatorTransactionBatchStage { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("ValidatorTransactionBatchStage") + .field("chain_id", &self.chain_id) + .field("block_info", &self.block_info) + .field("transactions_len", &self.transactions.len()) + .field("receipts_len", &self.receipts.len()) + .field("events_len", &self.events.len()) + .field("executor_initialized", &self.executor.is_some()) + // Intentionally skipping decided blocks + .finish() + } +} + +pub enum ValidatorStage { + BlockInfo(ValidatorBlockInfoStage), + TransactionBatch(Box), +} + +/// Error indicating that a validator stage conversion failed because the stage +/// type was incorrect. +#[derive(Debug, thiserror::Error)] +#[error("Expected {expected} stage, got {actual}")] +pub struct WrongValidatorStageError { + pub expected: &'static str, + pub actual: &'static str, +} + +impl ValidatorStage { + pub fn try_into_block_info_stage( + self, + ) -> Result { + match self { + ValidatorStage::BlockInfo(stage) => Ok(stage), + _ => Err(WrongValidatorStageError { + expected: "block info", + actual: self.variant_name(), + }), + } + } + + pub fn try_into_transaction_batch_stage( + self, + ) -> Result, WrongValidatorStageError> { + match self { + ValidatorStage::TransactionBatch(stage) => Ok(stage), + _ => Err(WrongValidatorStageError { + expected: "transaction batch", + actual: self.variant_name(), + }), + } + } + + fn variant_name(&self) -> &'static str { + match self { + ValidatorStage::BlockInfo(_) => "BlockInfo", + ValidatorStage::TransactionBatch(_) => "TransactionBatch", + } + } +} + +pub trait TransactionExt { + /// Maps consensus transaction to a pair of: + /// - common transaction, which is used for verifying the transaction hash + /// - executor transaction, which is used for executing the transaction + /// + /// For certain transactions, there is a compilation step which can be + /// resource-limited via `compiler_resource_limits` and verified using + /// `blockifier_libfuncs`. + fn try_map_transaction( + transaction: p2p_proto::consensus::Transaction, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, + ) -> anyhow::Result; + + fn verify_hash(transaction: &Transaction, chain_id: ChainId) -> bool; +} + +pub struct MappedTransaction { + pub common: pathfinder_common::transaction::Transaction, + pub executor: pathfinder_executor::Transaction, + pub class_definition: Option, +} + +pub struct ProdTransactionMapper; + +impl TransactionExt for ProdTransactionMapper { + fn try_map_transaction( + transaction: p2p_proto::consensus::Transaction, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, + ) -> anyhow::Result { + let p2p_proto::consensus::Transaction { + txn, + transaction_hash, + } = transaction; + let (variant, class_info) = match txn { + ConsensusVariant::DeclareV3(DeclareV3WithClass { common, class }) => { + let mut entry_points_by_type = HashMap::new(); + class.entry_points.constructors.iter().for_each(|x| { + entry_points_by_type + .entry(pathfinder_common::class_definition::EntryPointType::Constructor) + .or_insert_with(Vec::new) + .push(SelectorAndFunctionIndex { + selector: EntryPoint(x.selector), + function_idx: x.index, + }); + }); + class.entry_points.externals.iter().for_each(|x| { + entry_points_by_type + .entry(pathfinder_common::class_definition::EntryPointType::External) + .or_insert_with(Vec::new) + .push(SelectorAndFunctionIndex { + selector: EntryPoint(x.selector), + function_idx: x.index, + }); + }); + class.entry_points.l1_handlers.iter().for_each(|x| { + entry_points_by_type + .entry(pathfinder_common::class_definition::EntryPointType::L1Handler) + .or_insert_with(Vec::new) + .push(SelectorAndFunctionIndex { + selector: EntryPoint(x.selector), + function_idx: x.index, + }); + }); + + let def = SierraContractDefinition { + abi: class.abi.clone().into(), + sierra_program: class.program.clone(), + contract_class_version: class.contract_class_version.clone().into(), + entry_points_by_type, + }; + let class_hash = compute_sierra_class_hash(def)?; + + ( + SyncVariant::DeclareV3(DeclareV3WithoutClass { + common, + class_hash: Hash(class_hash.0), + }), + Some(class_info( + SierraHash(class_hash.0), + class, + compiler_resource_limits, + blockifier_libfuncs, + )?), + ) + } + ConsensusVariant::DeployAccountV3(v) => (SyncVariant::DeployAccountV3(v), None), + ConsensusVariant::InvokeV3(v) => (SyncVariant::InvokeV3(v.invoke), None), + ConsensusVariant::L1HandlerV0(v) => (SyncVariant::L1HandlerV0(v), None), + }; + let (class_info, for_storage) = class_info.unzip(); + + let common_txn_variant = TransactionVariant::try_from_dto(variant)?; + + let deployed_address = deployed_address(&common_txn_variant); + + // TODO(validator) why 10^12? + let paid_fee_on_l1 = match &common_txn_variant { + TransactionVariant::L1Handler(_) => { + Some(starknet_api::transaction::fields::Fee(1_000_000_000_000)) + } + _ => None, + }; + + let api_txn = to_starknet_api_transaction(common_txn_variant.clone())?; + let tx_hash = + starknet_api::transaction::TransactionHash(transaction_hash.0.into_starkfelt()); + let executor_txn = pathfinder_executor::Transaction::from_api( + api_txn, + tx_hash, + class_info, + paid_fee_on_l1, + deployed_address, + pathfinder_executor::AccountTransactionExecutionFlags::default(), + )?; + let common_txn = pathfinder_common::transaction::Transaction { + hash: TransactionHash(transaction_hash.0), + variant: common_txn_variant, + }; + + Ok(MappedTransaction { + common: common_txn, + executor: executor_txn, + class_definition: for_storage, + }) + } + + fn verify_hash(transaction: &Transaction, chain_id: ChainId) -> bool { + transaction.verify_hash(chain_id) + } +} + +fn class_info( + sierra_hash: SierraHash, + class: Cairo1Class, + compiler_resource_limits: pathfinder_compiler::ResourceLimits, + blockifier_libfuncs: pathfinder_compiler::BlockifierLibfuncs, +) -> anyhow::Result<(ClassInfo, DeclaredClass)> { + let Cairo1Class { + abi, + entry_points, + program, + contract_class_version, + } = class; + + let abi_length = abi.len(); + let sierra_program_length = program.len(); + let sierra_version = + starknet_api::contract_class::SierraVersion::from_str(&contract_class_version) + .context("Getting sierra version")?; + + let definition = class_definition::Sierra { + abi: abi.into(), + sierra_program: program, + contract_class_version: contract_class_version.into(), + entry_points_by_type: SierraEntryPoints { + constructor: entry_points + .constructors + .into_iter() + .map(|x| SelectorAndFunctionIndex { + selector: EntryPoint(x.selector), + function_idx: x.index, + }) + .collect(), + external: entry_points + .externals + .into_iter() + .map(|x| SelectorAndFunctionIndex { + selector: EntryPoint(x.selector), + function_idx: x.index, + }) + .collect(), + l1_handler: entry_points + .l1_handlers + .into_iter() + .map(|x| SelectorAndFunctionIndex { + selector: EntryPoint(x.selector), + function_idx: x.index, + }) + .collect(), + }, + }; + let sierra_def = SerializedSierraDefinition::from_bytes(serde_json::to_vec(&definition)?); + let casm_def = pathfinder_compiler::compile_sierra_to_casm( + &sierra_def, + compiler_resource_limits, + blockifier_libfuncs, + )?; + let casm_hash_v2 = pathfinder_compiler::casm_class_hash_v2(&casm_def)?; + + let for_storage = DeclaredClass { + sierra_hash, + casm_hash_v2, + sierra_def, + casm_def: casm_def.clone(), + }; + + let casm_contract_definition = + pathfinder_executor::parse_casm_definition(casm_def, sierra_version.clone()) + .context("Parsing CASM contract definition")?; + let ci = ClassInfo::new( + &casm_contract_definition, + sierra_program_length, + abi_length, + sierra_version, + )?; + Ok((ci, for_storage)) +} + +pub fn deployed_address(txnv: &TransactionVariant) -> Option { + match txnv { + TransactionVariant::DeployAccountV3(t) => Some(starknet_api::core::ContractAddress( + starknet_api::core::PatriciaKey::try_from(t.contract_address.get().into_starkfelt()) + .expect("No contract address overflow expected"), + )), + TransactionVariant::DeclareV3(_) + | TransactionVariant::InvokeV3(_) + | TransactionVariant::L1Handler(_) => None, + TransactionVariant::DeclareV0(_) + | TransactionVariant::DeclareV1(_) + | TransactionVariant::DeclareV2(_) + | TransactionVariant::DeployV0(_) + | TransactionVariant::DeployV1(_) + | TransactionVariant::DeployAccountV1(_) + | TransactionVariant::InvokeV0(_) + | TransactionVariant::InvokeV1(_) => { + unreachable!("Proposal parts don't carry older transaction versions: {txnv:?}") + } + } +} + +#[cfg(test)] +mod tests { + use assert_matches::assert_matches; + use p2p::consensus::HeightAndRound; + use p2p_proto::consensus::TransactionVariant; + use p2p_proto::transaction::L1HandlerV0; + use pathfinder_common::{ + block_hash_bytes, + BlockHash, + BlockHeader, + BlockNumber, + BlockTimestamp, + ChainId, + }; + use pathfinder_crypto::Felt; + use pathfinder_executor::ExecutorWorkerPool; + use pathfinder_storage::StorageBuilder; + use rstest::rstest; + + use super::*; + use crate::error::ProposalError; + + /// Creates a worker pool for tests. + fn create_test_worker_pool() -> ValidatorWorkerPool { + ExecutorWorkerPool::::new(1).get() + } + + fn create_test_proposal( + height: u64, + ) -> ( + p2p_proto::consensus::ProposalInit, + p2p_proto::consensus::BlockInfo, + ) { + let init = p2p_proto::consensus::ProposalInit { + height, + round: 1, + valid_round: None, + proposer: p2p_proto::common::Address::default(), + }; + let block_info = p2p_proto::consensus::BlockInfo { + height, + timestamp: 1000, + builder: p2p_proto::common::Address::default(), + l1_da_mode: p2p_proto::common::L1DataAvailabilityMode::Calldata, + l2_gas_price_fri: 0, + l1_gas_price_wei: 0, + l1_data_gas_price_wei: 0, + l1_gas_price_fri: 0, + l1_data_gas_price_fri: 0, + }; + (init, block_info) + } + + fn create_test_transaction(index: usize) -> p2p_proto::consensus::Transaction { + let txn = TransactionVariant::L1HandlerV0(L1HandlerV0 { + nonce: Felt::from_hex_str(&format!("0x{index}")).unwrap(), + address: p2p_proto::common::Address( + Felt::from_hex_str(&format!("0x{index:x}")).unwrap(), + ), + entry_point_selector: Felt::from_hex_str(&format!("0x{index}")).unwrap(), + calldata: vec![Felt::from_hex_str(&format!("0x{index}")).unwrap()], + }); + + let l1_handler = pathfinder_common::transaction::L1HandlerTransaction { + nonce: pathfinder_common::TransactionNonce( + Felt::from_hex_str(&format!("0x{index}")).unwrap(), + ), + contract_address: pathfinder_common::ContractAddress::new_or_panic( + Felt::from_hex_str(&format!("0x{index:x}")).unwrap(), + ), + entry_point_selector: pathfinder_common::EntryPoint( + Felt::from_hex_str(&format!("0x{index}")).unwrap(), + ), + calldata: vec![pathfinder_common::CallParam( + Felt::from_hex_str(&format!("0x{index}")).unwrap(), + )], + }; + + let chain_id = ChainId::SEPOLIA_TESTNET; + let hash = l1_handler.calculate_hash(chain_id); + + p2p_proto::consensus::Transaction { + transaction_hash: p2p_proto::common::Hash(hash.0), + txn, + } + } + + /// Tests that concurrent executor batch execution works. + /// + /// Note: Unlike the old checkpoint-based implementation, the concurrent + /// executor does not support re-execution after rollback. Rollback is + /// "logical" and only affects finalization via close_block(n). + #[test] + fn test_concurrent_executor_batch_execution() { + let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); + let chain_id = ChainId::SEPOLIA_TESTNET; + let worker_pool = create_test_worker_pool(); + let (proposal_init, block_info) = create_test_proposal(1); + + let mut validator_stage = ValidatorBlockInfoStage::new(chain_id, proposal_init) + .and_then(|validator| { + validator.skip_validation( + block_info, + storage, + worker_pool, + DecidedBlocks::default(), + ) + }) + .expect("Failed to create validator stage"); + + // Create batches: 3 batches with 2 transactions each + let batches = [ + vec![create_test_transaction(0), create_test_transaction(1)], + vec![create_test_transaction(2), create_test_transaction(3)], + vec![create_test_transaction(4), create_test_transaction(5)], + ]; + + // Execute batch 1 + validator_stage + .execute_batch::( + batches[0].clone(), + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), + ) + .expect("Failed to execute batch 1"); + assert_eq!( + validator_stage.transaction_count(), + 2, + "Should have 2 transactions" + ); + + // Execute batch 2 + validator_stage + .execute_batch::( + batches[1].clone(), + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), + ) + .expect("Failed to execute batch 2"); + assert_eq!( + validator_stage.transaction_count(), + 4, + "Should have 4 transactions" + ); + + // Execute batch 3 + validator_stage + .execute_batch::( + batches[2].clone(), + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), + ) + .expect("Failed to execute batch 3"); + assert_eq!( + validator_stage.transaction_count(), + 6, + "Should have 6 transactions" + ); + + // Receipts should be consistent + let receipts = validator_stage.receipts(); + assert_eq!(receipts.len(), 6, "Should have 6 receipts"); + + // Verify transaction indices are sequential + for (i, receipt) in receipts.iter().enumerate() { + assert_eq!( + receipt.transaction_index.get(), + i as u64, + "Transaction index mismatch at position {i}" + ); + } + + // Finalize should work with concurrent executor + // Note: State diffs may be empty for L1Handler transactions, which is fine + let _state_diff = validator_stage + .finalize() + .expect("Failed to finalize") + .expect("Should have state diff"); + } + + /// Tests rollback_to_transaction edge cases. + /// + /// Note: With the concurrent executor, rollback is "logical" - the actual + /// state rollback happens at close_block(n). This test verifies that the + /// tracking vectors (transactions, receipts, events) are truncated + /// correctly. + /// + /// Key semantic: rollback_to_transaction(N) keeps exactly N transactions + /// (the first N, i.e., indices 0..N). + #[test] + fn test_rollback_edge_cases() { + let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); + let chain_id = ChainId::SEPOLIA_TESTNET; + let worker_pool = create_test_worker_pool(); + let (proposal_init, block_info) = create_test_proposal(1); + + let mut validator_stage = ValidatorBlockInfoStage::new(chain_id, proposal_init) + .and_then(|validator| { + validator.skip_validation( + block_info, + storage, + worker_pool, + DecidedBlocks::default(), + ) + }) + .expect("Failed to create validator stage"); + + // Create batches with different sizes to test boundary conditions + // Batch 0: 3 transactions (indices 0, 1, 2) + // Batch 1: 2 transactions (indices 3, 4) + // Batch 2: 2 transactions (indices 5, 6) + let batches = [ + vec![ + create_test_transaction(0), + create_test_transaction(1), + create_test_transaction(2), + ], + vec![create_test_transaction(3), create_test_transaction(4)], + vec![create_test_transaction(5), create_test_transaction(6)], + ]; + + // Execute all batches + validator_stage + .execute_batch::( + batches[0].clone(), + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), + ) + .expect("Failed to execute batch 0"); + validator_stage + .execute_batch::( + batches[1].clone(), + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), + ) + .expect("Failed to execute batch 1"); + validator_stage + .execute_batch::( + batches[2].clone(), + pathfinder_compiler::ResourceLimits::for_test(), + pathfinder_compiler::BlockifierLibfuncs::default(), + ) + .expect("Failed to execute batch 2"); + + assert_eq!(validator_stage.transaction_count(), 7); + assert_eq!(validator_stage.receipt_count(), 7); + assert_eq!(validator_stage.event_count(), 7); + + // Rollback to current count (no-op) + validator_stage + .rollback_to_transaction::(7) + .expect("Rollback to current count should succeed"); + assert_eq!( + validator_stage.transaction_count(), + 7, + "No-op rollback should not change count" + ); + + // Rollback to batch boundary (keep first 5 = end of batch 1) + validator_stage + .rollback_to_transaction::(5) + .expect("Failed to rollback to 5"); + assert_eq!(validator_stage.transaction_count(), 5); + assert_eq!(validator_stage.receipt_count(), 5); + assert_eq!(validator_stage.event_count(), 5); + + // Rollback to batch boundary (keep first 3 = end of batch 0) + validator_stage + .rollback_to_transaction::(3) + .expect("Failed to rollback to 3"); + assert_eq!(validator_stage.transaction_count(), 3); + assert_eq!(validator_stage.receipt_count(), 3); + assert_eq!(validator_stage.event_count(), 3); + + // Rollback to middle of what remains (keep first 2) + validator_stage + .rollback_to_transaction::(2) + .expect("Failed to rollback to 2"); + assert_eq!(validator_stage.transaction_count(), 2); + assert_eq!(validator_stage.receipt_count(), 2); + assert_eq!(validator_stage.event_count(), 2); + + // Rollback to keep only 1 transaction + validator_stage + .rollback_to_transaction::(1) + .expect("Failed to rollback to 1"); + assert_eq!(validator_stage.transaction_count(), 1); + assert_eq!(validator_stage.receipt_count(), 1); + assert_eq!(validator_stage.event_count(), 1); + + // Rollback to 0 (empty) + validator_stage + .rollback_to_transaction::(0) + .expect("Failed to rollback to 0"); + assert_eq!(validator_stage.transaction_count(), 0); + assert_eq!(validator_stage.receipt_count(), 0); + assert_eq!(validator_stage.event_count(), 0); + + // Out of bounds rollback should error + let result = validator_stage.rollback_to_transaction::(10); + assert!( + result.is_err(), + "Rollback beyond current count should error" + ); + } + + /// Tests that empty proposals (no transactions, no executor) can be + /// finalized. + /// + /// This test covers the case where a proposal has no transactions and + /// therefore no executor is created. The finalization should succeed with + /// an empty state diff. + #[test] + fn test_empty_proposal_finalization() { + let main_storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); + let chain_id = ChainId::SEPOLIA_TESTNET; + let worker_pool = create_test_worker_pool(); + + let hnr = HeightAndRound::new(0, 0); + + // Create a proposal init for height 0 + let proposal_init = p2p_proto::consensus::ProposalInit { + height: hnr.height(), + round: hnr.round(), + valid_round: None, + proposer: p2p_proto::common::Address(Felt::from_hex_str("0x1").unwrap()), + }; + + // Create block info + let block_info = p2p_proto::consensus::BlockInfo { + height: hnr.height(), + timestamp: 1000, + builder: p2p_proto::common::Address(Felt::from_hex_str("0x1").unwrap()), + l1_da_mode: p2p_proto::common::L1DataAvailabilityMode::Calldata, + l2_gas_price_fri: 1, + l1_gas_price_fri: 1_000_000_000, + l1_data_gas_price_fri: 1, + l1_gas_price_wei: 1_000_000_000, + l1_data_gas_price_wei: 1, + }; + + // Create validator stages (empty proposal path) + let validator_block_info = ValidatorBlockInfoStage::new(chain_id, proposal_init) + .expect("Failed to create ValidatorBlockInfoStage"); + + let validator_transaction_batch = validator_block_info + .validate_block_info( + block_info, + main_storage.clone(), + DecidedBlocks::default(), + None, + None, + None, + worker_pool, + ) + .expect("Failed to validate block info"); + + // Verify the validator is in the expected empty state + assert_eq!( + validator_transaction_batch.transaction_count(), + 0, + "Empty proposal should have 0 transactions" + ); + assert!( + validator_transaction_batch.executor.is_none(), + "Empty proposal should have no executor" + ); + + // Finalize the empty proposal - this should succeed without an executor + let validator_finalize = validator_transaction_batch + .consensus_finalize0() + .expect("Empty proposal finalization should succeed"); + + // Verify the finalized header has correct empty commitments + assert_eq!( + validator_finalize.header.transaction_count, 0, + "Empty proposal should have 0 transaction count" + ); + assert_eq!( + validator_finalize.header.event_count, 0, + "Empty proposal should have 0 event count" + ); + assert_eq!( + validator_finalize.state_update.contract_updates.len(), + 0, + "Empty proposal should have no contract updates" + ); + assert_eq!( + validator_finalize + .state_update + .system_contract_updates + .len(), + 0, + "Empty proposal should have no system contract updates" + ); + assert_eq!( + validator_finalize.state_update.declared_cairo_classes.len(), + 0, + "Empty proposal should have no declared Cairo classes" + ); + assert_eq!( + validator_finalize + .state_update + .declared_sierra_classes + .len(), + 0, + "Empty proposal should have no declared Sierra classes" + ); + } + + #[rstest] + #[case::later_than_parent(2000, None)] + #[case::equal_to_parent( + 1000, + Some(String::from( + "Proposal timestamp must be strictly greater than parent block timestamp: 1000 <= 1000" + )) + )] + #[case::earlier_than_parent( + 700, + Some(String::from( + "Proposal timestamp must be strictly greater than parent block timestamp: 700 <= 1000" + )) + )] + fn timestamp_validation_parent_block_found( + #[case] proposal_timestamp: u64, + #[case] expected_error_message: Option, + ) { + let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); + let worker_pool = create_test_worker_pool(); + let mut db_conn = storage.connection().expect("Failed to get DB connection"); + let db_tx = db_conn + .transaction() + .expect("Failed to begin DB transaction"); + + // Insert parent header. + let header0 = BlockHeader { + hash: block_hash_bytes!(b"block hash 0"), + parent_hash: BlockHash::default(), + number: BlockNumber::new_or_panic(0), + timestamp: BlockTimestamp::new_or_panic(1000), + ..Default::default() + }; + db_tx + .insert_block_header(&header0) + .expect("Failed to insert block header 0"); + db_tx.commit().expect("Failed to commit DB transaction"); + + let chain_id = ChainId::SEPOLIA_TESTNET; + let proposal_init1 = p2p_proto::consensus::ProposalInit { + height: 1, + round: 0, + valid_round: None, + proposer: p2p_proto::common::Address(Felt::from_hex_str("0x1").unwrap()), + }; + + let validator_block_info1 = ValidatorBlockInfoStage::new(chain_id, proposal_init1) + .expect("Failed to create ValidatorBlockInfoStage"); + + let block_info1 = p2p_proto::consensus::BlockInfo { + height: 1, + timestamp: proposal_timestamp, + builder: p2p_proto::common::Address(Felt::from_hex_str("0x1").unwrap()), + l1_da_mode: p2p_proto::common::L1DataAvailabilityMode::Calldata, + l2_gas_price_fri: 1, + l1_gas_price_fri: 1_000_000_000, + l1_data_gas_price_fri: 1, + l1_gas_price_wei: 1_000_000_000, + l1_data_gas_price_wei: 1, + }; + let result = validator_block_info1.validate_block_info( + block_info1, + storage, + DecidedBlocks::default(), + None, + None, + None, + worker_pool, + ); + + if let Some(expected_error_message) = expected_error_message { + let err = result.unwrap_err(); + assert_matches!( + err, + ProposalHandlingError::Recoverable( + ProposalError::ValidationFailed { message } + ) if message == expected_error_message, + "Proposal validation error did not match expected value", + ); + } else { + assert!(result.is_ok()); + } + } + + #[rstest] + #[case::genesis_parent(BlockNumber::GENESIS)] + #[should_panic( + expected = "BlockInfo validation should be deferred until parent block is decided or \ + committed" + )] + #[case::non_genesis_parent(BlockNumber::new_or_panic(42))] + fn timestamp_validation_parent_block_not_found(#[case] proposal_height: BlockNumber) { + let storage = StorageBuilder::in_tempdir().expect("Failed to create temp database"); + let chain_id = ChainId::SEPOLIA_TESTNET; + let worker_pool = create_test_worker_pool(); + + let proposal_init = p2p_proto::consensus::ProposalInit { + height: proposal_height.get(), + round: 0, + valid_round: None, + proposer: p2p_proto::common::Address(Felt::from_hex_str("0x1").unwrap()), + }; + + let validator_block_info = ValidatorBlockInfoStage::new(chain_id, proposal_init) + .expect("Failed to create ValidatorBlockInfoStage"); + + let block_info = p2p_proto::consensus::BlockInfo { + height: proposal_height.get(), + timestamp: 1000, + builder: p2p_proto::common::Address(Felt::from_hex_str("0x1").unwrap()), + l1_da_mode: p2p_proto::common::L1DataAvailabilityMode::Calldata, + l2_gas_price_fri: 1, + l1_gas_price_fri: 1_000_000_000, + l1_data_gas_price_fri: 1, + l1_gas_price_wei: 1_000_000_000, + l1_data_gas_price_wei: 1, + }; + + if proposal_height == BlockNumber::GENESIS { + // Genesis block should pass timestamp validation even though it does not have a + // parent. + assert!( + validator_block_info + .validate_block_info( + block_info, + storage, + DecidedBlocks::default(), + None, + None, + None, + worker_pool + ) + .is_ok(), + "Genesis block timestamp validation should pass even without parent" + ); + } else { + let err = validator_block_info + .validate_block_info( + block_info, + storage, + DecidedBlocks::default(), + None, + None, + None, + worker_pool, + ) + .unwrap_err(); + let expected_err_message = format!( + "Parent block header not found for height {}", + proposal_height.get() - 1, + ); + assert_matches!( + err, + ProposalHandlingError::Recoverable( + ProposalError::ValidationFailed { message } + ) if message == expected_err_message, + "Timestamp validation without parent should fail", + ); + } + } +} diff --git a/docs/docs/faq.md b/docs/docs/faq.md index faff263f4b..a414b63c22 100644 --- a/docs/docs/faq.md +++ b/docs/docs/faq.md @@ -5,7 +5,7 @@ slug: /faq # Frequently Asked Questions -This section addresses common issues and questions that might arise while running or developing with Pathfinder. If you don’t find your answer here, consider searching the [GitHub issues](https://github.com/eqlabs/pathfinder/issues) or asking in the [Starknet Discord channel](https://discord.com/invite/QypNMzkHbc). +This section addresses common issues and questions that might arise while running or developing with Pathfinder. If you don’t find your answer here, consider searching the [GitHub issues](https://github.com/equilibriumco/pathfinder/issues) or asking in the [Starknet Discord channel](https://discord.com/invite/QypNMzkHbc).
What is Pathfinder? @@ -46,7 +46,7 @@ You can interact with Pathfinder using the [JSON-RPC API](interacting-with-pathf
Can I switch from archive mode to pruned mode (or vice versa) without re-syncing? -Currently, you cannot switch directly between archive and pruned modes mid-run. You may, however, change the k value in pruned mode between runs. If you need to go from archive to pruned, consider downloading a pruned Database Snapshot or re-sync with the `--storage.state-tries=` option. +Currently, you cannot switch directly between archive and pruned modes mid-run. You may, however, change the k value in pruned mode between runs. If you need to go from archive to pruned, consider downloading a pruned Database Snapshot or re-sync with the `--storage.state-tries=` option.
@@ -82,7 +82,7 @@ Yes, Pathfinder provides database snapshots that can be downloaded and used to s
How can I contribute to Pathfinder? -You can contribute by opening issues, submitting pull requests, or joining the Starknet community on Discord to provide feedback and collaborate with other developers. For more details, refer to the [contribution guidelines](https://github.com/eqlabs/pathfinder/blob/main/contributing.md). +You can contribute by opening issues, submitting pull requests, or joining the Starknet community on Discord to provide feedback and collaborate with other developers. For more details, refer to the [contribution guidelines](https://github.com/equilibriumco/pathfinder/blob/main/contributing.md).
diff --git a/docs/docs/getting-started/configuration.md b/docs/docs/getting-started/configuration.md index d6188286cb..345e41f9f9 100644 --- a/docs/docs/getting-started/configuration.md +++ b/docs/docs/getting-started/configuration.md @@ -202,6 +202,30 @@ You cannot switch between archive and pruned mode mid-run. To switch from archiv ::: +### Native Execution + +:::warning + +Native execution (using [Cairo Native](https://github.com/lambdaclass/cairo_native)) is still an experimental feature that is beneficial for a few specific use-cases only. + +::: + +To improve Cairo execution performance, Pathfinder supports "native execution". Cairo Native works by compiling Cairo classes into platform-specific binaries. These binaries are then used to execute entry points directly, avoiding the overhead of running the Cairo VM interpreter. You can enable native execution by the following option: + +```bash +--rpc.native-execution true +``` + +#### Limitations + +- Only Sierra 1.7+ classes can be compiled. This practically makes native execution only available for classes that have been compiled with a recent version of the Cairo compiler. +- Compilation is performed on-demand. That is, the first execution attempt of a compatible class adds the class to the compiler queue. Since compilation might take up to a minute Pathfinder falls back to using the Cairo VM until compilation finishes to avoid delaying JSON-RPC responses. Compilation is performed on a single thread. +- Compiled native classes are transient. We keep the compiler artifacts in temporary files (under `/tmp`). The classes are _not_ persisted into Pathfinder's database. Restarting the node clears this cache and all classes will need to be re-compiled. +- The size of the native compiler class cache is configurable using `--rpc.native-execution-class-cache-size=`. The default setting is 512, meaning that at most 512 native classes are kept in the cache. +- Each compiled class takes up some disk space. The actual disk space required depends on the size of the Cairo class. For estimation you can use a few megabytes per class. +- The optimization level used by the Cairo Native compiler can be set by the `--rpc.native-execution-compiler-optimization-level` CLI option. Valid values are 0 (no optimization), 1 (less optimization), 2 (default optimization), and 3 (aggressive optimization). + + ## Environment Variables Pathfinder can also be configured via environment variables, which take second place in configuration precedence. diff --git a/docs/docs/getting-started/hardware-requirements.md b/docs/docs/getting-started/hardware-requirements.md index 3e39903a83..9be4596d3e 100644 --- a/docs/docs/getting-started/hardware-requirements.md +++ b/docs/docs/getting-started/hardware-requirements.md @@ -6,8 +6,8 @@ sidebar_position: 1 Pathfinder's hardware requirements depend greatly on your use case. The recommended configuration for fast syncing and JSON-RPC queries (with limited concurrency) is: * **CPU**: 4 cores -* **RAM**: 8 GB -* **Storage**: 250 GB SSD +* **RAM**: 16 GB +* **Storage**: 500 GB SSD If you plan to operate in archive mode for historical queries or run multiple concurrent JSON-RPC requests, consider increasing CPU and memory. diff --git a/docs/docs/getting-started/running-pathfinder.md b/docs/docs/getting-started/running-pathfinder.md index a896a367a4..0a247cf616 100644 --- a/docs/docs/getting-started/running-pathfinder.md +++ b/docs/docs/getting-started/running-pathfinder.md @@ -6,17 +6,17 @@ sidebar_position: 2 Pathfinder can be set up using one of the following methods: -* [Docker container](#docker-container) +* [Docker container](#docker-container) * [Building from source](#building-from-source) - + ## Docker Container -The simplest way to run Pathfinder is using Docker. This method is recommended for beginners as it requires minimal setup and configuration. +The simplest way to run Pathfinder is using Docker. This method is recommended for beginners as it requires minimal setup and configuration. ### Installing Docker -Follow the official [Docker installation guide](https://docs.docker.com/get-docker/) for your operating system. +Follow the official [Docker installation guide](https://docs.docker.com/get-docker/) for your operating system. ### Setting Up the Ethereum API URL @@ -131,7 +131,7 @@ If needed, you can get the latest `protoc` from the [releases page](https://gith Clone the Pathfinder repository and check out the latest release: ```bash -git clone https://github.com/eqlabs/pathfinder.git +git clone https://github.com/equilibriumco/pathfinder.git cd pathfinder git checkout ``` diff --git a/docs/docs/incidents/2023-06-17_mainnet_incident.md b/docs/docs/incidents/2023-06-17_mainnet_incident.md index 1ffecd0ba6..f7994ba17b 100644 --- a/docs/docs/incidents/2023-06-17_mainnet_incident.md +++ b/docs/docs/incidents/2023-06-17_mainnet_incident.md @@ -30,7 +30,7 @@ But then how did this ever work? It turns out most string encodings produce iden ## Resolution -The [fix PR](https://github.com/eqlabs/pathfinder/pull/1142) takes any non-ASCII characters and re-encodes them to match the formatting used by the sequencer. +The [fix PR](https://github.com/equilibriumco/pathfinder/pull/1142) takes any non-ASCII characters and re-encodes them to match the formatting used by the sequencer. The PR was merged and Pathfinder v0.6.1 was released. The fix was also backported to create v0.5.7 for users who had not yet upgraded to v0.6. diff --git a/docs/docs/incidents/_category_.json b/docs/docs/incidents/_category_.json index ba412c2535..c5de35dd72 100644 --- a/docs/docs/incidents/_category_.json +++ b/docs/docs/incidents/_category_.json @@ -1,4 +1,4 @@ { "label": "Incidents", - position: 8 + "position": 8 } diff --git a/docs/docs/interacting-with-pathfinder/json-rpc-api.md b/docs/docs/interacting-with-pathfinder/json-rpc-api.md index e01b1d18b1..eca89f8179 100644 --- a/docs/docs/interacting-with-pathfinder/json-rpc-api.md +++ b/docs/docs/interacting-with-pathfinder/json-rpc-api.md @@ -7,18 +7,18 @@ sidebar_position: 1 The JSON-RPC interface allows you to query Starknet data, send transactions, and perform contract calls without going through a formal transaction on-chain. Pathfinder currently supports multiple API versions and a distinct set of custom extensions. ## Supported Versions -- **JSON-RPC v0.6.0** +- **JSON-RPC v0.6.0** Accessible at the `/rpc/v0_6` endpoint. -- **JSON-RPC v0.7.1** +- **JSON-RPC v0.7.1** Accessible at the `/rpc/v0_7` endpoint. -- **JSON-RPC v0.8.1** +- **JSON-RPC v0.8.1** Accessible at the `/rpc/v0_8` endpoint. - **JSON-RPC v0.9.0** Accessible at the `/rpc/v0_9` endpoint. -- **Pathfinder Extension** +- **Pathfinder Extension** Exposed via `/rpc/pathfinder/v0_1`. -:::note +:::note The API served at the root path (`/` for HTTP and `/ws` for WebSocket) can be set via the `--rpc.root-version` parameter (or `RPC_ROOT_VERSION` environment variable). Since a version upgrade _might_ change the version of the JSON-RPC API exposed on this path using this path is not recommended. Please use one of the explicitly versioned paths above. ::: @@ -49,7 +49,7 @@ A successful response might look like this: { "jsonrpc": "2.0", "id": 1, - "result": "0x534e5f4d41494e" + "result": "0x534e5f4d41494e" } ``` @@ -82,5 +82,5 @@ For advanced use cases like verifying storage proofs or generating special debug ``` /rpc/pathfinder/v0_1 ``` -The complete specification for these JSON-only extension methods can be found in the [Pathfinder repository](https://github.com/eqlabs/pathfinder/blob/main/specs/rpc/pathfinder_rpc_api.json). +The complete specification for these JSON-only extension methods can be found in the [Pathfinder repository](https://github.com/equilibriumco/pathfinder/blob/main/specs/rpc/pathfinder_rpc_api.json). diff --git a/docs/docs/interacting-with-pathfinder/websocket-api.md b/docs/docs/interacting-with-pathfinder/websocket-api.md index 27aa0fc100..6e4457dfd6 100644 --- a/docs/docs/interacting-with-pathfinder/websocket-api.md +++ b/docs/docs/interacting-with-pathfinder/websocket-api.md @@ -5,17 +5,17 @@ sidebar_position: 2 # WebSocket API The WebSocket interface serves the same API versions and extension endpoints as HTTP, but in a stateful, two-way communication channel. This can be especially useful for real-time notifications, subscription-based events, or building interactive dashboards. - + ## Supported Versions -- **JSON-RPC v0.6.0** +- **JSON-RPC v0.6.0** Accessible at `/ws/rpc/v0_6`. -- **JSON-RPC v0.7.1** +- **JSON-RPC v0.7.1** Accessible at `/ws/rpc/v0_7`. -- **JSON-RPC v0.8.1** +- **JSON-RPC v0.8.1** Accessible at `/rpc/v0_8` and `/ws/rpc/v0_8` (deprecated). - **JSON-RPC v0.9.0** Accessible at `/rpc/v0_9` and `/ws/rpc/v0_9` (deprecated). -- **Pathfinder Extension** +- **Pathfinder Extension** Exposed via `/ws/rpc/pathfinder/v0_1` > **Note:** The WebSocket interface is disabled by default. To enable it, use the `--rpc.websocket.enabled` CLI flag. The default root endpoint (i.e., `/ws`) can be configured using the `--rpc.root-version` parameter. @@ -48,4 +48,4 @@ As with the [JSON extensions](json-rpc-api#pathfinder-json-extensions), Pathfind /ws/rpc/pathfinder/v0_1 ``` -You can find the complete list of WebSocket extensions in the [Pathfinder repository](https://github.com/eqlabs/pathfinder/blob/main/specs/rpc/pathfinder_ws.json). +You can find the complete list of WebSocket extensions in the [Pathfinder repository](https://github.com/equilibriumco/pathfinder/blob/main/specs/rpc/pathfinder_ws.json). diff --git a/docs/docs/intro.md b/docs/docs/intro.md index 0bf011af8c..dde2ea9c60 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -9,12 +9,12 @@ Pathfinder is a Rust implementation of a [Starknet](https://www.starknet.io) ful ## Key features -* **Full Starknet State Access**: Retrieve the full history, including contracts, transactions, and storage. +* **Full Starknet State Access**: Retrieve the full history, including contracts, transactions, and storage. * **Verification via Ethereum**: Verifies the state of Starknet using Ethereum, calculating Patricia-Merkle Trie roots to ensure the correctness of data. * **JSON-RPC Support**: Implements the Starknet JSON-RPC API, providing full support for interacting with the blockchain through tools like [starknet.js](https://starknetjs.com/) and [starknet.py](https://starknetpy.readthedocs.io/en/latest/). * **State Functionality without Transactions**: Execute Starknet functions locally without requiring an actual transaction on the network. * **Transaction Fee Estimation**: Estimate the gas fees for a transaction before submitting it to the network. - + ## Getting Started @@ -74,7 +74,7 @@ import Card from '@site/src/components/Card';

``` -If you are looking to use the Pathfinder full node as part of a validator setup, install the [attestation tool](https://github.com/eqlabs/starknet-validator-attestation) with the node. +If you are looking to use the Pathfinder full node as part of a validator setup, install the [attestation tool](https://github.com/equilibriumco/starknet-validator-attestation) with the node. ## Community and Support @@ -82,9 +82,9 @@ We highly value community engagement, especially during this alpha phase. Whethe You can contribute to Pathfinder by: -* **Opening an Issue**: If you encounter bugs or have feature requests, please open an issue on our [GitHub repository](https://github.com/eqlabs/pathfinder/issues/new). +* **Opening an Issue**: If you encounter bugs or have feature requests, please open an issue on our [GitHub repository](https://github.com/equilibriumco/pathfinder/issues/new). * **Joining our Community**: Connect with other users and developers by joining the Starknet [Discord channel](https://discord.com/invite/starknet-community). -* **Contributing to the Codebase**: If you’re interested in contributing to Pathfinder, check out our [contributing guidelines](https://github.com/eqlabs/pathfinder/blob/main/contributing.md) and [open issues](https://github.com/eqlabs/pathfinder/issues) on GitHub. - +* **Contributing to the Codebase**: If you’re interested in contributing to Pathfinder, check out our [contributing guidelines](https://github.com/equilibriumco/pathfinder/blob/main/contributing.md) and [open issues](https://github.com/equilibriumco/pathfinder/issues) on GitHub. + diff --git a/docs/docs/monitoring-and-metrics.md b/docs/docs/monitoring-and-metrics.md index d0f0e713f7..2f4a4c45b7 100644 --- a/docs/docs/monitoring-and-metrics.md +++ b/docs/docs/monitoring-and-metrics.md @@ -88,6 +88,8 @@ The Prometheus Metrics endpoint (`/metrics`) exposes real-time operational data Counts how many times each JSON-RPC method is called. - `rpc_method_calls_failed_total{method="", version=""}` Counts how many times each method call resulted in an error. + - `rpc_method_calls_duration_milliseconds{method="", version=""}` + Histogram of JSON-RPC method call latency. **Gateway Request Metrics** - `gateway_requests_total{method="", tag="", reason=""}` @@ -147,4 +149,4 @@ scrape_configs: - targets: ['localhost:9000'] ``` -After updating the configuration, restart Prometheus. It will begin collecting and storing metrics for visualization and analysis. \ No newline at end of file +After updating the configuration, restart Prometheus. It will begin collecting and storing metrics for visualization and analysis. diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index f274ebb2f3..a867cbf7c6 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -13,14 +13,14 @@ const config = { favicon: 'img/favicon.ico', // Set the production url of your site here - url: 'https://eqlabs.github.io/', + url: 'https://equilibriumco.github.io/', // Set the // pathname under which your site is served // For GitHub pages deployment, it is often '//' baseUrl: '/pathfinder/', // GitHub pages deployment config. // If you aren't using GitHub pages, you don't need these. - organizationName: 'eqlabs', // Usually your GitHub org/user name. + organizationName: 'equilibriumco', // Usually your GitHub org/user name. projectName: 'pathfinder', // Usually your repo name. onBrokenLinks: 'throw', @@ -68,7 +68,7 @@ const config = { position: 'right', }, { - href: 'https://github.com/eqlabs/pathfinder', + href: 'https://github.com/equilibriumco/pathfinder', label: 'GitHub', position: 'right', }, @@ -84,14 +84,14 @@ const config = { label: 'Running Pathfinder', to: '/getting-started/running-pathfinder', }, - { - label: 'Configuring Pathfinder', - to: '/getting-started/configuration', - }, - { - label: 'Interfacing with Pathfinder', - to: '/interacting-with-pathfinder/json-rpc-api', - }, + { + label: 'Configuring Pathfinder', + to: '/getting-started/configuration', + }, + { + label: 'Interfacing with Pathfinder', + to: '/interacting-with-pathfinder/json-rpc-api', + }, ], }, { @@ -99,7 +99,7 @@ const config = { items: [ { label: 'GitHub', - href: 'https://github.com/eqlabs/pathfinder', + href: 'https://github.com/equilibriumco/pathfinder', }, ], }, diff --git a/docs/package.json b/docs/package.json index 3c12fafa95..af6e059c48 100644 --- a/docs/package.json +++ b/docs/package.json @@ -20,8 +20,8 @@ "clsx": "^2.0.0", "prism-react-renderer": "^2.3.0", "prismjs": "^1.30.0", - "react": "^19.2.0", - "react-dom": "^19.2.0" + "react": "^19.2.4", + "react-dom": "^19.2.4" }, "devDependencies": { "@docusaurus/module-type-aliases": "^3.9.2", diff --git a/docs/yarn.lock b/docs/yarn.lock index 62c3ab4ab7..be13aa9dbd 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -2,50 +2,15 @@ # yarn lockfile v1 -"@ai-sdk/gateway@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@ai-sdk/gateway/-/gateway-2.0.0.tgz#d291c40fa869174af5b7230bd838d1028488a6fd" - integrity sha512-Gj0PuawK7NkZuyYgO/h5kDK/l6hFOjhLdTq3/Lli1FTl47iGmwhH1IZQpAL3Z09BeFYWakcwUmn02ovIm2wy9g== - dependencies: - "@ai-sdk/provider" "2.0.0" - "@ai-sdk/provider-utils" "3.0.12" - "@vercel/oidc" "3.0.3" - -"@ai-sdk/provider-utils@3.0.12": - version "3.0.12" - resolved "https://registry.yarnpkg.com/@ai-sdk/provider-utils/-/provider-utils-3.0.12.tgz#9812a0b7ce36f2cae81dff3afe70f0c4bde76213" - integrity sha512-ZtbdvYxdMoria+2SlNarEk6Hlgyf+zzcznlD55EAl+7VZvJaSg2sqPvwArY7L6TfDEDJsnCq0fdhBSkYo0Xqdg== +"@algolia/abtesting@1.15.2": + version "1.15.2" + resolved "https://registry.yarnpkg.com/@algolia/abtesting/-/abtesting-1.15.2.tgz#5c5e52daba3cf80d92eaf683c781e7f86d3b51b6" + integrity sha512-rF7vRVE61E0QORw8e2NNdnttcl3jmFMWS9B4hhdga12COe+lMa26bQLfcBn/Nbp9/AF/8gXdaRCPsVns3CnjsA== dependencies: - "@ai-sdk/provider" "2.0.0" - "@standard-schema/spec" "^1.0.0" - eventsource-parser "^3.0.5" - -"@ai-sdk/provider@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-2.0.0.tgz#b853c739d523b33675bc74b6c506b2c690bc602b" - integrity sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA== - dependencies: - json-schema "^0.4.0" - -"@ai-sdk/react@^2.0.30": - version "2.0.76" - resolved "https://registry.yarnpkg.com/@ai-sdk/react/-/react-2.0.76.tgz#eba2457f208d1762f16f807e1c4324cdf63bd969" - integrity sha512-ggAPzyaKJTqUWigpxMzI5DuC0Y3iEpDUPCgz6/6CpnKZY/iok+x5xiZhDemeaP0ILw5IQekV0kdgBR8JPgI8zQ== - dependencies: - "@ai-sdk/provider-utils" "3.0.12" - ai "5.0.76" - swr "^2.2.5" - throttleit "2.1.0" - -"@algolia/abtesting@1.6.1": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@algolia/abtesting/-/abtesting-1.6.1.tgz#1074f6df6a59b371f56fdb5ddc2caec1853bcc58" - integrity sha512-wV/gNRkzb7sI9vs1OneG129hwe3Q5zPj7zigz3Ps7M5Lpo2hSorrOnXNodHEOV+yXE/ks4Pd+G3CDFIjFTWhMQ== - dependencies: - "@algolia/client-common" "5.40.1" - "@algolia/requester-browser-xhr" "5.40.1" - "@algolia/requester-fetch" "5.40.1" - "@algolia/requester-node-http" "5.40.1" + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" "@algolia/autocomplete-core@1.19.2": version "1.19.2" @@ -67,155 +32,155 @@ resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.2.tgz#c0b7b8dc30a5c65b70501640e62b009535e4578f" integrity sha512-jEazxZTVD2nLrC+wYlVHQgpBoBB5KPStrJxLzsIFl6Kqd1AlG9sIAGl39V5tECLpIQzB3Qa2T6ZPJ1ChkwMK/w== -"@algolia/client-abtesting@5.40.1": - version "5.40.1" - resolved "https://registry.yarnpkg.com/@algolia/client-abtesting/-/client-abtesting-5.40.1.tgz#6674c20731e887a081edf7ea009fe00ce20537d4" - integrity sha512-cxKNATPY5t+Mv8XAVTI57altkaPH+DZi4uMrnexPxPHODMljhGYY+GDZyHwv9a+8CbZHcY372OkxXrDMZA4Lnw== - dependencies: - "@algolia/client-common" "5.40.1" - "@algolia/requester-browser-xhr" "5.40.1" - "@algolia/requester-fetch" "5.40.1" - "@algolia/requester-node-http" "5.40.1" - -"@algolia/client-analytics@5.40.1": - version "5.40.1" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-5.40.1.tgz#6550da491a59e9bc5112d9aeb1964e04b34543c5" - integrity sha512-XP008aMffJCRGAY8/70t+hyEyvqqV7YKm502VPu0+Ji30oefrTn2al7LXkITz7CK6I4eYXWRhN6NaIUi65F1OA== - dependencies: - "@algolia/client-common" "5.40.1" - "@algolia/requester-browser-xhr" "5.40.1" - "@algolia/requester-fetch" "5.40.1" - "@algolia/requester-node-http" "5.40.1" - -"@algolia/client-common@5.40.1": - version "5.40.1" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-5.40.1.tgz#df272c1eb491e7e4b15eaa44e4ad781630b4a438" - integrity sha512-gWfQuQUBtzUboJv/apVGZMoxSaB0M4Imwl1c9Ap+HpCW7V0KhjBddqF2QQt5tJZCOFsfNIgBbZDGsEPaeKUosw== - -"@algolia/client-insights@5.40.1": - version "5.40.1" - resolved "https://registry.yarnpkg.com/@algolia/client-insights/-/client-insights-5.40.1.tgz#db53a74d78b004b176213dfe84cb250323e64906" - integrity sha512-RTLjST/t+lsLMouQ4zeLJq2Ss+UNkLGyNVu+yWHanx6kQ3LT5jv8UvPwyht9s7R6jCPnlSI77WnL80J32ZuyJg== - dependencies: - "@algolia/client-common" "5.40.1" - "@algolia/requester-browser-xhr" "5.40.1" - "@algolia/requester-fetch" "5.40.1" - "@algolia/requester-node-http" "5.40.1" - -"@algolia/client-personalization@5.40.1": - version "5.40.1" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-5.40.1.tgz#9e9885a1855b893ddb3cefa484d5d08158b622f5" - integrity sha512-2FEK6bUomBzEYkTKzD0iRs7Ljtjb45rKK/VSkyHqeJnG+77qx557IeSO0qVFE3SfzapNcoytTofnZum0BQ6r3Q== - dependencies: - "@algolia/client-common" "5.40.1" - "@algolia/requester-browser-xhr" "5.40.1" - "@algolia/requester-fetch" "5.40.1" - "@algolia/requester-node-http" "5.40.1" - -"@algolia/client-query-suggestions@5.40.1": - version "5.40.1" - resolved "https://registry.yarnpkg.com/@algolia/client-query-suggestions/-/client-query-suggestions-5.40.1.tgz#45dd6d7ad53f87043d44ffe983ab2d2385c8270a" - integrity sha512-Nju4NtxAvXjrV2hHZNLKVJLXjOlW6jAXHef/CwNzk1b2qIrCWDO589ELi5ZHH1uiWYoYyBXDQTtHmhaOVVoyXg== - dependencies: - "@algolia/client-common" "5.40.1" - "@algolia/requester-browser-xhr" "5.40.1" - "@algolia/requester-fetch" "5.40.1" - "@algolia/requester-node-http" "5.40.1" - -"@algolia/client-search@5.40.1": - version "5.40.1" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-5.40.1.tgz#9e179ac583dd9ddf638139e24971bb9229897931" - integrity sha512-Mw6pAUF121MfngQtcUb5quZVqMC68pSYYjCRZkSITC085S3zdk+h/g7i6FxnVdbSU6OztxikSDMh1r7Z+4iPlA== - dependencies: - "@algolia/client-common" "5.40.1" - "@algolia/requester-browser-xhr" "5.40.1" - "@algolia/requester-fetch" "5.40.1" - "@algolia/requester-node-http" "5.40.1" +"@algolia/client-abtesting@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/client-abtesting/-/client-abtesting-5.49.2.tgz#0c7f46ba2789e30db53eb31f816aa31fe1ec750e" + integrity sha512-XyvKCm0RRmovMI/ChaAVjTwpZhXdbgt3iZofK914HeEHLqD1MUFFVLz7M0+Ou7F56UkHXwRbpHwb9xBDNopprQ== + dependencies: + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" + +"@algolia/client-analytics@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-5.49.2.tgz#d1eee1df4a7d50c05cd0448589b34d5e3b058237" + integrity sha512-jq/3qvtmj3NijZlhq7A1B0Cl41GfaBpjJxcwukGsYds6aMSCWrEAJ9pUqw/C9B3hAmILYKl7Ljz3N9SFvekD3Q== + dependencies: + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" + +"@algolia/client-common@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-5.49.2.tgz#cb93f1ea9a60f7ffec65474e075afb52900f2434" + integrity sha512-bn0biLequn3epobCfjUqCxlIlurLr4RHu7RaE4trgN+RDcUq6HCVC3/yqq1hwbNYpVtulnTOJzcaxYlSr1fnuw== + +"@algolia/client-insights@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/client-insights/-/client-insights-5.49.2.tgz#fdbd2be74bfe805cddf249f67f95f65323c5f5dd" + integrity sha512-z14wfFs1T3eeYbCArC8pvntAWsPo9f6hnUGoj8IoRUJTwgJiiySECkm8bmmV47/x0oGHfsVn3kBdjMX0yq0sNA== + dependencies: + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" + +"@algolia/client-personalization@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-5.49.2.tgz#3b8fc9eb85b24dbcb2ee80dae9af91bd12490148" + integrity sha512-GpRf7yuuAX93+Qt0JGEJZwgtL0MFdjFO9n7dn8s2pA9mTjzl0Sc5+uTk1VPbIAuf7xhCP9Mve+URGb6J+EYxgA== + dependencies: + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" + +"@algolia/client-query-suggestions@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/client-query-suggestions/-/client-query-suggestions-5.49.2.tgz#e5d9ed73fe5f0afc8feddfc68d4691d5963e8c57" + integrity sha512-HZwApmNkp0DiAjZcLYdQLddcG4Agb88OkojiAHGgcm5DVXobT5uSZ9lmyrbw/tmQBJwgu2CNw4zTyXoIB7YbPA== + dependencies: + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" + +"@algolia/client-search@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-5.49.2.tgz#3c823ffaf333ce70fedfb3d45361661c8b227806" + integrity sha512-y1IOpG6OSmTpGg/CT0YBb/EAhR2nsC18QWp9Jy8HO9iGySpcwaTvs5kHa17daP3BMTwWyaX9/1tDTDQshZzXdg== + dependencies: + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" "@algolia/events@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== -"@algolia/ingestion@1.40.1": - version "1.40.1" - resolved "https://registry.yarnpkg.com/@algolia/ingestion/-/ingestion-1.40.1.tgz#eea0793d6e89b424d742d726de7419f5bcaefa16" - integrity sha512-z+BPlhs45VURKJIxsR99NNBWpUEEqIgwt10v/fATlNxc4UlXvALdOsWzaFfe89/lbP5Bu4+mbO59nqBC87ZM/g== +"@algolia/ingestion@1.49.2": + version "1.49.2" + resolved "https://registry.yarnpkg.com/@algolia/ingestion/-/ingestion-1.49.2.tgz#99626cd9b11925e1aae5db59836821d2e7e2c892" + integrity sha512-YYJRjaZ2bqk923HxE4um7j/Cm3/xoSkF2HC2ZweOF8cXL3sqnlndSUYmCaxHFjNPWLaSHk2IfssX6J/tdKTULw== dependencies: - "@algolia/client-common" "5.40.1" - "@algolia/requester-browser-xhr" "5.40.1" - "@algolia/requester-fetch" "5.40.1" - "@algolia/requester-node-http" "5.40.1" + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" -"@algolia/monitoring@1.40.1": - version "1.40.1" - resolved "https://registry.yarnpkg.com/@algolia/monitoring/-/monitoring-1.40.1.tgz#50bf7286f3ba0fae220d7f5e0bf73c1b671f8958" - integrity sha512-VJMUMbO0wD8Rd2VVV/nlFtLJsOAQvjnVNGkMkspFiFhpBA7s/xJOb+fJvvqwKFUjbKTUA7DjiSi1ljSMYBasXg== +"@algolia/monitoring@1.49.2": + version "1.49.2" + resolved "https://registry.yarnpkg.com/@algolia/monitoring/-/monitoring-1.49.2.tgz#5c550df1b073de97e3d38a2e8d50f17e90badc52" + integrity sha512-9WgH+Dha39EQQyGKCHlGYnxW/7W19DIrEbCEbnzwAMpGAv1yTWCHMPXHxYa+LcL3eCp2V/5idD1zHNlIKmHRHg== dependencies: - "@algolia/client-common" "5.40.1" - "@algolia/requester-browser-xhr" "5.40.1" - "@algolia/requester-fetch" "5.40.1" - "@algolia/requester-node-http" "5.40.1" + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" -"@algolia/recommend@5.40.1": - version "5.40.1" - resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-5.40.1.tgz#db8395ce0d17ccba03a877b42dce1f205bbdf5b9" - integrity sha512-ehvJLadKVwTp9Scg9NfzVSlBKH34KoWOQNTaN8i1Ac64AnO6iH2apJVSP6GOxssaghZ/s8mFQsDH3QIZoluFHA== +"@algolia/recommend@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-5.49.2.tgz#ace9e988141dd627f7ac3a0e38d9e254bb006490" + integrity sha512-K7Gp5u+JtVYgaVpBxF5rGiM+Ia8SsMdcAJMTDV93rwh00DKNllC19o1g+PwrDjDvyXNrnTEbofzbTs2GLfFyKA== dependencies: - "@algolia/client-common" "5.40.1" - "@algolia/requester-browser-xhr" "5.40.1" - "@algolia/requester-fetch" "5.40.1" - "@algolia/requester-node-http" "5.40.1" + "@algolia/client-common" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" -"@algolia/requester-browser-xhr@5.40.1": - version "5.40.1" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.40.1.tgz#cddc52f7dc8e4b4a1051f90e55336d9573df62af" - integrity sha512-PbidVsPurUSQIr6X9/7s34mgOMdJnn0i6p+N6Ab+lsNhY5eiu+S33kZEpZwkITYBCIbhzDLOvb7xZD3gDi+USA== +"@algolia/requester-browser-xhr@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.49.2.tgz#4493ed41dc84948693b34174ccc08ac5dfabd3dd" + integrity sha512-3UhYCcWX6fbtN8ABcxZlhaQEwXFh3CsFtARyyadQShHMPe3mJV9Wel4FpJTa+seugRkbezFz0tt6aPTZSYTBuA== dependencies: - "@algolia/client-common" "5.40.1" + "@algolia/client-common" "5.49.2" -"@algolia/requester-fetch@5.40.1": - version "5.40.1" - resolved "https://registry.yarnpkg.com/@algolia/requester-fetch/-/requester-fetch-5.40.1.tgz#3ec36412f7d10f4270a59e456d8e71a2eda58ea8" - integrity sha512-ThZ5j6uOZCF11fMw9IBkhigjOYdXGXQpj6h4k+T9UkZrF2RlKcPynFzDeRgaLdpYk8Yn3/MnFbwUmib7yxj5Lw== +"@algolia/requester-fetch@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/requester-fetch/-/requester-fetch-5.49.2.tgz#fd64e1ec726ffb63dce22112354119125c67a27e" + integrity sha512-G94VKSGbsr+WjsDDOBe5QDQ82QYgxvpxRGJfCHZBnYKYsy/jv9qGIDb93biza+LJWizQBUtDj7bZzp3QZyzhPQ== dependencies: - "@algolia/client-common" "5.40.1" + "@algolia/client-common" "5.49.2" -"@algolia/requester-node-http@5.40.1": - version "5.40.1" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-5.40.1.tgz#ed3a9b1846f7d6be88839522ca0d337159d5ff66" - integrity sha512-H1gYPojO6krWHnUXu/T44DrEun/Wl95PJzMXRcM/szstNQczSbwq6wIFJPI9nyE95tarZfUNU3rgorT+wZ6iCQ== +"@algolia/requester-node-http@5.49.2": + version "5.49.2" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-5.49.2.tgz#ac71c6502b8ba8760d22afd3f38620934a28a68f" + integrity sha512-UuihBGHafG/ENsrcTGAn5rsOffrCIRuHMOsD85fZGLEY92ate+BMTUqxz60dv5zerh8ZumN4bRm8eW2z9L11jA== dependencies: - "@algolia/client-common" "5.40.1" + "@algolia/client-common" "5.49.2" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" - integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c" + integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== dependencies: - "@babel/helper-validator-identifier" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" js-tokens "^4.0.0" picocolors "^1.1.1" -"@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.0": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.4.tgz#96fdf1af1b8859c8474ab39c295312bfb7c24b04" - integrity sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw== +"@babel/compat-data@^7.28.6", "@babel/compat-data@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.29.0.tgz#00d03e8c0ac24dd9be942c5370990cbe1f17d88d" + integrity sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg== "@babel/core@^7.21.3", "@babel/core@^7.25.9": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.4.tgz#12a550b8794452df4c8b084f95003bce1742d496" - integrity sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.3" - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-module-transforms" "^7.28.3" - "@babel/helpers" "^7.28.4" - "@babel/parser" "^7.28.4" - "@babel/template" "^7.27.2" - "@babel/traverse" "^7.28.4" - "@babel/types" "^7.28.4" + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.29.0.tgz#5286ad785df7f79d656e88ce86e650d16ca5f322" + integrity sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA== + dependencies: + "@babel/code-frame" "^7.29.0" + "@babel/generator" "^7.29.0" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-module-transforms" "^7.28.6" + "@babel/helpers" "^7.28.6" + "@babel/parser" "^7.29.0" + "@babel/template" "^7.28.6" + "@babel/traverse" "^7.29.0" + "@babel/types" "^7.29.0" "@jridgewell/remapping" "^2.3.5" convert-source-map "^2.0.0" debug "^4.1.0" @@ -223,13 +188,13 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.25.9", "@babel/generator@^7.28.3": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.3.tgz#9626c1741c650cbac39121694a0f2d7451b8ef3e" - integrity sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw== +"@babel/generator@^7.25.9", "@babel/generator@^7.29.0": + version "7.29.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.1.tgz#d09876290111abbb00ef962a7b83a5307fba0d50" + integrity sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw== dependencies: - "@babel/parser" "^7.28.3" - "@babel/types" "^7.28.2" + "@babel/parser" "^7.29.0" + "@babel/types" "^7.29.0" "@jridgewell/gen-mapping" "^0.3.12" "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" @@ -241,79 +206,79 @@ dependencies: "@babel/types" "^7.27.3" -"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" - integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== +"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz#32c4a3f41f12ed1532179b108a4d746e105c2b25" + integrity sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA== dependencies: - "@babel/compat-data" "^7.27.2" + "@babel/compat-data" "^7.28.6" "@babel/helper-validator-option" "^7.27.1" browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz#3e747434ea007910c320c4d39a6b46f20f371d46" - integrity sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg== +"@babel/helper-create-class-features-plugin@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz#611ff5482da9ef0db6291bcd24303400bca170fb" + integrity sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow== dependencies: "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-member-expression-to-functions" "^7.28.5" "@babel/helper-optimise-call-expression" "^7.27.1" - "@babel/helper-replace-supers" "^7.27.1" + "@babel/helper-replace-supers" "^7.28.6" "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - "@babel/traverse" "^7.28.3" + "@babel/traverse" "^7.28.6" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz#05b0882d97ba1d4d03519e4bce615d70afa18c53" - integrity sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.27.1", "@babel/helper-create-regexp-features-plugin@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz#7c1ddd64b2065c7f78034b25b43346a7e19ed997" + integrity sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw== dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - regexpu-core "^6.2.0" + "@babel/helper-annotate-as-pure" "^7.27.3" + regexpu-core "^6.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz#742ccf1cb003c07b48859fc9fa2c1bbe40e5f753" - integrity sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg== +"@babel/helper-define-polyfill-provider@^0.6.5", "@babel/helper-define-polyfill-provider@^0.6.7": + version "0.6.7" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.7.tgz#8d01cba97de419115ad3497573a476db15dc6c6a" + integrity sha512-6Fqi8MtQ/PweQ9xvux65emkLQ83uB+qAVtfHkC9UodyHMIZdxNI01HjLCLUtybElp2KY2XNE0nOgyP1E1vXw9w== dependencies: - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-plugin-utils" "^7.27.1" - debug "^4.4.1" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + debug "^4.4.3" lodash.debounce "^4.0.8" - resolve "^1.22.10" + resolve "^1.22.11" "@babel/helper-globals@^7.28.0": version "7.28.0" resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== -"@babel/helper-member-expression-to-functions@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz#ea1211276be93e798ce19037da6f06fbb994fa44" - integrity sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA== +"@babel/helper-member-expression-to-functions@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz#f3e07a10be37ed7a63461c63e6929575945a6150" + integrity sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg== dependencies: - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" -"@babel/helper-module-imports@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" - integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== +"@babel/helper-module-imports@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz#60632cbd6ffb70b22823187201116762a03e2d5c" + integrity sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw== dependencies: - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" + "@babel/traverse" "^7.28.6" + "@babel/types" "^7.28.6" -"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.3": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6" - integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== +"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz#9312d9d9e56edc35aeb6e95c25d4106b50b9eb1e" + integrity sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA== dependencies: - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" - "@babel/traverse" "^7.28.3" + "@babel/helper-module-imports" "^7.28.6" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.28.6" "@babel/helper-optimise-call-expression@^7.27.1": version "7.27.1" @@ -322,10 +287,10 @@ dependencies: "@babel/types" "^7.27.1" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" - integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.28.6", "@babel/helper-plugin-utils@^7.8.0": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz#6f13ea251b68c8532e985fd532f28741a8af9ac8" + integrity sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug== "@babel/helper-remap-async-to-generator@^7.27.1": version "7.27.1" @@ -336,14 +301,14 @@ "@babel/helper-wrap-function" "^7.27.1" "@babel/traverse" "^7.27.1" -"@babel/helper-replace-supers@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz#b1ed2d634ce3bdb730e4b52de30f8cccfd692bc0" - integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA== +"@babel/helper-replace-supers@^7.27.1", "@babel/helper-replace-supers@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz#94aa9a1d7423a00aead3f204f78834ce7d53fe44" + integrity sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg== dependencies: - "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-member-expression-to-functions" "^7.28.5" "@babel/helper-optimise-call-expression" "^7.27.1" - "@babel/traverse" "^7.27.1" + "@babel/traverse" "^7.28.6" "@babel/helper-skip-transparent-expression-wrappers@^7.27.1": version "7.27.1" @@ -358,10 +323,10 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== -"@babel/helper-validator-identifier@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" - integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== +"@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== "@babel/helper-validator-option@^7.27.1": version "7.27.1" @@ -369,36 +334,36 @@ integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== "@babel/helper-wrap-function@^7.27.1": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz#fe4872092bc1438ffd0ce579e6f699609f9d0a7a" - integrity sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g== + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz#4e349ff9222dab69a93a019cc296cdd8442e279a" + integrity sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ== dependencies: - "@babel/template" "^7.27.2" - "@babel/traverse" "^7.28.3" - "@babel/types" "^7.28.2" + "@babel/template" "^7.28.6" + "@babel/traverse" "^7.28.6" + "@babel/types" "^7.28.6" -"@babel/helpers@^7.28.4": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827" - integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== +"@babel/helpers@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.6.tgz#fca903a313ae675617936e8998b814c415cbf5d7" + integrity sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw== dependencies: - "@babel/template" "^7.27.2" - "@babel/types" "^7.28.4" + "@babel/template" "^7.28.6" + "@babel/types" "^7.28.6" -"@babel/parser@^7.27.2", "@babel/parser@^7.28.3", "@babel/parser@^7.28.4": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.4.tgz#da25d4643532890932cc03f7705fe19637e03fa8" - integrity sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg== +"@babel/parser@^7.28.6", "@babel/parser@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.0.tgz#669ef345add7d057e92b7ed15f0bac07611831b6" + integrity sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww== dependencies: - "@babel/types" "^7.28.4" + "@babel/types" "^7.29.0" -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz#61dd8a8e61f7eb568268d1b5f129da3eee364bf9" - integrity sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz#fbde57974707bbfa0376d34d425ff4fa6c732421" + integrity sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q== dependencies: "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.27.1" + "@babel/traverse" "^7.28.5" "@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": version "7.27.1" @@ -423,13 +388,13 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" "@babel/plugin-transform-optional-chaining" "^7.27.1" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.28.3": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz#373f6e2de0016f73caf8f27004f61d167743742a" - integrity sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz#0e8289cec28baaf05d54fd08d81ae3676065f69f" + integrity sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.28.3" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/traverse" "^7.28.6" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -443,33 +408,33 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-import-assertions@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz#88894aefd2b03b5ee6ad1562a7c8e1587496aecd" - integrity sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg== +"@babel/plugin-syntax-import-assertions@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz#ae9bc1923a6ba527b70104dd2191b0cd872c8507" + integrity sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-syntax-import-attributes@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07" - integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== +"@babel/plugin-syntax-import-attributes@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz#b71d5914665f60124e133696f17cd7669062c503" + integrity sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-syntax-jsx@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz#2f9beb5eff30fa507c5532d107daac7b888fa34c" - integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w== +"@babel/plugin-syntax-jsx@^7.27.1", "@babel/plugin-syntax-jsx@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz#f8ca28bbd84883b5fea0e447c635b81ba73997ee" + integrity sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-syntax-typescript@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz#5147d29066a793450f220c63fa3a9431b7e6dd18" - integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ== +"@babel/plugin-syntax-typescript@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz#c7b2ddf1d0a811145b1de800d1abd146af92e3a2" + integrity sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -486,22 +451,22 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-async-generator-functions@^7.28.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz#1276e6c7285ab2cd1eccb0bc7356b7a69ff842c2" - integrity sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q== +"@babel/plugin-transform-async-generator-functions@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz#63ed829820298f0bf143d5a4a68fb8c06ffd742f" + integrity sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/helper-remap-async-to-generator" "^7.27.1" - "@babel/traverse" "^7.28.0" + "@babel/traverse" "^7.29.0" -"@babel/plugin-transform-async-to-generator@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz#9a93893b9379b39466c74474f55af03de78c66e7" - integrity sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA== +"@babel/plugin-transform-async-to-generator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz#bd97b42237b2d1bc90d74bcb486c39be5b4d7e77" + integrity sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g== dependencies: - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-module-imports" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/helper-remap-async-to-generator" "^7.27.1" "@babel/plugin-transform-block-scoped-functions@^7.27.1": @@ -511,64 +476,64 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-block-scoping@^7.28.0": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.4.tgz#e19ac4ddb8b7858bac1fd5c1be98a994d9726410" - integrity sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A== +"@babel/plugin-transform-block-scoping@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz#e1ef5633448c24e76346125c2534eeb359699a99" + integrity sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-class-properties@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz#dd40a6a370dfd49d32362ae206ddaf2bb082a925" - integrity sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA== +"@babel/plugin-transform-class-properties@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz#d274a4478b6e782d9ea987fda09bdb6d28d66b72" + integrity sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-class-static-block@^7.28.3": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz#d1b8e69b54c9993bc558203e1f49bfc979bfd852" - integrity sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg== +"@babel/plugin-transform-class-static-block@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz#1257491e8259c6d125ac4d9a6f39f9d2bf3dba70" + integrity sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.28.3" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-classes@^7.28.3": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz#75d66175486788c56728a73424d67cbc7473495c" - integrity sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA== +"@babel/plugin-transform-classes@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz#8f6fb79ba3703978e701ce2a97e373aae7dda4b7" + integrity sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q== dependencies: "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-compilation-targets" "^7.28.6" "@babel/helper-globals" "^7.28.0" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-replace-supers" "^7.27.1" - "@babel/traverse" "^7.28.4" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-replace-supers" "^7.28.6" + "@babel/traverse" "^7.28.6" -"@babel/plugin-transform-computed-properties@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz#81662e78bf5e734a97982c2b7f0a793288ef3caa" - integrity sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw== +"@babel/plugin-transform-computed-properties@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz#936824fc71c26cb5c433485776d79c8e7b0202d2" + integrity sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/template" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/template" "^7.28.6" -"@babel/plugin-transform-destructuring@^7.28.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz#0f156588f69c596089b7d5b06f5af83d9aa7f97a" - integrity sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A== +"@babel/plugin-transform-destructuring@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz#b8402764df96179a2070bb7b501a1586cf8ad7a7" + integrity sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw== dependencies: "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.28.0" + "@babel/traverse" "^7.28.5" -"@babel/plugin-transform-dotall-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz#aa6821de864c528b1fecf286f0a174e38e826f4d" - integrity sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw== +"@babel/plugin-transform-dotall-regex@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz#def31ed84e0fb6e25c71e53c124e7b76a4ab8e61" + integrity sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-duplicate-keys@^7.27.1": version "7.27.1" @@ -577,13 +542,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz#5043854ca620a94149372e69030ff8cb6a9eb0ec" - integrity sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz#8014b8a6cfd0e7b92762724443bf0d2400f26df1" + integrity sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-dynamic-import@^7.27.1": version "7.27.1" @@ -592,20 +557,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-explicit-resource-management@^7.28.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz#45be6211b778dbf4b9d54c4e8a2b42fa72e09a1a" - integrity sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ== +"@babel/plugin-transform-explicit-resource-management@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz#dd6788f982c8b77e86779d1d029591e39d9d8be7" + integrity sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/plugin-transform-destructuring" "^7.28.5" -"@babel/plugin-transform-exponentiation-operator@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz#fc497b12d8277e559747f5a3ed868dd8064f83e1" - integrity sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ== +"@babel/plugin-transform-exponentiation-operator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz#5e477eb7eafaf2ab5537a04aaafcf37e2d7f1091" + integrity sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-export-namespace-from@^7.27.1": version "7.27.1" @@ -631,12 +596,12 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/traverse" "^7.27.1" -"@babel/plugin-transform-json-strings@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz#a2e0ce6ef256376bd527f290da023983527a4f4c" - integrity sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q== +"@babel/plugin-transform-json-strings@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz#4c8c15b2dc49e285d110a4cf3dac52fd2dfc3038" + integrity sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-literals@^7.27.1": version "7.27.1" @@ -645,12 +610,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-logical-assignment-operators@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz#890cb20e0270e0e5bebe3f025b434841c32d5baa" - integrity sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw== +"@babel/plugin-transform-logical-assignment-operators@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz#53028a3d77e33c50ef30a8fce5ca17065936e605" + integrity sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-member-expression-literals@^7.27.1": version "7.27.1" @@ -667,23 +632,23 @@ "@babel/helper-module-transforms" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-commonjs@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz#8e44ed37c2787ecc23bdc367f49977476614e832" - integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw== +"@babel/plugin-transform-modules-commonjs@^7.27.1", "@babel/plugin-transform-modules-commonjs@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz#c0232e0dfe66a734cc4ad0d5e75fc3321b6fdef1" + integrity sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA== dependencies: - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-module-transforms" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-modules-systemjs@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz#00e05b61863070d0f3292a00126c16c0e024c4ed" - integrity sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA== +"@babel/plugin-transform-modules-systemjs@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz#e458a95a17807c415924106a3ff188a3b8dee964" + integrity sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ== dependencies: - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" - "@babel/traverse" "^7.27.1" + "@babel/helper-module-transforms" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.29.0" "@babel/plugin-transform-modules-umd@^7.27.1": version "7.27.1" @@ -693,13 +658,13 @@ "@babel/helper-module-transforms" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-named-capturing-groups-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz#f32b8f7818d8fc0cc46ee20a8ef75f071af976e1" - integrity sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng== +"@babel/plugin-transform-named-capturing-groups-regex@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz#a26cd51e09c4718588fc4cce1c5d1c0152102d6a" + integrity sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-new-target@^7.27.1": version "7.27.1" @@ -708,30 +673,30 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-nullish-coalescing-operator@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz#4f9d3153bf6782d73dd42785a9d22d03197bc91d" - integrity sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA== +"@babel/plugin-transform-nullish-coalescing-operator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz#9bc62096e90ab7a887f3ca9c469f6adec5679757" + integrity sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-numeric-separator@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz#614e0b15cc800e5997dadd9bd6ea524ed6c819c6" - integrity sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw== +"@babel/plugin-transform-numeric-separator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz#1310b0292762e7a4a335df5f580c3320ee7d9e9f" + integrity sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-object-rest-spread@^7.28.0": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz#9ee1ceca80b3e6c4bac9247b2149e36958f7f98d" - integrity sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew== +"@babel/plugin-transform-object-rest-spread@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz#fdd4bc2d72480db6ca42aed5c051f148d7b067f7" + integrity sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA== dependencies: - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/plugin-transform-destructuring" "^7.28.5" "@babel/plugin-transform-parameters" "^7.27.7" - "@babel/traverse" "^7.28.4" + "@babel/traverse" "^7.28.6" "@babel/plugin-transform-object-super@^7.27.1": version "7.27.1" @@ -741,19 +706,19 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/helper-replace-supers" "^7.27.1" -"@babel/plugin-transform-optional-catch-binding@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz#84c7341ebde35ccd36b137e9e45866825072a30c" - integrity sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q== +"@babel/plugin-transform-optional-catch-binding@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz#75107be14c78385978201a49c86414a150a20b4c" + integrity sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-optional-chaining@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz#874ce3c4f06b7780592e946026eb76a32830454f" - integrity sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg== +"@babel/plugin-transform-optional-chaining@^7.27.1", "@babel/plugin-transform-optional-chaining@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz#926cf150bd421fc8362753e911b4a1b1ce4356cd" + integrity sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" "@babel/plugin-transform-parameters@^7.27.7": @@ -763,22 +728,22 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-private-methods@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz#fdacbab1c5ed81ec70dfdbb8b213d65da148b6af" - integrity sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA== +"@babel/plugin-transform-private-methods@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz#c76fbfef3b86c775db7f7c106fff544610bdb411" + integrity sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-private-property-in-object@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz#4dbbef283b5b2f01a21e81e299f76e35f900fb11" - integrity sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ== +"@babel/plugin-transform-private-property-in-object@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz#4fafef1e13129d79f1d75ac180c52aafefdb2811" + integrity sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA== dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - "@babel/helper-create-class-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-create-class-features-plugin" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-property-literals@^7.27.1": version "7.27.1" @@ -794,7 +759,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-react-display-name@^7.27.1": +"@babel/plugin-transform-react-display-name@^7.28.0": version "7.28.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz#6f20a7295fea7df42eb42fed8f896813f5b934de" integrity sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA== @@ -809,15 +774,15 @@ "@babel/plugin-transform-react-jsx" "^7.27.1" "@babel/plugin-transform-react-jsx@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz#1023bc94b78b0a2d68c82b5e96aed573bcfb9db0" - integrity sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw== + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz#f51cb70a90b9529fbb71ee1f75ea27b7078eed62" + integrity sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow== dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/plugin-syntax-jsx" "^7.27.1" - "@babel/types" "^7.27.1" + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-module-imports" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/plugin-syntax-jsx" "^7.28.6" + "@babel/types" "^7.28.6" "@babel/plugin-transform-react-pure-annotations@^7.27.1": version "7.27.1" @@ -827,20 +792,20 @@ "@babel/helper-annotate-as-pure" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-regenerator@^7.28.3": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz#9d3fa3bebb48ddd0091ce5729139cd99c67cea51" - integrity sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA== +"@babel/plugin-transform-regenerator@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz#dec237cec1b93330876d6da9992c4abd42c9d18b" + integrity sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-regexp-modifiers@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz#df9ba5577c974e3f1449888b70b76169998a6d09" - integrity sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA== +"@babel/plugin-transform-regexp-modifiers@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz#7ef0163bd8b4a610481b2509c58cf217f065290b" + integrity sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-reserved-words@^7.27.1": version "7.27.1" @@ -850,12 +815,12 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-runtime@^7.25.9": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz#f5990a1b2d2bde950ed493915e0719841c8d0eaa" - integrity sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg== + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz#a5fded13cc656700804bfd6e5ebd7fffd5266803" + integrity sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w== dependencies: - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-module-imports" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" babel-plugin-polyfill-corejs2 "^0.4.14" babel-plugin-polyfill-corejs3 "^0.13.0" babel-plugin-polyfill-regenerator "^0.6.5" @@ -868,12 +833,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-spread@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz#1a264d5fc12750918f50e3fe3e24e437178abb08" - integrity sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q== +"@babel/plugin-transform-spread@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz#40a2b423f6db7b70f043ad027a58bcb44a9757b6" + integrity sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" "@babel/plugin-transform-sticky-regex@^7.27.1": @@ -897,16 +862,16 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-typescript@^7.27.1": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz#796cbd249ab56c18168b49e3e1d341b72af04a6b" - integrity sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg== +"@babel/plugin-transform-typescript@^7.28.5": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz#1e93d96da8adbefdfdade1d4956f73afa201a158" + integrity sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw== dependencies: "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-create-class-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - "@babel/plugin-syntax-typescript" "^7.27.1" + "@babel/plugin-syntax-typescript" "^7.28.6" "@babel/plugin-transform-unicode-escapes@^7.27.1": version "7.27.1" @@ -915,13 +880,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-property-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz#bdfe2d3170c78c5691a3c3be934c8c0087525956" - integrity sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q== +"@babel/plugin-transform-unicode-property-regex@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz#63a7a6c21a0e75dae9b1861454111ea5caa22821" + integrity sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-unicode-regex@^7.27.1": version "7.27.1" @@ -931,88 +896,88 @@ "@babel/helper-create-regexp-features-plugin" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-sets-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz#6ab706d10f801b5c72da8bb2548561fa04193cd1" - integrity sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw== +"@babel/plugin-transform-unicode-sets-regex@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz#924912914e5df9fe615ec472f88ff4788ce04d4e" + integrity sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/preset-env@^7.20.2", "@babel/preset-env@^7.25.9": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.28.3.tgz#2b18d9aff9e69643789057ae4b942b1654f88187" - integrity sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg== + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.29.0.tgz#c55db400c515a303662faaefd2d87e796efa08d0" + integrity sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w== dependencies: - "@babel/compat-data" "^7.28.0" - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/compat-data" "^7.29.0" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/helper-validator-option" "^7.27.1" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.28.5" "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.28.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.28.6" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions" "^7.27.1" - "@babel/plugin-syntax-import-attributes" "^7.27.1" + "@babel/plugin-syntax-import-assertions" "^7.28.6" + "@babel/plugin-syntax-import-attributes" "^7.28.6" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.27.1" - "@babel/plugin-transform-async-generator-functions" "^7.28.0" - "@babel/plugin-transform-async-to-generator" "^7.27.1" + "@babel/plugin-transform-async-generator-functions" "^7.29.0" + "@babel/plugin-transform-async-to-generator" "^7.28.6" "@babel/plugin-transform-block-scoped-functions" "^7.27.1" - "@babel/plugin-transform-block-scoping" "^7.28.0" - "@babel/plugin-transform-class-properties" "^7.27.1" - "@babel/plugin-transform-class-static-block" "^7.28.3" - "@babel/plugin-transform-classes" "^7.28.3" - "@babel/plugin-transform-computed-properties" "^7.27.1" - "@babel/plugin-transform-destructuring" "^7.28.0" - "@babel/plugin-transform-dotall-regex" "^7.27.1" + "@babel/plugin-transform-block-scoping" "^7.28.6" + "@babel/plugin-transform-class-properties" "^7.28.6" + "@babel/plugin-transform-class-static-block" "^7.28.6" + "@babel/plugin-transform-classes" "^7.28.6" + "@babel/plugin-transform-computed-properties" "^7.28.6" + "@babel/plugin-transform-destructuring" "^7.28.5" + "@babel/plugin-transform-dotall-regex" "^7.28.6" "@babel/plugin-transform-duplicate-keys" "^7.27.1" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.29.0" "@babel/plugin-transform-dynamic-import" "^7.27.1" - "@babel/plugin-transform-explicit-resource-management" "^7.28.0" - "@babel/plugin-transform-exponentiation-operator" "^7.27.1" + "@babel/plugin-transform-explicit-resource-management" "^7.28.6" + "@babel/plugin-transform-exponentiation-operator" "^7.28.6" "@babel/plugin-transform-export-namespace-from" "^7.27.1" "@babel/plugin-transform-for-of" "^7.27.1" "@babel/plugin-transform-function-name" "^7.27.1" - "@babel/plugin-transform-json-strings" "^7.27.1" + "@babel/plugin-transform-json-strings" "^7.28.6" "@babel/plugin-transform-literals" "^7.27.1" - "@babel/plugin-transform-logical-assignment-operators" "^7.27.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.28.6" "@babel/plugin-transform-member-expression-literals" "^7.27.1" "@babel/plugin-transform-modules-amd" "^7.27.1" - "@babel/plugin-transform-modules-commonjs" "^7.27.1" - "@babel/plugin-transform-modules-systemjs" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.28.6" + "@babel/plugin-transform-modules-systemjs" "^7.29.0" "@babel/plugin-transform-modules-umd" "^7.27.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.29.0" "@babel/plugin-transform-new-target" "^7.27.1" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.27.1" - "@babel/plugin-transform-numeric-separator" "^7.27.1" - "@babel/plugin-transform-object-rest-spread" "^7.28.0" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.28.6" + "@babel/plugin-transform-numeric-separator" "^7.28.6" + "@babel/plugin-transform-object-rest-spread" "^7.28.6" "@babel/plugin-transform-object-super" "^7.27.1" - "@babel/plugin-transform-optional-catch-binding" "^7.27.1" - "@babel/plugin-transform-optional-chaining" "^7.27.1" + "@babel/plugin-transform-optional-catch-binding" "^7.28.6" + "@babel/plugin-transform-optional-chaining" "^7.28.6" "@babel/plugin-transform-parameters" "^7.27.7" - "@babel/plugin-transform-private-methods" "^7.27.1" - "@babel/plugin-transform-private-property-in-object" "^7.27.1" + "@babel/plugin-transform-private-methods" "^7.28.6" + "@babel/plugin-transform-private-property-in-object" "^7.28.6" "@babel/plugin-transform-property-literals" "^7.27.1" - "@babel/plugin-transform-regenerator" "^7.28.3" - "@babel/plugin-transform-regexp-modifiers" "^7.27.1" + "@babel/plugin-transform-regenerator" "^7.29.0" + "@babel/plugin-transform-regexp-modifiers" "^7.28.6" "@babel/plugin-transform-reserved-words" "^7.27.1" "@babel/plugin-transform-shorthand-properties" "^7.27.1" - "@babel/plugin-transform-spread" "^7.27.1" + "@babel/plugin-transform-spread" "^7.28.6" "@babel/plugin-transform-sticky-regex" "^7.27.1" "@babel/plugin-transform-template-literals" "^7.27.1" "@babel/plugin-transform-typeof-symbol" "^7.27.1" "@babel/plugin-transform-unicode-escapes" "^7.27.1" - "@babel/plugin-transform-unicode-property-regex" "^7.27.1" + "@babel/plugin-transform-unicode-property-regex" "^7.28.6" "@babel/plugin-transform-unicode-regex" "^7.27.1" - "@babel/plugin-transform-unicode-sets-regex" "^7.27.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.28.6" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.14" - babel-plugin-polyfill-corejs3 "^0.13.0" - babel-plugin-polyfill-regenerator "^0.6.5" - core-js-compat "^3.43.0" + babel-plugin-polyfill-corejs2 "^0.4.15" + babel-plugin-polyfill-corejs3 "^0.14.0" + babel-plugin-polyfill-regenerator "^0.6.6" + core-js-compat "^3.48.0" semver "^6.3.1" "@babel/preset-modules@0.1.6-no-external-plugins": @@ -1025,69 +990,69 @@ esutils "^2.0.2" "@babel/preset-react@^7.18.6", "@babel/preset-react@^7.25.9": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.27.1.tgz#86ea0a5ca3984663f744be2fd26cb6747c3fd0ec" - integrity sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.28.5.tgz#6fcc0400fa79698433d653092c3919bb4b0878d9" + integrity sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/helper-validator-option" "^7.27.1" - "@babel/plugin-transform-react-display-name" "^7.27.1" + "@babel/plugin-transform-react-display-name" "^7.28.0" "@babel/plugin-transform-react-jsx" "^7.27.1" "@babel/plugin-transform-react-jsx-development" "^7.27.1" "@babel/plugin-transform-react-pure-annotations" "^7.27.1" "@babel/preset-typescript@^7.21.0", "@babel/preset-typescript@^7.25.9": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz#190742a6428d282306648a55b0529b561484f912" - integrity sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz#540359efa3028236958466342967522fd8f2a60c" + integrity sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/helper-validator-option" "^7.27.1" "@babel/plugin-syntax-jsx" "^7.27.1" "@babel/plugin-transform-modules-commonjs" "^7.27.1" - "@babel/plugin-transform-typescript" "^7.27.1" + "@babel/plugin-transform-typescript" "^7.28.5" "@babel/runtime-corejs3@^7.25.9": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz#c25be39c7997ce2f130d70b9baecb8ed94df93fa" - integrity sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ== + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.29.0.tgz#56cd28ec515364482afeb880b476936a702461b9" + integrity sha512-TgUkdp71C9pIbBcHudc+gXZnihEDOjUAmXO1VO4HHGES7QLZcShR0stfKIxLSNIYx2fqhmJChOjm/wkF8wv4gA== dependencies: - core-js-pure "^3.43.0" + core-js-pure "^3.48.0" "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.25.9": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" - integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== - -"@babel/template@^7.27.1", "@babel/template@^7.27.2": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" - integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/parser" "^7.27.2" - "@babel/types" "^7.27.1" - -"@babel/traverse@^7.25.9", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.4.tgz#8d456101b96ab175d487249f60680221692b958b" - integrity sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.3" + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.6.tgz#d267a43cb1836dc4d182cce93ae75ba954ef6d2b" + integrity sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA== + +"@babel/template@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.28.6.tgz#0e7e56ecedb78aeef66ce7972b082fce76a23e57" + integrity sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ== + dependencies: + "@babel/code-frame" "^7.28.6" + "@babel/parser" "^7.28.6" + "@babel/types" "^7.28.6" + +"@babel/traverse@^7.25.9", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.5", "@babel/traverse@^7.28.6", "@babel/traverse@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.0.tgz#f323d05001440253eead3c9c858adbe00b90310a" + integrity sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA== + dependencies: + "@babel/code-frame" "^7.29.0" + "@babel/generator" "^7.29.0" "@babel/helper-globals" "^7.28.0" - "@babel/parser" "^7.28.4" - "@babel/template" "^7.27.2" - "@babel/types" "^7.28.4" + "@babel/parser" "^7.29.0" + "@babel/template" "^7.28.6" + "@babel/types" "^7.29.0" debug "^4.3.1" -"@babel/types@^7.21.3", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.4.4": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.4.tgz#0a4e618f4c60a7cd6c11cb2d48060e4dbe38ac3a" - integrity sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q== +"@babel/types@^7.21.3", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.5", "@babel/types@^7.28.6", "@babel/types@^7.29.0", "@babel/types@^7.4.4": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.0.tgz#9f5b1e838c446e72cf3cd4b918152b8c605e37c7" + integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== dependencies: "@babel/helper-string-parser" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" "@colors/colors@1.5.0": version "1.5.0" @@ -1353,10 +1318,10 @@ "@csstools/utilities" "^2.0.0" postcss-value-parser "^4.2.0" -"@csstools/postcss-normalize-display-values@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz#ecdde2daf4e192e5da0c6fd933b6d8aff32f2a36" - integrity sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q== +"@csstools/postcss-normalize-display-values@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz#3738ecadb38cd6521c9565635d61aa4bf5457d27" + integrity sha512-TQUGBuRvxdc7TgNSTevYqrL8oItxiwPDixk20qCB5me/W8uF7BPbhRrAvFuhEoywQp/woRsUZ6SJ+sU5idZAIA== dependencies: postcss-value-parser "^4.2.0" @@ -1371,6 +1336,11 @@ "@csstools/postcss-progressive-custom-properties" "^4.2.1" "@csstools/utilities" "^2.0.0" +"@csstools/postcss-position-area-property@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-position-area-property/-/postcss-position-area-property-1.0.0.tgz#41f0cbc737a81a42890d5ec035fa26a45f4f4ad4" + integrity sha512-fUP6KR8qV2NuUZV3Cw8itx0Ep90aRjAZxAEzC3vrl6yjFv+pFsQbR18UuQctEKmA72K9O27CoYiKEgXxkqjg8Q== + "@csstools/postcss-progressive-custom-properties@^4.2.1": version "4.2.1" resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.2.1.tgz#c39780b9ff0d554efb842b6bd75276aa6f1705db" @@ -1378,6 +1348,14 @@ dependencies: postcss-value-parser "^4.2.0" +"@csstools/postcss-property-rule-prelude-list@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-property-rule-prelude-list/-/postcss-property-rule-prelude-list-1.0.0.tgz#700b7aa41228c02281bda074ae778f36a09da188" + integrity sha512-IxuQjUXq19fobgmSSvUDO7fVwijDJaZMvWQugxfEUxmjBeDCVaDuMpsZ31MsTm5xbnhA+ElDi0+rQ7sQQGisFA== + dependencies: + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-random-function@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz#3191f32fe72936e361dadf7dbfb55a0209e2691e" @@ -1423,6 +1401,21 @@ "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" +"@csstools/postcss-syntax-descriptor-syntax-production@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-syntax-descriptor-syntax-production/-/postcss-syntax-descriptor-syntax-production-1.0.1.tgz#98590e372e547cdae60aef47cfee11f3881307dd" + integrity sha512-GneqQWefjM//f4hJ/Kbox0C6f2T7+pi4/fqTqOFGTL3EjnvOReTqO1qUQ30CaUjkwjYq9qZ41hzarrAxCc4gow== + dependencies: + "@csstools/css-tokenizer" "^3.0.4" + +"@csstools/postcss-system-ui-font-family@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-system-ui-font-family/-/postcss-system-ui-font-family-1.0.0.tgz#bd65b79078debf6f67b318dc9b71a8f9fa16f8c8" + integrity sha512-s3xdBvfWYfoPSBsikDXbuorcMG1nN1M6GdU0qBsGfcmNR0A/qhloQZpTxjA3Xsyrk1VJvwb2pOfiOT3at/DuIQ== + dependencies: + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-text-decoration-shorthand@^4.0.3": version "4.0.3" resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.3.tgz#fae1b70f07d1b7beb4c841c86d69e41ecc6f743c" @@ -1465,23 +1458,24 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@docsearch/css@4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-4.2.0.tgz#473bb4c51f4b2b037a71f423e569907ab19e6d72" - integrity sha512-65KU9Fw5fGsPPPlgIghonMcndyx1bszzrDQYLfierN+Ha29yotMHzVS94bPkZS6On9LS8dE4qmW4P/fGjtCf/g== +"@docsearch/core@4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@docsearch/core/-/core-4.6.0.tgz#223e40f4cf422e8a7ad005b5653a76c0272541ee" + integrity sha512-IqG3oSd529jVRQ4dWZQKwZwQLVd//bWJTz2HiL0LkiHrI4U/vLrBasKB7lwQB/69nBAcCgs3TmudxTZSLH/ZQg== + +"@docsearch/css@4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-4.6.0.tgz#1780de042f61d11d60091f5c2f734543c3bc5d07" + integrity sha512-YlcAimkXclvqta47g47efzCM5CFxDwv2ClkDfEs/fC/Ak0OxPH2b3czwa4o8O1TRBf+ujFF2RiUwszz2fPVNJQ== "@docsearch/react@^3.9.0 || ^4.1.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-4.2.0.tgz#9dac48dfb4c1e5f18cf7323d8221d99c0d5f3e4e" - integrity sha512-zSN/KblmtBcerf7Z87yuKIHZQmxuXvYc6/m0+qnjyNu+Ir67AVOagTa1zBqcxkVUVkmBqUExdcyrdo9hbGbqTw== + version "4.6.0" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-4.6.0.tgz#b9a85539fda5a5398e0613fff9681d87085c84af" + integrity sha512-j8H5B4ArGxBPBWvw3X0J0Rm/Pjv2JDa2rV5OE0DLTp5oiBCptIJ/YlNOhZxuzbO2nwge+o3Z52nJRi3hryK9cA== dependencies: - "@ai-sdk/react" "^2.0.30" "@algolia/autocomplete-core" "1.19.2" - "@docsearch/css" "4.2.0" - ai "^5.0.30" - algoliasearch "^5.28.0" - marked "^16.3.0" - zod "^4.1.8" + "@docsearch/core" "4.6.0" + "@docsearch/css" "4.6.0" "@docusaurus/babel@3.9.2": version "3.9.2" @@ -2026,21 +2020,107 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@jsonjoy.com/base64@17.67.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-17.67.0.tgz#7eeda3cb41138d77a90408fd2e42b2aba10576d7" + integrity sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw== + "@jsonjoy.com/base64@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578" integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== +"@jsonjoy.com/buffers@17.67.0", "@jsonjoy.com/buffers@^17.65.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz#5c58dbcdeea8824ce296bd1cfce006c2eb167b3d" + integrity sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw== + "@jsonjoy.com/buffers@^1.0.0", "@jsonjoy.com/buffers@^1.2.0": version "1.2.1" resolved "https://registry.yarnpkg.com/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz#8d99c7f67eaf724d3428dfd9826c6455266a5c83" integrity sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA== +"@jsonjoy.com/codegen@17.67.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz#3635fd8769d77e19b75dc5574bc9756019b2e591" + integrity sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q== + "@jsonjoy.com/codegen@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz#5c23f796c47675f166d23b948cdb889184b93207" integrity sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g== +"@jsonjoy.com/fs-core@4.56.11": + version "4.56.11" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-core/-/fs-core-4.56.11.tgz#d65103886cd3333bae525bfa21dd054e96cd3147" + integrity sha512-wThHjzUp01ImIjfCwhs+UnFkeGPFAymwLEkOtenHewaKe2pTP12p6r1UuwikA9NEvNf9Vlck92r8fb8n/MWM5w== + dependencies: + "@jsonjoy.com/fs-node-builtins" "4.56.11" + "@jsonjoy.com/fs-node-utils" "4.56.11" + thingies "^2.5.0" + +"@jsonjoy.com/fs-fsa@4.56.11": + version "4.56.11" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-fsa/-/fs-fsa-4.56.11.tgz#a959cc2e8bd3fd481dab7a7d011ef9dc59a3e04f" + integrity sha512-ZYlF3XbMayyp97xEN8ZvYutU99PCHjM64mMZvnCseXkCJXJDVLAwlF8Q/7q/xiWQRsv3pQBj1WXHd9eEyYcaCQ== + dependencies: + "@jsonjoy.com/fs-core" "4.56.11" + "@jsonjoy.com/fs-node-builtins" "4.56.11" + "@jsonjoy.com/fs-node-utils" "4.56.11" + thingies "^2.5.0" + +"@jsonjoy.com/fs-node-builtins@4.56.11": + version "4.56.11" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.56.11.tgz#53311477712473dc38a939bcbdf9afdd9db41e87" + integrity sha512-CNmt3a0zMCIhniFLXtzPWuUxXFU+U+2VyQiIrgt/rRVeEJNrMQUABaRbVxR0Ouw1LyR9RjaEkPM6nYpED+y43A== + +"@jsonjoy.com/fs-node-to-fsa@4.56.11": + version "4.56.11" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.56.11.tgz#9c13f4b82bc420db731600451f2c4dd635388a0d" + integrity sha512-5OzGdvJDgZVo+xXWEYo72u81zpOWlxlbG4d4nL+hSiW+LKlua/dldNgPrpWxtvhgyntmdFQad2UTxFyGjJAGhA== + dependencies: + "@jsonjoy.com/fs-fsa" "4.56.11" + "@jsonjoy.com/fs-node-builtins" "4.56.11" + "@jsonjoy.com/fs-node-utils" "4.56.11" + +"@jsonjoy.com/fs-node-utils@4.56.11": + version "4.56.11" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.56.11.tgz#3fda5bc667cd854b85624e31f642b8f53e48bc49" + integrity sha512-JADOZFDA3wRfsuxkT0+MYc4F9hJO2PYDaY66kRTG6NqGX3+bqmKu66YFYAbII/tEmQWPZeHoClUB23rtQM9UPg== + dependencies: + "@jsonjoy.com/fs-node-builtins" "4.56.11" + +"@jsonjoy.com/fs-node@4.56.11": + version "4.56.11" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node/-/fs-node-4.56.11.tgz#d71b7ff4dfdf460e419a4057eaeb8e36bed02197" + integrity sha512-D65YrnP6wRuZyEWoSFnBJSr5zARVpVBGctnhie4rCsMuGXNzX7IHKaOt85/Aj7SSoG1N2+/xlNjWmkLvZ2H3Tg== + dependencies: + "@jsonjoy.com/fs-core" "4.56.11" + "@jsonjoy.com/fs-node-builtins" "4.56.11" + "@jsonjoy.com/fs-node-utils" "4.56.11" + "@jsonjoy.com/fs-print" "4.56.11" + "@jsonjoy.com/fs-snapshot" "4.56.11" + glob-to-regex.js "^1.0.0" + thingies "^2.5.0" + +"@jsonjoy.com/fs-print@4.56.11": + version "4.56.11" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-print/-/fs-print-4.56.11.tgz#4ad694a4b421b8a5d05821412988a07fb68cc58b" + integrity sha512-rnaKRgCRIn8JGTjxhS0JPE38YM3Pj/H7SW4/tglhIPbfKEkky7dpPayNKV2qy25SZSL15oFVgH/62dMZ/z7cyA== + dependencies: + "@jsonjoy.com/fs-node-utils" "4.56.11" + tree-dump "^1.1.0" + +"@jsonjoy.com/fs-snapshot@4.56.11": + version "4.56.11" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.56.11.tgz#c64e50c3ea2ec22d7c7ce0e27c4d3c9c910d1dc9" + integrity sha512-IIldPX+cIRQuUol9fQzSS3hqyECxVpYMJQMqdU3dCKZFRzEl1rkIkw4P6y7Oh493sI7YdxZlKr/yWdzEWZ1wGQ== + dependencies: + "@jsonjoy.com/buffers" "^17.65.0" + "@jsonjoy.com/fs-node-utils" "4.56.11" + "@jsonjoy.com/json-pack" "^17.65.0" + "@jsonjoy.com/util" "^17.65.0" + "@jsonjoy.com/json-pack@^1.11.0": version "1.21.0" resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz#93f8dd57fe3a3a92132b33d1eb182dcd9e7629fa" @@ -2055,6 +2135,27 @@ thingies "^2.5.0" tree-dump "^1.1.0" +"@jsonjoy.com/json-pack@^17.65.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz#8dd8ff65dd999c5d4d26df46c63915c7bdec093a" + integrity sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w== + dependencies: + "@jsonjoy.com/base64" "17.67.0" + "@jsonjoy.com/buffers" "17.67.0" + "@jsonjoy.com/codegen" "17.67.0" + "@jsonjoy.com/json-pointer" "17.67.0" + "@jsonjoy.com/util" "17.67.0" + hyperdyperid "^1.2.0" + thingies "^2.5.0" + tree-dump "^1.1.0" + +"@jsonjoy.com/json-pointer@17.67.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz#74439573dc046e0c9a3a552fb94b391bc75313b8" + integrity sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA== + dependencies: + "@jsonjoy.com/util" "17.67.0" + "@jsonjoy.com/json-pointer@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz#049cb530ac24e84cba08590c5e36b431c4843408" @@ -2063,6 +2164,14 @@ "@jsonjoy.com/codegen" "^1.0.0" "@jsonjoy.com/util" "^1.9.0" +"@jsonjoy.com/util@17.67.0", "@jsonjoy.com/util@^17.65.0": + version "17.67.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-17.67.0.tgz#7c4288fc3808233e55c7610101e7bb4590cddd3f" + integrity sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew== + dependencies: + "@jsonjoy.com/buffers" "17.67.0" + "@jsonjoy.com/codegen" "17.67.0" + "@jsonjoy.com/util@^1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.9.0.tgz#7ee95586aed0a766b746cd8d8363e336c3c47c46" @@ -2114,6 +2223,11 @@ dependencies: "@types/mdx" "^2.0.0" +"@noble/hashes@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -2135,10 +2249,128 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@opentelemetry/api@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe" - integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== +"@peculiar/asn1-cms@^2.6.0", "@peculiar/asn1-cms@^2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-cms/-/asn1-cms-2.6.1.tgz#cb5445c1bad9197d176073bf142a5c035b460640" + integrity sha512-vdG4fBF6Lkirkcl53q6eOdn3XYKt+kJTG59edgRZORlg/3atWWEReRCx5rYE1ZzTTX6vLK5zDMjHh7vbrcXGtw== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.1" + "@peculiar/asn1-x509-attr" "^2.6.1" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-csr@^2.6.0": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-csr/-/asn1-csr-2.6.1.tgz#9629d403bc5a61254f28ed0b90e99cee61c0e8be" + integrity sha512-WRWnKfIocHyzFYQTka8O/tXCiBquAPSrRjXbOkHbO4qdmS6loffCEGs+rby6WxxGdJCuunnhS2duHURhjyio6w== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.1" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-ecc@^2.6.0": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-ecc/-/asn1-ecc-2.6.1.tgz#d29c4af671508a9934edc78e7c9419fbf7bc9870" + integrity sha512-+Vqw8WFxrtDIN5ehUdvlN2m73exS2JVG0UAyfVB31gIfor3zWEAQPD+K9ydCxaj3MLen9k0JhKpu9LqviuCE1g== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.1" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-pfx@^2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pfx/-/asn1-pfx-2.6.1.tgz#75cddd14d43ef875109e91ea150377d679c8fbc1" + integrity sha512-nB5jVQy3MAAWvq0KY0R2JUZG8bO/bTLpnwyOzXyEh/e54ynGTatAR+csOnXkkVD9AFZ2uL8Z7EV918+qB1qDvw== + dependencies: + "@peculiar/asn1-cms" "^2.6.1" + "@peculiar/asn1-pkcs8" "^2.6.1" + "@peculiar/asn1-rsa" "^2.6.1" + "@peculiar/asn1-schema" "^2.6.0" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-pkcs8@^2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.1.tgz#bd56b4bb9e8a3702369049713a89134c87c6931a" + integrity sha512-JB5iQ9Izn5yGMw3ZG4Nw3Xn/hb/G38GYF3lf7WmJb8JZUydhVGEjK/ZlFSWhnlB7K/4oqEs8HnfFIKklhR58Tw== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.1" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-pkcs9@^2.6.0": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.1.tgz#ddc5222952f25b59a0562a6f8cabdb72f586a496" + integrity sha512-5EV8nZoMSxeWmcxWmmcolg22ojZRgJg+Y9MX2fnE2bGRo5KQLqV5IL9kdSQDZxlHz95tHvIq9F//bvL1OeNILw== + dependencies: + "@peculiar/asn1-cms" "^2.6.1" + "@peculiar/asn1-pfx" "^2.6.1" + "@peculiar/asn1-pkcs8" "^2.6.1" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.1" + "@peculiar/asn1-x509-attr" "^2.6.1" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-rsa@^2.6.0", "@peculiar/asn1-rsa@^2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-rsa/-/asn1-rsa-2.6.1.tgz#2cdf9f9ea6d6fdbaae214b9fed6de0534b654437" + integrity sha512-1nVMEh46SElUt5CB3RUTV4EG/z7iYc7EoaDY5ECwganibQPkZ/Y2eMsTKB/LeyrUJ+W/tKoD9WUqIy8vB+CEdA== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.1" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-schema@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz#0dca1601d5b0fed2a72fed7a5f1d0d7dbe3a6f82" + integrity sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg== + dependencies: + asn1js "^3.0.6" + pvtsutils "^1.3.6" + tslib "^2.8.1" + +"@peculiar/asn1-x509-attr@^2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.1.tgz#6425008b8099476010aace5b8ae9f9cbc41db0ab" + integrity sha512-tlW6cxoHwgcQghnJwv3YS+9OO1737zgPogZ+CgWRUK4roEwIPzRH4JEiG770xe5HX2ATfCpmX60gurfWIF9dcQ== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.1" + asn1js "^3.0.6" + tslib "^2.8.1" + +"@peculiar/asn1-x509@^2.6.0", "@peculiar/asn1-x509@^2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-x509/-/asn1-x509-2.6.1.tgz#4e8995659e16178e0e90fe90519aa269045af262" + integrity sha512-O9jT5F1A2+t3r7C4VT7LYGXqkGLK7Kj1xFpz7U0isPrubwU5PbDoyYtx6MiGst29yq7pXN5vZbQFKRCP+lLZlA== + dependencies: + "@peculiar/asn1-schema" "^2.6.0" + asn1js "^3.0.6" + pvtsutils "^1.3.6" + tslib "^2.8.1" + +"@peculiar/x509@^1.14.2": + version "1.14.3" + resolved "https://registry.yarnpkg.com/@peculiar/x509/-/x509-1.14.3.tgz#2c44c2b89474346afec38a0c2803ec4fb8ce959e" + integrity sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA== + dependencies: + "@peculiar/asn1-cms" "^2.6.0" + "@peculiar/asn1-csr" "^2.6.0" + "@peculiar/asn1-ecc" "^2.6.0" + "@peculiar/asn1-pkcs9" "^2.6.0" + "@peculiar/asn1-rsa" "^2.6.0" + "@peculiar/asn1-schema" "^2.6.0" + "@peculiar/asn1-x509" "^2.6.0" + pvtsutils "^1.3.6" + reflect-metadata "^0.2.2" + tslib "^2.8.1" + tsyringe "^4.10.0" "@pnpm/config.env-replace@^1.1.0": version "1.1.0" @@ -2152,10 +2384,10 @@ dependencies: graceful-fs "4.2.10" -"@pnpm/npm-conf@^2.1.0": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz#bb375a571a0bd63ab0a23bece33033c683e9b6b0" - integrity sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw== +"@pnpm/npm-conf@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz#857622421aa9bbf254e557b8a022c216a7928f47" + integrity sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA== dependencies: "@pnpm/config.env-replace" "^1.1.0" "@pnpm/network.ca-file" "^1.0.1" @@ -2184,9 +2416,9 @@ integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== "@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + version "0.27.10" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.10.tgz#beefe675f1853f73676aecc915b2bd2ac98c4fc6" + integrity sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA== "@sindresorhus/is@^4.6.0": version "4.6.0" @@ -2207,11 +2439,6 @@ micromark-util-character "^1.1.0" micromark-util-symbol "^1.0.1" -"@standard-schema/spec@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.0.0.tgz#f193b73dc316c4170f2e82a881da0f550d551b9c" - integrity sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA== - "@svgr/babel-plugin-add-jsx-attribute@8.0.0": version "8.0.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22" @@ -2325,11 +2552,6 @@ dependencies: defer-to-connect "^2.0.1" -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - "@types/body-parser@*": version "1.19.6" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474" @@ -2396,9 +2618,9 @@ integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz#74f47555b3d804b54cb7030e6f9aa0c7485cfc5b" - integrity sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA== + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz#1a77faffee9572d39124933259be2523837d7eaa" + integrity sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A== dependencies: "@types/node" "*" "@types/qs" "*" @@ -2406,9 +2628,9 @@ "@types/send" "*" "@types/express-serve-static-core@^4.17.21", "@types/express-serve-static-core@^4.17.33": - version "4.19.7" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz#f1d306dcc03b1aafbfb6b4fe684cce8a31cffc10" - integrity sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg== + version "4.19.8" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz#99b960322a4d576b239a640ab52ef191989b036f" + integrity sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA== dependencies: "@types/node" "*" "@types/qs" "*" @@ -2416,23 +2638,23 @@ "@types/send" "*" "@types/express@*": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.3.tgz#6c4bc6acddc2e2a587142e1d8be0bce20757e956" - integrity sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw== + version "5.0.6" + resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.6.tgz#2d724b2c990dcb8c8444063f3580a903f6d500cc" + integrity sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^5.0.0" - "@types/serve-static" "*" + "@types/serve-static" "^2" -"@types/express@^4.17.21": - version "4.17.23" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.23.tgz#35af3193c640bfd4d7fe77191cd0ed411a433bef" - integrity sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ== +"@types/express@^4.17.25": + version "4.17.25" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.25.tgz#070c8c73a6fee6936d65c195dbbfb7da5026649b" + integrity sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" "@types/qs" "*" - "@types/serve-static" "*" + "@types/serve-static" "^1" "@types/gtag.js@^0.0.12": version "0.0.12" @@ -2457,9 +2679,9 @@ integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== "@types/http-cache-semantics@^4.0.2": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" - integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + version "4.2.0" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#f6a7788f438cbfde15f29acad46512b4c01913b3" + integrity sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q== "@types/http-errors@*": version "2.0.5" @@ -2467,9 +2689,9 @@ integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== "@types/http-proxy@^1.17.8": - version "1.17.16" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.16.tgz#dee360707b35b3cc85afcde89ffeebff7d7f9240" - integrity sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w== + version "1.17.17" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.17.tgz#d9e2c4571fe3507343cb210cd41790375e59a533" + integrity sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw== dependencies: "@types/node" "*" @@ -2519,19 +2741,12 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== -"@types/node-forge@^1.3.0": - version "1.3.14" - resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.14.tgz#006c2616ccd65550560c2757d8472eb6d3ecea0b" - integrity sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw== - dependencies: - "@types/node" "*" - "@types/node@*": - version "24.9.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.9.1.tgz#b7360b3c789089e57e192695a855aa4f6981a53c" - integrity sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg== + version "25.4.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.4.0.tgz#f25d8467984d6667cc4c1be1e2f79593834aaedb" + integrity sha512-9wLpoeWuBlcbBpOY3XmzSTG3oscB6xjBEEtn+pYXTfhyXhIxC5FsBer2KTopBlvKEiW9l13po9fq+SJY/5lkhw== dependencies: - undici-types "~7.16.0" + undici-types "~7.18.0" "@types/node@^17.0.5": version "17.0.45" @@ -2539,14 +2754,14 @@ integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== "@types/prismjs@^1.26.0": - version "1.26.5" - resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.5.tgz#72499abbb4c4ec9982446509d2f14fb8483869d6" - integrity sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ== + version "1.26.6" + resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.6.tgz#6ea27c126d645319ae4f7055eda63a9e835c0187" + integrity sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw== "@types/qs@*": - version "6.14.0" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.14.0.tgz#d8b60cecf62f2db0fb68e5e006077b9178b85de5" - integrity sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ== + version "6.15.0" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.15.0.tgz#963ab61779843fe910639a50661b48f162bc7f79" + integrity sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow== "@types/range-parser@*": version "1.2.7" @@ -2580,11 +2795,11 @@ "@types/react" "*" "@types/react@*": - version "19.2.2" - resolved "https://registry.yarnpkg.com/@types/react/-/react-19.2.2.tgz#ba123a75d4c2a51158697160a4ea2ff70aa6bf36" - integrity sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA== + version "19.2.14" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.2.14.tgz#39604929b5e3957e3a6fa0001dafb17c7af70bad" + integrity sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w== dependencies: - csstype "^3.0.2" + csstype "^3.2.2" "@types/retry@0.12.2": version "0.12.2" @@ -2599,16 +2814,16 @@ "@types/node" "*" "@types/send@*": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@types/send/-/send-1.2.0.tgz#ae9dfa0e3ab0306d3c566182324a54c4be2fb45a" - integrity sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ== + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/send/-/send-1.2.1.tgz#6a784e45543c18c774c049bff6d3dbaf045c9c74" + integrity sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ== dependencies: "@types/node" "*" "@types/send@<1": - version "0.17.5" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.5.tgz#d991d4f2b16f2b1ef497131f00a9114290791e74" - integrity sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w== + version "0.17.6" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.6.tgz#aeb5385be62ff58a52cd5459daa509ae91651d25" + integrity sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og== dependencies: "@types/mime" "^1" "@types/node" "*" @@ -2620,15 +2835,23 @@ dependencies: "@types/express" "*" -"@types/serve-static@*", "@types/serve-static@^1.15.5": - version "1.15.9" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.9.tgz#f9b08ab7dd8bbb076f06f5f983b683654fe0a025" - integrity sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA== +"@types/serve-static@^1", "@types/serve-static@^1.15.5": + version "1.15.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.10.tgz#768169145a778f8f5dfcb6360aead414a3994fee" + integrity sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw== dependencies: "@types/http-errors" "*" "@types/node" "*" "@types/send" "<1" +"@types/serve-static@^2": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-2.2.0.tgz#d4a447503ead0d1671132d1ab6bd58b805d8de6a" + integrity sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/sockjs@^0.3.36": version "0.3.36" resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" @@ -2659,9 +2882,9 @@ integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^17.0.8": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" - integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== + version "17.0.35" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.35.tgz#07013e46aa4d7d7d50a49e15604c1c5340d4eb24" + integrity sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg== dependencies: "@types/yargs-parser" "*" @@ -2670,11 +2893,6 @@ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== -"@vercel/oidc@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@vercel/oidc/-/oidc-3.0.3.tgz#82c2b6dd4d5c3b37dcb1189718cdeb9db402d052" - integrity sha512-yNEQvPcVrK9sIe637+I0jD6leluPxzwJKx/Haw6F4H77CdDsszUn5V3o96LPziXkSNE2B83+Z3mjqGKBK/R6Gg== - "@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": version "1.14.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" @@ -2806,7 +3024,7 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -accepts@~1.3.4, accepts@~1.3.8: +accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -2825,16 +3043,16 @@ acorn-jsx@^5.0.0: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.0.0: - version "8.3.4" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" - integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + version "8.3.5" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.5.tgz#8a6b8ca8fc5b34685af15dabb44118663c296496" + integrity sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw== dependencies: acorn "^8.11.0" -acorn@^8.0.0, acorn@^8.0.4, acorn@^8.11.0, acorn@^8.15.0: - version "8.15.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" - integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== +acorn@^8.0.0, acorn@^8.0.4, acorn@^8.11.0, acorn@^8.15.0, acorn@^8.16.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" + integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== address@^1.0.1: version "1.2.2" @@ -2849,16 +3067,6 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ai@5.0.76, ai@^5.0.30: - version "5.0.76" - resolved "https://registry.yarnpkg.com/ai/-/ai-5.0.76.tgz#cb34925808ecf557120aaa7648026c4b2d232d5d" - integrity sha512-ZCxi1vrpyCUnDbtYrO/W8GLvyacV9689f00yshTIQ3mFFphbD7eIv40a2AOZBv3GGRA7SSRYIDnr56wcS/gyQg== - dependencies: - "@ai-sdk/gateway" "2.0.0" - "@ai-sdk/provider" "2.0.0" - "@ai-sdk/provider-utils" "3.0.12" - "@opentelemetry/api" "1.9.0" - ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -2879,9 +3087,9 @@ ajv-keywords@^5.1.0: fast-deep-equal "^3.1.3" ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + version "6.14.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.14.0.tgz#fd067713e228210636ebb08c60bd3765d6dbe73a" + integrity sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -2889,9 +3097,9 @@ ajv@^6.12.5: uri-js "^4.2.2" ajv@^8.0.0, ajv@^8.9.0: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" - integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + version "8.18.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.18.0.tgz#8864186b6738d003eb3a933172bb3833e10cefbc" + integrity sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A== dependencies: fast-deep-equal "^3.1.3" fast-uri "^3.0.1" @@ -2899,31 +3107,31 @@ ajv@^8.0.0, ajv@^8.9.0: require-from-string "^2.0.2" algoliasearch-helper@^3.26.0: - version "3.26.0" - resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.26.0.tgz#d6e283396a9fc5bf944f365dc3b712570314363f" - integrity sha512-Rv2x3GXleQ3ygwhkhJubhhYGsICmShLAiqtUuJTUkr9uOCOXyF2E71LVT4XDnVffbknv8XgScP4U0Oxtgm+hIw== + version "3.28.0" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.28.0.tgz#37193c329b5743937d2466e9c8800623a409002b" + integrity sha512-GBN0xsxGggaCPElZq24QzMdfphrjIiV2xA+hRXE4/UMpN3nsF2WrM8q+x80OGvGpJWtB7F+4Hq5eSfWwuejXrg== dependencies: "@algolia/events" "^4.0.1" -algoliasearch@^5.28.0, algoliasearch@^5.37.0: - version "5.40.1" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-5.40.1.tgz#e46565cb473fa967a12191398e2ddfa2596bf82b" - integrity sha512-iUNxcXUNg9085TJx0HJLjqtDE0r1RZ0GOGrt8KNQqQT5ugu8lZsHuMUYW/e0lHhq6xBvmktU9Bw4CXP9VQeKrg== - dependencies: - "@algolia/abtesting" "1.6.1" - "@algolia/client-abtesting" "5.40.1" - "@algolia/client-analytics" "5.40.1" - "@algolia/client-common" "5.40.1" - "@algolia/client-insights" "5.40.1" - "@algolia/client-personalization" "5.40.1" - "@algolia/client-query-suggestions" "5.40.1" - "@algolia/client-search" "5.40.1" - "@algolia/ingestion" "1.40.1" - "@algolia/monitoring" "1.40.1" - "@algolia/recommend" "5.40.1" - "@algolia/requester-browser-xhr" "5.40.1" - "@algolia/requester-fetch" "5.40.1" - "@algolia/requester-node-http" "5.40.1" +algoliasearch@^5.37.0: + version "5.49.2" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-5.49.2.tgz#af1a0db7c8a36f93473399da918fe6d7799660b6" + integrity sha512-1K0wtDaRONwfhL4h8bbJ9qTjmY6rhGgRvvagXkMBsAOMNr+3Q2SffHECh9DIuNVrMA1JwA0zCwhyepgBZVakng== + dependencies: + "@algolia/abtesting" "1.15.2" + "@algolia/client-abtesting" "5.49.2" + "@algolia/client-analytics" "5.49.2" + "@algolia/client-common" "5.49.2" + "@algolia/client-insights" "5.49.2" + "@algolia/client-personalization" "5.49.2" + "@algolia/client-query-suggestions" "5.49.2" + "@algolia/client-search" "5.49.2" + "@algolia/ingestion" "1.49.2" + "@algolia/monitoring" "1.49.2" + "@algolia/recommend" "5.49.2" + "@algolia/requester-browser-xhr" "5.49.2" + "@algolia/requester-fetch" "5.49.2" + "@algolia/requester-node-http" "5.49.2" ansi-align@^3.0.1: version "3.0.1" @@ -2949,7 +3157,7 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^6.0.1: +ansi-regex@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== @@ -3001,20 +3209,28 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +asn1js@^3.0.6: + version "3.0.7" + resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.7.tgz#15f1f2f59e60f80d5b43ef14047a294a969f824f" + integrity sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ== + dependencies: + pvtsutils "^1.3.6" + pvutils "^1.1.3" + tslib "^2.8.1" + astring@^1.8.0: version "1.9.0" resolved "https://registry.yarnpkg.com/astring/-/astring-1.9.0.tgz#cc73e6062a7eb03e7d19c22d8b0b3451fd9bfeef" integrity sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg== -autoprefixer@^10.4.19, autoprefixer@^10.4.21: - version "10.4.21" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.21.tgz#77189468e7a8ad1d9a37fbc08efc9f480cf0a95d" - integrity sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ== +autoprefixer@^10.4.19, autoprefixer@^10.4.23: + version "10.4.27" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.27.tgz#51ea301a5c3c5f8642f8e564759c4f573be486f2" + integrity sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA== dependencies: - browserslist "^4.24.4" - caniuse-lite "^1.0.30001702" - fraction.js "^4.3.7" - normalize-range "^0.1.2" + browserslist "^4.28.1" + caniuse-lite "^1.0.30001774" + fraction.js "^5.3.4" picocolors "^1.1.1" postcss-value-parser "^4.2.0" @@ -3033,13 +3249,13 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-polyfill-corejs2@^0.4.14: - version "0.4.14" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz#8101b82b769c568835611542488d463395c2ef8f" - integrity sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg== +babel-plugin-polyfill-corejs2@^0.4.14, babel-plugin-polyfill-corejs2@^0.4.15: + version "0.4.16" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.16.tgz#a1321145f6cde738b0a412616b6bcf77f143ab36" + integrity sha512-xaVwwSfebXf0ooE11BJovZYKhFjIvQo7TsyVpETuIeH2JHv0k/T6Y5j22pPTvqYqmpkxdlPAJlyJ0tfOJAoMxw== dependencies: - "@babel/compat-data" "^7.27.7" - "@babel/helper-define-polyfill-provider" "^0.6.5" + "@babel/compat-data" "^7.28.6" + "@babel/helper-define-polyfill-provider" "^0.6.7" semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.13.0: @@ -3050,12 +3266,20 @@ babel-plugin-polyfill-corejs3@^0.13.0: "@babel/helper-define-polyfill-provider" "^0.6.5" core-js-compat "^3.43.0" -babel-plugin-polyfill-regenerator@^0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz#32752e38ab6f6767b92650347bf26a31b16ae8c5" - integrity sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg== +babel-plugin-polyfill-corejs3@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.1.tgz#75fb533a1c23c0a976f189cba1d035199705b8ad" + integrity sha512-ENp89vM9Pw4kv/koBb5N2f9bDZsR0hpf3BdPMOg/pkS3pwO4dzNnQZVXtBbeyAadgm865DmQG2jMMLqmZXvuCw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.5" + "@babel/helper-define-polyfill-provider" "^0.6.7" + core-js-compat "^3.48.0" + +babel-plugin-polyfill-regenerator@^0.6.5, babel-plugin-polyfill-regenerator@^0.6.6: + version "0.6.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.7.tgz#eca723d67ef87b798881ad00546db1b6dd72e1ef" + integrity sha512-OTYbUlSwXhNgr4g6efMZgsO8//jA61P7ZbRX3iTT53VON8l+WQS8IAUEVo4a4cWknrg2W8Cj4gQhRYNCJ8GkAA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.7" bail@^2.0.0: version "2.0.2" @@ -3067,10 +3291,10 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -baseline-browser-mapping@^2.8.9: - version "2.8.18" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.18.tgz#b44b18cadddfa037ee8440dafaba4a329dfb327c" - integrity sha512-UYmTpOBwgPScZpS4A+YbapwWuBwasxvO/2IOHArSsAhL/+ZdmATBXTex3t+l2hXwLVYK382ibr/nKoY9GKe86w== +baseline-browser-mapping@^2.9.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz#5b09935025bf8a80e29130251e337c6a7fc8cbb9" + integrity sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA== batch@0.6.1: version "0.6.1" @@ -3087,23 +3311,23 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== -body-parser@1.20.3: - version "1.20.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" - integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== +body-parser@~1.20.3: + version "1.20.4" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.4.tgz#f8e20f4d06ca8a50a71ed329c15dccad1cdc547f" + integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA== dependencies: - bytes "3.1.2" + bytes "~3.1.2" content-type "~1.0.5" debug "2.6.9" depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.13.0" - raw-body "2.5.2" + destroy "~1.2.0" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + on-finished "~2.4.1" + qs "~6.14.0" + raw-body "~2.5.3" type-is "~1.6.18" - unpipe "1.0.0" + unpipe "~1.0.0" bonjour-service@^1.2.1: version "1.3.0" @@ -3161,16 +3385,16 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.0.0, browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.24.4, browserslist@^4.26.0, browserslist@^4.26.3: - version "4.26.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.26.3.tgz#40fbfe2d1cd420281ce5b1caa8840049c79afb56" - integrity sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w== +browserslist@^4.0.0, browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.28.1: + version "4.28.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" + integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== dependencies: - baseline-browser-mapping "^2.8.9" - caniuse-lite "^1.0.30001746" - electron-to-chromium "^1.5.227" - node-releases "^2.0.21" - update-browserslist-db "^1.1.3" + baseline-browser-mapping "^2.9.0" + caniuse-lite "^1.0.30001759" + electron-to-chromium "^1.5.263" + node-releases "^2.0.27" + update-browserslist-db "^1.2.0" buffer-from@^1.0.0: version "1.1.2" @@ -3189,11 +3413,16 @@ bytes@3.0.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== -bytes@3.1.2: +bytes@3.1.2, bytes@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +bytestreamjs@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/bytestreamjs/-/bytestreamjs-2.0.1.tgz#a32947c7ce389a6fa11a09a9a563d0a45889535e" + integrity sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ== + cacheable-lookup@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" @@ -3271,10 +3500,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001746: - version "1.0.30001751" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz#dacd5d9f4baeea841641640139d2b2a4df4226ad" - integrity sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001774: + version "1.0.30001777" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001777.tgz#028f21e4b2718d138b55e692583e6810ccf60691" + integrity sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ== ccount@^2.0.0: version "2.0.1" @@ -3483,7 +3712,7 @@ compressible@~2.0.18: dependencies: mime-db ">= 1.43.0 < 2" -compression@^1.7.4: +compression@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.1.tgz#4a45d909ac16509195a9a28bd91094889c180d79" integrity sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w== @@ -3535,7 +3764,7 @@ content-disposition@0.5.2: resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== -content-disposition@0.5.4: +content-disposition@~0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== @@ -3552,15 +3781,15 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== +cookie-signature@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" + integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== -cookie@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" - integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== +cookie@~0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== copy-webpack-plugin@^11.0.0: version "11.0.0" @@ -3574,22 +3803,22 @@ copy-webpack-plugin@^11.0.0: schema-utils "^4.0.0" serialize-javascript "^6.0.0" -core-js-compat@^3.43.0: - version "3.46.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.46.0.tgz#0c87126a19a1af00371e12b02a2b088a40f3c6f7" - integrity sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law== +core-js-compat@^3.43.0, core-js-compat@^3.48.0: + version "3.48.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.48.0.tgz#7efbe1fc1cbad44008190462217cc5558adaeaa6" + integrity sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q== dependencies: - browserslist "^4.26.3" + browserslist "^4.28.1" -core-js-pure@^3.43.0: - version "3.46.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.46.0.tgz#9bb80248584c6334bb54cd381b0f41c619ef1b43" - integrity sha512-NMCW30bHNofuhwLhYPt66OLOKTMbOhgTTatKVbaQC3KRHpTCiRIBYvtshr+NBYSnBxwAFhjW/RfJ0XbIjS16rw== +core-js-pure@^3.48.0: + version "3.48.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.48.0.tgz#7d5a3fe1ec3631b9aa76a81c843ac2ce918e5023" + integrity sha512-1slJgk89tWC51HQ1AEqG+s2VuwpTRr8ocu4n20QUcH1v9lAN0RXen0Q0AABa/DK1I7RrNWLucplOHMx8hfTGTw== core-js@^3.31.1: - version "3.46.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.46.0.tgz#323a092b96381a9184d0cd49ee9083b2f93373bb" - integrity sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA== + version "3.48.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.48.0.tgz#1f813220a47bbf0e667e3885c36cd6f0593bf14d" + integrity sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ== core-util-is@~1.0.0: version "1.0.3" @@ -3630,9 +3859,9 @@ css-blank-pseudo@^7.0.1: postcss-selector-parser "^7.0.0" css-declaration-sorter@^7.2.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz#edc45c36bcdfea0788b1d4452829f142ef1c4a4a" - integrity sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ== + version "7.3.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.3.1.tgz#acd204976d7ca5240b5579bfe6e73d4d088fd568" + integrity sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA== css-has-pseudo@^7.0.3: version "7.0.3" @@ -3717,10 +3946,10 @@ css-what@^6.0.1, css-what@^6.1.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.2.2.tgz#cdcc8f9b6977719fdfbd1de7aec24abf756b9dea" integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA== -cssdb@^8.4.2: - version "8.4.2" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.4.2.tgz#1a367ab1904c97af0bb2c7ae179764deae7b078b" - integrity sha512-PzjkRkRUS+IHDJohtxkIczlxPPZqRo0nXplsYXOMBRPjcVRjj1W4DfvRgshUYTVuUigU7ptVYkFJQ7abUB0nyg== +cssdb@^8.6.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.8.0.tgz#b5a87e014d29d27924bd07d1f951206eb42b794f" + integrity sha512-QbLeyz2Bgso1iRlh7IpWk6OKa3lLNGXsujVjDMPl9rOZpxKeiG69icLpbLCFxeURwmcdIfZqQyhlooKJYM4f8Q== cssesc@^3.0.0: version "3.0.0" @@ -3796,10 +4025,10 @@ csso@^5.0.5: dependencies: css-tree "~2.2.0" -csstype@^3.0.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== +csstype@^3.2.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" + integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== debounce@^1.2.1: version "1.2.1" @@ -3813,7 +4042,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.3.1, debug@^4.4.1: +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.3.1, debug@^4.4.3: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== @@ -3821,9 +4050,9 @@ debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.3.1, debug@^4.4.1: ms "^2.1.3" decode-named-character-reference@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz#25c32ae6dd5e21889549d40f676030e9514cc0ed" - integrity sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q== + version "1.3.0" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz#3e40603760874c2e5867691b599d73a7da25b53f" + integrity sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q== dependencies: character-entities "^2.0.0" @@ -3845,14 +4074,14 @@ deepmerge@^4.3.1: integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== default-browser-id@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" - integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== + version "5.0.1" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.1.tgz#f7a7ccb8f5104bf8e0f71ba3b1ccfa5eafdb21e8" + integrity sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q== default-browser@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" - integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== + version "5.5.0" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.5.0.tgz#2792e886f2422894545947cc80e1a444496c5976" + integrity sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw== dependencies: bundle-name "^4.1.0" default-browser-id "^5.0.0" @@ -3890,7 +4119,7 @@ define-properties@^1.2.1: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -depd@2.0.0: +depd@2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== @@ -3900,12 +4129,12 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== -dequal@^2.0.0, dequal@^2.0.3: +dequal@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== -destroy@1.2.0: +destroy@1.2.0, destroy@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== @@ -4045,10 +4274,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.5.227: - version "1.5.237" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.237.tgz#eacf61cef3f6345d0069ab427585c5a04d7084f0" - integrity sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg== +electron-to-chromium@^1.5.263: + version "1.5.307" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.307.tgz#09f8973100c39fb0d003b890393cd1d58932b1c8" + integrity sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg== emoji-regex@^8.0.0: version "8.0.0" @@ -4075,23 +4304,18 @@ emoticon@^4.0.1: resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-4.1.0.tgz#d5a156868ee173095627a33de3f1e914c3dde79e" integrity sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ== -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - encodeurl@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== -enhanced-resolve@^5.17.3: - version "5.18.3" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz#9b5f4c5c076b8787c78fe540392ce76a88855b44" - integrity sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww== +enhanced-resolve@^5.20.0: + version "5.20.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.20.0.tgz#323c2a70d2aa7fb4bdfd6d3c24dfc705c581295d" + integrity sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ== dependencies: graceful-fs "^4.2.4" - tapable "^2.2.0" + tapable "^2.3.0" entities@^2.0.0: version "2.2.0" @@ -4125,10 +4349,10 @@ es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-module-lexer@^1.2.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" - integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== +es-module-lexer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.0.0.tgz#f657cd7a9448dcdda9c070a3cb75e5dc1e85f5b1" + integrity sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw== es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" @@ -4257,9 +4481,9 @@ estree-util-to-js@^2.0.0: source-map "^0.7.0" estree-util-value-to-estree@^3.0.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-3.4.1.tgz#b7b3847832ac4fff87ee281e4bffa5555fb3aafe" - integrity sha512-E4fEc8KLhDXnbyDa5XrbdT9PbgSMt0AGZPFUsGFok8N2Q7DTO+F6xAFJjIdw71EkidRg186I1mQCKzZ1ZbEsCw== + version "3.5.0" + resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-3.5.0.tgz#cd70cf37e7f78eae3e110d66a3436ce0d18a8f80" + integrity sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ== dependencies: "@types/estree" "^1.0.0" @@ -4311,11 +4535,6 @@ events@^3.2.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -eventsource-parser@^3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-3.0.6.tgz#292e165e34cacbc936c3c92719ef326d4aeb4e90" - integrity sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg== - execa@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -4331,39 +4550,39 @@ execa@5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -express@^4.21.2: - version "4.21.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" - integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== +express@^4.22.1: + version "4.22.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.22.1.tgz#1de23a09745a4fffdb39247b344bb5eaff382069" + integrity sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.3" - content-disposition "0.5.4" + body-parser "~1.20.3" + content-disposition "~0.5.4" content-type "~1.0.4" - cookie "0.7.1" - cookie-signature "1.0.6" + cookie "~0.7.1" + cookie-signature "~1.0.6" debug "2.6.9" depd "2.0.0" encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.3.1" - fresh "0.5.2" - http-errors "2.0.0" + finalhandler "~1.3.1" + fresh "~0.5.2" + http-errors "~2.0.0" merge-descriptors "1.0.3" methods "~1.1.2" - on-finished "2.4.1" + on-finished "~2.4.1" parseurl "~1.3.3" - path-to-regexp "0.1.12" + path-to-regexp "~0.1.12" proxy-addr "~2.0.7" - qs "6.13.0" + qs "~6.14.0" range-parser "~1.2.1" safe-buffer "5.2.1" - send "0.19.0" - serve-static "1.16.2" + send "~0.19.0" + serve-static "~1.16.2" setprototypeof "1.2.0" - statuses "2.0.1" + statuses "~2.0.1" type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" @@ -4407,9 +4626,9 @@ fast-uri@^3.0.1: integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== fastq@^1.6.0: - version "1.19.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" - integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== + version "1.20.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" + integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== dependencies: reusify "^1.0.4" @@ -4456,17 +4675,17 @@ fill-range@^7.1.1: dependencies: to-regex-range "^5.0.1" -finalhandler@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" - integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== +finalhandler@~1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.2.tgz#1ebc2228fc7673aac4a472c310cc05b77d852b88" + integrity sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg== dependencies: debug "2.6.9" encodeurl "~2.0.0" escape-html "~1.0.3" - on-finished "2.4.1" + on-finished "~2.4.1" parseurl "~1.3.3" - statuses "2.0.1" + statuses "~2.0.2" unpipe "~1.0.0" find-cache-dir@^4.0.0: @@ -4510,20 +4729,20 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fraction.js@^4.3.7: - version "4.3.7" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" - integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== +fraction.js@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-5.3.4.tgz#8c0fcc6a9908262df4ed197427bdeef563e0699a" + integrity sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ== -fresh@0.5.2: +fresh@~0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs-extra@^11.1.1, fs-extra@^11.2.0: - version "11.3.2" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.2.tgz#c838aeddc6f4a8c74dd15f85e11fe5511bfe02a4" - integrity sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A== + version "11.3.4" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.4.tgz#ab6934eca8bcf6f7f6b82742e33591f86301d6fc" + integrity sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -4597,7 +4816,7 @@ glob-parent@^6.0.1: dependencies: is-glob "^4.0.3" -glob-to-regex.js@^1.0.1: +glob-to-regex.js@^1.0.0, glob-to-regex.js@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz#2b323728271d133830850e32311f40766c5f6413" integrity sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ== @@ -4804,14 +5023,14 @@ hast-util-to-jsx-runtime@^2.0.0: vfile-message "^4.0.0" hast-util-to-parse5@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz#477cd42d278d4f036bc2ea58586130f6f39ee6ed" - integrity sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw== + version "8.0.1" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz#95aa391cc0514b4951418d01c883d1038af42f5d" + integrity sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA== dependencies: "@types/hast" "^3.0.0" comma-separated-tokens "^2.0.0" devlop "^1.0.0" - property-information "^6.0.0" + property-information "^7.0.0" space-separated-tokens "^2.0.0" web-namespaces "^2.0.0" zwitch "^2.0.0" @@ -4910,9 +5129,9 @@ html-void-elements@^3.0.0: integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== html-webpack-plugin@^5.6.0: - version "5.6.4" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.4.tgz#d8cb0f7edff7745ae7d6cccb0bff592e9f7f7959" - integrity sha512-V/PZeWsqhfpE27nKeX9EO2sbR+D17A+tLf6qU+ht66jdUsN0QLKJN27Z+1+gHrVMKgndBahes0PU6rRihDgHTw== + version "5.6.6" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.6.tgz#5321b9579f4a1949318550ced99c2a4a4e60cbaf" + integrity sha512-bLjW01UTrvoWTJQL5LsMRo1SypHW80FTm12OJRSnr3v6YHNhfe+1r0MYUZJMACxnCHURVnBWRwAsWs2yPU9Ezw== dependencies: "@types/html-minifier-terser" "^6.0.0" html-minifier-terser "^6.0.2" @@ -4950,26 +5169,27 @@ http-deceiver@^1.2.7: resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== +http-errors@~1.8.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== dependencies: - depd "2.0.0" + depd "~1.1.2" inherits "2.0.4" setprototypeof "1.2.0" - statuses "2.0.1" + statuses ">= 1.5.0 < 2" toidentifier "1.0.1" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== +http-errors@~2.0.0, http-errors@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" http-parser-js@>=0.5.1: version "0.5.10" @@ -5014,7 +5234,7 @@ hyperdyperid@^1.2.0: resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b" integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== -iconv-lite@0.4.24: +iconv-lite@~0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -5064,12 +5284,7 @@ infima@0.2.0-alpha.45: resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.45.tgz#542aab5a249274d81679631b492973dd2c1e7466" integrity sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw== -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - -inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5084,10 +5299,10 @@ ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inline-style-parser@0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.4.tgz#f4af5fe72e612839fcd453d989a586566d695f22" - integrity sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q== +inline-style-parser@0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.7.tgz#b1fc68bfc0313b8685745e4464e37f9376b9c909" + integrity sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA== invariant@^2.2.4: version "2.2.4" @@ -5102,9 +5317,9 @@ ipaddr.js@1.9.1: integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== ipaddr.js@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" - integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.3.0.tgz#71dce70e1398122208996d1c22f2ba46a24b1abc" + integrity sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg== is-alphabetical@^2.0.0: version "2.0.1" @@ -5203,9 +5418,9 @@ is-installed-globally@^0.4.0: is-path-inside "^3.0.2" is-network-error@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.3.0.tgz#2ce62cbca444abd506f8a900f39d20b898d37512" - integrity sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw== + version "1.3.1" + resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.3.1.tgz#a2a86b80ffd6b05b774755c73c8aaab16597e58d" + integrity sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw== is-npm@^6.0.0: version "6.1.0" @@ -5272,9 +5487,9 @@ is-wsl@^2.2.0: is-docker "^2.0.0" is-wsl@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" - integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + version "3.1.1" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.1.tgz#327897b26832a3eb117da6c27492d04ca132594f" + integrity sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw== dependencies: is-inside-container "^1.0.0" @@ -5356,17 +5571,17 @@ joi@^17.9.2: integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + version "3.14.2" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.2.tgz#77485ce1dd7f33c061fd1b16ecea23b55fcb04b0" + integrity sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg== dependencies: argparse "^1.0.7" esprima "^4.0.0" js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + version "4.1.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== dependencies: argparse "^2.0.1" @@ -5395,11 +5610,6 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-schema@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - json5@^2.1.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" @@ -5439,9 +5649,9 @@ latest-version@^7.0.0: package-json "^8.1.0" launch-editor@^2.6.1: - version "2.11.1" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.11.1.tgz#61a0b7314a42fd84a6cbb564573d9e9ffcf3d72b" - integrity sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg== + version "2.13.1" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.13.1.tgz#d96ae376a282011661a112479a4bc2b8c1d914be" + integrity sha512-lPSddlAAluRKJ7/cjRFoXUFzaX7q/YKI7yPHuEvSJVqoXvFnJov1/Ud87Aa4zULIbA9Nja4mSPK8l0z/7eV2wA== dependencies: picocolors "^1.1.1" shell-quote "^1.8.3" @@ -5461,7 +5671,7 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -loader-runner@^4.2.0: +loader-runner@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== @@ -5498,9 +5708,9 @@ lodash.uniq@^4.5.0: integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== lodash@^4.17.20, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + version "4.17.23" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.23.tgz#f113b0378386103be4f6893388c73d0bde7f2c5a" + integrity sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w== longest-streak@^3.0.0: version "3.1.0" @@ -5550,11 +5760,6 @@ markdown-table@^3.0.0: resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.4.tgz#fe44d6d410ff9d6f2ea1797a3f60aa4d2b631c2a" integrity sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw== -marked@^16.3.0: - version "16.4.1" - resolved "https://registry.yarnpkg.com/marked/-/marked-16.4.1.tgz#db37c878cfa28fa57b8dd471fe92a83282911052" - integrity sha512-ntROs7RaN3EvWfy3EZi14H4YxmT6A5YvywfhO+0pm+cH/dnSQRmdAmoFIc3B9aiwTehyk7pESH4ofyBY+V5hZg== - math-intrinsics@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" @@ -5586,9 +5791,9 @@ mdast-util-find-and-replace@^3.0.0, mdast-util-find-and-replace@^3.0.1: unist-util-visit-parents "^6.0.0" mdast-util-from-markdown@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz#4850390ca7cf17413a9b9a0fbefcd1bc0eb4160a" - integrity sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA== + version "2.0.3" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz#c95822b91aab75f18a4cbe8b2f51b873ed2cf0c7" + integrity sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q== dependencies: "@types/mdast" "^4.0.0" "@types/unist" "^3.0.0" @@ -5742,9 +5947,9 @@ mdast-util-phrasing@^4.0.0: unist-util-is "^6.0.0" mdast-util-to-hast@^13.0.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4" - integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== + version "13.2.1" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz#d7ff84ca499a57e2c060ae67548ad950e689a053" + integrity sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA== dependencies: "@types/hast" "^3.0.0" "@types/mdast" "^4.0.0" @@ -5794,10 +5999,18 @@ media-typer@0.3.0: integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memfs@^4.43.1: - version "4.49.0" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.49.0.tgz#bc35069570d41a31c62e31f1a6ec6057a8ea82f0" - integrity sha512-L9uC9vGuc4xFybbdOpRLoOAOq1YEBBsocCs5NVW32DfU+CZWWIn3OVF+lB8Gp4ttBVSMazwrTrjv8ussX/e3VQ== - dependencies: + version "4.56.11" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.56.11.tgz#53a21b11a06a446a11598303bcd353c16762cb4d" + integrity sha512-/GodtwVeKVIHZKLUSr2ZdOxKBC5hHki4JNCU22DoCGPEHr5o2PD5U721zvESKyWwCfTfavFl9WZYgA13OAYK0g== + dependencies: + "@jsonjoy.com/fs-core" "4.56.11" + "@jsonjoy.com/fs-fsa" "4.56.11" + "@jsonjoy.com/fs-node" "4.56.11" + "@jsonjoy.com/fs-node-builtins" "4.56.11" + "@jsonjoy.com/fs-node-to-fsa" "4.56.11" + "@jsonjoy.com/fs-node-utils" "4.56.11" + "@jsonjoy.com/fs-print" "4.56.11" + "@jsonjoy.com/fs-snapshot" "4.56.11" "@jsonjoy.com/json-pack" "^1.11.0" "@jsonjoy.com/util" "^1.9.0" glob-to-regex.js "^1.0.1" @@ -6271,7 +6484,7 @@ mime-types@2.1.18: dependencies: mime-db "~1.33.0" -mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34, mime-types@~2.1.35: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -6279,9 +6492,9 @@ mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: mime-db "1.52.0" mime-types@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.1.tgz#b1d94d6997a9b32fd69ebaed0db73de8acb519ce" - integrity sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA== + version "3.0.2" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" + integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== dependencies: mime-db "^1.54.0" @@ -6306,9 +6519,9 @@ mimic-response@^4.0.0: integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== mini-css-extract-plugin@^2.9.2: - version "2.9.4" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz#cafa1a42f8c71357f49cd1566810d74ff1cb0200" - integrity sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ== + version "2.10.1" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.1.tgz#a7f0bb890f4e1ce6dfc124bd1e6d6fcd3b359844" + integrity sha512-k7G3Y5QOegl380tXmZ68foBRRjE9Ljavx835ObdvmZjQ639izvZD8CS7BkWw1qKPPzHsGL/JDhl0uyU1zc2rJw== dependencies: schema-utils "^4.0.0" tapable "^2.2.1" @@ -6318,10 +6531,10 @@ minimalistic-assert@^1.0.0: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimatch@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== +minimatch@3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" + integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== dependencies: brace-expansion "^1.1.7" @@ -6391,30 +6604,20 @@ node-emoji@^2.1.0: emojilib "^2.4.0" skin-tone "^2.0.0" -node-forge@^1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - -node-releases@^2.0.21: - version "2.0.25" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.25.tgz#95479437bd409231e03981c1f6abee67f5e962df" - integrity sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA== +node-releases@^2.0.27: + version "2.0.36" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.36.tgz#99fd6552aaeda9e17c4713b57a63964a2e325e9d" + integrity sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - normalize-url@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.1.0.tgz#d33504f67970decf612946fd4880bc8c0983486d" - integrity sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w== + version "8.1.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.1.1.tgz#751a20c8520e5725404c06015fea21d7567f25ef" + integrity sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ== npm-run-path@^4.0.1: version "4.0.1" @@ -6475,7 +6678,7 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -on-finished@2.4.1, on-finished@^2.4.1: +on-finished@^2.4.1, on-finished@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== @@ -6641,7 +6844,7 @@ parse5@^7.0.0: dependencies: entities "^6.0.0" -parseurl@~1.3.2, parseurl@~1.3.3: +parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== @@ -6674,11 +6877,6 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-to-regexp@0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" - integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== - path-to-regexp@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.3.0.tgz#f7f31d32e8518c2660862b644414b6d5c63a611b" @@ -6691,6 +6889,11 @@ path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" +path-to-regexp@~0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" + integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -6713,6 +6916,18 @@ pkg-dir@^7.0.0: dependencies: find-up "^6.3.0" +pkijs@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/pkijs/-/pkijs-3.3.3.tgz#b3f04d7b2eaacb05c81675f882be374e591626ec" + integrity sha512-+KD8hJtqQMYoTuL1bbGOqxb4z+nZkTAwVdNtWwe8Tc2xNbEmdJYIYoc6Qt0uF55e6YW6KuTHw1DjQ18gMhzepw== + dependencies: + "@noble/hashes" "1.4.0" + asn1js "^3.0.6" + bytestreamjs "^2.0.1" + pvtsutils "^1.3.6" + pvutils "^1.1.3" + tslib "^2.8.1" + postcss-attribute-case-insensitive@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz#0c4500e3bcb2141848e89382c05b5a31c23033a3" @@ -7103,9 +7318,9 @@ postcss-place@^10.0.0: postcss-value-parser "^4.2.0" postcss-preset-env@^10.2.1: - version "10.4.0" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-10.4.0.tgz#fa6167a307f337b2bcdd1d125604ff97cdeb5142" - integrity sha512-2kqpOthQ6JhxqQq1FSAAZGe9COQv75Aw8WbsOvQVNJ2nSevc9Yx/IKZGuZ7XJ+iOTtVon7LfO7ELRzg8AZ+sdw== + version "10.6.1" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-10.6.1.tgz#df30cfc54e90af2dcff5f94104e6f272359c9f65" + integrity sha512-yrk74d9EvY+W7+lO9Aj1QmjWY9q5NsKjK2V9drkOPZB/X6KZ0B3igKsHUYakb7oYVhnioWypQX3xGuePf89f3g== dependencies: "@csstools/postcss-alpha-function" "^1.0.1" "@csstools/postcss-cascade-layers" "^5.0.2" @@ -7132,23 +7347,27 @@ postcss-preset-env@^10.2.1: "@csstools/postcss-media-minmax" "^2.0.9" "@csstools/postcss-media-queries-aspect-ratio-number-values" "^3.0.5" "@csstools/postcss-nested-calc" "^4.0.0" - "@csstools/postcss-normalize-display-values" "^4.0.0" + "@csstools/postcss-normalize-display-values" "^4.0.1" "@csstools/postcss-oklab-function" "^4.0.12" + "@csstools/postcss-position-area-property" "^1.0.0" "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-property-rule-prelude-list" "^1.0.0" "@csstools/postcss-random-function" "^2.0.1" "@csstools/postcss-relative-color-syntax" "^3.0.12" "@csstools/postcss-scope-pseudo-class" "^4.0.1" "@csstools/postcss-sign-functions" "^1.1.4" "@csstools/postcss-stepped-value-functions" "^4.0.9" + "@csstools/postcss-syntax-descriptor-syntax-production" "^1.0.1" + "@csstools/postcss-system-ui-font-family" "^1.0.0" "@csstools/postcss-text-decoration-shorthand" "^4.0.3" "@csstools/postcss-trigonometric-functions" "^4.0.9" "@csstools/postcss-unset-value" "^4.0.0" - autoprefixer "^10.4.21" - browserslist "^4.26.0" + autoprefixer "^10.4.23" + browserslist "^4.28.1" css-blank-pseudo "^7.0.1" css-has-pseudo "^7.0.3" css-prefers-color-scheme "^10.0.0" - cssdb "^8.4.2" + cssdb "^8.6.0" postcss-attribute-case-insensitive "^7.0.1" postcss-clamp "^4.1.0" postcss-color-functional-notation "^7.0.12" @@ -7225,9 +7444,9 @@ postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16: util-deprecate "^1.0.2" postcss-selector-parser@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz#4d6af97eba65d73bc4d84bcb343e865d7dd16262" - integrity sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA== + version "7.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz#e75d2e0d843f620e5df69076166f4e16f891cb9f" + integrity sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -7265,9 +7484,9 @@ postcss-zindex@^6.0.2: integrity sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg== postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.33, postcss@^8.5.4: - version "8.5.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" - integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + version "8.5.8" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.8.tgz#6230ecc8fb02e7a0f6982e53990937857e13f399" + integrity sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg== dependencies: nanoid "^3.3.11" picocolors "^1.1.1" @@ -7321,11 +7540,6 @@ prop-types@^15.6.2, prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.13.1" -property-information@^6.0.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" - integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== - property-information@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.1.0.tgz#b622e8646e02b580205415586b40804d3e8bfd5d" @@ -7356,12 +7570,24 @@ pupa@^3.1.0: dependencies: escape-goat "^4.0.0" -qs@6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== +pvtsutils@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.6.tgz#ec46e34db7422b9e4fdc5490578c1883657d6001" + integrity sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg== + dependencies: + tslib "^2.8.1" + +pvutils@^1.1.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.5.tgz#84b0dea4a5d670249aa9800511804ee0b7c2809c" + integrity sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA== + +qs@~6.14.0: + version "6.14.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.2.tgz#b5634cf9d9ad9898e31fba3504e866e8efb6798c" + integrity sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q== dependencies: - side-channel "^1.0.6" + side-channel "^1.1.0" queue-microtask@^1.2.2: version "1.2.3" @@ -7390,15 +7616,15 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== +raw-body@~2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2" + integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" + bytes "~3.1.2" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + unpipe "~1.0.0" rc@1.2.8: version "1.2.8" @@ -7410,10 +7636,10 @@ rc@1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@^19.2.0: - version "19.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.2.0.tgz#00ed1e959c365e9a9d48f8918377465466ec3af8" - integrity sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ== +react-dom@^19.2.4: + version "19.2.4" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.2.4.tgz#6fac6bd96f7db477d966c7ec17c1a2b1ad8e6591" + integrity sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ== dependencies: scheduler "^0.27.0" @@ -7492,10 +7718,10 @@ react-router@5.3.4, react-router@^5.3.4: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react@^19.2.0: - version "19.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-19.2.0.tgz#d33dd1721698f4376ae57a54098cb47fc75d93a5" - integrity sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ== +react@^19.2.4: + version "19.2.4" + resolved "https://registry.yarnpkg.com/react/-/react-19.2.4.tgz#438e57baa19b77cb23aab516cf635cd0579ee09a" + integrity sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ== readable-stream@^2.0.1: version "2.3.8" @@ -7566,6 +7792,11 @@ recma-stringify@^1.0.0: unified "^11.0.0" vfile "^6.0.0" +reflect-metadata@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" + integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== + regenerate-unicode-properties@^10.2.2: version "10.2.2" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz#aa113812ba899b630658c7623466be71e1f86f66" @@ -7578,7 +7809,7 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regexpu-core@^6.2.0: +regexpu-core@^6.3.1: version "6.4.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.4.0.tgz#3580ce0c4faedef599eccb146612436b62a176e5" integrity sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA== @@ -7591,11 +7822,11 @@ regexpu-core@^6.2.0: unicode-match-property-value-ecmascript "^2.2.1" registry-auth-token@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.1.0.tgz#3c659047ecd4caebd25bc1570a3aa979ae490eca" - integrity sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw== + version "5.1.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.1.1.tgz#f1ff69c8e492e7edee07110b4752dd0a8aa82853" + integrity sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q== dependencies: - "@pnpm/npm-conf" "^2.1.0" + "@pnpm/npm-conf" "^3.0.2" registry-url@^6.0.0: version "6.0.1" @@ -7766,7 +7997,7 @@ resolve-pathname@^3.0.0: resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== -resolve@^1.22.10: +resolve@^1.22.11: version "1.22.11" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== @@ -7829,10 +8060,10 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" - integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== +sax@^1.2.4, sax@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.5.0.tgz#b5549b671069b7aa392df55ec7574cf411179eb8" + integrity sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA== scheduler@^0.27.0: version "0.27.0" @@ -7876,13 +8107,13 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== -selfsigned@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" - integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== +selfsigned@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-5.5.0.tgz#4c9ab7c7c9f35f18fb6a9882c253eb0e6bd6557b" + integrity sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew== dependencies: - "@types/node-forge" "^1.3.0" - node-forge "^1" + "@peculiar/x509" "^1.14.2" + pkijs "^3.3.3" semver-diff@^4.0.0: version "4.0.0" @@ -7897,30 +8128,30 @@ semver@^6.3.1: integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.5, semver@^7.3.7, semver@^7.5.4: - version "7.7.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" - integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== + version "7.7.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a" + integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== -send@0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" - integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== +send@~0.19.0, send@~0.19.1: + version "0.19.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.2.tgz#59bc0da1b4ea7ad42736fd642b1c4294e114ff29" + integrity sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg== dependencies: debug "2.6.9" depd "2.0.0" destroy "1.2.0" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" + fresh "~0.5.2" + http-errors "~2.0.1" mime "1.6.0" ms "2.1.3" - on-finished "2.4.1" + on-finished "~2.4.1" range-parser "~1.2.1" - statuses "2.0.1" + statuses "~2.0.2" -serialize-javascript@^6.0.0, serialize-javascript@^6.0.1, serialize-javascript@^6.0.2: +serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: version "6.0.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== @@ -7928,40 +8159,40 @@ serialize-javascript@^6.0.0, serialize-javascript@^6.0.1, serialize-javascript@^ randombytes "^2.1.0" serve-handler@^6.1.6: - version "6.1.6" - resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.6.tgz#50803c1d3e947cd4a341d617f8209b22bd76cfa1" - integrity sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ== + version "6.1.7" + resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.7.tgz#e9bb864e87ee71e8dab874cde44d146b77e3fb78" + integrity sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg== dependencies: bytes "3.0.0" content-disposition "0.5.2" mime-types "2.1.18" - minimatch "3.1.2" + minimatch "3.1.5" path-is-inside "1.0.2" path-to-regexp "3.3.0" range-parser "1.2.0" serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + version "1.9.2" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.2.tgz#2988e3612106d78a5e4849ddff552ce7bd3d9bcb" + integrity sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ== dependencies: - accepts "~1.3.4" + accepts "~1.3.8" batch "0.6.1" debug "2.6.9" escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" + http-errors "~1.8.0" + mime-types "~2.1.35" + parseurl "~1.3.3" -serve-static@1.16.2: - version "1.16.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" - integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== +serve-static@~1.16.2: + version "1.16.3" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.3.tgz#a97b74d955778583f3862a4f0b841eb4d5d78cf9" + integrity sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA== dependencies: encodeurl "~2.0.0" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.19.0" + send "~0.19.1" set-function-length@^1.2.2: version "1.2.2" @@ -7975,12 +8206,7 @@ set-function-length@^1.2.2: gopd "^1.0.1" has-property-descriptors "^1.0.2" -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.2.0: +setprototypeof@1.2.0, setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== @@ -8043,7 +8269,7 @@ side-channel-weakmap@^1.0.2: object-inspect "^1.13.3" side-channel-map "^1.0.1" -side-channel@^1.0.6: +side-channel@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== @@ -8074,9 +8300,9 @@ sisteransi@^1.0.5: integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== sitemap@^7.1.1: - version "7.1.2" - resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.2.tgz#6ce1deb43f6f177c68bc59cf93632f54e3ae6b72" - integrity sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw== + version "7.1.3" + resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.3.tgz#2b756f79f0b77527c0eaba280c722e4c66c08886" + integrity sha512-tAjEd+wt/YwnEbfNB2ht51ybBJxbEWwe5ki/Z//Wh0rpBFTCUSj46GnxUKEWzhfuJTsee8x3lybHxFgUMig2hw== dependencies: "@types/node" "^17.0.5" "@types/sax" "^1.2.1" @@ -8183,16 +8409,16 @@ srcset@^4.0.0: resolved "https://registry.yarnpkg.com/srcset/-/srcset-4.0.0.tgz#336816b665b14cd013ba545b6fe62357f86e65f4" integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw== -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -"statuses@>= 1.4.0 < 2": +"statuses@>= 1.5.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +statuses@~2.0.1, statuses@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + std-env@^3.7.0: version "3.10.0" resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.10.0.tgz#d810b27e3a073047b2b5e40034881f5ea6f9c83b" @@ -8255,11 +8481,11 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: ansi-regex "^5.0.1" strip-ansi@^7.0.1: - version "7.1.2" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba" - integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA== + version "7.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3" + integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== dependencies: - ansi-regex "^6.0.1" + ansi-regex "^6.2.2" strip-bom-string@^1.0.0: version "1.0.0" @@ -8282,18 +8508,18 @@ strip-json-comments@~2.0.1: integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== style-to-js@^1.0.0: - version "1.1.18" - resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.18.tgz#3e6c13bd4c4db079bd2c2c94571cce5c758bc2ff" - integrity sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg== + version "1.1.21" + resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.21.tgz#2908941187f857e79e28e9cd78008b9a0b3e0e8d" + integrity sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ== dependencies: - style-to-object "1.0.11" + style-to-object "1.0.14" -style-to-object@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.11.tgz#cf252c4051758b7acb18a5efb296f91fb79bb9c4" - integrity sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow== +style-to-object@1.0.14: + version "1.0.14" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.14.tgz#1d22f0e7266bb8c6d8cae5caf4ec4f005e08f611" + integrity sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw== dependencies: - inline-style-parser "0.2.4" + inline-style-parser "0.2.7" stylehacks@^6.1.1: version "6.1.1" @@ -8328,46 +8554,37 @@ svg-parser@^2.0.4: integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== svgo@^3.0.2, svgo@^3.2.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8" - integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== + version "3.3.3" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.3.tgz#8246aee0b08791fde3b0ed22b5661b471fadf58e" + integrity sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng== dependencies: - "@trysound/sax" "0.2.0" commander "^7.2.0" css-select "^5.1.0" css-tree "^2.3.1" css-what "^6.1.0" csso "^5.0.5" picocolors "^1.0.0" + sax "^1.5.0" -swr@^2.2.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/swr/-/swr-2.3.6.tgz#5fee0ee8a0762a16871ee371075cb09422b64f50" - integrity sha512-wfHRmHWk/isGNMwlLGlZX5Gzz/uTgo0o2IRuTMcf4CPuPFJZlq0rDaKUx+ozB5nBOReNV1kiOyzMfj+MBMikLw== - dependencies: - dequal "^2.0.3" - use-sync-external-store "^1.4.0" - -tapable@^2.0.0, tapable@^2.2.0, tapable@^2.2.1, tapable@^2.3.0: +tapable@^2.0.0, tapable@^2.2.1, tapable@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== -terser-webpack-plugin@^5.3.11, terser-webpack-plugin@^5.3.9: - version "5.3.14" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz#9031d48e57ab27567f02ace85c7d690db66c3e06" - integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw== +terser-webpack-plugin@^5.3.17, terser-webpack-plugin@^5.3.9: + version "5.4.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz#95fc4cf4437e587be11ecf37d08636089174d76b" + integrity sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g== dependencies: "@jridgewell/trace-mapping" "^0.3.25" jest-worker "^27.4.5" schema-utils "^4.3.0" - serialize-javascript "^6.0.2" terser "^5.31.1" terser@^5.10.0, terser@^5.15.1, terser@^5.31.1: - version "5.44.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.44.0.tgz#ebefb8e5b8579d93111bfdfc39d2cf63879f4a82" - integrity sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w== + version "5.46.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.46.0.tgz#1b81e560d584bbdd74a8ede87b4d9477b0ff9695" + integrity sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.15.0" @@ -8379,11 +8596,6 @@ thingies@^2.5.0: resolved "https://registry.yarnpkg.com/thingies/-/thingies-2.5.0.tgz#5f7b882c933b85989f8466b528a6247a6881e04f" integrity sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw== -throttleit@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-2.1.0.tgz#a7e4aa0bf4845a5bd10daa39ea0c783f631a07b4" - integrity sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw== - thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" @@ -8411,7 +8623,7 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -toidentifier@1.0.1: +toidentifier@1.0.1, toidentifier@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== @@ -8436,11 +8648,23 @@ trough@^2.0.0: resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.6.0: +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.6.0, tslib@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== +tsyringe@^4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/tsyringe/-/tsyringe-4.10.0.tgz#d0c95815d584464214060285eaaadd94aa03299c" + integrity sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw== + dependencies: + tslib "^1.9.3" + type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" @@ -8471,10 +8695,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -undici-types@~7.16.0: - version "7.16.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" - integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== +undici-types@~7.18.0: + version "7.18.2" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.18.2.tgz#29357a89e7b7ca4aef3bf0fd3fd0cd73884229e9" + integrity sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.1" @@ -8561,9 +8785,9 @@ unist-util-visit-parents@^6.0.0: unist-util-is "^6.0.0" unist-util-visit@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" - integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== + version "5.1.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.1.0.tgz#9a2a28b0aa76a15e0da70a08a5863a2f060e2468" + integrity sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg== dependencies: "@types/unist" "^3.0.0" unist-util-is "^6.0.0" @@ -8574,15 +8798,15 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" - integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== +update-browserslist-db@^1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" + integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== dependencies: escalade "^3.2.0" picocolors "^1.1.1" @@ -8623,11 +8847,6 @@ url-loader@^4.1.1: mime-types "^2.1.27" schema-utils "^3.0.0" -use-sync-external-store@^1.4.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz#b174bfa65cb2b526732d9f2ac0a408027876f32d" - integrity sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w== - util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -8687,10 +8906,10 @@ vfile@^6.0.0, vfile@^6.0.1: "@types/unist" "^3.0.0" vfile-message "^4.0.0" -watchpack@^2.4.4: - version "2.4.4" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.4.tgz#473bda72f0850453da6425081ea46fc0d7602947" - integrity sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA== +watchpack@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.1.tgz#dd38b601f669e0cbf567cb802e75cead82cde102" + integrity sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -8738,13 +8957,13 @@ webpack-dev-middleware@^7.4.2: schema-utils "^4.0.0" webpack-dev-server@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz#96a143d50c58fef0c79107e61df911728d7ceb39" - integrity sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg== + version "5.2.3" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.2.3.tgz#7f36a78be7ac88833fd87757edee31469a9e47d3" + integrity sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ== dependencies: "@types/bonjour" "^3.5.13" "@types/connect-history-api-fallback" "^1.5.4" - "@types/express" "^4.17.21" + "@types/express" "^4.17.25" "@types/express-serve-static-core" "^4.17.21" "@types/serve-index" "^1.9.4" "@types/serve-static" "^1.15.5" @@ -8754,9 +8973,9 @@ webpack-dev-server@^5.2.2: bonjour-service "^1.2.1" chokidar "^3.6.0" colorette "^2.0.10" - compression "^1.7.4" + compression "^1.8.1" connect-history-api-fallback "^2.0.0" - express "^4.21.2" + express "^4.22.1" graceful-fs "^4.2.6" http-proxy-middleware "^2.0.9" ipaddr.js "^2.1.0" @@ -8764,7 +8983,7 @@ webpack-dev-server@^5.2.2: open "^10.0.3" p-retry "^6.2.0" schema-utils "^4.2.0" - selfsigned "^2.4.1" + selfsigned "^5.5.0" serve-index "^1.9.1" sockjs "^0.3.24" spdy "^4.0.2" @@ -8789,15 +9008,15 @@ webpack-merge@^6.0.1: flat "^5.0.2" wildcard "^2.0.1" -webpack-sources@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723" - integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== +webpack-sources@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.4.tgz#a338b95eb484ecc75fbb196cbe8a2890618b4891" + integrity sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q== webpack@^5.88.1, webpack@^5.95.0: - version "5.102.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.102.1.tgz#1003a3024741a96ba99c37431938bf61aad3d988" - integrity sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ== + version "5.105.4" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.4.tgz#1b77fcd55a985ac7ca9de80a746caffa38220169" + integrity sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.8" @@ -8805,25 +9024,25 @@ webpack@^5.88.1, webpack@^5.95.0: "@webassemblyjs/ast" "^1.14.1" "@webassemblyjs/wasm-edit" "^1.14.1" "@webassemblyjs/wasm-parser" "^1.14.1" - acorn "^8.15.0" + acorn "^8.16.0" acorn-import-phases "^1.0.3" - browserslist "^4.26.3" + browserslist "^4.28.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.17.3" - es-module-lexer "^1.2.1" + enhanced-resolve "^5.20.0" + es-module-lexer "^2.0.0" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" + loader-runner "^4.3.1" mime-types "^2.1.27" neo-async "^2.6.2" schema-utils "^4.3.3" tapable "^2.3.0" - terser-webpack-plugin "^5.3.11" - watchpack "^2.4.4" - webpack-sources "^3.3.3" + terser-webpack-plugin "^5.3.17" + watchpack "^2.5.1" + webpack-sources "^3.3.4" webpackbar@^6.0.1: version "6.0.1" @@ -8906,9 +9125,9 @@ ws@^7.3.1: integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== ws@^8.18.0: - version "8.18.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" - integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== + version "8.19.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.19.0.tgz#ddc2bdfa5b9ad860204f5a72a4863a8895fd8c8b" + integrity sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg== wsl-utils@^0.1.0: version "0.1.0" @@ -8935,14 +9154,9 @@ yallist@^3.0.2: integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yocto-queue@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.2.1.tgz#36d7c4739f775b3cbc28e6136e21aa057adec418" - integrity sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg== - -zod@^4.1.8: - version "4.1.12" - resolved "https://registry.yarnpkg.com/zod/-/zod-4.1.12.tgz#64f1ea53d00eab91853195653b5af9eee68970f0" - integrity sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ== + version "1.2.2" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.2.2.tgz#3e09c95d3f1aa89a58c114c99223edf639152c00" + integrity sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ== zwitch@^2.0.0: version "2.0.4" diff --git a/justfile b/justfile index e3292e6d22..a241f3f50f 100644 --- a/justfile +++ b/justfile @@ -1,25 +1,30 @@ default: just --summary --unsorted -test $RUST_BACKTRACE="1" *args="": test-consensus build-pathfinder-release +test $RUST_BACKTRACE="1" *args="": build-pathfinder-release cargo nextest run --no-fail-fast --all-targets --features p2p --workspace --locked \ - -E 'not (test(/^p2p_network::sync_handlers::tests::prop/) | test(/^test::consensus_3_nodes/))' \ + -E 'not (test(/^p2p_network::sync::sync_handlers::tests::prop/) | test(/^consensus::inner::p2p_task::handler_proptest/) | test(/^test::consensus_[34]_nodes/))' \ {{args}} -test-all-features $RUST_BACKTRACE="1" *args="": test-consensus build-pathfinder-release +test-all-features $RUST_BACKTRACE="1" *args="": build-pathfinder-release cargo nextest run --no-fail-fast --all-targets --all-features --workspace --locked \ - -E 'not (test(/^p2p_network::sync_handlers::tests::prop/) | test(/^test::consensus_3_nodes/))' \ + -E 'not (test(/^p2p_network::sync::sync_handlers::tests::prop/) | test(/^consensus::inner::p2p_task::handler_proptest/) | test(/^test::consensus_[34]_nodes/))' \ {{args}} -test-consensus $RUST_BACKTRACE="1" *args="": - PATHFINDER_TEST_ENABLE_PORT_MARKER_FILES=1 cargo nextest run --test consensus -p pathfinder --features p2p,consensus-integration-tests --locked \ +test-consensus $RUST_BACKTRACE="1" *args="": build-pathfinder build-feeder-gateway + PATHFINDER_TEST_ENABLE_MARKER_FILES=1 cargo nextest run --test consensus -p pathfinder --retries 2 -j 1 --features p2p,consensus-integration-tests --locked \ {{args}} -proptest $RUST_BACKTRACE="1" *args="": - cargo nextest run --no-fail-fast --all-targets --features p2p --workspace --locked \ +proptest-sync-handlers $RUST_BACKTRACE="1" *args="": + cargo nextest run --no-fail-fast --retries 2 --all-targets --features p2p --workspace --locked \ -E 'test(/^p2p_network::sync::sync_handlers::tests::prop/)' \ {{args}} +proptest-consensus-handler $RUST_BACKTRACE="1" *args="": + cargo nextest run --no-fail-fast --retries 2 --all-targets --features p2p --workspace --locked \ + -E 'test(/^consensus::inner::p2p_task::handler_proptest/)' \ + {{args}} + build: cargo build --workspace --all-targets @@ -30,6 +35,12 @@ build-all-features: build-pathfinder-release: cargo build --release -p pathfinder --bin pathfinder -F p2p,consensus-integration-tests +build-pathfinder: + cargo build -p pathfinder --bin pathfinder -F p2p,consensus-integration-tests + +build-feeder-gateway: + cargo build -p feeder-gateway -F small_aggregate_filters --bin feeder-gateway + check: cargo check --workspace --all-targets diff --git a/rust-toolchain.toml b/rust-toolchain.toml index d6eb8fbf7d..03199c42d7 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "1.88.0" +channel = "1.91.1" components = ["rustfmt", "clippy"] profile = "minimal" diff --git a/specs/rpc/v10/starknet_api_openrpc.json b/specs/rpc/v10/starknet_api_openrpc.json index c5871688ee..1cf7f5f4e8 100644 --- a/specs/rpc/v10/starknet_api_openrpc.json +++ b/specs/rpc/v10/starknet_api_openrpc.json @@ -1,7 +1,7 @@ { "openrpc": "1.0.0-rc1", "info": { - "version": "0.10.0-rc.1", + "version": "0.10.2", "title": "StarkNet Node API", "license": {} }, @@ -70,6 +70,18 @@ "title": "Block id", "$ref": "#/components/schemas/BLOCK_ID" } + }, + { + "name": "response_flags", + "description": "Flags that control what additional fields are included in transaction responses", + "required": false, + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TXN_RESPONSE_FLAG" + }, + "default": [] + } } ], "result": { @@ -107,6 +119,18 @@ "title": "Block id", "$ref": "#/components/schemas/BLOCK_ID" } + }, + { + "name": "response_flags", + "description": "Flags that control what additional fields are included in transaction responses", + "required": false, + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TXN_RESPONSE_FLAG" + }, + "default": [] + } } ], "result": { @@ -144,6 +168,18 @@ "title": "Block id", "$ref": "#/components/schemas/BLOCK_ID" } + }, + { + "name": "contract_addresses", + "description": "If specified, only state diffs related to these contract addresses will be returned. Class declarations are unaffected by this filter. If omitted, the full state diff is returned.", + "required": false, + "schema": { + "title": "Contract addresses", + "type": "array", + "items": { + "$ref": "#/components/schemas/ADDRESS" + } + } } ], "result": { @@ -201,15 +237,38 @@ "title": "Block id", "$ref": "#/components/schemas/BLOCK_ID" } + }, + { + "name": "response_flags", + "description": "Flags that control what additional fields are included in the response", + "required": false, + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/STORAGE_RESPONSE_FLAG" + }, + "default": [] + } } ], "result": { "name": "result", - "description": "The value at the given key for the given contract. 0 if no value is found", + "description": "The value at the given key for the given contract. 0 if no value is found. When response_flags includes INCLUDE_LAST_UPDATE_BLOCK, the result is an object containing the value and the block number of the most recent storage update", "summary": "The value at the given key for the given contract.", "schema": { - "title": "Field element", - "$ref": "#/components/schemas/FELT" + "title": "Storage value result", + "oneOf": [ + { + "title": "Field element", + "description": "The storage value as a plain field element, returned when no response flags are set", + "$ref": "#/components/schemas/FELT" + }, + { + "title": "Storage result with metadata", + "description": "The storage value with additional metadata, returned when response flags are set", + "$ref": "#/components/schemas/STORAGE_RESULT" + } + ] } }, "errors": [ @@ -315,6 +374,18 @@ "title": "Transaction hash", "$ref": "#/components/schemas/TXN_HASH" } + }, + { + "name": "response_flags", + "description": "Flags that control what additional fields are included in the response", + "required": false, + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TXN_RESPONSE_FLAG" + }, + "default": [] + } } ], "result": { @@ -352,6 +423,18 @@ "type": "integer", "minimum": 0 } + }, + { + "name": "response_flags", + "description": "Flags that control what additional fields are included in the response", + "required": false, + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TXN_RESPONSE_FLAG" + }, + "default": [] + } } ], "result": { @@ -784,7 +867,7 @@ }, { "name": "starknet_syncing", - "summary": "Returns an object about the sync status, or false if the node is not synching", + "summary": "Returns an object about the sync status, or false if the node is not syncing", "params": [], "result": { "name": "syncing", @@ -1203,7 +1286,20 @@ }, "address": { "title": "from contract", - "$ref": "#/components/schemas/ADDRESS" + "description": "A contract address or a list of addresses from which events should originate", + "oneOf": [ + { + "title": "Single address", + "$ref": "#/components/schemas/ADDRESS" + }, + { + "title": "List of addresses", + "type": "array", + "items": { + "$ref": "#/components/schemas/ADDRESS" + } + } + ] }, "keys": { "title": "event keys", @@ -1647,6 +1743,44 @@ "title": "Starknet version", "description": "Semver of the current Starknet protocol", "type": "string" + }, + "event_commitment": { + "title": "Event commitment", + "description": "The root of Merkle Patricia trie for events in the block. For blocks where this data is not available (e.g., old blocks), use 0x0", + "$ref": "#/components/schemas/FELT" + }, + "transaction_commitment": { + "title": "Transaction commitment", + "description": "The root of Merkle Patricia trie for transactions in the block. For blocks where this data is not available (e.g., old blocks), use 0x0", + "$ref": "#/components/schemas/FELT" + }, + "receipt_commitment": { + "title": "Receipt commitment", + "description": "The root of Merkle Patricia trie for receipts in the block. For blocks where this data is not available (e.g., old blocks), use 0x0", + "$ref": "#/components/schemas/FELT" + }, + "state_diff_commitment": { + "title": "State diff commitment", + "description": "The state diff commitment hash in the block. For blocks where this data is not available (e.g., old blocks), use 0x0", + "$ref": "#/components/schemas/FELT" + }, + "event_count": { + "title": "Event count", + "description": "The number of events in the block", + "type": "integer", + "minimum": 0 + }, + "transaction_count": { + "title": "Transaction count", + "description": "The number of transactions in the block", + "type": "integer", + "minimum": 0 + }, + "state_diff_length": { + "title": "State diff length", + "description": "The length of the state diff in the block. For blocks where this data is not available (e.g., old blocks), compute from state diff if possible, otherwise use 0", + "type": "integer", + "minimum": 0 } }, "required": [ @@ -1660,7 +1794,14 @@ "l2_gas_price", "l1_data_gas_price", "l1_da_mode", - "starknet_version" + "starknet_version", + "event_commitment", + "transaction_commitment", + "receipt_commitment", + "state_diff_commitment", + "event_count", + "transaction_count", + "state_diff_length" ] }, "PRE_CONFIRMED_BLOCK_HEADER": { @@ -2241,7 +2382,22 @@ }, "BROADCASTED_INVOKE_TXN": { "title": "Broadcasted invoke transaction", - "$ref": "#/components/schemas/INVOKE_TXN_V3" + "allOf": [ + { + "$ref": "#/components/schemas/INVOKE_TXN_V3" + }, + { + "type": "object", + "properties": { + "proof": { + "title": "Proof", + "description": "Optional proof for the transaction, as a base64 string-encoded byte array", + "type": "string", + "pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$" + } + } + } + ] }, "BROADCASTED_DEPLOY_ACCOUNT_TXN": { "title": "Broadcasted deploy account transaction", @@ -2735,6 +2891,14 @@ "title": "Fee DA mode", "description": "The storage domain of the account's balance from which fee will be charged", "$ref": "#/components/schemas/DA_MODE" + }, + "proof_facts": { + "title": "Proof facts", + "description": "Proof facts for the transaction. An empty array is returned if no proof facts exist for the transaction", + "type": "array", + "items": { + "$ref": "#/components/schemas/FELT" + } } }, "required": [ @@ -3522,6 +3686,34 @@ "enum": ["SKIP_VALIDATE"], "description": "Flags that indicate how to simulate a given transaction. By default, the sequencer behavior is replicated locally" }, + "TXN_RESPONSE_FLAG": { + "type": "string", + "enum": ["INCLUDE_PROOF_FACTS"], + "description": "Flags that control what additional fields are included in transaction responses. INCLUDE_PROOF_FACTS: Include proof_facts field in the response (an empty array is returned if no proof facts exist for the transaction)." + }, + "STORAGE_RESPONSE_FLAG": { + "type": "string", + "enum": ["INCLUDE_LAST_UPDATE_BLOCK"], + "description": "Flags that control what additional fields are included in storage responses. INCLUDE_LAST_UPDATE_BLOCK: changes the return type to include the block number of the most recent block that modified this storage slot." + }, + "STORAGE_RESULT": { + "title": "Storage result with metadata", + "description": "The storage value along with additional metadata about the storage slot", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "The value at the given key for the given contract. 0 if no value is found", + "$ref": "#/components/schemas/FELT" + }, + "last_update_block": { + "title": "Last update block", + "description": "The block number of the most recent block that included a modification to this storage slot. 0 if the storage slot has never been modified (i.e. the value is 0)", + "$ref": "#/components/schemas/BLOCK_NUMBER" + } + }, + "required": ["value", "last_update_block"] + }, "PRICE_UNIT_WEI": { "title": "Price unit wei", "type": "string", diff --git a/specs/rpc/v10/starknet_executables.json b/specs/rpc/v10/starknet_executables.json index 4e98a34593..b86fa06b5e 100644 --- a/specs/rpc/v10/starknet_executables.json +++ b/specs/rpc/v10/starknet_executables.json @@ -1,7 +1,7 @@ { "openrpc": "1.0.0", "info": { - "version": "0.10.0-rc.1", + "version": "0.10.2", "title": "API for getting Starknet executables from nodes that store compiled artifacts", "license": {} }, diff --git a/specs/rpc/v10/starknet_metadata.json b/specs/rpc/v10/starknet_metadata.json index f63c63f75e..c87fb54ead 100644 --- a/specs/rpc/v10/starknet_metadata.json +++ b/specs/rpc/v10/starknet_metadata.json @@ -1,7 +1,7 @@ { "openrpc": "1.0.0", "info": { - "version": "0.10.0-rc.1", + "version": "0.10.2", "title": "Starknet ABI specs" }, "methods": [], diff --git a/specs/rpc/v10/starknet_trace_api_openrpc.json b/specs/rpc/v10/starknet_trace_api_openrpc.json index a3446b3c52..92b447936b 100644 --- a/specs/rpc/v10/starknet_trace_api_openrpc.json +++ b/specs/rpc/v10/starknet_trace_api_openrpc.json @@ -1,7 +1,7 @@ { "openrpc": "1.0.0-rc1", "info": { - "version": "0.10.0-rc.1", + "version": "0.10.2", "title": "StarkNet Trace API", "license": {} }, @@ -75,24 +75,56 @@ ], "result": { "name": "simulated_transactions", - "description": "The execution trace and consumed resources of the required transactions", + "description": "The execution trace and consumed resources of the required transactions. When RETURN_INITIAL_READS is not present in simulation_flags, returns an array. When RETURN_INITIAL_READS is present in simulation_flags, returns an object with simulated_transactions and initial_reads fields.", "schema": { - "type": "array", - "items": { - "schema": { + "oneOf": [ + { + "type": "array", + "description": "The execution trace and consumed resources of the required transactions. This format is returned when RETURN_INITIAL_READS is not present in simulation_flags, maintaining compatibility with JSON-RPC 0.10.0.", + "items": { + "type": "object", + "properties": { + "transaction_trace": { + "title": "the transaction's trace", + "$ref": "#/components/schemas/TRANSACTION_TRACE" + }, + "fee_estimation": { + "title": "the transaction's resources and fee", + "$ref": "#/components/schemas/FEE_ESTIMATE" + } + } + } + }, + { "type": "object", + "description": "The execution trace and consumed resources of the required transactions, along with initial reads when RETURN_INITIAL_READS is present in simulation_flags.", "properties": { - "transaction_trace": { - "title": "the transaction's trace", - "$ref": "#/components/schemas/TRANSACTION_TRACE" + "simulated_transactions": { + "type": "array", + "description": "The execution trace and consumed resources of the required transactions", + "items": { + "type": "object", + "properties": { + "transaction_trace": { + "title": "the transaction's trace", + "$ref": "#/components/schemas/TRANSACTION_TRACE" + }, + "fee_estimation": { + "title": "the transaction's resources and fee", + "$ref": "#/components/schemas/FEE_ESTIMATE" + } + } + } }, - "fee_estimation": { - "title": "the transaction's resources and fee", - "$ref": "#/components/schemas/FEE_ESTIMATE" + "initial_reads": { + "title": "Initial reads", + "description": "The set of state values fetched from the underlying state reader during execution for all transactions in the simulation. Required when RETURN_INITIAL_READS is present in simulation_flags.", + "$ref": "#/components/schemas/INITIAL_READS" } - } + }, + "required": ["simulated_transactions", "initial_reads"] } - } + ] } }, "errors": [ @@ -125,25 +157,69 @@ } ] } + }, + { + "name": "trace_flags", + "description": "Flags that indicate what additional information should be included in the trace", + "required": false, + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TRACE_FLAG" + } + } } ], "result": { "name": "traces", - "description": "The traces of all transactions in the block", + "description": "The traces of all transactions in the block. When RETURN_INITIAL_READS is not present in trace_flags (or trace_flags is not provided), returns an array. When RETURN_INITIAL_READS is present in trace_flags, returns an object with traces and initial_reads fields.", "schema": { - "type": "array", - "items": { - "type": "object", - "description": "A single pair of transaction hash and corresponding trace", - "properties": { - "transaction_hash": { - "$ref": "#/components/schemas/FELT" - }, - "trace_root": { - "$ref": "#/components/schemas/TRANSACTION_TRACE" + "oneOf": [ + { + "type": "array", + "description": "The traces of all transactions in the block. This format is returned when RETURN_INITIAL_READS is not present in trace_flags (or trace_flags is not provided), maintaining compatibility with JSON-RPC 0.10.0.", + "items": { + "type": "object", + "description": "A single pair of transaction hash and corresponding trace", + "properties": { + "transaction_hash": { + "$ref": "#/components/schemas/FELT" + }, + "trace_root": { + "$ref": "#/components/schemas/TRANSACTION_TRACE" + } + } } + }, + { + "type": "object", + "description": "The traces of all transactions in the block, along with initial reads when RETURN_INITIAL_READS is present in trace_flags.", + "properties": { + "traces": { + "type": "array", + "description": "The traces of all transactions in the block", + "items": { + "type": "object", + "description": "A single pair of transaction hash and corresponding trace", + "properties": { + "transaction_hash": { + "$ref": "#/components/schemas/FELT" + }, + "trace_root": { + "$ref": "#/components/schemas/TRANSACTION_TRACE" + } + } + } + }, + "initial_reads": { + "title": "Initial reads", + "description": "The set of state values fetched from the underlying state reader during execution for all transactions in the block. Required when RETURN_INITIAL_READS is present in trace_flags. Returns an empty object instead of INITIAL_READS when the execution trace for the referenced block is inconsistent with the canonical block trace.", + "$ref": "#/components/schemas/INITIAL_READS" + } + }, + "required": ["traces", "initial_reads"] } - } + ] } }, "errors": [ @@ -288,8 +364,91 @@ }, "SIMULATION_FLAG": { "type": "string", - "enum": ["SKIP_VALIDATE", "SKIP_FEE_CHARGE"], - "description": "Flags that indicate how to simulate a given transaction. By default, the sequencer behavior is replicated locally (enough funds are expected to be in the account, and fee will be deducted from the balance before the simulation of the next transaction). To skip the fee charge, use the SKIP_FEE_CHARGE flag." + "enum": ["SKIP_VALIDATE", "SKIP_FEE_CHARGE", "RETURN_INITIAL_READS"], + "description": "Flags that indicate how to simulate a given transaction. By default, the sequencer behavior is replicated locally (enough funds are expected to be in the account, and fee will be deducted from the balance before the simulation of the next transaction). To skip the fee charge, use the SKIP_FEE_CHARGE flag. When RETURN_INITIAL_READS is present, the node returns the minimal set of concrete state values fetched from the underlying state reader during execution for all transactions in the simulation." + }, + "TRACE_FLAG": { + "type": "string", + "enum": ["RETURN_INITIAL_READS"], + "description": "Flags that indicate what additional information should be included in the trace. When RETURN_INITIAL_READS is present, the node returns the minimal set of concrete state values fetched from the underlying state reader during execution for all transactions in the block. Returns an empty object instead of INITIAL_READS when the execution trace for the referenced block is inconsistent with the canonical block trace." + }, + "INITIAL_READS": { + "title": "Initial reads", + "description": "The set of state values fetched from the underlying state reader during execution. This is a complete witness sufficient to reconstruct the cached state needed for re-execution.", + "type": "object", + "properties": { + "storage": { + "title": "Storage", + "description": "Storage entries that were read during simulation: (contract_address, storage_key) -> value", + "type": "array", + "items": { + "type": "object", + "properties": { + "contract_address": { + "$ref": "./api/starknet_api_openrpc.json#/components/schemas/ADDRESS" + }, + "key": { + "$ref": "./api/starknet_api_openrpc.json#/components/schemas/STORAGE_KEY" + }, + "value": { + "$ref": "#/components/schemas/FELT" + } + }, + "required": ["contract_address", "key", "value"] + } + }, + "nonces": { + "title": "Nonces", + "description": "Contract nonces that were read during simulation: contract_address -> nonce", + "type": "array", + "items": { + "type": "object", + "properties": { + "contract_address": { + "$ref": "./api/starknet_api_openrpc.json#/components/schemas/ADDRESS" + }, + "nonce": { + "$ref": "#/components/schemas/FELT" + } + }, + "required": ["contract_address", "nonce"] + } + }, + "class_hashes": { + "title": "Class hashes", + "description": "Contract class hashes that were read during simulation: contract_address -> class_hash", + "type": "array", + "items": { + "type": "object", + "properties": { + "contract_address": { + "$ref": "./api/starknet_api_openrpc.json#/components/schemas/ADDRESS" + }, + "class_hash": { + "$ref": "#/components/schemas/FELT" + } + }, + "required": ["contract_address", "class_hash"] + } + }, + "declared_contracts": { + "title": "Declared contracts", + "description": "Class declaration status that was read during simulation: class_hash -> is_declared", + "type": "array", + "items": { + "type": "object", + "properties": { + "class_hash": { + "$ref": "#/components/schemas/FELT" + }, + "is_declared": { + "type": "boolean" + } + }, + "required": ["class_hash", "is_declared"] + } + } + } }, "NESTED_CALL": { "$ref": "#/components/schemas/FUNCTION_INVOCATION" diff --git a/specs/rpc/v10/starknet_write_api.json b/specs/rpc/v10/starknet_write_api.json index 7ddb600e81..4b0e6bf773 100644 --- a/specs/rpc/v10/starknet_write_api.json +++ b/specs/rpc/v10/starknet_write_api.json @@ -1,7 +1,7 @@ { "openrpc": "1.0.0-rc1", "info": { - "version": "0.10.0-rc.1", + "version": "0.10.2", "title": "StarkNet Node Write API", "license": {} }, @@ -62,6 +62,9 @@ { "$ref": "#/components/errors/UNSUPPORTED_TX_VERSION" }, + { + "$ref": "#/components/errors/INVALID_PROOF" + }, { "$ref": "#/components/errors/UNEXPECTED_ERROR" } @@ -307,6 +310,10 @@ "FEE_BELOW_MINIMUM": { "code": 65, "message": "Transaction fee below minimum" + }, + "INVALID_PROOF": { + "code": 69, + "message": "The proof field in the invoke v3 transaction is invalid" } } } diff --git a/specs/rpc/v10/starknet_ws_api.json b/specs/rpc/v10/starknet_ws_api.json index 4fdc835ed6..f8c5ec5530 100644 --- a/specs/rpc/v10/starknet_ws_api.json +++ b/specs/rpc/v10/starknet_ws_api.json @@ -1,7 +1,7 @@ { "openrpc": "1.3.2", "info": { - "version": "0.10.0-rc.1", + "version": "0.10.2", "title": "StarkNet WebSocket RPC API", "license": {} }, @@ -63,9 +63,22 @@ { "name": "from_address", "summary": "Filter events by from_address which emitted the event", + "description": "A contract address or a list of addresses from which events should originate", "required": false, "schema": { - "$ref": "#/components/schemas/ADDRESS" + "oneOf": [ + { + "title": "Single address", + "$ref": "#/components/schemas/ADDRESS" + }, + { + "title": "List of addresses", + "type": "array", + "items": { + "$ref": "#/components/schemas/ADDRESS" + } + } + ] } }, { @@ -286,6 +299,17 @@ "$ref": "#/components/schemas/ADDRESS" } } + }, + { + "name": "tags", + "summary": "Tags that control what additional fields are included in transaction responses", + "required": false, + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SUBSCRIPTION_TAG" + } + } } ], "result": { @@ -442,6 +466,11 @@ } ] }, + "SUBSCRIPTION_TAG": { + "type": "string", + "enum": ["INCLUDE_PROOF_FACTS"], + "description": "Tags that control what additional fields are included in subscription responses. INCLUDE_PROOF_FACTS: Include proof_facts field in the response (an empty array is returned if no proof facts exist for the transaction; only applicable to INVOKE transactions with version 3)." + }, "REORG_DATA": { "name": "Reorg Data", "description": "Data about reorganized blocks, starting and ending block number and hash", diff --git a/utils/grafana/dashboard.json b/utils/grafana/dashboard.json new file mode 100644 index 0000000000..6dcd9131a5 --- /dev/null +++ b/utils/grafana/dashboard.json @@ -0,0 +1,2037 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 2, + "links": [], + "panels": [ + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 15, + "panels": [ + { + "datasource": { + "default": true, + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 9, + "x": 0, + "y": 1 + }, + "id": 12, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": false, + "expr": "current_block{network=\"$network\"}", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "{{__name__}}", + "range": true, + "refId": "A", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "highest_block{network=\"$network\"}", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "{{__name__}}", + "range": true, + "refId": "B", + "useBackend": false + } + ], + "title": "Sync status", + "type": "timeseries" + }, + { + "datasource": { + "default": true, + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 9, + "x": 9, + "y": 1 + }, + "id": 13, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "editorMode": "code", + "expr": "highest_block{network=\"$network\"} - current_block{network=\"$network\"}", + "instant": false, + "legendFormat": "Sync backlog", + "range": true, + "refId": "A" + } + ], + "title": "Sync backlog", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 9, + "x": 0, + "y": 10 + }, + "id": 8, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "rate(current_block{network=\"$network\"}[$__rate_interval])", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "{{network}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Block synced / second", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "seconds", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 9, + "x": 9, + "y": 10 + }, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "block_processing_duration_seconds{network=\"$network\", quantile=\"0.95\"}", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Block processing 95th percentile", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 9, + "x": 0, + "y": 19 + }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "block_latency{network=\"$network\"}", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Block latency", + "type": "timeseries" + } + ], + "title": "Sync", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 14, + "panels": [ + { + "datasource": { + "default": true, + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 0, + "y": 2 + }, + "id": 10, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": false, + "expr": "rate(gateway_requests_failed_total{network=\"$network\"}[$__rate_interval])", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "{{method}} {{reason}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Gateway requests failed / second", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 9, + "y": 2 + }, + "id": 9, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "rate(gateway_requests_total{network=\"$network\"}[$__rate_interval])", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "{{method}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Gateway requests / second", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "seconds", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "get_state_update", + "get_signature" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": true, + "viz": true + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 18, + "x": 0, + "y": 10 + }, + "id": 7, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": false, + "expr": "gateway_request_duration_seconds{network=\"$network\", quantile=\"0.95\"} != 0", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "{{method}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Gateway request 95th percentile", + "type": "timeseries" + } + ], + "title": "Feeder gateway", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 16, + "panels": [ + { + "datasource": { + "default": true, + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 18, + "x": 0, + "y": 3 + }, + "id": 11, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "rpc_method_calls_duration_milliseconds{network=\"$network\", quantile=\"0.95\"}", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "{{method}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "RPC method call 95th percentile", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 18, + "x": 0, + "y": 11 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "rate(rpc_method_calls_total{network=\"$network\"}[$__rate_interval])", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "{{method}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "RPC request rate", + "type": "timeseries" + } + ], + "title": "JSON-RPC", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 17, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 9, + "x": 0, + "y": 802 + }, + "id": 5, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "rate(pathfinder_storage_trie_nodes_deleted_total{network=\"$network\"}[$__rate_interval])", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{table}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Storage - Trie nodes removed / second", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 9, + "x": 9, + "y": 802 + }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "rate(pathfinder_storage_trie_nodes_added_total{network=\"$network\"}[$__rate_interval])", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "interval": "", + "legendFormat": "{{table}}", + "range": true, + "refId": "Trie nodes added", + "useBackend": false + } + ], + "title": "Storage - Trie nodes added / second", + "type": "timeseries" + } + ], + "title": "Storage", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 4 + }, + "id": 18, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 9, + "x": 0, + "y": 803 + }, + "id": 19, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.3.0", + "targets": [ + { + "editorMode": "code", + "expr": "rate(native_class_cache_hit_total{network=\"$network\"}[$__rate_interval])", + "legendFormat": "Cache hit", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "editorMode": "code", + "expr": "rate(native_class_cache_miss_total{network=\"$network\"}[$__rate_interval])", + "hide": false, + "instant": false, + "legendFormat": "Cache miss", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "editorMode": "code", + "expr": "rate(native_class_cache_miss_compilation_pending_total{network=\"$network\"}[$__rate_interval])", + "hide": false, + "instant": false, + "legendFormat": "Cache miss (compilation pending)", + "range": true, + "refId": "C" + } + ], + "title": "Native class cache", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 9, + "x": 9, + "y": 803 + }, + "id": 20, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "editorMode": "code", + "expr": "native_class_compiled_total{network=\"$network\"}", + "hide": false, + "instant": false, + "legendFormat": "Compiled", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "editorMode": "code", + "expr": "native_class_compilation_errors_total{network=\"$network\"}", + "hide": false, + "instant": false, + "legendFormat": "Errors", + "range": true, + "refId": "C" + } + ], + "title": "Native class compiler", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 9, + "x": 0, + "y": 812 + }, + "id": 21, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.3.0", + "targets": [ + { + "editorMode": "code", + "expr": "native_class_compilation_queued_total{network=\"$network\"}", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Native compilation queue size", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 9, + "x": 9, + "y": 812 + }, + "id": 22, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.3.0", + "targets": [ + { + "editorMode": "code", + "expr": "native_class_compilation_duration_seconds{network=\"$network\"}", + "legendFormat": "Compilation time quantile {{quantile}}", + "range": true, + "refId": "A" + } + ], + "title": "Native compilation duration", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 9, + "x": 0, + "y": 821 + }, + "id": 23, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.3.0", + "targets": [ + { + "editorMode": "code", + "expr": "native_class_compilation_object_size_bytes{network=\"$network\"}", + "legendFormat": "Object size quantile {{quantile}}", + "range": true, + "refId": "A" + } + ], + "title": "Native compilation per-class object size", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "b8c48888-f6b5-49f2-b734-40b75cae0dbe" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 9, + "x": 9, + "y": 821 + }, + "id": 24, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.3.0", + "targets": [ + { + "editorMode": "code", + "expr": "native_class_compilation_object_size_bytes_sum{network=\"$network\"}", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Native compiled classes total size", + "type": "timeseries" + } + ], + "title": "Native Execution", + "type": "row" + } + ], + "preload": false, + "refresh": "10s", + "schemaVersion": 42, + "tags": [ + "pathfinder", + "starknet" + ], + "templating": { + "list": [ + { + "current": { + "text": "mainnet", + "value": "mainnet" + }, + "includeAll": false, + "label": "Network", + "name": "network", + "options": [ + { + "selected": true, + "text": "mainnet", + "value": "mainnet" + }, + { + "selected": false, + "text": "testnet-sepolia", + "value": "testnet-sepolia" + } + ], + "query": "mainnet, testnet-sepolia", + "type": "custom" + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Pathfinder", + "uid": "c7a9a3c1-3618-491b-8c0e-b791be712031", + "version": 42 +} diff --git a/utils/pathfinder-probe/Cargo.lock b/utils/pathfinder-probe/Cargo.lock index 97411a9dbd..05c7d4a59e 100644 --- a/utils/pathfinder-probe/Cargo.lock +++ b/utils/pathfinder-probe/Cargo.lock @@ -2,57 +2,41 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -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 = "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", -] - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", + "zerocopy", ] [[package]] name = "anyhow" -version = "1.0.97" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] -name = "async-trait" -version = "0.1.88" +name = "async-compression" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "93c1f86859c1af3d514fa19e8323147ff10ea98684e6c7b307912509f50e67b2" dependencies = [ - "proc-macro2", - "quote", - "syn", + "compression-codecs", + "compression-core", + "futures-core", + "pin-project-lite", + "tokio", ] [[package]] @@ -61,17 +45,11 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" -[[package]] -name = "autocfg" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" - [[package]] name = "aws-lc-rs" -version = "1.12.6" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dabb68eb3a7aa08b46fddfd59a3d55c978243557a90ab804769f7e20e67d2b01" +checksum = "94bffc006df10ac2a68c83692d734a465f8ee6c5b384d8545a636f81d858f4bf" dependencies = [ "aws-lc-sys", "zeroize", @@ -79,11 +57,10 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.27.1" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77926887776171ced7d662120a75998e444d3750c951abfe07f90da130514b1f" +checksum = "4321e568ed89bb5a7d291a7f37997c2c0df89809d7b6d12062c81ddb54aa782e" dependencies = [ - "bindgen", "cc", "cmake", "dunce", @@ -92,14 +69,14 @@ dependencies = [ [[package]] name = "axum" -version = "0.7.9" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8" dependencies = [ - "async-trait", "axum-core", "axum-macros", "bytes", + "form_urlencoded", "futures-util", "http", "http-body", @@ -112,8 +89,7 @@ dependencies = [ "mime", "percent-encoding", "pin-project-lite", - "rustversion", - "serde", + "serde_core", "serde_json", "serde_path_to_error", "serde_urlencoded", @@ -127,19 +103,17 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.4.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" dependencies = [ - "async-trait", "bytes", - "futures-util", + "futures-core", "http", "http-body", "http-body-util", "mime", "pin-project-lite", - "rustversion", "sync_wrapper", "tower-layer", "tower-service", @@ -148,102 +122,62 @@ dependencies = [ [[package]] name = "axum-macros" -version = "0.4.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" +checksum = "604fde5e028fea851ce1d8570bbdc034bec850d157f7569d10f347d06808c05c" dependencies = [ "proc-macro2", "quote", "syn", ] -[[package]] -name = "backtrace" -version = "0.3.74" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets 0.52.6", -] - [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "bindgen" -version = "0.69.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" -dependencies = [ - "bitflags", - "cexpr", - "clang-sys", - "itertools", - "lazy_static", - "lazycell", - "log", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash 1.1.0", - "shlex", - "syn", - "which", -] - [[package]] name = "bitflags" -version = "2.9.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" [[package]] name = "bumpalo" -version = "3.17.0" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "bytes" -version = "1.10.1" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "cc" -version = "1.2.17" +version = "1.2.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" +checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", ] [[package]] -name = "cexpr" -version = "0.6.0" +name = "cesu8" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom", -] +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" [[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" @@ -252,30 +186,46 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] -name = "clang-sys" -version = "1.8.1" +name = "cmake" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" dependencies = [ - "glob", - "libc", - "libloading", + "cc", ] [[package]] -name = "cmake" -version = "0.1.54" +name = "combine" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ - "cc", + "bytes", + "memchr", ] +[[package]] +name = "compression-codecs" +version = "0.4.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "680dc087785c5230f8e8843e2e57ac7c1c90488b6a91b88caa265410568f441b" +dependencies = [ + "compression-core", + "flate2", + "memchr", +] + +[[package]] +name = "compression-core" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75984efb6ed102a0d42db99afb6c1948f0380d1d91808d5529916e6c08b49d8d" + [[package]] name = "core-foundation" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" dependencies = [ "core-foundation-sys", "libc", @@ -287,6 +237,15 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + [[package]] name = "crossbeam-epoch" version = "0.9.18" @@ -319,12 +278,6 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - [[package]] name = "equivalent" version = "1.0.2" @@ -332,13 +285,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] -name = "errno" -version = "0.3.10" +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "flate2" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ - "libc", - "windows-sys 0.59.0", + "crc32fast", + "miniz_oxide", ] [[package]] @@ -349,15 +308,15 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.5" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[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", ] @@ -370,9 +329,9 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "futures" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -385,9 +344,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -395,15 +354,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", @@ -412,15 +371,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", @@ -429,21 +388,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -453,54 +412,41 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "js-sys", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasip2", "wasm-bindgen", ] -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - -[[package]] -name = "glob" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" - [[package]] name = "h2" -version = "0.4.8" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" dependencies = [ "atomic-waker", "bytes", @@ -517,30 +463,20 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "foldhash", ] -[[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 = "http" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", - "fnv", "itoa", ] @@ -581,13 +517,14 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", + "futures-core", "h2", "http", "http-body", @@ -595,6 +532,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -602,11 +540,10 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.5" +version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "futures-util", "http", "hyper", "hyper-util", @@ -620,16 +557,20 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.10" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ + "base64", "bytes", "futures-channel", "futures-util", "http", "http-body", "hyper", + "ipnet", + "libc", + "percent-encoding", "pin-project-lite", "socket2", "tokio", @@ -639,21 +580,22 @@ dependencies = [ [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "93cca704c2d63cf8a91f5c2c5f88e027940dede132319b85a52939db9758f7e5" dependencies = [ "displaydoc", "litemap", @@ -662,31 +604,11 @@ 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.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "8b24a59706036ba941c9476a55cd57b82b77f38a3c667d637ee7cabbc85eaedc" dependencies = [ "displaydoc", "icu_collections", @@ -694,72 +616,59 @@ dependencies = [ "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "f5a97b8ac6235e69506e8dacfb2adf38461d2ce6d3e9bd9c94c4cbc3cd4400a4" dependencies = [ "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "potential_utf", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", + "icu_locale_core", "stable_deref_trait", "tinystr", "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", -] - [[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", @@ -768,9 +677,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", @@ -778,9 +687,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.8.0" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown", @@ -788,39 +697,63 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.11.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" [[package]] -name = "itertools" -version = "0.12.1" +name = "iri-string" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" dependencies = [ - "either", + "memchr", + "serde", ] [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[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.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" dependencies = [ "once_cell", "wasm-bindgen", @@ -832,63 +765,47 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "libc" -version = "0.2.172" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" - -[[package]] -name = "libloading" -version = "0.8.6" +version = "0.2.183" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" -dependencies = [ - "cfg-if", - "windows-targets 0.52.6", -] +checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" [[package]] -name = "linux-raw-sys" -version = "0.4.15" +name = "litemap" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] -name = "litemap" -version = "0.7.5" +name = "log" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] -name = "log" -version = "0.4.27" +name = "lru-slab" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] name = "matchit" -version = "0.7.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "memchr" -version = "2.7.4" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "metrics" -version = "0.24.1" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a7deb012b3b2767169ff203fadb4c6b0b82b947512e5eb9e0b78c2e186ad9e3" +checksum = "5d5312e9ba3771cfa961b585728215e3d972c950a3eed9252aa093d6301277e8" dependencies = [ "ahash", "portable-atomic", @@ -896,9 +813,9 @@ dependencies = [ [[package]] name = "metrics-exporter-prometheus" -version = "0.16.2" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd7399781913e5393588a8d8c6a2867bf85fb38eaf2502fdce465aad2dc6f034" +checksum = "3589659543c04c7dc5526ec858591015b87cd8746583b51b48ef4353f99dbcda" dependencies = [ "base64", "http-body-util", @@ -910,23 +827,24 @@ dependencies = [ "metrics", "metrics-util", "quanta", - "thiserror 1.0.69", + "rustls", + "thiserror 2.0.18", "tokio", "tracing", ] [[package]] name = "metrics-util" -version = "0.19.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbd4884b1dd24f7d6628274a2f5ae22465c337c5ba065ec9b6edccddf8acc673" +checksum = "cdfb1365fea27e6dd9dc1dbc19f570198bc86914533ad639dae939635f096be4" dependencies = [ "crossbeam-epoch", "crossbeam-utils", "hashbrown", "metrics", "quanta", - "rand 0.8.5", + "rand", "rand_xoshiro", "sketches-ddsketch", ] @@ -937,78 +855,47 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", + "simd-adler32", ] [[package]] name = "mio" -version = "1.0.3" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", -] - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", + "wasi", + "windows-sys 0.61.2", ] [[package]] name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "object" -version = "0.36.7" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "memchr", + "windows-sys 0.61.2", ] [[package]] name = "once_cell" -version = "1.21.1" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75b0bedcc4fe52caa0e03d9f1151a323e4aa5e2d78ba3580400cd3c9e2bc4bc" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "overload" -version = "0.1.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "pathfinder-probe" @@ -1029,15 +916,15 @@ dependencies = [ [[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 = "pin-project-lite" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pin-utils" @@ -1047,68 +934,67 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "portable-atomic" -version = "1.11.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" +checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" [[package]] -name = "ppv-lite86" -version = "0.2.21" +name = "potential_utf" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ - "zerocopy 0.8.24", + "zerovec", ] [[package]] -name = "prettyplease" -version = "0.2.31" +name = "ppv-lite86" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5316f57387668042f561aae71480de936257848f9c43ce528e311d89a07cadeb" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "proc-macro2", - "syn", + "zerocopy", ] [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] [[package]] name = "quanta" -version = "0.12.5" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bd1fe6824cea6538803de3ff1bc0cf3949024db3d43c9643024bfb33a807c0e" +checksum = "f3ab5a9d756f0d97bdc89019bd2e4ea098cf9cde50ee7564dde6b81ccc8f06c7" dependencies = [ "crossbeam-utils", "libc", "once_cell", "raw-cpuid", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "web-sys", "winapi", ] [[package]] name = "quinn" -version = "0.11.7" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3bd15a6f2967aef83887dcb9fec0014580467e33720d073560cf015a5683012" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", "cfg_aliases", "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.1.1", + "rustc-hash", "rustls", "socket2", - "thiserror 2.0.12", + "thiserror 2.0.18", "tokio", "tracing", "web-time", @@ -1116,19 +1002,21 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.10" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b820744eb4dc9b57a3398183639c511b5a26d2ed702cedd3febaa1393caa22cc" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" dependencies = [ + "aws-lc-rs", "bytes", - "getrandom 0.3.2", - "rand 0.9.0", + "getrandom 0.3.4", + "lru-slab", + "rand", "ring", - "rustc-hash 2.1.1", + "rustc-hash", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.12", + "thiserror 2.0.18", "tinyvec", "tracing", "web-time", @@ -1136,63 +1024,41 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.11" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "541d0f57c6ec747a90738a52741d3221f7960e8ac2f0ff4b1a63680e033b4ab5" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ "cfg_aliases", "libc", "once_cell", "socket2", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] [[package]] name = "r-efi" -version = "5.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" - -[[package]] -name = "rand" -version = "0.8.5" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[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", - "zerocopy 0.8.24", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", + "rand_chacha", + "rand_core", ] [[package]] @@ -1202,115 +1068,71 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", + "rand_core", ] [[package]] name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.15", -] - -[[package]] -name = "rand_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ - "getrandom 0.3.2", + "getrandom 0.3.4", ] [[package]] name = "rand_xoshiro" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +checksum = "f703f4665700daf5512dcca5f43afa6af89f09db47fb56be587f80636bda2d41" dependencies = [ - "rand_core 0.6.4", + "rand_core", ] [[package]] name = "raw-cpuid" -version = "11.5.0" +version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ "bitflags", ] -[[package]] -name = "regex" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - [[package]] name = "reqwest" -version = "0.12.15" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb" +checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" dependencies = [ "base64", "bytes", "futures-core", - "futures-util", "http", "http-body", "http-body-util", "hyper", "hyper-rustls", "hyper-util", - "ipnet", "js-sys", "log", - "mime", - "once_cell", "percent-encoding", "pin-project-lite", "quinn", "rustls", - "rustls-native-certs", - "rustls-pemfile", "rustls-pki-types", + "rustls-platform-verifier", "serde", "serde_json", - "serde_urlencoded", "sync_wrapper", "tokio", "tokio-rustls", "tower", + "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "windows-registry", ] [[package]] @@ -1321,52 +1143,26 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.15", + "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", ] -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - [[package]] name = "rustc-hash" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.59.0", -] - [[package]] name = "rustls" -version = "0.23.25" +version = "0.23.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "822ee9188ac4ec04a2f0531e55d035fb2de73f18b41a63c70c2712503b6fb13c" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" dependencies = [ "aws-lc-rs", "once_cell", - "ring", "rustls-pki-types", "rustls-webpki", "subtle", @@ -1375,9 +1171,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -1386,28 +1182,47 @@ dependencies = [ ] [[package]] -name = "rustls-pemfile" -version = "2.2.0" +name = "rustls-pki-types" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" dependencies = [ - "rustls-pki-types", + "web-time", + "zeroize", ] [[package]] -name = "rustls-pki-types" -version = "1.11.0" +name = "rustls-platform-verifier" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" dependencies = [ - "web-time", + "core-foundation", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki", + "security-framework", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", ] +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + [[package]] name = "rustls-webpki" -version = "0.103.1" +version = "0.103.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03" +checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" dependencies = [ "aws-lc-rs", "ring", @@ -1417,30 +1232,39 @@ 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 = "ryu" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "security-framework" -version = "3.2.0" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ "bitflags", "core-foundation", @@ -1451,9 +1275,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", @@ -1461,18 +1285,28 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +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", @@ -1481,24 +1315,26 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", - "ryu", "serde", + "serde_core", + "zmij", ] [[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]] @@ -1528,6 +1364,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "simd-adler32" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" + [[package]] name = "sketches-ddsketch" version = "0.3.0" @@ -1536,34 +1378,31 @@ checksum = "c1e9a774a6c28142ac54bb25d25562e6bcf957493a184f15ad4eebccb23e410a" [[package]] name = "slab" -version = "0.4.9" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[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" [[package]] name = "socket2" -version = "0.5.9" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[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 = "subtle" @@ -1573,9 +1412,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.101" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -1593,9 +1432,9 @@ 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", @@ -1613,11 +1452,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.18", ] [[package]] @@ -1633,9 +1472,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", @@ -1644,29 +1483,29 @@ dependencies = [ [[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]] 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", + "serde_core", "zerovec", ] [[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", ] @@ -1679,25 +1518,24 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.45.0" +version = "1.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" dependencies = [ - "backtrace", "bytes", "libc", "mio", "pin-project-lite", "socket2", "tokio-macros", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" dependencies = [ "proc-macro2", "quote", @@ -1706,9 +1544,9 @@ 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", "tokio", @@ -1716,9 +1554,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.14" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", @@ -1729,9 +1567,9 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", @@ -1743,6 +1581,29 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower-http" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" +dependencies = [ + "async-compression", + "bitflags", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "iri-string", + "pin-project-lite", + "tokio", + "tokio-util", + "tower", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-layer" version = "0.3.3" @@ -1757,9 +1618,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "log", "pin-project-lite", @@ -1769,9 +1630,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", @@ -1780,9 +1641,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -1801,9 +1662,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" dependencies = [ "nu-ansi-term", "sharded-slab", @@ -1821,9 +1682,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "untrusted" @@ -1833,21 +1694,16 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.4" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" 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" @@ -1866,6 +1722,16 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "want" version = "0.3.1" @@ -1877,52 +1743,40 @@ 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.14.2+wasi-0.2.4" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" 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", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "e9c5522b3a28661442748e09d40924dfb9ca614b21c00d3fd135720e48b67db8" dependencies = [ "cfg-if", + "futures-util", "js-sys", "once_cell", "wasm-bindgen", @@ -1931,9 +1785,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1941,31 +1795,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" dependencies = [ + "bumpalo", "proc-macro2", "quote", "syn", - "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" dependencies = [ "js-sys", "wasm-bindgen", @@ -1982,15 +1836,12 @@ dependencies = [ ] [[package]] -name = "which" -version = "4.4.2" +name = "webpki-root-certs" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca" dependencies = [ - "either", - "home", - "once_cell", - "rustix", + "rustls-pki-types", ] [[package]] @@ -2009,6 +1860,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -2017,55 +1877,59 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-link" -version = "0.1.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] -name = "windows-registry" -version = "0.4.0" +name = "windows-sys" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-result", - "windows-strings", - "windows-targets 0.53.0", + "windows-targets 0.42.2", ] [[package]] -name = "windows-result" -version = "0.3.2" +name = "windows-sys" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-link", + "windows-targets 0.52.6", ] [[package]] -name = "windows-strings" -version = "0.3.1" +name = "windows-sys" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-link", + "windows-targets 0.53.5", ] [[package]] name = "windows-sys" -version = "0.52.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-targets 0.52.6", + "windows-link", ] [[package]] -name = "windows-sys" -version = "0.59.0" +name = "windows-targets" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows-targets 0.52.6", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -2086,20 +1950,27 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.0" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" +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]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -2108,9 +1979,15 @@ 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" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" @@ -2120,9 +1997,15 @@ 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 = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" @@ -2132,9 +2015,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" @@ -2144,9 +2027,15 @@ 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" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" @@ -2156,9 +2045,15 @@ 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" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" @@ -2168,9 +2063,15 @@ 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" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" @@ -2180,50 +2081,46 @@ 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" -version = "0.52.6" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "windows_x86_64_msvc" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags", -] +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] -name = "write16" -version = "1.0.0" +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[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 = "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", @@ -2231,9 +2128,9 @@ 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", @@ -2243,38 +2140,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "f2578b716f8a7a858b7f02d5bd870c14bf4ddbbcf3a4c05414ba6503640505e3" dependencies = [ - "zerocopy-derive 0.7.35", -] - -[[package]] -name = "zerocopy" -version = "0.8.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" -dependencies = [ - "zerocopy-derive 0.8.24", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn", + "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.24" +version = "0.8.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" +checksum = "7e6cc098ea4d3bd6246687de65af3f920c430e236bee1e3bf2e441463f08a02f" dependencies = [ "proc-macro2", "quote", @@ -2304,16 +2181,28 @@ dependencies = [ [[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" + +[[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 = [ + "serde", "yoke", "zerofrom", "zerovec-derive", @@ -2321,11 +2210,17 @@ 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", ] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/utils/pathfinder-probe/Cargo.toml b/utils/pathfinder-probe/Cargo.toml index 0880b90afb..1e9a659381 100644 --- a/utils/pathfinder-probe/Cargo.toml +++ b/utils/pathfinder-probe/Cargo.toml @@ -6,14 +6,14 @@ license = "MIT OR Apache-2.0" rust-version = "1.82" [dependencies] -anyhow = "1.0.97" -axum = { version = "0.7.9", features = ["macros"] } -futures = "0.3.31" -metrics = "0.24.1" -metrics-exporter-prometheus = "0.16.2" -reqwest = { version = "0.12.15", default-features = false, features = ["json", "rustls-tls-native-roots"] } -serde = "1.0.219" -serde_json = "1.0.140" -tokio = { version = "1.45.0", features = ["rt-multi-thread", "macros"] } -tracing = "0.1.41" -tracing-subscriber = "0.3.19" +anyhow = "1.0.102" +axum = { version = "0.8.8", features = ["macros"] } +futures = "0.3.32" +metrics = "0.24.3" +metrics-exporter-prometheus = "0.18.1" +reqwest = { version = "0.13.2", default-features = false, features = ["json", "rustls", "deflate", "gzip"] } +serde = "1.0.228" +serde_json = "1.0.149" +tokio = { version = "1.50.0", features = ["rt-multi-thread", "macros"] } +tracing = "0.1.44" +tracing-subscriber = "0.3.22"